Xcode 8.0ベータ版(8S128d)でNSLog
から何も出力されません。 printf
は変更されていません
これが私のコードです:
NSLog(@"hello from NSLog");
printf("hello from printf");
IOS 9シミュレーターの出力は次のとおりです。
2016-06-17 09:49:10.887 calmapp-dev[28517:567025] hello from NSLog
hello from printf
IOS 10シミュレーターの出力は次のとおりです。
hello from printf
Scheme環境変数に「OS_ACTIVITY_MODE」:「disable」プロパティを追加し(シミュレータからOS出力を隠すため)、それを忘れて、実際のデバイスで実行されている可能性があります。
Xcode 8の場合:
Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables
OS_ACTIVITY_MODE
を追加して確認するだけです(値を追加しないでください)
概要:これはXcode 8 + iOS10のバグです。次の方法で解決できます。
シミュレーターを使用する場合、名前「OS_ACTIVITY_MODE」と値「disable」を追加して確認します。
実際のデバイスでは、「OS_ACTIVITY_MODE」のみを追加してチェックします(値を追加しないでください)。 NSLogはXcode8コンソールに表示されます。
Xcode 8ベータリリースノート を確認すると、次のように表示されます。
Simulatorで実行中のアプリをデバッグする場合、ログがコンソールに表示されない場合があります。回避策:Simulator.appでコマンド+ /を使用して、コンソールアプリでシステムログを開き、NSLogsを表示します。 (26457535)
NSLogの出力は、実際のiOS 10デバイスでも表示できません。実際のデバイスを使用している場合、Xcode([Shift] + [Command] + [2])から[デバイス]ウィンドウを開いてデバイスログを確認できますが、コンソールにはシステムおよびすべてのアプリのログが表示されるため、アプリのログを確認するのは困難です。
(私はXcode 7を使用しているので、Xcodeの問題ではなくiOS 10の問題かもしれません)
うーん...プロパティ "OS_ACTIVITY_MODE": "disable" PREVENTS NSlogがXcode 9ログに表示されないようです。
スキームでこの値をオフにすると、ログが復元されました。
将来これに遭遇する人のために。 NSLogがiOS 10およびiOS 11でsyslogに出力されない理由は、AppleがUnified Loggingに変更されたためです。
これについてのWWDCの話をここで見ることができます: https://developer.Apple.com/videos/play/wwdc2016/721/
ここにドキュメント: https://developer.Apple.com/documentation/os/logging
10以降では、NSLogの代わりにos_logを使用する必要があります。
ディスク上のログを見つける方法: https://www.blackbagtech.com/blog/2017/09/22/accessing-unified-logs-image/
まとめると、ログは/var/db/diagnostics
にあり、/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/
のVMにあります。
diagnostics
およびuuidtext
内のすべてのアイテムを単一のフォルダーにコピーします(フォルダーの診断やuuidtextを内部に含めないでください)。
そのフォルダーの名前をfoldername.xarchive
に変更します。
Console.appで開くか、OSX util log
を使用します:log show <path to archive> --info --predicate <options>
Xcode 8を使用しているため、同じ問題が発生しました。そして、シミュレータにvalue = disable
を追加することでこの問題を解決しましたが、実際のマシンでは値を追加しません。
Xcode 9.1 + iOS 11.1にアップグレードしたときにNSLog
name__メッセージが表示されなくなりました。最初は、 受け入れられた答え は、コンソールアプリを使用してシミュレータを有効にすることでこれを回避する方法を与えました( ルーカスを参照してください'answer )。
コンソールアプリのAction
name__でInclude Debug Messages
を選択し、Include Info Messages
の選択を解除しようとしました(したがって、コンソールにはシステムメッセージがあふれません)。 NSLog
name__メッセージはXcodeのコンソールウィンドウに表示されましたが、コンソールアプリには表示されませんでした。
disable
name__を有効にする(つまりdefault
name__)ためのより直接的な方法が必要だと気づきました この回答に対するCoeurのコメントのおかげでNSLogs
name__OS_ACTIVITY_MODE
をdisable
name__またはdefault
name__に設定すると、初心者にとってより意味があるため、これが最良の答えです。