使用 Xcode8 的 Beta 版本進行 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 版本輸出正常,沒有出現。
蘋果的官方論壇也有人提了 Xcode8 beta 的 Bug https://forums.developer.apple.com/thread/49136
官方的解釋是最新的 Xcode 的 BUG,然後,在 Xcode8 beta 2 中貌似解決了。
Resolved in Xcode 8 beta 2 – IDE
Debugging
When debugging an app on the Simulator, logs are visible. (26457535)
然後,在 Xcode8 beta 4 中又要解決了一遍。傷不起啊。
Known Issues in Xcode 8 beta 4 – IDE
Debugging
Xcode Debug Console shows extra logging from system frameworks when debugging applications in the 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