蘋果公司規(guī)定6.1號之后,所有上線的應用需要支持IPv6,于是公司就讓我來適配以前的一個老項目,這個項目最新版本是一年之前的,具體官方文檔可查看《適配IPv6:官方文檔(一)》建議兩篇文章一起看效果好點。
這里主要從以下幾個方面來寫
一、分析項目中那些東西需要適配
1.網(wǎng)絡請求
由于項目比較老,項目中使用的是ASIHttprequest,雖然ASI現(xiàn)在沒有人維護了,但還是能在項目中使用,和AFNetWorking 相比,它是基于CFNetwork,可以直接適配IPv6,新項目建議直接使用AFN比較好,AFN2.0以上也是支持IPv6的。
2.網(wǎng)絡監(jiān)測這個庫 reachability
reachability在蘋果官方可以看到最新的版本已經(jīng)是5.0了,完全支持IPv6,項目中的還是2.2版本,需要進行適配處理。(IPv6測試的時候發(fā)現(xiàn)需要適配)
由于項目中用到了一個第三方庫,這個庫主要是用來查詢股票的,并且是在他們基礎庫的基礎上為我們公司單獨定制的,最不好處理的是reachability這個類被封裝進去了。而提供這個庫的公司的代碼也是在不斷更新的。(后來和他們技術(shù)聊知道一個月8個小版本)
當時想的思路是直接替換reachability這個類為最新版本,然后重新打包文件。想想總是簡單的,這樣主要出現(xiàn)了兩個問題,一是reachability從2.2到5更新之后,方法什么的有變動,庫里面引用的地方要重新調(diào)用整個include文件(600個頭文件)。二是他們的老版本找不到了,只有最新的版本,需要在他們最新版本基礎上重新加入以前定制的文件。我也是第一次見include 頭文件除了.h還有很多.m文件,也許真是為了方便吧,讓人很難理解。
其實一個很簡單的問題,解決起來一個坑接一個坑,主要是最新sdk和項目中sdk相差太大,又是定制的?;ㄙM時間比較多,用了兩天時間。
3.第三方SDK
項目中使用的第三方有,極光,友盟和Share,極光和友盟直接去官網(wǎng)下載,重新集成即可。
Share在集成的時候由于版本分為2.x和3.x,項目中使用的是2.x,3.x最新是支持IPv6,如果剛開始直接換成3.x,項目中很多代碼都要改。 后來分析的一下,分享主要集成了微信和新浪,我直接更換他們最新的.a文件是否可以?后來資訊了share技術(shù),告知這樣做是可以的,完美。其他項目中第三方也一樣。
4.IP地址
為了適配IPv6,項目中要把IP地址換成域名處理
二、搭建并測試IPv6
這里小小偷懶了下,直接復制的圖,親測可行
使用你的MAC建立本地的IPv6 Wi-Fi 網(wǎng)絡
確認你的MAC連接到了互聯(lián)網(wǎng),并且不是通過Wi-Fi.(插入網(wǎng)線即可),注意不要是有代理才能上網(wǎng)的,在公司需要設置代理才可以上網(wǎng),整了一天沒整好,回家使用網(wǎng)絡直接搭建成功。
從Dock中運行系統(tǒng)首選項
按住Option按鍵并且同時點擊共享 ,不要松開Option按鍵
打開設置 共享選項

從共享服務中選擇互聯(lián)網(wǎng)分享選項
配置互聯(lián)網(wǎng)共享

釋放Option按鍵
選中 創(chuàng)建NAT64網(wǎng)絡復選框
打開本地的IPv6 NAT64 網(wǎng)絡

選擇一個提供互聯(lián)網(wǎng)鏈接的網(wǎng)絡接口, 例如雷電網(wǎng)卡
選擇一個網(wǎng)絡接口共享

選擇Wi-Fi 復選框.
打開通過 Wi-Fi共享

點擊 Wi-Fi 選項, 配置網(wǎng)絡名稱與密碼等信息
訪問WI-FI設置選項

設置本地WI-FI

選擇互聯(lián)網(wǎng)共享復選框,開啟你的本地網(wǎng)絡
開啟互聯(lián)網(wǎng)共享

當提示確認開始分享的時候,點擊開始
開始分享

一旦共享處于活動狀態(tài),你應該看到一個綠色的狀態(tài)指示燈,Internet共享標簽:開。在無線網(wǎng)絡菜單中,您還將看到一個小的,淡淡的箭頭朝上,表明互聯(lián)網(wǎng)共享已啟用。你現(xiàn)在有一個IPv6NAT64網(wǎng)絡,并可以從其他設備,以測試你的應用程序連接到它。
互聯(lián)網(wǎng)共享標識

手機連上之后,DNS就是IPv6網(wǎng)絡了,運行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