1.输出log日志关闭
Xcode8运行项目之后,控制台打印了好多log输出,根据如下操作可以关掉这些log日志,点击项目Edit Scheme
或者按command + shift + <
快捷键。在弹出的窗口中选择Run ->Arguments -> Environment Variables里添加:Name:OS_ACTIVITY_MODE Value:disable
解决了问题之后,是不是赶脚心里舒服多了,乱七八糟的输出不见了,但是在我们用真机调试的时候,NSLog也不工作了。我们在输出窗口看不到我们想要的日志了。
定义一个宏即可
#ifdef DEBUG
#define CLLog(format, ...) printf("[%s] %s [第%d行] %s\n", __TIME__, __FUNCTION__, __LINE__, [[NSString stringWithFormat:format, ## __VA_ARGS__] UTF8String]);
#else
#define NSLog(format, ...)
#endif
2.Command +/ 快捷键注释代码快捷键不能用
在终端输入
sudo /usr/libexec/xpccachectl
重启电脑即可
3.LaunchScreen.storyboard: The document “(null)” requires Xcode 8.0 or later
1) 打开storyboard, 右键点击,点击source Control - > commit
2)删除这行代码:
<capalibility name="documents saved in the Xcode 8 format"> minToolsVersion=8.0/>
3)删除所有你要用到的storyboard的里面的整个行代码,提交.
4)重新运行程序,问题解决.
同样, xib文件遇到类似报错,也是这样解决.
或者:
Xcode8 打开StoryBoard,如图所示,Open in 改为7.X即可:
4.字体变大,原有的fream需要适配,只能逐一排查啦
5.Nib问题:警告
- (void)awakeFromNib {
// Initialization code
}
需要添加:
[super awakeFromNib];
6.系统判断失效
现在改用:
#define IOS10_OR_LATER ([[[UIDevice currentDevice] systemVersion] compare"10.0" options:NSNumericSearch] != NSOrderedAscending)
7.程序调用相机和相册程序崩溃Crash
在iOS10中,如果你的App想要访问用户的相机、相册、麦克风、通讯录等等权限,都需要进行相关的配置,不然会直接crash.
崩溃日志如下:
This app has crashed because it attempted to access privacy-sensitive data without a usage description.The app’s Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data.
- 意思试图访问安全隐私数据,但是又没有相应的描述,你必须要包含在info.plist里包含一个键值 NSPhotoLibraryUsageDescription对应的描述。
- 其实上面是iOS10,苹果加强了对隐私数据的保护,要对隐私数据权限做一个适配iOS10调用相机,访问通讯录,访问相册等都要在info.plist中加入权限访问描述,不然之前你们的项目涉及到这些权限的地方就会直接crash掉。
需要在info.plist中添加App需要的一些设备权限:
访问蓝牙:NSBluetoothPeripheralUsageDescription
访问日历:NSCalendarsUsageDescription
相机:NSCameraUsageDescription
相册:NSPhotoLibraryUsageDescription
通讯录:NSContactsUsageDescription
始终访问位置:NSLocationAlwaysUsageDescription
位置:NSLocationUsageDescription
在使用期间访问位置:NSLocationWhenInUseUsageDescription
麦克风:NSMicrophoneUsageDescription
访问媒体资料库:NSAppleMusicUsageDescription
访问健康分享:NSHealthShareUsageDescription
访问健康更新:NSHealthUpdateUsageDescription
访问运动与健身:NSMotionUsageDescription
访问提醒事项:NSRemindersUsageDescription
8.如果你的项目中使用了MJRefresh,并且不是最新版本的,就会直接崩溃:
只要将MJRefresh更新到最新版本就行了。简单粗暴
9.在用模拟器进行调试的时候,会莫名的输出
这个输出不影响调试,也不影响程序运行。
原因:是在这两个路径下有两个模拟器包文件,并且这两个包文件中都包含了PhotoLibraryServices文件,模拟器不知道使用哪个文件了。在真机上就不会出现这种情况。
解决方法:这两个模拟器包文件谁都不可以删除,删除谁都会报错,确切的说删除iPhoneSimulator10.0.sdk这个包文件会报错,另一个不能在模拟器上运行了。我得到的结果是:这可能是模拟器的bug,也可能是我电脑上安装了两个版本的Xcode.所以可以忽略这个警告.
10.跳转到app内的隐私数据设置页面
我们知道用户没开启权限的话要提醒用户去设置开启,所以要跳转到app的隐私数据界面。如何调用呢,可以定义一个宏方便调用:
UIKIT_EXTERN NSString *const UIApplicationOpenSettingsURLString
NS_AVAILABLE_IOS(8_0);
//-----------------------系统权限设置路径(iOS8以后适用)--------------
// 设置url
#define SettingURL [NSURL URLWithString:UIApplicationOpenSettingsURLString]
// 调到设置
#define GoToSetting if([[UIApplication sharedApplication] canOpenURL:SettingURL]) { [[UIApplication sharedApplication] openURL:SettingURL];}}
// 去设置
if (IOS8_OR_LATER) {
GoToSetting;
}
11.真机调试问题-App installation failed
Xcode 8 无证书真机调试时免费App ID出现的问题:
原因:苹果免费App ID只能运行2个应用程序,当调试第三个的时候就会报这个错误, 必须把之前的应用程序删除,才能调试新的
解决方法:连接iPhone 打开Xcode--->Window--->Devices删除不是本次运行的应用程序即可.
12.***** Assertion failure in -[UIApplication _runWithMainScene:transitionContext:completion:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3505.16/UIApplication.m:3294**
原因:
新的SDK不允许在设置rootViewController之前做过于复杂的操作,导致在didFinishLaunchingWithOptions 结束后还没有设置rootViewController
Xcode7需要所有UIWindow必须立即先设置一个rootViewController
解决办法:
先设置个rootVIewController 之后重新赋值
UIWindow *window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
window.rootViewController = [UIViewController new];