iOS10和xcode8的GM版都放出了下载,我怀着忐忑的心更新了下(怕有适配问题啊!!!),先更新的xcode8,跑了下公司的项目,除了nullable字段有问题其余都还比较顺利,不过项目跑起来,仍是有一点小问题,好在不像iOS9更新时变化那么多,而后我又给手机升级了iOS10,跑了个真机,结果一不当心测试到后半夜2点。。。浪费了一上午玩游戏的好时光。本篇就我碰到的问题一一整理,但愿有相似问题的猴们,能够有点参考。
问题点xcode
Q:之前是能够nullable的,如今的报错了。安全
A:删掉就行了app
Q:xcode8编译的版本在访问相机、相册等须要用户点击容许开通权限的地方会崩溃A:因为iOS10对Security and Privacy Enhancements安全和保密性加强,在申请不少私有权限时,都须要添加描述,不添加会crash。解决办法,只需在info.plist里配置上请求权限的描述信息就能够了。框架
<key>NSCameraUsageDescription</key> <string>描述信息</string> <key>NSPhotoLibraryUsageDescription</key> <string>描述信息</string>ide
这里以相机和照片权限为例,描述信息能够是任何字符串,跟iOS9中的访问位置的字段是相似的性能
<key>NSLocationAlwaysUsageDescription</key> <string></string> <key>NSLocationWhenInUseUsageDescription</key> <string></string>学习
下面列出全部的key,用到的自行添加吧。测试
<key>NSPhotoLibraryUsageDescription</key> <string>App须要您的赞成,才能访问相册</string> <key>NSCameraUsageDescription</key> <string>App须要您的赞成,才能访问相机</string> <key>NSMicrophoneUsageDescription</key> <string>App须要您的赞成,才能访问麦克风</string> <key>NSLocationUsageDescription</key> <string>App须要您的赞成,才能访问位置</string> <key>NSLocationWhenInUseUsageDescription</key> <string>App须要您的赞成,才能在使用期间访问位置</string> <key>NSLocationAlwaysUsageDescription</key> <string>App须要您的赞成,才能始终访问位置</string> <key>NSCalendarsUsageDescription</key> <string>App须要您的赞成,才能访问日历</string> <key>NSRemindersUsageDescription</key> <string>App须要您的赞成,才能访问提醒事项</string> <key>NSMotionUsageDescription</key> <string>App须要您的赞成,才能访问运动与健身</string> <key>NSHealthUpdateUsageDescription</key> <string>App须要您的赞成,才能访问健康更新 </string> <key>NSHealthShareUsageDescription</key> <string>App须要您的赞成,才能访问健康分享</string> <key>NSBluetoothPeripheralUsageDescription</key> <string>App须要您的赞成,才能访问蓝牙</string> <key>NSAppleMusicUsageDescription</key> <string>App须要您的赞成,才能访问媒体资料库</string>
Q:访问当前应用的设置页面的问题字体
NSURL *url = [NSURL URLWithString:@"prefs:root=bundleIn identifier"]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; }
原本在iOS7-9上都正常工做的如上方式的跳转设置页面,在iOS10上点击会报下面的错误优化
A:解决办法也很简单,实际上从iOS8开始就提供了直接跳转设置页面的url
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
替换成这个url就ok了,顺便openUrl方法在iOS10中也废弃了,不过仍是能够用滴
(BOOL)openURL:(NSURL*)url NS_DEPRECATED_IOS(2_0, 10_0, "Please use openURL:options:completionHandler: instead") NS_EXTENSION_UNAVAILABLE_IOS("");
改成
(void)openURL:(NSURL)url options:(NSDictionary<NSString , id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS("");
Q:xcode7编译的包,动态计算一段文字的高度时,计算出来的高度在iOS10设备上不足以容纳这段文字A:由于iOS10更换了系统字体,因此会致使文字的大小跟iOS9及以前的系统有点区别,若是继续使用xcode7编译的话,建议在文字高度上多加5。或者直接使用xcode8编译的包也能够,文字的高度计算结果是正确的。至于相似YYText这样的库,底层使用CoreText写的,xcode七、xcode8上都会存在这个问题,在最后的计算出来的高度上直接加5就ok了。
Q:推送中在获取device token时,会报以下错误
A:打开以下设置
而后会自动生成以下文件
打开以下显示
字段对应两种状态:development和production,而后再运行,便可成功获取device token了。
xcode8开始,再也不支持iOS7,最低支持到iOS8。
不过既然iOS10都出了,并且iOS7用户量是真心少,我以为iOS7就能够舍弃了,还减轻了开发成本,一些老的库,好比ALAsset,性能真的不行了。不过仍是得听领导安排啊哈哈。还好xcode8编译的ipa包,装在iOS7设备上,仍是能够正常工做的,无非是测试时麻烦了点。
打开xcode8.0时编译运行时出现下面问题:
39B1F3AE-530A-46B7-BE6E-379A0AA6B4DE.png
这个问题刚开始估计你们都会碰到也是第一个要解决的问题这个问题就是一个证书的设置问题,下面看两张图正常咱们会在BuildeSettings中设置证书:
A6682834-E135-4D55-9636-DC5E0962AF05.png
可是在xcode8.0中咱们看到下面的新特性:
06300540-83C7-44F4-9069-F198599F0086.png
相信你们都能看到在Genreal下面会有Siging,没错这就是新特性,为了方便用户来管理,你们能够选择Automatically manage signing。须要输入开发者帐号!若是没有帐号也不要紧,在下面也能够选择Debug、Realease、inHouse模式下对应的证书也能够!
可是 可是 可是 若是你的证书若是是通配符类型的,可是你的app包含了好比推送、apple pay、他会报错提示你未报含xx.id的manteid等等。因此你要生成针对你app的bundleid对应的证书!
Xcode8取消了三方插件的功能,好多教程破解能够继续使用,可是可能app上线可能会被拒。咱们最喜好的VVDocumenter-Xcode也不能使用了,下面是做者的感谢
9A4F4CA5-47C7-4301-9BE8-599DCA1BD5B4.png
上面也提到了咱们能够继续使用注释,快捷键(⌥ Option + ⌘ Command + / )
iOS 10 中将通知相关的 API 都统一了,苹果对这是作了重大改进,变的很是易用。
iOS 9 之前的通知
在调用方法时,有些方法让人很难区分,容易写错方法,这让开发者有时候很苦恼。应用在运行时和非运行时捕获通知的路径还不一致。应用在前台时,是没法直接显示远程通知,还须要进一步处理。已经发出的通知是不能更新的,内容发出时是不能改变的,而且只有简单文本展现方式,扩展性根本不是很好。
iOS 10 开始的通知
全部相关通知被统一到了UserNotifications.framework框架中。增长了撤销、更新、中途还能够修改通知的内容。通知不在是简单的文本了,能够加入视频、图片,自定义通知的展现等等。iOS 10相对以前的通知来讲更加好用易于管理,而且进行了大规模优化,对于开发者来讲是一件好事。iOS 10开始对于权限问题进行了优化,申请权限就比较简单了(本地与远程通知集成在一个方法中)。
iOS 10 通知学习相关资料: