升级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的时候就行了如下的修改

升级Xcode8后控制台输出问题及IOS10适配_第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

暂时没查到原因以及解决方法...

你可能感兴趣的:(升级Xcode8后控制台输出问题及IOS10适配)