苹果更新了ios9有一段时间了,最近总结了一下平时项目中遇到的一些ios9适配问题,分析一下ios8与ios9的不同点:

1. App Transport Security Settings

即NSAppTransportSecurity,IOS9中为了加强为了强制增强数据访问安全,默认会把 HTTP 请求,都改为 HTTPS 请求,原来的HTTP协议传输都改成TLS1.2协议进行传输,直接造成的情况就是App发请求的时候弹出网络无法连接。解决办法就是在项目的info.plist 文件里自己输入如下节点:

ios8与ios9的区别 ios8和ios9哪个好_App





然后自己更新Xcode7.3后发现苹果更新成如下:

ios8与ios9的区别 ios8和ios9哪个好_App_02



2. URLscheme

在iOS9中,如果使用URL scheme必须在"Info.plist"中将你要在外部调用的URL scheme列为白名单,否则不能使用。key叫做LSApplicationQueriesSchemes ,键值内容是

LSApplicationQueriesSchemes urlscheme1 urlscheme2 urlscheme3 urlscheme4


其中最关键的是以下部分:

 If you call the “canOpenURL” method on a URL that is not  
      in  
      your whitelist, it will  
      return  
      “NO”, even  
      if  
      there is an app installed that has registered to handle  
      this  
      scheme. A “This app is not allowed to query  
      for  
      scheme xxx” syslog entry will appear. 
     
 
      If you call the “openURL” method on a URL that is not  
      in  
      your whitelist, it will fail silently. A “This app is not allowed to query  
      for  
      scheme xxx” syslog entry will appear. 

3.statusbar

以前我们为了能够实时的控制顶部statusbar的样式,可能会在喜欢使用

[[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;

}

4.字体


iOS9中,中文系统字体变为了专为中国设计的“苹方”,字体有轻微的加粗效果,并且最关键的是字体间隙变大了!
所以很多原本写死了width的label可能会出现“...”的情况。
包括在很多时候我们自动计算行高行宽的时候出现偏差,导致一些不可知的错误


CGSize size = [title sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14.0f]}];

CGSize adjustedSize = CGSizeMake(ceilf(size.width), ceilf(size.height));

5.NSURLConnection

/*** DEPRECATED: The NSURLConnection class should no longer be used.  NSURLSession is the replacement for NSURLConnection ***/

IOS9后, 苹果用NSURLSession替代了NSURLConnection。如果项目以前使用过这些API,建议立即升级到基于 NSURLsession 的API的AFNetworking的版本。

6.bitcode

问题的原因是:某些第三方库还不支持bitcode,要不就是把这个bitcode禁用。

解决方法方法一:更新library使包含Bitcode,否则会出现以下中的警告;

( null ): URGENT: all bitcode will be dropped because  '/Users/myname/Library/Mobile Documents/com~apple~CloudDocs/foldername/appname/GoogleMobileAds.framework/GoogleMobileAds(GADSlot+AdEvents.o)'  was built without 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. Note: This will be an error  in  the future.


解决方法方法二:把这个bitcode设为禁用


ios8与ios9的区别 ios8和ios9哪个好_App_03