iOS9适配问题
2015-09-21 21:32
369 查看
iOS9适配问题
博客地址:http://catchzeng.leanote.com/最近升级到XCode7之后发现工程需要针对iOS9做一些适配,如下几点是我项目中遇到的适配问题,仅供大家参考如有问题欢迎加Q群157672725讨论:
网络适配ATS问题
Bitcode导致的编译问题
状态栏样式问题
白名单问题
网络适配ATS问题
App Transport Security(ATS)是Apple为提高系统及应用安全性而在iOS 9和OS X EI Capitan中引入的新特性。一旦开启ATS后,应用所有的网络请求将会自动转换为HTPPS传输(HTTP形式的传输将会失败)。
解决办法:
1.在Info.plist中添加NSAppTransportSecurity,并添加item设置NSAllowsArbitraryLoads为YES,表示支持所有HTTP请求。
源码形式:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
2.添加白名单
<key>NSAppTransportSecurity</key> <dict> <key>NSExceptionDomains</key> <dict> <key>yourserver.com</key> <dict> <!--Include to allow subdomains--> <key>NSIncludesSubdomains</key> <true/> <!--Include to allow insecure HTTP requests--> <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> <true/> <!--Include to specify minimum TLS version--> <key>NSTemporaryExceptionMinimumTLSVersion</key> <string>TLSv1.1</string> </dict> </dict> </dict>
3.改变服务器(改用HTTPS),需要注意一下几点
3.1Transport Layer Security协议版本要求TLS1.2以上
3.2服务的Ciphers配置要求支持Forward Secrecy
3.3证书签名算法符合ATS要求等
目前我选择第1种方法
理由:服务器和第三方的框架使用的API大部分是HTTP形式的,服务器修改成HTTPS需要申请证书之类的,相对比较耗时,所以可以先考虑使用第一种做法。
Bitcode导致的编译问题
开启Bitcode编译后,可以使得开发者上传App时只需上传Intermediate Representation(中间件),而非最终的可执行二进制文件。在用户下载App之前,AppStore会自动编译中间件,产生设备所需的执行文件供用户下载安装。Xcode 7 会开启 Bitcode,如果项目中第三方库不包含bitcode,将会导致编译失败。
解决办法:
1.更新第三方库使包含 Bitcode
2.关闭Bitcode
在Build Settings 中搜索bitcode 【记得选中ALL】将ENABLE_BITCODE 设置为NO
目前我选择了第2种方法
理由:代码中的第三方库中的.a文件不是bitcode的会导致编译出错,故目前选择第2种,等待第三方库的更新。
状态栏样式问题
如果你使用[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];的形式来设置状态栏样式,则运行的时候会出现以下警告。<Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable. <Error>: CGContextTranslateCTM: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable. <Error>: CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
原因:在info.plist里面设置了View controller-based status bar appearance为NO,默认为YES,该种方式兼容iOS6、iOS7、iOS8但是到了iOS9会报警告。
解决办法:
1.将View controller-based status bar appearance设置为YES
2.去除以下方式改变状态栏
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
3.使用新的改变状态栏方法
在自定义控制器里面添加如下方法:
-(UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
4.clean 或者删除应用程序重新运行,验证结果。
白名单问题
运行程序的时候出现类似以下的警告,表示你没有添加白名单error: “This app is not allowed to query for scheme mqqopensdkapiV2”
解决办法:这里我推荐友盟的教程http://dev.umeng.com/social/ios/ios9
相关文章推荐
- iOS开发 -- CocoaPods安装和使用步骤(详解)
- iOS开发之地图标注开发
- IOS几种常见的实现扫描、生成二维码的方式(一、使用ZBar SDK)
- IOS开发测试之单元测试中的理论知识
- iOS开发脚踏实地学习day12-通讯录和plist存储
- 猫猫学iOS 之BLOCK的妙用_利用block实现链式编程
- nagios全攻略(五)----监控windows系统的”本地信息”
- nagios在第一次监控windows所必须修改的内容
- nagios监控windows配置文件实例
- nagios报警次数限制
- iOS开发系列--打造自己的“美图秀秀”
- iOS 编译 <Error>: CGContextRestoreGState:
- 升级iOS9系统后,需要更新的相关配置
- iOS打电话发短信发邮件总结
- 真机运行时报错
- ios上取得设备唯一标志的解决方案
- ios开发笔记-适配iOS9
- ios 无限后台
- 苹果开发 笔记(80)升级IOS 9 和 XCode 7 引起的问题记录
- iOS 9 适配系列教程