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

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

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

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

選擇Wi-Fi 復(fù)選框.
打開通過 Wi-Fi共享

點(diǎn)擊 Wi-Fi 選項(xiàng), 配置網(wǎng)絡(luò)名稱與密碼等信息
訪問WI-FI設(shè)置選項(xiàng)

設(shè)置本地WI-FI

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

當(dāng)提示確認(rèn)開始分享的時(shí)候,點(diǎn)擊開始
開始分享

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

手機(jī)連上之后,DNS就是IPv6網(wǎng)絡(luò)了,運(yùn)行app測(cè)試即可。
參考文章地址:
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