• iOS9的新特性以及适配方案


    新的iOS 9系统比iOS8更稳定,功能更全面,而且还更加开放。iOS 9加入了更多的新功能,包括更加智能的Siri,新加入的省电模式。iOS 9为开发者提供5000个全新的API。

    1. 限制HTTP协议,全部改用更安全的HTTPS

    iOS9让所有的HTTP默认使用了HTTPS,原来的HTTP协议传输都改成TLS1.2协议进行传输。直接造成的情况就是App发请求的时候弹出网络无法连接。
    对于这个问题的解决方案,网上有一篇博客已经总结的很好了,我在这就简要的说明怎么处理这种问题.

    HTTPS和HTTP的区别在于哪里呢?
    举个简单的栗子:原来的 HTTP 是塑料水管,容易被戳破;那么如今新设计的 HTTPS 就像是在原有的塑料水管之外,
    再包一层金属水管。一来,原有的塑料水管照样运行;二来,用金属加固了之后,不容易被戳破。
    
    Apple让你的HTTP采用SSL/TLS协议,就是让你从HTTP转到HTTPS.
    不使用SSL/TLS的HTTP通信,就是不加密的通信!
    
    所有信息明文传播,带来了三大风险:
    窃听风险(eavesdropping):第三方可以获知通信内容。
    篡改风险(tampering):第三方可以修改通信内容。
    冒充风险(pretending):第三方可以冒充他人身份参与通信。
    
    SSL/TLS协议是为了解决这三大风险而设计的:
    所有信息都是加密传播,第三方无法窃听。
    具有校验机制,一旦被篡改,通信双方会立刻发现。
    配备身份证书,防止身份被冒充。
    • 在 Info.plist 中声明,倒退回不安全的网络请求依然能让App访问指定http,甚至任意的http(苹果不建议这么做):

       

    需要添加的节点

    参考 :http://www.cnblogs.com/endtel/p/4810042.html
    NSAppTransportSecurity - NSAllowsArbitraryLoads
    这个子节点的意思是:是否仍然允许加载?!

    设为YES的话就将禁用了AppTransportSecurity转而使用用户自定义的设置,这个问题就解决了。

    2. Bitcode

    应该有朋友在真机调试的时候发现在使用微博微信等第三方SDK的时候,会提示报错,

    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瘦身


    解决方式:

      1. 某些第三方库还不支持bitcode,我们只能等待库的开发者升级了此项功能.(这个是我们所不能掌握的,嘿嘿)
      2. 直接禁用bitcode,禁用的方法就是找到如下配置,选为NO.注意:iOS中bitcode是默认YES,watchOS中bitcodes是不让改的必须为YES。

            

    1. 选为NO禁用

    3. 企业级分发

    在iOS8只是弹出一个窗问你是否需要让手机信任这个应用,但是在iOS9却直接禁止,如果真的想信任需要自己去手动开启。类似于Mac系统从未知开发者处下载的dmg直接打不开,然后要到系统偏好设置的安全性与隐私手动打开。
    解决方式:

    • 设置-->通用--->描述文件 自行添加信任.
    选择描述文件
    添加信任
    这个跟着找一下就找到了。

    4. URL scheme

    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>

    5. 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;
    }

    6. 字体

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

    // 字体的大小
    CGSize size = [title sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14.0f]}];
    CGSize adjustedSize = CGSizeMake(ceilf(size.width), ceilf(size.height));
    加上向上取整 ceilf()就能解决了.

    7. AFNetworking

    为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。

    如果你的项目以前使用过这些API,建议立即升级到基于 NSURLSession 的API的AFNetworking的版本。

  • 相关阅读:
    MySQL数据库高可用集群搭建-PXC集群部署
    高性能高并发网站架构,教你搭建Redis5缓存集群
    redis连接错误3种解决方案System Error MISCONF Redis is configured to save RDB snapshots
    进程异常行为-反弹Shell攻击,KILL多个进程
    Laravel中我们登录服务器通过 Tinker 手动创建后台管理用户
    Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]解决
    Laravel:php artisan key:generate三种报错解决方案,修改默认PHP版本(宝塔面板)
    大型网站如何防止崩溃,解决高并发带来的问题
    PHP微信公众平台OAuth2.0网页授权,获取用户信息代码类封装demo(二)
    iOS开发 ReactiveCocoa入门教程 第二部分
  • 原文地址:https://www.cnblogs.com/fengmin/p/5578112.html
Copyright © 2020-2023  润新知