一、网络适配由http改成https

苹果官方对App Transport Security Technote的解释如下:

翻译成中文的意思就是说:iOS9.0SDK在编译的时候,默认所有从NSURLConnection、CFURL和NSURLSession发出的http请求,都改为https请求。由于AFNetworking版本底层是用了NSURLConnection,所以使用AFNetworking的app都将受到影响。对于这个问题的解决办法有三种,一:让服务器更新,使用https,以解析相关的数据。二:在info.plist做些配置,让其暂时倒回到不安全的网络传输协议(http协议)。下面详细来说下这两种方案。三:设置域,也就是把不支持https协议的接口设置成http的接口。

方案一:让服务器更新。

第一种方案是最佳的,因为使用http的话,会存在以下主要风险:

1、窃听风险:第三方可以获得通信内容。

2、篡改风险:第三方可以修改通信内容。

3、冒充风险:第三方可以冒充他人来进行通信。

而使用https所带给我们的好处如下:

1、所有信息都是加密传播,第三方无法窃取。

2、具有校验机制,一旦通信内容被篡改,通信双方可以立即发现。

3、配备身份证书,防止他人冒充。

但是就目前情况来看,让服务器更新的代价太大,大的公司应该很大可能会让服务器更新,一般公司会采用第二种方案。

方案二:暂时倒回到不安全的网络传输协议(http协议)

(1)、在info.plist中增加一个NSAppTransportSecurity字段,类型是字典。

(2)、然后给其增加一个Key:NSAllowsArbitraryLoads,类型是Boolean类型,值为YES。

方案三:设置域(把把不支持https协议的接口设置成http的接口)

(1)、在info.plist中增加一个key:NSAppTransportSecurity,类型为字典类型。

(2)、然后添加一个NSExceptionDomains,其类型是字典类型。

(3)、把需要支持的域给添加到NSExceptionDomains里,其中域作为key,类型为字典类型。

(4)、每个域下面需要设置3个属性,分别为NSIncludesSubdomains、NSExceptionRequiresForwardSecrecy、NSExceptionAllowsInsecureHTTPLoads,均为Boolean类型,其值分别为YES,NO,YES。

新浪微博的域:weibo.com、weibo.cn、sina.com.cn。微信的域:qq.com。QQ/QZone的域:qq.com
二:Bitcode

先看下Apple对其的解释,如图:

[cpp] view plain copy print?Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect   that contain bitcode will be compiled and linked on the App Store. Including bitcode will allow Apple   to re-optimize your app binary in the future without the need to submit a new version of your app to   the store. 

翻译成中文的意思就是,Bitcode是被编译程序的一种中间形式的代码。包含Bitcode配置的应用将在App Store上被编译和链接。Bitcode允许苹果在后期重新优化我们应用的二进制文件,而不需要我们重新提交一个版本到App Store上。

[cpp] view plain copy print?Note: For iOS apps, bitcode is the default, but optional. If you provide bitcode, all apps and   frameworks in the app bundle need to include bitcode. For watchOS apps, bitcode is required.  

翻译成中文的意思就是,如果用Xcode7创建的app默认是包含有bitcode,但是是可以选择的。如果,我们的app包含了bitcode,我们工程中所有的第三方sdk必须也得支持bitcode,否则的话,就会报错误的。错误如下:

解决这个错误,有两种方案:

方案一:把不支持Bitcode的SDK给移除掉,等待第三方更新SDK。而目前大部分社交平台的SDK并不支持Bitcode。

方案二:把Bitcode给关闭掉,方法如下:

那么使用bitcode会给我们带来什么好处呢?苹果为什么要引入bitcode呢?其实引入bitcode的主要作用是给app瘦身,官方解释如下:

