适配IPv6三:项目实战
苹果公司规定6.1号之后,所有上线的应用需要支持IPv6,于是公司就让我来适配以前的一个老项目,这个项目最新版本是一年之前的,具体官方文档可查看《适配IPv6:官方文档(一)》建议两篇文章一起看效果好点。
这里主要从以下几个方面来写
一、分析项目中那些东西需要适配
1.网络请求
由于项目比较老,项目中使用的是ASIHttprequest,虽然ASI现在没有人维护了,但还是能在项目中使用,和AFNetWorking 相比,它是基于CFNetwork,可以直接适配IPv6,新项目建议直接使用AFN比较好,AFN2.0以上也是支持IPv6的。
2.网络监测这个库 reachability
reachability在苹果官方可以看到最新的版本已经是5.0了,完全支持IPv6,项目中的还是2.2版本,需要进行适配处理。(IPv6测试的时候发现需要适配)
由于项目中用到了一个第三方库,这个库主要是用来查询股票的,并且是在他们基础库的基础上为我们公司单独定制的,最不好处理的是reachability这个类被封装进去了。而提供这个库的公司的代码也是在不断更新的。(后来和他们技术聊知道一个月8个小版本)
当时想的思路是直接替换reachability这个类为最新版本,然后重新打包文件。想想总是简单的,这样主要出现了两个问题,一是reachability从2.2到5更新之后,方法什么的有变动,库里面引用的地方要重新调用整个include文件(600个头文件)。二是他们的老版本找不到了,只有最新的版本,需要在他们最新版本基础上重新加入以前定制的文件。我也是第一次见include 头文件除了.h还有很多.m文件,也许真是为了方便吧,让人很难理解。
其实一个很简单的问题,解决起来一个坑接一个坑,主要是最新sdk和项目中sdk相差太大,又是定制的。花费时间比较多,用了两天时间。
3.第三方SDK
项目中使用的第三方有,极光,友盟和Share,极光和友盟直接去官网下载,重新集成即可。
Share在集成的时候由于版本分为2.x和3.x,项目中使用的是2.x,3.x最新是支持IPv6,如果刚开始直接换成3.x,项目中很多代码都要改。 后来分析的一下,分享主要集成了微信和新浪,我直接更换他们最新的.a文件是否可以?后来资讯了share技术,告知这样做是可以的,完美。其他项目中第三方也一样。
4.IP地址
为了适配IPv6,项目中要把IP地址换成域名处理
二、搭建并测试IPv6
这里小小偷懒了下,直接复制的图,亲测可行
使用你的MAC建立本地的IPv6 Wi-Fi 网络
确认你的MAC连接到了互联网,并且不是通过Wi-Fi.(插入网线即可),注意不要是有代理才能上网的,在公司需要设置代理才可以上网,整了一天没整好,回家使用网络直接搭建成功。
从Dock中运行系统首选项
按住Option按键并且同时点击共享 ,不要松开Option按键
打开设置 共享选项

从共享服务中选择互联网分享选项
配置互联网共享

释放Option按键
选中 创建NAT64网络复选框
打开本地的IPv6 NAT64 网络

选择一个提供互联网链接的网络接口, 例如雷电网卡
选择一个网络接口共享

选择Wi-Fi 复选框.
打开通过 Wi-Fi共享

点击 Wi-Fi 选项, 配置网络名称与密码等信息
访问WI-FI设置选项

设置本地WI-FI

选择互联网共享复选框,开启你的本地网络
开启互联网共享

当提示确认开始分享的时候,点击开始
开始分享

一旦共享处于活动状态,你应该看到一个绿色的状态指示灯,Internet共享标签:开。在无线网络菜单中,您还将看到一个小的,淡淡的箭头朝上,表明互联网共享已启用。你现在有一个IPv6NAT64网络,并可以从其他设备,以测试你的应用程序连接到它。
互联网共享标识

手机连上之后,DNS就是IPv6网络了,运行app测试即可。
参考文章地址:
ASI是否支持:http://stackoverflow.com/questions/37063252/does-asihttprequest-support-ipv6-only
Reachability官方:https://developer.apple.com/library/ios/samplecode/Reachability/Listings/LICENSE_txt.html#//apple_ref/doc/uid/DTS40007324-LICENSE_txt-DontLinkElementID_3
DNS64和NAT64
http://www.ipv6bbs.cn/thread-170-1-1.html