2012-02-09 2 views
4

MonoTouch을 사용하여 만든 앱에 TestFlightSdk을 통합하려고합니다.MonoTouch, NSLog 및 TestFlightSdk

내 앱에서 TestFlightSdk에 의해 선택되는 방식으로 로깅을 구현하려고합니다. 아마도 NSLog ged 텍스트를 자동으로 집어 들었지만, C#/MonoTouch로 작성된 내 앱에 추가 할 코드 조합을 찾을 수없는 것 같습니다.

나는 시도했다 :

  1. Console.WriteLine("...");
  2. Debug.WriteLine("..."); (NSlog에 대한
  3. 구현 지원 (하지만이 단지 Console.WriteLine를 호출 생각)하지만,이 내 응용 프로그램은 그래서 분명히 뭔가 잘못을 한 추락 이것이 앞으로 나아갈 길이면 새로운 질문을 할 것입니다.)

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

(I이 다른 SO 질문에서 위의 코드 조각 가지고 : How to I bind to the iOS Foundations function NSLog.)

그러나 이것은 내 응용 프로그램 충돌을 SIGSEGV 오류.

답변

7
using System; 
using System.Runtime.InteropServices; 
using MonoTouch.Foundation; 

public class Logger 
{ 
    [DllImport(MonoTouch.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); 
     } 
    } 
} 
+0

감사합니다. 답변을 게시 할 예정입니다. 요즘에는 –

+0

라고 쓰여 있습니다 : [DllImport (ObjCRuntime.Constants.FoundationLibrary)] –

2

아누 즈는 방법을 지적, 이것은 내가 함께 결국 무엇을 :

[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

Console.WriteLine()은 현재 xamarin.ios 버전에서 예상대로 작동합니다 (NSLog으로 리디렉션 됨). 릴리스 빌드에서도 (hockeyapp 등에서 사용). 더 이상 DllImport을 사용할 필요가 없습니다.