升級Xcode8后控制臺輸出問題及IOS10適配

問題1

剛升級完Xcode8之后運行應用在控制臺會出現很多如下的代碼:
subsystem:com.apple.UIKit,category:HIDEventFiltered, enable_level:0, persist_level:0, default_ttl:0, info_ttl:0, debug_ttl:0, generate_symptoms:0, enable_oversize:1, privacy_setting: 2, enable_private_data:0

雖然不知道這些代碼是什么意思,但是看著會覺得很不舒服,于是上網找了一下解決的方法.
下面是消除這些警告的方法:

按步驟Product->Scheme->Edit Scheme->Run->Arguments->Environment Variables,在Environment Variables下添加OS_ACTIVITY_MODE,且將value值設置為disable.

重新運行Xcode,警告就沒有了.

問題2 iOS10真機調試NSLog無效

如果你在遇到上面問題1的時候就行了如下的修改

屏幕快照 2016-09-29 15.37.20.png

并且NSLog宏定義是這樣的話:#define NSLog(format, ...) NSLog(format, ## __VA_ARGS__),那么你在進行真機調試的時候應該會遇到nslog不輸出的這個問題.

解決方法:
所以需要定義成另一個函數來輸出,例如printf()
這里我使用了別人的一個方法

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

問題3 One of the two will be used. Which one is undefined.

在控制臺會有如下的代碼
objc[2886]:Class PLBuildVersion is implemented in both /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/AssetsLibraryServices.framework/AssetsLibraryServices(0x119bb1910) and /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/System/Library/PrivateFrameworks/PhotoLibraryServices.framework/PhotoLibraryServices (0x1199db210). One of the two will be used. Which one is undefined.

查找資料發現原因:objc runtime 對所用app使用同一個命名空間(flat namespace),運行機制如下:

  • 首先二進制映像被加載,檢查程序依賴關系
  • 每一個二進制映像被加載的同時,程序的objc classes在objc runtime命名空間中注冊
  • 如果具有相同名稱的類被再次加載,objc runtime的行為是不可預知的。一種可能的情況是任意一個程序的該類會被加載(這應該也是默認動作)

解決辦法:暫時沒查到...

問題4 Xcode 8 Command + / 不能注釋

解決方法:
在終端輸入 sudo /usr/libexec/xpccachectl 然后必須要重啟下電腦

問題5 -canOpenURL: failed for URL

暫時沒查到原因以及解決方法...

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容