Xamarin.ios MonoTouch、NSLog和TestFlightSdk

Xamarin.ios MonoTouch、NSLog和TestFlightSdk,xamarin.ios,nslog,testflight,Xamarin.ios,Nslog,Testflight,我正在尝试将集成到我使用的应用程序中 我正在尝试在我的应用程序中实现日志记录,以便TestFlightSdk能够获取日志记录。它应该会自动拾取NSLogged文本,但我似乎找不到合适的代码组合来添加到我自己的应用程序中,该应用程序是用C#/MonoTouch编写的,具有相同的功能 我所尝试的: Console.WriteLine(“…”) Debug.WriteLine(“…”)(但我认为这只是调用控制台.WriteLine) 实现对NSlog的支持,但这使我的应用程序崩溃,因此显然我做错了什么

我正在尝试将集成到我使用的应用程序中

我正在尝试在我的应用程序中实现日志记录,以便TestFlightSdk能够获取日志记录。它应该会自动拾取
NSLog
ged文本,但我似乎找不到合适的代码组合来添加到我自己的应用程序中,该应用程序是用C#/MonoTouch编写的,具有相同的功能

我所尝试的:

  • Console.WriteLine(“…”)
  • Debug.WriteLine(“…”)(但我认为这只是调用
    控制台.WriteLine
  • 实现对
    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);
        }
    }
    
    (我从另一个问题中得到了上面的代码片段:)


    但这导致我的应用程序因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)]