6 votes

MonoTouch, NSLog, et TestFlightSdk

J'essaie d'intégrer le TestFlightSdk dans une application que j'ai créée en utilisant MonoTouch .

J'essaie d'implémenter la journalisation dans mon application de manière à ce qu'elle soit prise en compte par le TestFlightSdk. Il est censé capter NSLog Mais je n'arrive pas à trouver la bonne combinaison de code à ajouter à ma propre application, écrite en C#/MonoTouch, qui fait la même chose.

Ce que j'ai essayé :

  1. Console.WriteLine("...");
  2. Debug.WriteLine("..."); (mais je pense que cela appelle juste Console.WriteLine )
  3. Mise en œuvre d'un soutien pour NSlog mais cela a fait planter mon application, donc apparemment j'ai fait quelque chose de mal (je poserai une nouvelle question si c'est la voie à suivre).

Y a-t-il quelque chose d'intégré à MonoTouch qui permette d'écrire des messages de journal via NSLog, afin que je puisse l'utiliser avec TestFlightSdk ? Ou dois-je créer mon propre wrapper pour NSLog ?

Afin d'implémenter NSLog moi-même, j'ai ajouté ceci :

public static class Logger
{
    [DllImport("/System/Library/Frameworks/Foundation.framework/Foundation")]
    private extern static void NSLog(string format, string arg1);

    public static void Log(string message)
    {
        NSLog("%s", message);
    }
}

(J'ai obtenu des morceaux du code ci-dessus à partir de cette autre question de SO : Comment se lier à la fonction NSLog des fondations iOS ? .)

Mais cela fait planter mon application avec un défaut SIGSEGV.

9voto

Anuj Points 2658
using System;
using System.Runtime.InteropServices;
using Foundation;

public class Logger
{
    [DllImport(ObjCRuntime.Constants.FoundationLibrary)]
    private extern static void NSLog(IntPtr message);

    public static void Log(string msg, params object[] args)
    {
        using (var nss = new NSString (string.Format (msg, args))) {
            NSLog(nss.Handle);
        }
    }
}

2voto

Lasse V. Karlsen Points 148037

Anuj m'a montré la voie, et c'est ce que j'ai fait :

[DllImport(MonoTouch.Constants.FoundationLibrary)]
private extern static void NSLog(IntPtr format, IntPtr arg1);

et de l'appeler :

using (var format = new NSString("%@"))
using (var arg1 = new NSString(message))
    NSLog(format.Handle, arg1.Handle);

Lorsque j'ai essayé le paramètre unique, si j'avais des caractères de pourcentage dans la chaîne, cela a été interprété comme une tentative de formatage de la chaîne, mais comme il n'y avait pas d'arguments, il s'est écrasé.

0voto

xleon Points 4224

Console.WriteLine() fonctionne comme prévu (il redirige vers NSLog ) sur les versions actuelles de xamarin.ios. Même sur les versions de lancement (utilisées par hockeyapp, etc.). Il n'est pas nécessaire d'utiliser DllImport plus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X