web-dev-qa-db-ja.com

不審な不要なXcodeログを隠す

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

たぶん誰かがすでにこれを処理するための設定を見つけましたか?

646
Hans Knöchel

これを試して:

1- Xcodeメニューから開く:Product> Scheme> Edit Scheme

2-あなたの環境変数にOS_ACTIVITY_MODE = disableをセットしてください

Screenshot

1424
iDevzilla

オリジナルの Tweet @rustyshelfからの作成、およびiDevzillaからの図解的な回答は、デバイスからのNSLog出力を無効にすることなくシミュレータからのノイズを消すソリューションです。

  1. Product> Scheme> Schemeの編集...> Run(デバッグ)で、OS_ACTIVITY_MODE環境変数を$ {DEBUG_ACTIVITY_MODE}に設定します。

enter image description here

  1. プロジェクトのビルド設定に移動し、[+]をクリックしてDEBUG_ACTIVITY_MODEという名前のユーザー定義設定を追加します。この設定を展開し、「Debug」の横の「+」をクリックしてプラットフォーム固有の値を追加します。ドロップダウンを選択して「Any iOS Simulator」に変更します。次に、その値を "disable"に設定して、次のようになります。

enter image description here

340
cduhn

OS_ACTIVITY_MODEは私にとってはうまくいきませんでした(それはmaydisabledisabledとタイプミスしたからですが、それほど自然ではないのでしょうか?)メッセージそれで、ここで実際に環境変数を扱います。

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"とはどう違うのでしょうか。十分な情報源ではありません。

https://github.com/macosforge/libdispatch/blob/8e63547ea4e5abbfe55c0c3064181c4950a791d3/src/voucher.c

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;
    }
}
78
BaseZen

ツイートに答えがありました - https://Twitter.com/rustyshelf/status/775505191160328194

Xcode 8 iOSシミュレータがログに記録されないようにするには、デバッグスキームで環境変数OS_ACTIVITY_MODE = disableを設定します。

出来た。

63
Peter Smith

これはまだ私のための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リリースで解決されるでしょう。それまでは我慢していましたが、理想的ではありませんでしたが、私が使用している回避策は以下のとおりです。

私がしなければならないのは前の答えと同じです。

  • 印刷ログの前に何らかの特殊文字を付けます(例:*、^、または!など)。

  • 次に、コンソールペインの右下にある検索ボックスを使用して、選択した特殊文字を入力してコンソールログをフィルタリングし、意図したとおりにコンソールに印刷ログを表示させます。

console

32
Pez

以下の手順を見つけてください。

  1. Product => Scheme => Edit Schemeを選択するかショートカットを使用してください:CMD + <
  2. 左側からRunオプションを選択してください。
  3. [環境変数]セクションで、変数 OS_ACTIVITY_MODE = disable を追加します。

詳細については、以下のGIF表現を見つけてください。

Edit Scheme

32

私の解決策は、ブレークポイントでデバッガコマンドログメッセージを使用することです。

enter image description here

また、consoleの出力をAll OutputからDebugger Outputのように変更します。

enter image description here

21
mrahmiao

大丈夫これについては多くの騒ぎがあるように思われるので、私はそのスキームのトリックを使わずにそれを持続させる方法をあなたに与えるつもりです。私は具体的には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を表します。

enter image description here

そこから、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" }}}

がんばろう :]

13
Sozin's Comet

これは Xcode 8 Betaリリースノート にあるロギングに関する既知の問題と関連しています(/ WWDCのエンジニアにも尋ねられました)。

WatchシミュレータでWatchOSアプリケーションをデバッグするとき、OSは過度の量の役に立たないロギングを生成するかもしれません。 (26652255)

現在利用可能な回避策はありません、あなたはXcodeの新しいバージョンを待つ必要があります。

編集7/5/16:これはおそらくXcode 8 Beta 2で修正されている。

Xcode 8 beta 2で解決 - IDE

デバッグ

  • シミュレータでアプリをデバッグすると、ログが表示されます。 (26457535)

Xcode 8 Beta 2リリースノート

13
JAL

これは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)

7
mriddle89

この解決策は私のために働いています:

  1. シミュレータでアプリを実行する
  2. システムログを開きます( + /

これにより、すべてのデバッグデータとNSLogがダンプされます。

NSLogステートメントだけをフィルタリングするには:

  1. それぞれに記号を付けてください。例えば、NSLog(@"^ Test Log")
  2. 右上の検索ボックス、上記の場合は "^"を使用して結果をフィルタリングします。

これはあなたが得るべきものです:

Screenshot of console

1
psobko

Xcode 10 disable(またはdefault)の値を持つOS_ACTIVITY_MODE変数も、NSLogを無効にします。

あなた自身のログではなくコンソールノイズを取り除きたいのであれば、NSLogの代わりにOS_ACTIVITY_MODE = disableの影響を受けないので古き良きprintf("")を試すことができます。

しかし、新しいos_log API here をチェックしてください。

0
Jakub Truhlář