IOS9的适配 有关企业级证书、网络请求、定位、URL Scheme的讨论和解决方案

虽然WWDC已经在今天的6月9号已经举行了,但对于IOS9的适配最近才开始。 首先是工作上的忙碌,点呀点正在发布3.1版本,同时又有一个新的APP从0起步。 二是距离IOS9正式发行其实还有一段时间的。近日有空试验了IOS9,对于一些重要的适配问题深入的了解和探讨。本文主要讲IOS9主要的适配方面的问题,还有公司对IOS9作出的改变。

为此特意升级了IOS9来试验,有关如何升级IOS9,点此传送门

1.企业级证书分发

在IOS8以前,如何使用企业级证书是这样提示的:

ios8 企业证书

但是在IOS9出现的时候,变成了如下:

ios9 企业证书

若要应用可以正常使用,必须先通过手机设置信任,步骤:(设置->通用->描述文件->选择相应的描述文件点信任) 步骤繁琐,若要让用户如此操作,估计早就不耐烦了。

而公司之前主要推广渠道为官网的二维码扫码,也就是企业级安装方式。自从出现了IOS9,为了提早预防用户的流失,于是公司决定以后APP的渠道都转向AppStore上。

2.网络请求

自IOS9以后苹果官网建议使用HTPPS,更安全的传输方式。而普通的HTTP将会被禁止。不过在我尝试了IOS9系统后,发现,如果你的包是在IOS8下编译的那么苹果会兼容以前的版本,能够成功访问HTTP的接口。但如果使用新的IOS9下编译,那么网络将请求不了。

官网说明 ios8 企业证书 目前有两种方式解决这个问题

  1. 将接口全部换成HTTPS,符合官网的建议。
  2. 在info.plist中声明,使其能正常访问http(解决方法参考 ChenYilong)

Info.plist 配置中的XML源码如下所示:

    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSExceptionDomains</key>
      <dict>
        <key>yourserver.com</key>
        <dict>
          <!--允许子域名:subdomains-->
          <key>NSIncludesSubdomains</key>
          <true/>
          <!--允许App进行不安全的HTTP请求-->
          <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
          <true/>
          <!--在这里声明所支持的 TLS 最低版本-->
          <key>NSTemporaryExceptionMinimumTLSVersion</key>
          <string>TLSv1.1</string>
        </dict>
      </dict>
    </dict>

如果想请求所有HTTP接口

    <key>NSAppTransportSecurity</key>
    <dict>
        <!--彻底倒退回不安全的HTTP网络请求,能任意进行HTTP请求 (不建议这样做)-->
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

公司方面为了统一和大局考虑,将使后端改成HTPPS的方式。这样手机端只要把HOST加个S就好了。

3.定位

IOS9中若要请求后台定位权限,则需要多加一些代码。如果不适配iOS9,就不能偷偷在后台定位,会出现蓝条

代码中:

  if ([[[UIDevice currentDevice] systemVersion]      floatValue] >= 9) {
     _locationManager.allowsBackgroundLocationUpdates    = YES;
   }

info.plist中:

<key>NSLocationAlwaysUsageDescription</key>
<string>XX应用请求后台定位权限</string>

<key>UIBackgroundModes</key>
<array>
    <string>location</string>
</array>

4.URL Scheme

在IOS9中 需要将使用的URL Scheme列为白名单,否则不能使用。openURL 和 canOpenURL 均无法使用。

解决: 在info.plist中添加

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>urlscheme</string>
 <string>urlscheme2</string>
 <string>urlscheme3</string>
 <string>urlscheme4</string>
</array> 

官网说明 WWDC 2015 Session 703: "Privacy and Your App"

小结

本文主要介绍了IOS9的改动,以及目前APP需要做的调整,文中所提及的并非所有新特性,更多特性还需要到官网,在此只讲了一些发生重大改变的。笔者亲试IOS9,所写均已试验。希望通过此文能够让大家友好地过渡到IOS9的适配。

参考资料

1.IOS 9 适配系统教程
2.Privacy and Your App