[cpp] view plain copy print ?
  1. Slicing is the process of creating and delivering variants of the app bundle for different target
  2. devices. A variant contains only the executable architecture and resources that are needed for the
  3. target device. You continue to develop and upload full versions of your app to iTunes Connect. The
  4. App Store will create and deliver different variants based on the devices your app supports. Image
  5. resources are sliced according to their resolution and device family. GPU resources are sliced
  6. according to device capabilities. When the user installs an app, a variant for the user’s device is
  7. downloaded and installed.
  8. Xcode simulates slicing during development so you can create and test variants locally. Xcode slices
  9. your app when you build and run your app on a device. When you create an archive, Xcode includes the
  10. full version of your app but allows you to export variants from the archive.

当前app的打包方式是把适配兼容多个设备的执行文件与资源文件合并成一个文件,上传和下载的文件则包含了所有的这些文件,导致占用较多的存储空间。

app瘦身就是让iOS设备在安装、更新以及运行app等场景中仅下载所需的资源,从而节省设备的存储空间。通过下面这张图,可以让我们很容易明白其中的原理,如图:

根据官方的解释,主要有以下三个方面:

1、Slicing

当把app打包上传到AppStore的时候,服务器会自动对包切割为不同的应用变体,当用户下载安装包的时候,系统会根据设备型号下载对应的应用变体。如上图所示。

2、Bitcode

开启bitcode编译后,可以让开发者上传app只需要上传中间二进制文件,而非最终的可执行二进制文件。在用户下载app之前,AppStore会自动编译中间二进制文件,从而生成可执行的二进制文件。

3、On-Demand Resources

所需资源是指开发者对资源添加标签上传后,系统会根据app运行的情况,动态下载并加载所需资源,如果存储空间不足时,自动删除这些资源。

三:Scheme白名单

从iOS9.0后,涉及到平台客户端的跳转,系统会自动到info.plist下检查是否设置Scheme。如果没有做相应的配置,就无法跳转到相应的客户端。因此如果客户端集成有分享与授权,需要配置Scheme白名单。

解决方案:

(1)、在info.plist增加key:LSApplicationQueriesSchemes,类型为NSArray。

(2)、添加需要支持的白名单,类型为String。

新浪微博白名单:sinaweibo、sinaweibohd、sinaweibosso、sinaweibohdsso、weibosdk、weibosdk2.5。

微信白名单:wechat、weixin。

支付宝白名单:alipay、alipayshare。

QQ与QQ空间白名单:mqzoneopensdk、mqzoneopensdkapi、mqzoneopensdkapi19、mqzoneopensdkapiV2、mqqOpensdkSSoLogin、mqqopensdkapiV2、mqqopensdkapiV3、wtloginmqq2、mqqapi、mqqwpa、mqzone、mqq。

另外,如果应用使用了检测是否安装了某款app,我们会调用canOpenURL, 如果url不在白名单中,即使手机上有这款app,也会返回NO。

补充:在使用sharesdk进行分享的时候,如果你设置有微信、QQ、QQ空间分享,并且你也把相应的白名单给添加进去了,但是如果你手机上没有装QQ的时候,也是不会出现分享到QQ的选项。

四:iPad适配Slide Over和Split View

若想适配multi tasking特性,建议不使用纯代码,改用storyboard、xib的形式。

补充,本文所说的都是iOS9.0SDK的新特性,如果你的app版本是基于iOS8.X、iOS7.X,并不受iOS9.0新特性约束。也就是说Xcode7给iOS8.X打设备包不需要白名单也能调用canOpenURL,但是Xcode7给iOS9.X打包则需要,Xcode7和iOS9缺一不可。

iOS9.0

