蘋果公司規定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