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


82

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

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

また、ログを取得するにはどうすればよいですか?

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

誰かが状況を明らかにすることができますか?


1
出力をファイルとして保存するには、次を使用します:stackoverflow.com/questions/28114110/…–
Kiran P Nair

回答:


94
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ファイルで、iTunesからアクセスできるように、Application supports iTunes file sharingが存在し、に設定されYESていることを確認してください。

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


1
これはどのように作動しますか?.logドキュメントディレクトリにファイルを置くだけで、iOSはコンソール出力をそこに書き込みますか?
アリ

2
ディスクメモリのリークを防ぐために、日付順にログファイルをプログラムで削除するにはどうすればよいですか?
hkaraoglu 2016年

4
NSDocumentDirectoryログファイルに適しているかどうかはわかりません。通常、ユーザー自身が生成したコンテンツを対象としていますが、ログファイルはアプリサポートコンテンツであるため、NSLibraryDirectory/ Logsサブディレクトリに属している可能性があります。
JustAMartin 2017年

Windows PCからログの詳細をエクスポートするにはどうすればよいですか?
Vineesh TP 2017

1
@Aliこれは、stderr(標準エラー出力)ファイル記述子(つまり、ファイル記述子2)を書き込み用に開いているファイルに関連付けることによって機能します。したがって、stderrに印刷するたびに、代わりにファイルに印刷されます。このようにして、アプリケーションのstderr出力をキャッチします。ログシステムはそれについて何も知りません。
Ammo Goettsch 2017

140

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

いずれにせよ、ここにステップがあります:

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

ここに画像の説明を入力してください


3
これは正解のはずです...私はログボタンを探すために30分を費やしました。私の時間を節約してくれてありがとう...
PrimaryChicken

1
NSLogだけです。そこにcoutやprintfを期待しないでください。
キラン2015

10
この手法を使用して本番/送信済みアプリからログを取得することはできません。デバッグ中にのみ役立ちます。
サティヤム2015年

7
あなたは私の日を作りました、UIを設計しない方法の完璧な例多分彼らはdeveloper.apple.com/library/mac/documentation/UserExperience/
Hofi 2015年

1
あなたは私のベーコンを救った。リリースバージョンでのみ表示されるバグを追跡してきましたが、ログで問題が明らかになりました。私は同じダイアログを見たことがあり、「ライブデバイスログを表示する」の普遍的なシンボルであると思われる小さな矢印をクリックすることを考えたことはありませんでした。ありがとうございました!
チャクモール2015

23

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ファイルで、iTunesからアクセスできるようにApplication supports iTunes file sharing、が存在し、に設定されYESていることを確認してください。

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


私が間違っている場合は私を訂正してください:これはログのディレクトリを変更/var/db/diagnostics/ます。つまり、元々はで書かれています。こちらをご覧ください
ハニー

@Honey、このログはアプリのドキュメントディレクトリに保存されます。
キランPナーヤル2017

このコードは、アプリの起動時に常に新しいファイルを作成します
DURGESH 2017年

Watch Extension内でログが実行されたときにこれを機能させる方法はありますか?
user2623825 2018

1
@ KiranPNair-print()ステートメントでもこれを実行できますか、それともNSLogだけで実行できますか?
フラ

12

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


4
更新:Xcode 6では、デバイスログを介してNSLog出力を読み取ることができなくなりました。ウィンドウ>オーガナイザーはデバイスを一覧表示しなくなりました。代わりに、[ウィンドウ]> [デバイス]にデバイスが一覧表示されますが、クラッシュログのみが表示されます。
ロバート

1
ロバート、Xcode6の[ウィンドウ]> [デバイス]画面で、画面の下端近くに非表示の線があります。引き上げると、選択したデバイスのコンソールログが表示されます。XcodeのUIバグのために見えないと思います。
oradyvan 2014

7

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

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


1
このドキュメントは驚くほど古くなっています。それは唯一の方法は、Xcodeの9及び10のために完全に異なっているXcodeの6言及
1800 INFORMATION

2

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


ユーザーがiTunesを介してこれらのログを調べることは可能ですか?
p i

3
この回答stackoverflow.com/questions/2334664/…は、iPhone構成ユーティリティがデバイスからコンソールログをエクスポートできることを示しています
Denis


2

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

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

この助けを願っています

よろしく


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.