關於Xcode8.1 / iOS10+ 真機測試系統打印或者宏定義打印不顯示問題


前言:

最近做項目時遇到了很多莫名其妙的問題,其中就有這個打印(NSLog)。也不多廢話了,我們先來回顧一下Xcode8發布以來,我們遇到的一些關於打印的問題,當然也有解決方法:

1、Xcode8打印問題

先看下面這個圖片,相信使用Xcode升級到Xcode8的都不陌生吧。

當時的感覺就是莫名其妙,這里打印出來的一大堆日志,然而對於我們開發並沒有多大用處,個人感覺是apple測試Xcode時查看的打印信息,發布時忘記刪掉的原因(謹代表個人想法,若有錯誤,望指出)。當然,網上也給出了解決方法:

很簡單

 

在EditScheme -> Run -> Arguments
在Environment Variables一欄中添加OS_ACTIVITY_MODE並設值為Disable,注意打勾。然后clean一下。運行項目即可解決。

2、Xcode8+iOS10  真機測試。

上面說了,我們為了屏蔽掉那堆沒多大用處的log。添加了OS_ACTIVITY_MODE並設值為Disable。這也是前提,現在問題出現了:我使用iOS10真機測試時發現宏定義的NSLog打印在控制台不顯示現象。當時首先想到的也是:添加了OS_ACTIVITY_MODE並設值為Disable的問題。如果不想看到那堆沒多大用處的log,又想顯示打印信息,怎么辦?網上有一些給出的方法,也能很好的解決問題,但前提是你使用的宏定義大體是這樣的:

#ifdef DEBUG #define NSLog(...) NSLog(@"\n%s方法,\n第%d行,打印內容:\n%@\n打印結束\n", __PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:__VA_ARGS__])
#else
#define NSLog(...)
#endif

那么你可以這樣解決問題,方法如下:

#ifdef DEBUG #define NSLog(format, ...) printf("[%s] %s [第%d行] %s\n", __TIME__, __FUNCTION__, __LINE__, [[NSString stringWithFormat:format, ## __VA_ARGS__] UTF8String]);
#else
#define NSLog(format, ...)
#endif

 

解釋:這是因為在完成OS_ACTIVITY_MODE設置后會發現真機調試時NSLog不輸出了。所以需要定義成另一個函數來輸出,例如printf()。
可以看下這篇文章:Xcode8模擬器警告與iOS10真機調試NSLog無效

3、Xcode8.1 +iOS10以上系統,真機測試和模擬器測試,打印均不顯示問題

<1>真機測試

  如果只是真機測試打印顯示無效的話,可以直接按照上面第二個方法去解決,也是能解決問題的,究其原因:還是添加了OS_ACTIVITY_MODE並設值為Disable的問題

<2>模擬器測試

  如果在改過真機測試打印顯示無效的問題后,模擬器測試打印還是無效的話,現在的解決方法就直接了:刪除OS_ACTIVITY_MODE並設值為Disable這個設置

為此也做過很多嘗試,感覺最直接的方法還是直接去掉OS_ACTIVITY_MODE並設值為Disable這個設置,是最好的解決方法。Xcode8.1也解決了“打印一堆沒多大用處的log”的問題,所以去掉一開始添加OS_ACTIVITY_MODE並設值為Disable 的想法吧。不過這還是只針對Xcode8以上(當然不包括Xcode8)。

 

 這篇文章也很不錯:iOS開發-NSLog不打印設置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM