iOS9让全部的HTTP默认使用了HTTPS,原来的HTTP协议传输都改为TLS1.2协议进行传输。直接形成的状况就是App发请求的时候弹出网络没法链接。
对于这个问题的解决方案,网上有一篇博客已经总结的很好了,我在这就简要的说明怎么处理这种问题.html
HTTPS和HTTP的区别在于哪里呢? 举个简单的栗子:原来的 HTTP 是塑料水管,容易被戳破;那么现在新设计的 HTTPS 就像是在原有的塑料水管以外, 再包一层金属水管。一来,原有的塑料水管照样运行;二来,用金属加固了以后,不容易被戳破。 Apple让你的HTTP采用SSL/TLS协议,就是让你从HTTP转到HTTPS. 不使用SSL/TLS的HTTP通讯,就是不加密的通讯! 全部信息明文传播,带来了三大风险: 窃听风险(eavesdropping):第三方能够获知通讯内容。 篡改风险(tampering):第三方能够修改通讯内容。 冒充风险(pretending):第三方能够冒充他人身份参与通讯。 SSL/TLS协议是为了解决这三大风险而设计的: 全部信息都是加密传播,第三方没法窃听。 具备校验机制,一旦被篡改,通讯双方会马上发现。 配备身份证书,防止身份被冒充。
NSAppTransportSecurity - NSAllowsArbitraryLoads
这个子节点的意思是:是否仍然容许加载?! 设为YES的话就将禁用了AppTransportSecurity转而使用用户自定义的设置,这个问题就解决了。python
应该有朋友在真机调试的时候发如今使用微博微信等第三方SDK的时候,会提示报错,ios
XXXX’ does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
Xcode默认开启bitcode模式,bitcode的理解应该是把程序编译成的一种过渡代码,而后苹果再把这个过渡代码编译成可执行的程序。bitcode也容许苹果在后期从新优化咱们程序的二进制文件,能够直接理解为APP瘦身。
解决方式:api
在iOS8只是弹出一个窗问你是否须要让手机信任这个应用,可是在iOS9却直接禁止,若是真的想信任须要本身去手动开启。相似于Mac系统从未知开发者处下载的dmg直接打不开,而后要到系统偏好设置的安全性与隐私手动打开。
解决方式:安全
URL scheme通常使用的场景是应用程序有分享或跳其余平台受权的功能,分享或受权后再跳回来.
在iOS8并无作过多限制,可是iOS9须要将你要在外部调用的URL scheme列为白名单,才能够完成跳转.
若是iOS9没作适配 会报以下错误 :服务器
canOpenURL: failed for URL : "[mqzone://qqapp](mqzone://qqapp)" - error: "This app is not allowed to query for scheme mqzone"
例如在实现第三方登陆时,不能直接跳转到相应的app直接获取权限.
解决方式为:微信
在info.plist中加入
<key>LSApplicationQueriesSchemes</key> <array> <!-- 微信 URL Scheme 白名单--> <string>wechat</string> <string>weixin</string> <!-- 新浪微博 URL Scheme 白名单--> <string>sinaweibohd</string> <string>sinaweibo</string> <string>sinaweibosso</string> <string>weibosdk</string> <string>weibosdk2.5</string> <!-- QQ、Qzone URL Scheme 白名单--> <string>mqqapi</string> <string>mqq</string> <string>mqqOpensdkSSoLogin</string> <string>mqqconnect</string> <string>mqqopensdkdataline</string> <string>mqqopensdkgrouptribeshare</string> <string>mqqopensdkfriend</string> <string>mqqopensdkapi</string> <string>mqqopensdkapiV2</string> <string>mqqopensdkapiV3</string> <string>mqzoneopensdk</string> <string>wtloginmqq</string> <string>wtloginmqq2</string> <string>mqqwpa</string> <string>mqzone</string> <string>mqzonev2</string> <string>mqzoneshare</string> <string>wtloginqzone</string> <string>mqzonewx</string> <string>mqzoneopensdkapiV2</string> <string>mqzoneopensdkapi19</string> <string>mqzoneopensdkapi</string> <string>mqzoneopensdk</string> <!-- 支付宝 URL Scheme 白名单--> <string>alipay</string> <string>alipayshare</string></array>
之前咱们为了可以实时的控制顶部statusbar的样式,可能会在喜欢使用markdown
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent] [[UIApplication sharedApplication]setStatusBarHidden:YES];
可是这么作以前须要将 info.plist 里面加上View controller-based status bar appearance BOOL值设为NO,就是把控制器控制状态栏的权限给禁了,用UIApplication来控制。
可是这种作法在iOS9不建议使用了,建议咱们使用把那个BOOL值设为YES,而后用控制器的方法来管理状态栏好比。网络
- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
iOS9中,中文系统字体变为了专为中国设计的“苹方”,字体有轻微的加粗效果,而且最关键的是字体间隙变大了!
因此不少本来写死了width的label可能会出现“...”的状况。
包括在不少时候咱们自动计算行高行宽的时候出现误差,致使一些不可知的错误
解决方式:app
CGSize size = [title sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14.0f]}]; CGSize adjustedSize = CGSizeMake(ceilf(size.width), ceilf(size.height));
加上向上取整 ceilf()就能解决了.
为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的全部支持。若是你的项目之前使用过这些API,建议当即升级到基于 NSURLSession 的API的AFNetworking的版本。
具体解决方案在我这一篇文档中有详细说明AFNetworking 3.0的迁移,若是有感兴趣的朋友能够看看.
这其实不算是新特性,只是在iOS9版本,废弃了UIAlertView,Action Sheets,所以咱们必需要掌握UIAlertController的使用,如今为了适配iOS7,不少项目仍是会继续使用UIAlertView,Action Sheets,可是下几个版本应该就会慢慢不用了.
这里我只列出简单的使用方法,具体的方式有一个博客详细说明.
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"标题" message:@"这个是UIAlertController的默认样式" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil]; UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleDefault handler:nil]; [alertController addAction:cancelAction]; [alertController addAction:okAction]; [self presentViewController:alertController animated:YES completion:nil];
相信不少朋友尚未发现这个好东西,UIStackView提供了一个高效的接口用于平铺一行或一列的视图组合。对于嵌入到StackView的视图,你不用再添加自动布局的约束了。Stack View管理这些子视图的布局,并帮你自动布局约束。也就是说,这些子视图可以适应不一样的屏幕尺寸。
举个栗子:
之前咱们若是想要在xib上横向布局三个按钮,让三个按钮距离相等,咱们可能须要再加三个View,将button放在View上面,再将View布局三等分,相似于
这样子是否是比较麻烦呢?有了Stack View