Xamarin.ios MonoTouch、NSLog和TestFlightSdk
我正在尝试将集成到我使用的应用程序中 我正在尝试在我的应用程序中实现日志记录,以便TestFlightSdk能够获取日志记录。它应该会自动拾取Xamarin.ios MonoTouch、NSLog和TestFlightSdk,xamarin.ios,nslog,testflight,Xamarin.ios,Nslog,Testflight,我正在尝试将集成到我使用的应用程序中 我正在尝试在我的应用程序中实现日志记录,以便TestFlightSdk能够获取日志记录。它应该会自动拾取NSLogged文本,但我似乎找不到合适的代码组合来添加到我自己的应用程序中,该应用程序是用C#/MonoTouch编写的,具有相同的功能 我所尝试的: Console.WriteLine(“…”) Debug.WriteLine(“…”)(但我认为这只是调用控制台.WriteLine) 实现对NSlog的支持,但这使我的应用程序崩溃,因此显然我做错了什么
NSLog
ged文本,但我似乎找不到合适的代码组合来添加到我自己的应用程序中,该应用程序是用C#/MonoTouch编写的,具有相同的功能
我所尝试的:
Console.WriteLine(“…”)代码>
Debug.WriteLine(“…”)代码>(但我认为这只是调用控制台.WriteLine
)
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);
}
}
(我从另一个问题中得到了上面的代码片段:)
但这导致我的应用程序因SIGSEGV故障而崩溃。Anuj指出了方向,这就是我最终得到的结果:
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);
}
}
}
[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);
当我仅尝试单个参数时,如果字符串中有百分比字符,则会将其解释为试图格式化字符串,但由于没有参数,因此崩溃。
Console.WriteLine()
在当前的xamarin.ios版本上按预期工作(它重定向到NSLog
)。即使是发布版本(由hockeyapp等使用)。不需要再使用DllImport了。谢谢,我会用我最后得到的答案发布!现在,它是这样写的:[DllImport(ObjCRuntime.Constants.FoundationLibrary)]