web-dev-qa-db-ja.com

iOS 10はNSLogsを印刷しません

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
85
Tyler Sheaffer

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

Xcode 8の場合:

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

OS_ACTIVITY_MODEを追加して確認するだけです(値を追加しないでください)

enter image description here

enter image description here

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

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

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

226
user6833743

Xcode 8ベータリリースノート を確認すると、次のように表示されます。

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

27
Lucas

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

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

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

閉じるをクリック

xcode9

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

enter image description hereenter image description here

17
MiladiuM

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

(私はXcode 7を使用しているので、Xcodeの問題ではなくiOS 10の問題かもしれません)

7
kientux

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

enter image description here

6

うーん...プロパティ "OS_ACTIVITY_MODE": "disable" PREVENTS NSlogがXcode 9ログに表示されないようです。

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

5
David Hersey

将来これに遭遇する人のために。 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>

1
shane

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

1
user6733740

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

コンソールアプリのActionname__でInclude Debug Messagesを選択し、Include Info Messagesの選択を解除しようとしました(したがって、コンソールにはシステムメッセージがあふれません)。 NSLogname__メッセージはXcodeのコンソールウィンドウに表示されましたが、コンソールアプリには表示されませんでした。

disablename__を有効にする(つまりdefaultname__)ためのより直接的な方法が必要だと気づきました この回答に対するCoeurのコメントのおかげでNSLogsname__OS_ACTIVITY_MODEdisablename__またはdefaultname__に設定すると、初心者にとってより意味があるため、これが最良の答えです。

0
Greg