Xcode 8以降を使用して新しい空のプロジェクトを作成すると、アプリケーションを実行したときに次のログが表示されます。
2016-06-13 16:33:34.406093 TestiOS10[8209:100611] bundleid: com.appc.TestiOS10, enable_level: 0, persist_level: 0, propagate_with_activity: 0
2016-06-13 16:33:34.406323 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.409564 TestiOS10[8209:100611] subsystem: com.Apple.UIKit, category: HIDEvents, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.504117 TestiOS10[8209:100607] Created DB, header sequence number = 248
2016-06-13 16:33:34.548023 TestiOS10[8209:100607] subsystem: com.Apple.BaseBoard, category: MachPort, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
2016-06-13 16:33:34.568458 TestiOS10[8209:100608] subsystem: com.Apple.FrontBoard, category: Common, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 0, privacy_setting: 0
たぶん誰かがすでにこれを処理するための設定を見つけましたか?
オリジナルの Tweet @rustyshelfからの作成、およびiDevzillaからの図解的な回答は、デバイスからのNSLog出力を無効にすることなくシミュレータからのノイズを消すソリューションです。
OS_ACTIVITY_MODEは私にとってはうまくいきませんでした(それはmayがdisable
をdisabled
とタイプミスしたからですが、それほど自然ではないのでしょうか?)メッセージそれで、ここで実際に環境変数を扱います。
https://llvm.org/svn/llvm-project/lldb/trunk/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp
lldb_private::Error
PlatformDarwin::LaunchProcess(lldb_private::ProcessLaunchInfo &launch_info) {
// Starting in Fall 2016 OSes, NSLog messages only get mirrored to stderr
// if the OS_ACTIVITY_DT_MODE environment variable is set. (It doesn't
// require any specific value; rather, it just needs to exist).
// We will set it here as long as the IDE_DISABLED_OS_ACTIVITY_DT_MODE flag
// is not set. Xcode makes use of IDE_DISABLED_OS_ACTIVITY_DT_MODE to tell
// LLDB *not* to muck with the OS_ACTIVITY_DT_MODE flag when they
// specifically want it unset.
const char *disable_env_var = "IDE_DISABLED_OS_ACTIVITY_DT_MODE";
auto &env_vars = launch_info.GetEnvironmentEntries();
if (!env_vars.ContainsEnvironmentVariable(disable_env_var)) {
// We want to make sure that OS_ACTIVITY_DT_MODE is set so that
// we get os_log and NSLog messages mirrored to the target process
// stderr.
if (!env_vars.ContainsEnvironmentVariable("OS_ACTIVITY_DT_MODE"))
env_vars.AppendArgument(llvm::StringRef("OS_ACTIVITY_DT_MODE=enable"));
}
// Let our parent class do the real launching.
return PlatformPOSIX::LaunchProcess(launch_info);
}
そのため、環境変数でOS_ACTIVITY_DT_MODE
を "NO"に設定すると(GUIの方法は、主な回答のスキームのスクリーンショットで説明されています)、私にとってはうまくいきます。
NSLog
がシステムメッセージ、エラー、そしてあなた自身のデバッグのための投棄場所である限り:本当のロギングアプローチがおそらくとにかく呼ばれます。 https://github.com/fpillet/NSLogger 。
OR
新しいクールエイドを飲む: http://asciiwwdc.com/2016/sessions/721https://developer.Apple.com/videos/play/wwdc2016/721/ それは驚くことではありませんロギングAPI全体を見直すと、いくつかの問題があります。
_補遺_
とにかく、NSLog
は単なるシムです。
https://developer.Apple.com/library/content/releasenotes/Miscellaneous/RN-Foundation-OSX10.12/ /
NSLog/CFLog
NSLogは、ほとんどの場合、os_logに対する単なるシムです。
他のenv変数のソースを引用することだけが意味を成します。今回はAppleの内部からの、まったく別の場所です。なぜそれらが重なっているのかわからない。 [NSLog
に関する誤ったコメントの削除]
[9月22日編集]: "release"と "stream"は "debug"とはどう違うのでしょうか。十分な情報源ではありません。
e = getenv("OS_ACTIVITY_MODE");
if (e) {
if (strcmp(e, "release") == 0) {
mode = voucher_activity_mode_release;
} else if (strcmp(e, "debug") == 0) {
mode = voucher_activity_mode_debug;
} else if (strcmp(e, "stream") == 0) {
mode = voucher_activity_mode_stream;
} else if (strcmp(e, "disable") == 0) {
mode = voucher_activity_mode_disable;
}
}
ツイートに答えがありました - https://Twitter.com/rustyshelf/status/775505191160328194
Xcode 8 iOSシミュレータがログに記録されないようにするには、デバッグスキームで環境変数OS_ACTIVITY_MODE = disableを設定します。
出来た。
これはまだ私のためのXcodeバージョン8.0ベータ2(8S162m)では修正されておらず、余分なログもXcodeコンソールに表示されています
**編集8/1/16:これは、 Xcode 8 Beta 4のリリースノート(8S188o)で、まだ解決されていない問題として認識されています 。
Xcode 8 beta 4の既知の問題 - IDE
デバッグ
•Xcode Debug Consoleは、シミュレータでアプリケーションをデバッグするときにシステムフレームワークからの追加ログを表示します。 (27331147、26652255)
おそらくこれはGMリリースで解決されるでしょう。それまでは我慢していましたが、理想的ではありませんでしたが、私が使用している回避策は以下のとおりです。
私がしなければならないのは前の答えと同じです。
印刷ログの前に何らかの特殊文字を付けます(例:*、^、または!など)。
次に、コンソールペインの右下にある検索ボックスを使用して、選択した特殊文字を入力してコンソールログをフィルタリングし、意図したとおりにコンソールに印刷ログを表示させます。
大丈夫これについては多くの騒ぎがあるように思われるので、私はそのスキームのトリックを使わずにそれを持続させる方法をあなたに与えるつもりです。私は具体的にはiOSシミュレータを取り上げますが、これはまた別のディレクトリにあるTV Simにも適用する必要があるかもしれません。
これらすべての原因となっている問題は、Xcodeディレクトリ内にあるplistです。 Simの起動時に configd_sim と呼ばれる起動されるプロセスがあります。これはplistsを読み込み、plistsがログに記録するように指定している場合はデバッグ情報を出力します。
Plistsはここにあります:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/Preferences/Logging/Subsystems
あなたがベータ版で遊んでいるならば、dirが異なることに注意してください。
あなたはこのディレクトリにたくさんのplistsを見るでしょう。それでは、アプリケーションをビルドして実行し、ログを確認してください。すぐに サブシステムが続く内容を探しています: 部分。これのすぐ後に続く名前で、対応する問題のあるplistを表します。
そこから、plistを修正して"Enable" => "Default"
key/value ...を含む辞書であるデバッグ用の[Level] key/valueをノックアウトするか、単にplistを削除します。これらはXcodeアプリケーションにあるため、これらのいずれかを実行するにはrootになる必要があります。
plutil -p
コマンドはあなたにとっても役に立つかもしれません。すなわち.
plutil -p /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVSimulator.platform/Developer/SDKs/AppleTVSimulator.sdk/System/Library/Preferences/Logging/Subsystems/com.Apple.BackBoardServices.fence.plist
これは私に含まれている問題のあるplistの1つを与えました:
{ "DEFAULT-OPTIONS" => { "Level" => { "Enable" => "Default" }}}
がんばろう :]
これは Xcode 8 Betaリリースノート にあるロギングに関する既知の問題と関連しています(/ WWDCのエンジニアにも尋ねられました)。
WatchシミュレータでWatchOSアプリケーションをデバッグするとき、OSは過度の量の役に立たないロギングを生成するかもしれません。 (26652255)
現在利用可能な回避策はありません、あなたはXcodeの新しいバージョンを待つ必要があります。
編集7/5/16:これはおそらくXcode 8 Beta 2で修正されている。
Xcode 8 beta 2で解決 - IDE
デバッグ
- シミュレータでアプリをデバッグすると、ログが表示されます。 (26457535)
これはxcode 8.1 (テスト済みバージョン8.1 beta(8T46g)) ではもはや問題ではありません。あなたのスキームからOS_ACTIVITY_MODE
環境変数を削除することができます。
https://developer.Apple.com/go/?id=xcode-8.1-beta-rn
デバッグ
•Xcode Debug Consoleは、シミュレータでアプリケーションをデバッグするときに、システムフレームワークからの余分なログを表示しなくなりました。 (26652255、27331147)
Xcode 10 disable
(またはdefault
)の値を持つOS_ACTIVITY_MODE
変数も、NSLog
を無効にします。
あなた自身のログではなくコンソールノイズを取り除きたいのであれば、NSLogの代わりにOS_ACTIVITY_MODE
= disable
の影響を受けないので古き良きprintf("")
を試すことができます。
しかし、新しいos_log
API here をチェックしてください。