准备工作
更新Xcode 8beta
在Mac上下载最新的Xcode 8 beta版
安装iOS 10 beta描述文件
在你要升级的iOS 10的设备上,打开Safari,打开网址https://beta.apple.com/profile下载iOS 10的描述文件。
安装完描述文件之后,进入“设置”>“通用”>“软件更新”来安装iOS beta版。
iOS 10适配
项目转化
上面的准备工作做好了,接下来开始做iOS 10的适配工作。
用Xcode8 beta打开我们的项目,会提示转化,选择Convert
如果你的项目里有swift,会弹出swift 3版本的转化,点next
选择我们的target继续点next
点save保存更改。
清理缓存
关闭并退出Xcode,清理Xcode的缓存,这些缓存若不清理,会有很多报错.
打终端,输入指令:open ~/./Library/Developer/Xcode/DerivedData
,删除DerivedData下的所有文件。
iOS 10权限适配
清理完缓存后,重新用Xcode 8 beta打开项目,首先做权限适配
iOS 10调用相机,访问通讯录,访问相册等都要在plist中加入权限访问描述,不然iOS 9上来的项目涉及到这些权限的地方就会直接crash掉,报错信息如下:
This app has crashed because it attempted to access privacy-sensitive data without a usage description.
打开info.plist添加权限许可描述键值对:
常见的权限许可设置如下:
相机权限: Privacy - Camera Usage Description 是否允许此App使用你的相机?
相册权限: Privacy - Photo Library Usage Description 是否允许此App访问你的媒体资料库?
通讯录权限: Privacy - Contacts Usage Description 是否允许此App访问你的通讯录?
蓝牙权限:Privacy - Bluetooth Peripheral Usage Description 是否许允此App使用蓝牙?
定位权限:Privacy - Location When In Use Usage Description 是否允许此App使用定位服务?
语音转文字权限:Privacy - Speech Recognition Usage Description 是否允许此App使用语音识别?
日历权限:Privacy - Calendars Usage Description 是否允许此App使用日历?
其它iOS 10适配相关的问题
1.<b>objc_retainedObject()
要替换成(__bridge NSData *)()
</b>
2.如果你的项目使用了Masonry,那么很多缺斤少两的约束在iOS 9上还可以正常显示,但iOS 10是绝对不行的,不是crash掉就是显示不正确。应该全面检查项目的各个界面的约束是否存在问题,并一一修复。
3.如果你的项目使用了YYText,在iOS 10上存在很多显示问题,请更新到最新版。
如果你之前使用了nonHighlightTapAction或nonHighlightLongPressAction,请更换成textTapAction及textLongPressAction.
4.之前使用了YYText,在Label的算高上,iOS 10需要增大额外的高度,才能达到iOS 9的显示全。
5.iOS 10提供新的Speech.framework,Speech Recognition语音转文字
SFSpeechRecognizer *recognizer=[[SFSpeechRecognizer alloc] initWithLocale:[NSLocale currentLocale]];
NSURL *audioSourceURL;//音频文件的url,如AudioRecord
SFSpeechURLRecognitionRequest *requset=[[SFSpeechURLRecognitionRequest alloc] initWithURL:audioSourceURL];
[recognizer recognitionTaskWithRequest:requset resultHandler:^(SFSpeechRecognitionResult *result, NSError *error) {
//语音转文字的结果
NSString *resultString=result.bestTranscription.formattedString;
}];
使用语音识别,也需要加上权限许可描述,上面有提到过。
6.Xcode 8会打印一堆乱七八糟的log,解决办法是,去edit scheme里,设置OS_ACTIVITY_MODE : disable
持续更新中...请关注!