2012-02-09 15 views
4

MonoTouchを使って作成したアプリにTestFlightSdkを統合しようとしています。MonoTouch、NSLog、およびTestFlightSdk

私はTestFlightSdkで取得されるような方法で私のアプリケーションでロギングを実装しようとしています。おそらくNSLog gedテキストを自動的にピックアップしますが、C#/ MonoTouchで書かれた独自のアプリケーションに追加するコードの正しい組み合わせを見つけることはできません。 (NSlogのサポートを実装

  1. Console.WriteLine("...");
  2. Debug.WriteLine("...");(私はこれがちょうどConsole.WriteLineを呼び出すと思います)
  3. を、これは私のアプリがクラッシュので、どうやら、私は何か間違ったことをした:私が試した何

    これが今後の道なのかどうか新しい質問をします)。

oTouchFlightSdkで使用できるように、NSLogを介してログメッセージを書き込みます。それともNSLogのために私自身のラッパーを巻く必要がありますか? (私はこの他のSO質問から上記のコードの断片を得た。:How to I bind to the iOS Foundations function 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); 
    } 
} 

:の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

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

Console.WriteLine()は現在のxamarin.iosバージョンでは期待通りに動作します(NSLogにリダイレクトされます)。リリースビルドでさえ(hockeyappなどで使用されます)。もうDllImportを使用する必要はありません。

関連する問題