MonoTouch, NSLog и TestFlightSdk

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

Я пытаюсь реализовать ведение журнала в своем приложении таким образом, чтобы оно подхватывалось TestFlightSdk. Предположительно, он автоматически подбирает текст NSLogged, но я не могу найти правильную комбинацию кода для добавления в свое собственное приложение, написанное на 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.


person Lasse V. Karlsen    schedule 09.02.2012    source источник


Ответы (3)


Анудж указал путь, и вот что у меня получилось:

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

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

person Lasse V. Karlsen    schedule 09.02.2012

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

person xleon    schedule 03.08.2017

person    schedule
comment
Спасибо, я опубликую ответ с тем, что у меня получилось! - person Lasse V. Karlsen; 09.02.2012
comment
в настоящее время это пишется так: [DllImport(ObjCRuntime.Constants.FoundationLibrary)] - person Alexey Subbota; 30.05.2017