1. ホーム
  2. ios

[解決済み] デバイスのデータをログに記録し、ログを取得する。

2023-04-24 01:13:15

質問

Xcode のデバッグ ビルドで、シミュレータと実機のどちらを使用していても、NSLog、printf、fprintf assert および NSAssert ステートメントがコンソールに出力されます。

デバイス上でリリース ビルドを実行する場合 (たとえば、テスト フライト ビルドを送信し、それを iPhone でビッグアップします。これはリリース ビルドになります)、これらのうちどれが (もしあれば) 記録されるのでしょうか?

また、どのようにログを取得するのですか?

NSLogはリリースビルド時に実際に何かを出力するのでしょうか? 何が決め手なのでしょうか?stdoutに書いているのかstderrに書いているのか、デバイスログに書き込むのはstderrだけなのか。 fprintfを使わなければならないということでしょうか? デバイスログには何も書き込まれないのでしょうか? もしそうなら、どのようにそれを拾うのですか?

どなたか状況を明確にしていただけませんか?

どのように解決するのですか?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName =[NSString stringWithFormat:@"%@.log",[NSDate date]];
NSString *logFilePath = [documentsDirectory stringByAppendingPathComponent:fileName];
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);

このコードのブロックを application:didFinishLaunchingWithOptions メソッドに追加するだけで、iPhone の app document ディレクトリにログファイルが作成され、すべてのコンソールログイベントが記録されます。すべてのコンソール イベントを確認するには、iTunes からこのファイルをインポートする必要があります。

注記: .plist ファイルで、以下の点を確認してください。 Application supports iTunes file sharing が存在し、それが YES に設定することで、iTunesからアクセスできるようになります。

ログファイルを取得するには。 デバイスが接続された後、iTunes を起動し、Apps を選択し、アプリを選択します。その後、ディスクに保存することができます。