banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

Xcode8ベータ版ではNSLogの出力ができない問題

Xcode8 のベータ版を使用して Objective-C/iOS プログラムのデバッグを行う際、NSLog がログを出力できず、以下の内容が出力されます: 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

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

同じ Objective-C/iOS コードが Xcode7 版では正常に出力されており、問題は発生していません。

Apple の公式フォーラムでも Xcode8 ベータのバグが提起されています https://forums.developer.apple.com/thread/49136

公式の説明は最新の Xcode のバグであり、その後、Xcode8 ベータ 2 で解決されたようです。

Resolved in Xcode 8 beta 2 – IDE
Debugging
Simulator でアプリをデバッグする際、ログが表示されます。 (26457535)

その後、Xcode8 ベータ 4 でも再度解決されました。辛いですね。

Known Issues in Xcode 8 beta 4 – IDE
Debugging
Xcode デバッグコンソールは、Simulator でアプリケーションをデバッグする際にシステムフレームワークからの追加のログを表示します。 (27331147, 26652255)

StackOverflow では、ログを出力する際にログの最前方に特殊文字(例えば‘^’)を追加することで問題が解決できると提案されています。Xcode8 で実際に効果がありました。

出力形式

// worked in Xcode8 beta
NSLog(@"^ Test Log")

一度で済むように、私たちは NSLog を DLog と ALog として定義しましょう。

#ifdef DEBUG
#   define DLog(fmt, ...) NSLog((@"^ %s line %d " fmt), \_\_PRETTY\_FUNCTION\_\_, \_\_LINE\_\_, ##\_\_VA\_ARGS\_\_);
#else
#   define DLog(...)
#endif
#define ALog(fmt, ...) NSLog((@"^ %s line %d " fmt), \_\_PRETTY\_FUNCTION\_\_, \_\_LINE\_\_, ##\_\_VA\_ARGS\_\_);

参考 http://stackoverflow.com/questions/37800790/hide-xcode-8-logs

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。