MonoTouch, NSLog и TestFlightSdk - PullRequest
5 голосов
/ 09 февраля 2012

Я пытаюсь интегрировать TestFlightSdk в приложение, которое я сделал с использованием MonoTouch .

Я пытаюсь реализовать ведение журнала в моем приложении таким образом, чтобы оно регистрировалось TestFlightSdk. Предположительно, он автоматически получает NSLog ged-текст, но я не могу найти правильную комбинацию кода для добавления в мое собственное приложение, написанное на C # / MonoTouch, которое делает то же самое.

Что я пробовал:

  1. Console.WriteLine("...");
  2. Debug.WriteLine("..."); (но я думаю, что это просто звонит Console.WriteLine)
  3. Реализация поддержки NSlog, но это привело к сбою моего приложения, так что, очевидно, я сделал что-то не так (я задам новый вопрос, если это путь для продвижения вперед.)

Есть ли что-то встроенное в MonoTouch, которое будет писать сообщения журнала через NSLog, чтобы я мог использовать его с TestFlightSdk? Или я должен свернуть свою собственную оболочку для NSLog?

Чтобы самостоятельно внедрить NSLog, я добавил следующее:

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);
    }
}

(я получил фрагменты кода выше из этого другого SO вопроса: Как связать с функцией iOS Foundations NSLog .)

Но это приводит к сбою моего приложения из-за ошибки SIGSEGV.

Ответы [ 3 ]

8 голосов
/ 09 февраля 2012
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);
        }
    }
}
2 голосов
/ 09 февраля 2012

Anuj указал путь, и вот чем я закончил:

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

и назвал его:

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

Когда я попробовал только один параметр, если быПроцент символов в строке, это было интерпретировано как попытка отформатировать строку, но, поскольку аргументов не было, произошел сбой.

0 голосов
/ 03 августа 2017

Console.WriteLine() работает должным образом (он перенаправляет на NSLog) в текущих версиях xamarin.ios.Даже на сборках релизов (используется hockeyapp и т. Д.).Больше не нужно использовать DllImport.

...