Xcode7 iOS9网络请求适配 网络白名单相关推荐

  1. 网络请求以及网络请求下载图片的工具类 android开发java工具类

    2019独角兽企业重金招聘Python工程师标准>>> package cc.jiusan.www.utils;import org.apache.http.HttpEntity; ...

  2. Android 网络请求、网络状态及各种权限判断

    一.判断网络连接是否可用 public static boolean isNetworkAvailable(Context context) { ConnectivityManager cm = (C ...

  3. 封装网络请求 - iOS网络篇

    一.简单说明 1.分析项目对网路请求(AFN框架)的依赖 项目中,多个控制器都使用了AFN框架发送网络请求,如果AFN2.0存在重大BUg,或者是升级至3.0版本,那么对于整个项目都是及其危险的,所有 ...

  4. android https请求证书过滤白名单,Android处理https请求的证书问题

    android中对部分站点发送https请求会报错,原因是该站点的证书时自定义的,而非官方的,android手机不信任其证书,为了解决这个问题,一般有两种解决方案 忽略证书验证 下载证书到本地,添加到 ...

  5. uniapp封装请求(包含白名单、验签)

    import { apiBaseUrl, jhghUrl, apiSalt, userCheckList, jhghUrlrenzheng } from '@/common/config.js'; i ...

  6. 微信小程序真机无法发送网络请求or网络错误解决方法

    问题 公司一项目用的好好的,因安全升级切换域名. 1.代码和微信公众平台上的域名都修改好了,微信开发者工具中访问https的api接口正常: 2.微信开发者工具无论是否打开了[不校验合法域名.web- ...

  7. php后台和ios网络请求,iOS网络 POST通过JSON传数据到后台

    后台php脚本代码 header('Content-Type:text/plain;charset=utf-8'); $json = file_get_contents('php://input'); ...

  8. php对某目录设置ip权限,apache - .htaccess如何单独给某个请求设置IP白名单权限?...

    例如http://demo.com/hello 这条url,我想限制只有211.125.10.5这个IP可以访问,其他IP访问均返回403,该如何写.htaccess PS1: /hello不是一个目 ...

  9. App 组件化/模块化之路——如何封装网络请求框架

    App 组件化/模块化之路--如何封装网络请求框架 在 App 开发中网络请求是每个开发者必备的开发库,也出现了许多优秀开源的网络请求库.例如 okhttp retrofit android-asyn ...

最新文章

  1. 又双叒叕出事?微信 PC 版被曝扫描用户浏览器 cookies
  2. PowerPC汇编指令集
  3. $cfg_dbtype = mysql_多库操作2:终于实现多个数据库操作
  4. windows下python安装Numpy和Scipy模块
  5. hadoop学习--多表关联
  6. 如何将第三方控件嵌入ToolStrip控件,并提供Design-Time支持
  7. STM32中断与事件
  8. Hypothesis Testing
  9. !!终于把【库存管理的大致功能完成了!】
  10. LINUX下载编译tiff
  11. linux 安装与启动nginx
  12. 苹果笔记本摄像头linux驱动下载,更适配Windows:苹果MacBook摄像头驱动更新
  13. 架构真经深有体会、感触很深
  14. 用图818“女版乔布斯”霍姆斯定罪前后的轨迹
  15. 网页嵌入flash动画视频的几种方法
  16. linux添加fcitx输入法,linux安装输入法_怎么在Linux下安装fcitx输入法
  17. 杨忠愍斗严嵩,为国为民,名垂千古
  18. 武汉大学《GNSS、INS和激光雷达的紧密耦合预积分,用于城市环境中的车辆导航》
  19. 解析:学Java好还是HTML5好?
  20. Tensorflow的基本使用方法

热门文章

  1. 蚊帐上有两个破洞的补充办法
  2. 航天嵌入式软件测试系统配置模块的设计与实现
  3. 雷达极化分解、极化目标分解相关
  4. 【项目精选】jsp码头船只出行及配套货柜码放管理系统的设计与实现(视频+源码+论文)
  5. win7计算机磁盘清理,如何清理win7计算机上的磁盘
  6. [Singles]星外星2+1系列:半世纪的爵士情浓
  7. Web前端技术分享之前后端分离接口
  8. 微信小程序 输入框点击清空按钮 清空值
  9. nodejs安装最新版 只需两部
  10. 树莓派使用:更换源(sources)