商業轉載請聯繫騰訊WeTest受權,非商業轉載請註明出處。html
原文連接:http://wetest.qq.com/lab/view/285.htmlios
在WWDC2015大會上蘋果宣佈iOS9將支持純IPv6的網絡服務。2016年6月1號,全部提交到AppStore上的應用都必須支持IPv6,不然將通不過審覈。爲了確保咱們的app正常提交到蘋果進行審覈,不耽誤項目進度,咱們必須在提交到AppStore前對待提交app作IPv6兼容測試。微信
從IPv4到IPv6,IP地址的數量從2的32次方擴展到2的128次方,這個是IPv6碾壓IPv4的地方,足夠地球上的每粒沙子分配一個或者多個IP地址。固然,除了IPv4自己的緣由(地址枯竭)外,下面提到的幾點,也說明了IPv6比IPv4更加高效,例如:網絡
1. 避免了網絡地址轉換(NAT)的須要app
2. 經過使用簡化的頭提供了更快的路由經過網絡框架
3. 防止網絡碎片socket
4. 避免廣播鄰居地址解析ide
但最根本的緣由莫過於蘋果審覈的壓力,不得不將app適配IPv6。工具
1. 保證項目代碼中使用的是更高層次的網絡API,避免使用socket API開發工具
在蘋果官網上,有這麼一張圖,說明了哪些框架支持IPv6,哪些不支持, 以下圖所示:
圖中藍色部分默認支持IPv6,若是項目代碼中使用的是WebKit或者AFNetWorking這些網絡框架,那麼須要改動的代碼不會不少。
2. 走讀代碼中是否使用了IP地址
好比,檢查代碼中是否包含了相似於192.168.0.1的地址,若是有,須要換爲其對應的域名地址。
3. 檢查代碼是否包含只適用於IPv4的API
確保項目代碼中沒有如下API:
inet_addr()
inet_aton()
inet_lnaof()
inet_makeaddr()
inet_netof()
inet_network()
inet_ntoa()
inet_ntoa_r()
bindresvport()
getipv4sourcefilter()
setipv4sourcefilter()
若是有了這些代碼也不要怕,只須要將對應的API換爲IPv6所支持的API便可,下表是IPv4和IPv6的對應關係表:
4. 本地搭建IPv6環境,迴歸app中全部網絡請求的模塊
咱們如今連的網絡,不管是wifi仍是移動、聯通、電信的各類不一樣類型的網絡,都是IPv4的,也就是實際生活中和咱們打交道的全是IPv4環境。但咱們須要測試IPv6在iOS APP中的兼容性,是必然不能在現有的網絡環境下測試的,須要測試人員本身構建測試環境。
值得欣慰的是,蘋果公司在MAC OS X 10.11之後的系統中就埋下了開啓IPv6環境的彩蛋。咱們所要作的就是參照官方文檔,在本地搭建這樣的測試環境。即用MAC機創建一個熱點,而後用iPhone鏈接該熱點,迴歸待測模塊。簡單的示意圖以下所示:
a)須要準備的設備:
系統是OS X 10.11之後版本的MAC機(該MAC機要使用非WIFI方式上網,且支持雙網卡)一臺,iPhone手機一臺。這個地方有些土豪同窗可能會有疑問,個人Mac本本只有無線網卡,沒有有線網孔啊,這時你就須要一個蘋果Thunderbolt千兆以太網轉換器,以下圖所示:
b)開啓NAT64網絡
打開「系統偏好設置」,按住option鍵的同時點擊「共享」,以下圖所示:
以後,在共享頁就能看到「建立NAT64網絡」的可選框了,以下圖所示:
到此,咱們的NAT64網絡就建立完成了,剩下的就是建立熱點了。
c)在MAC機上建立WiFi熱點
MAC上建立WiFi熱點,很簡單,這裏就再也不詳細說明了,看下面這張圖也能知道怎麼建立的:
這裏想說明一點,也是比較關鍵的一點:點擊上圖中的「啓動」button後,有些網絡會出現以下圖所示的共享失敗狀況:
出現這種狀況,說明你當前使用的網絡受到了802.1x協議的限制,沒法共享。只能經過去802.1x保護或者換其餘能夠共享的網絡進行共享。
若是是在公司網絡,能夠尋求IT進行網絡切換,或者找開發他們搭建好的網絡環境進行測試(ps:若是開發沒有IPv6網絡環境,且發版時間又比較緊張的狀況下,能夠和老大申請回家辦公,或者隨便一個咖啡館)。
若是熱點搭建成功,是能夠在mac機右上角的網絡狀態處看到以下圖所示的圖標:
d)iPhone手機鏈接建立好的熱點,鏈接成功後,能夠查下iPhone手機的IP地址。
我這裏看到的是169.254.*.*的IP地址,這類地址屬於保留地址,具體什麼是保留地址,請自行百度。
e)迴歸待測app,確保全部的網絡請求在本地搭建好的IPv6網絡環境下正常的,這裏說的「正常」就是指和在IPv4網絡環境下的表現一致。
經測試,在IPv6網絡環境下,QQ能夠正常使用,微信網絡鏈接失敗(微信最新的SDK已支持IPv6)。
最後,若是感興趣的話,能夠用抓包工具看一下,IPv6的地址長什麼樣子,以前都是在課本中見到過,此次測試也算是頭一次真正看到IPv6的地址啦,以下圖所示:
這裏以地圖SDK爲例,簡單說明具體的測試步驟。地圖SDK,是地圖軟件開發工程師爲特定的軟件包、軟件框架、硬件平臺、操做系統等創建應用軟件時的開發工具的集合,它包括接口API、示例代碼、支持性的技術註解或者其餘的支持文檔,有了這些,第三方開發者能夠很方便的使用這些API開發本身所需的功能,這裏附上騰訊地圖開放平臺地址:http://lbs.qq.com/ios_v1/index.html。
目前和騰訊地圖SDK合做的小夥伴有京東、58同城、攜程、嘀嘀等。
1. 首先須要分析該SDK使用到了哪些庫
地圖SDK中使用的framework以下圖:
針對地圖SDK中使用到的這些庫,逐一確認是否支持IPv6,好比WebKit.framework框架,蘋果官方文檔就明確說明了支持IPv6。
2. 檢查SDK源碼中是否使用到了IP地址
這塊主要是走查全部有網絡請求的模塊,是否將IP地址替換爲了域名,這塊通常是在代碼某個配置文件中進行定義的。好比,下圖所示的server地址:
3. 檢查代碼中是否包含只支持IPv4的API
因爲SDK使用的是WebKit.framework,不存在底層的socket API,這塊沒有風險。
4. 本地搭建測試環境,迴歸SDK網絡相關模塊
這裏,須要保證在IPv6環境下的功能與在IPv4環境下表現一致的,就能夠說明測試經過。
5. 抓包確認
最後,能夠經過抓包看看是否真的走的是所搭建的IPv6的測試環境,固然也能夠親眼目擊下IPv6的IP地址長什麼樣兒。
【騰訊WeTest iOS預審工具】
爲了提升IEG蘋果審覈經過率,騰訊專門成立了蘋果審覈測試團隊,打造出iOS預審工具這款產品。通過1年半的內部運營,騰訊內部應用的iOS審覈經過率從平均35%提高到90%+。
現將騰訊內部產品的過審經驗,以線上工具的形式共享給各位。在WeTest騰訊質量開放平臺上能夠在線使用。點擊連接:http://wetest.qq.com/product/ios 便可當即體驗!
iOS預審工具分四步進行預審服務
【一鍵掃描】只需提供ipa包、審覈圖片、審覈視頻、應用描述,便可在4小時內拿到一份完整的檢測報告,定位問題的同時提供解決方案,助您成功經過審覈。
【案例分享】集結iOS審覈失敗常見緣由,豐富案例爲您提供參考依據。
【專家服務】騰訊專家團隊爲您分析各類疑難雜症,提出最優解決方案。
【ASO優化】專業優化AppStore內關鍵字搜索結果,讓產品離用戶更近一步。但願App/手遊在預審驗收保證下,均可以快快樂樂過審,開開心心賺錢。