3

すべてのNSLog出力をリダイレクトして、アプリ内のUITextViewですべてのログを表示できるようにしようとしています(デバッグ目的で、後でTestFlightを使用してすべてをログに記録するため)。所有していないフレームワークからログを取得したいので、よく知られているDLogを使用できません。

これを行うには、stderrをパイプに「リダイレクト」し、このパイプから読み取ります。とにかく、これは、アプリがXcode内から起動されたときに、シミュレーターとデバイスでうまく機能します。ただし、アプリがデバイスで「手動」で起動された場合、これは機能しません。

NSLog呼び出しはデバイスに影響を与えないようです。パイプから何も読み取っていません。ただし、手動でstderrに書き込む場合:fprintf(stderr, "test")パイプから読み取ることができるため、問題はstderrではなく、NSLog関数にあります。

なぜデバイスで何もしないのですか?デバイス上でもstderrに書き込む方法はありますか?

デバイスでNSLogを使用できない場合、外部フレームワークからログを収集する別の方法はありますか?

ありがとうございました。

4

2 に答える 2

4

NSLog は、デバイスのシステム ログに移動します。C API asl (Apple System Log)を使用してシステム ログにアクセスできます。このブログ投稿もチェックしてください。

ただし、TestFlight を使用している場合は、これらの NSLog ステートメントを TFLog ステートメントに置き換える/追加する方がはるかに簡単です。

TFLog(@"This comment is live on TestFlight.");
于 2012-07-05T16:24:37.633 に答える
0

UILogging が必要な場合は、 UIAlertView ベースのLogging #define ディレクティブである ULog の使用を検討できます。

// ULog will show the UIAlertView only when the DEBUG variable is set 

#ifdef DEBUG
#   define ULog(fmt, ...)  { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%s\n [Line %d] ", __PRETTY_FUNCTION__, __LINE__] message:[NSString stringWithFormat:fmt, ##__VA_ARGS__]  delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; }
#else
#   define ULog(...)
#endif

(ソース: http://overbythere.co.uk/blog/2012/01/alternatives-nslog )

于 2012-09-12T07:07:05.143 に答える