让你的项目适配iOS 10

作者: CGPointZero | 来源:发表于2016-09-05 14:14 被阅读4563次

    准备工作

    更新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


    持续更新中...请关注!

    相关文章

      网友评论

      • 范特西V:还有个iOS10的权限问题是【网络请求权限】,这个不需要再xcode8里配置,不过当app新安装之后,第一次请求网络的时候,就会弹出这种对话框 http://ww1.sinaimg.cn/bmiddle/9cf33a33jw1f7wq2zlmjuj20yi1pcahj.jpg ,当用户还没选择的时候,默认是不能从网络获取数据的,这就经常造成首页数据空白,需要用户同意授权网络,再手动点刷新之类的才能正常获取。。 这种体验不太好,不知博主有无研究过这个【网络权限】,用户点击“允许”或“不允许”是否有对应的回调函数可以执行。。
        ebay_Happy:@范特西V 这个算是苹果10的bug,建议参考 网易考拉App
        CGPointZero:@范特西V 配置NSExceptionDomain?对特定域名开放http?

      本文标题:让你的项目适配iOS 10

      本文链接:https://www.haomeiwen.com/subject/bjdrettx.html