iOS 10がNSLogを印刷しない


88

NSLogXcode 8.0ベータ(8S128d)では何も印刷されません。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

同様の問題がありました。しかし、iOS 8.1、Xcode 8では、すべての答えをここで確認しました。私はすべてを正しく行っていたことがわかります。何の役にも立たなかった。それで、私はデバイスをオフにして、オンにしました。できます。私はこのコメントをここに書きました。これは、同様の問題に直面している他の人々を助けるためです
KrishnaCA 2017年

回答:


229

(シミュレータからOS出力を非表示にするために)Scheme環境変数にプロパティ「OS_ACTIVITY_MODE」:「disable」を追加し、それを忘れて、実際のデバイスで実行されている可能性があります。

Xcode 8の場合:

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

追加OS_ACTIVITY_MODEとチェックのみ(値を追加しないでください)

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

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

概要:これはXcode 8 + iOS10のバグであり、次の方法で解決できます。

  • シミュレータを使用する場合は、名前「OS_ACTIVITY_MODE」と値「disable」を追加して確認します。

  • 実際のデバイスでは、「OS_ACTIVITY_MODE」のみを追加してチェックします(値を追加しないでください)。Xcode8コンソールにNSLogが表示されます。


4
>「値を追加しないでください」「無効」に設定すると機能します!空のフィールドは機能しません。
m8labs 2016

シミュレータではなく、実際のiPhoneデバイスのデバッグ時に機能しますか?「無効」に設定すると、実際のiphoneデバッグ時にコンソールでNSLogを実行できません。
user6833743 2016

私は今「無効」なしでチェックしました、それは今デバイスで動作しますが、シミュレーターで壊れました、それは今すべてを再び表示します...
m8labs

2
とにかくこのプロセスを自動化する方法はありますか?次のように行ったり来たりすることを覚えておかなければならないのは本当に本当にうっとうしいことです:/
greenhouse

2
このソリューションは、置き換える、のNSLogを保つためにXcodeの9で始まるすべてのNSLogを非表示になりますdisabledefault
・クール

27

Xcode 8ベータリリースノートを確認すると、次のようになっていることがわかります。

シミュレーターで実行されているアプリをデバッグするときに、ログがコンソールに表示されない場合があります。回避策:Simulator.appでコマンド+ /を使用して、コンソールアプリでシステムログを開き、NSLogを表示します。(26457535)


9
実際のiOS 10デバイスでもNSLog出力を見ることができません。実際のデバイスを使用している場合は、[デバイス]ウィンドウ(Shift + Command + 2)を開いてデバイスログを表示できますが、コンソールにシステムとアプリのすべてのログが表示されるため、アプリログのデバッグを確認するのは困難です。
kientux 2016年

19

NSlogまたはprintは実際に実行されますが、この問題を解決するために他の多くのコンソールデバッグ出力の中に隠されていますXcode8を開きます。

Product -> Scheme -> Edit Scheme -> Run -> Arguments -> Environment Variables

「OS_ACTIVITY_MODE」を追加し、値を「無効」に設定して確認します。

閉じるをクリック

xcode9

「OS_ACTIVITY_MODE」を追加し、値を「デフォルト」に設定して確認します。

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


これは私にはうまくいきません。NSLogはデプロイされたアプリケーションには表示されません。iOS 10デバイスでxcode 8.1(Mac 10.11で実行)を使用しています。
mobjug 2016

21
このソリューションは、置き換える、のNSLogを保つためにXcodeの9で始まるすべてのNSLogを非表示になりますdisabledefault
・クール

3
この答えは、Xcodeの9用・クールの補正@のアカウントに更新する必要があります
ジョエル・

7

実際のiOS 10デバイスでもNSLog出力を見ることができません。実際のデバイスを使用している場合は、Xcode(Shift + Command + 2)から[デバイス]ウィンドウを開いてデバイスログを確認できますが、コンソールにはシステムとすべてのアプリのログが表示されるため、アプリのログを確認するのは困難です。

(私はXcode 7を使用しているため、Xcodeの問題ではなく、iOS 10の問題である可能性があります)


iOS 10 GMのデバイスウィンドウにアプリのNSLogが表示されません...同じ問題が発生していますか?
TahoeWolverine 16

Xcode 7でiOS 10 GMを使用してログを表示できます。デバイスウィンドウを開く必要はもうありません。
kientux

2
ただし、Xcodeから実行することについて話しているのではなく、デプロイされたアプリから出力されるログについて話している。
TahoeWolverine

これについて何か進展はありますか?
jhurray 2016年

NSLogsとprintfは、デプロイされたアプリケーションのiOS 10デバイスログから省略されます。グローバルマクロを追加して、への直接の呼び出しに置き換えることができますos_log
2016年

7

また、コンソールが実際にXcodeで表示されていることを確認してください(つまり、下の画像のように、右側のアイコンが青色で強調表示されていることを確認してください)。Xcodeをアップグレードすると、コンソールが非表示になり、変数ビューだけが表示されました。これによりNSLog()、正しく機能していないように見えましたが、実際には正しく機能していましたが、出力が表示されませんでした。

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


Shift + ⌘ + CXcodeバージョン8.3.3でコンソールをアクティブ化することもできます
DJ2

5

うーん...プロパティ「OS_ACTIVITY_MODE」:「無効」のようです。Xcode9ログにNSlogが表示されないようにします。

スキームでこの値をオフにすると、ログが復元されました。


5

将来これに遭遇する人のために。iOS 10およびiOS 11でNSLogがsyslogに出力されない理由は、Appleが統合ログに変更したためです。

ここで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/diagnosticsVMの次の場所にあります/Users/USERNAME/Library/Developer/CoreSimulator/Devices/SIMULATOR-GUID/data/var/db/

内部のすべてのアイテムをコピーしdiagnosticsuuidtext単一のフォルダに(内部であるだけで何のフォルダの診断やuuidtextを含みません)。

そのフォルダの名前を変更します foldername.xarchive

Console.appで開くか、OSX utilを使用しますloglog show <path to archive> --info --predicate <options>


iOSではどうですか?
kakyo

1

Xcode 8を使用しているため、同じ問題も発生しました。value = disableシミュレータを追加することでこの問題を解決しましたが、実際のマシンでは値を追加しません。


1
Xcode 9で問題が発生しています。引数OS_ACTIVITY_MODEを挿入しましたが、機能しないようです...
Alessio Campanelli

4
このソリューションは、置き換える、のNSLogを保つためにXcodeの9で始まるすべてのNSLogを非表示になりますdisabledefault
・クール

私の意見では、これは正解です。か、直接であるOS_ACTIVITY_MODEdisabledefault
グレッグ・

1

NSLogXcode 9.1 + iOS 11.1にアップグレードしたときにメッセージが表示されなくなりました。最初は受け入れられた回答により、コンソールアプリを使用してこれを回避し、シミュレーターを有効にする方法が得られました(ルーカスの回答を参照)。

コンソールアプリで、Action選択Include Debug Messagesと選択解除を試みましたInclude Info Messages(そのため、コンソールはシステムメッセージでいっぱいになりません)。NSLogXcodeのコンソールウィンドウにはメッセージが表示されましたが、コンソールアプリには表示されませんでした。

私は、より直接的な方法があると気づいたdisableか(すなわち有効defaultNSLogsに応じて、クールさんのコメントのおかげで、この答えを。私の意見では、初心者にとって設定OS_ACTIVITY_MODEするdisableか、または設定defaultする方が理にかなっているので、それが最良の答えです。

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