web-dev-qa-db-ja.com

デバイスにデータを記録し、ログを取得する

Xcodeのデバッグビルドでは、シミュレータを使用しているか実際のデバイスを使用しているかに関係なく、NSLog、printf、fprintf assertおよびNSAssertステートメントがコンソールに表示されます

デバイスでリリースビルドを実行すると(テストフライトビルドを送信し、iPhoneで大きくすると、これはリリースビルドになります)、これらのうちどれが記録されますか?

そして、どのようにログを取得しますか?

NSLogは実際にリリースビルドで何かを出力しますか?決定要因は何ですか? stdoutまたはstderrのどちらに書き込むのか? stderrのみがデバイスログに書き込まれますか?これは、fprintfを使用する必要があるということですか?デバイスログに何か書き込まれますか?そんなことさえありますか?もしそうなら、それを拾う方法?

誰かが状況を明確にできますか?

73
P i
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のアプリドキュメントディレクトリに作成されます。すべてのコンソールイベントを表示するには、iTunesからこのファイルをインポートする必要があります。

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

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

88
shyla

Xcode 6.1.1では、次の手順を実行してNSLog出力を表示できます。ただし、過去のログを表示できるかどうかはわかりません。私はそれが数時間にまで戻るのを見ただけです。

いずれにせよ、手順は次のとおりです。

  1. Xcodeで、[ウィンドウ]-> [デバイス]に移動します。
  2. 左パネルでデバイスを選択します。
  3. 以下のスクリーンショットに示すように、小さな矢印をクリックします。

enter image description here

139
Myxtic

Swift 3.0では、Shylのコードは次のように変更されます。

var paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0]
let fileName = "\(Date()).log"
let logFilePath = (documentsDirectory as NSString).appendingPathComponent(fileName)
freopen(logFilePath.cString(using: String.Encoding.ascii)!, "a+", stderr)

他のすべてのプロセスは、Shylが説明したものと同じです

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

注:.plistファイルで、Application supports iTunes file sharingが存在し、YESに設定されているため、iTunesからアクセスできます。

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

19
Kiran P Nair

NSLogは製品版のデバイスログに書き込まれます。これは、iPhoneをシステムに接続し、オーガナイザーを使用して確認できます。オーガナイザーでiPhoneを選択し、[デバイスログ]をクリックします。ログにすべてのNSLog出力が表示されます。

12
Bora

このリンクはApple非常に有益で完全なものです。開発マシンに接続されているかどうかに関係なく、デバイスのログを表示またはアクセスするためのすべてのオプションを提供します。

https://developer.Apple.com/library/ios/qa/qa1747/_index.html

7
GrandSteph

はい、NSLogはデバイスに出力します。 Xcode Organizerツールを使用して、Macに接続されたデバイスで出力を確認できます。

2
Denis

Testflight SDKを使用している場合、すべてのログを リモートロギング機能 でキャプチャできます。

2
pojo

Xcode 9.3では、デバイスログ画面が新しい場所に移動したと思います。次のリンクを参照してください。

Xcodeで実行時にデバイスログを取得

0
Vaibhav

私はこれが古いスレッドであることを知っていますが、デバイスログにアクセスすることもできます:

設定->プライバシー->分析->データ

この助けを願っています

よろしく

0
Ramón Esteban