提升iOS審核通過率之“IPv6兼容測(cè)試”

作者:jingle 騰訊系統(tǒng)測(cè)試工程師

商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系騰訊WeTest授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

原文鏈接:http://wetest.qq.com/lab/view/285.html


一、背景

在WWDC2015大會(huì)上蘋果宣布iOS9將支持純IPv6的網(wǎng)絡(luò)服務(wù)。2016年6月1號(hào),所有提交到AppStore上的應(yīng)用都必須支持IPv6,否則將通不過審核。為了確保我們的app正常提交到蘋果進(jìn)行審核,不耽誤項(xiàng)目進(jìn)度,我們必須在提交到AppStore前對(duì)待提交app做IPv6兼容測(cè)試。


二、為什么要使用IPv6

從IPv4到IPv6,IP地址的數(shù)量從2的32次方擴(kuò)展到2的128次方,這個(gè)是IPv6碾壓IPv4的地方,足夠地球上的每粒沙子分配一個(gè)或者多個(gè)IP地址。當(dāng)然,除了IPv4本身的原因(地址枯竭)外,下面提到的幾點(diǎn),也說明了IPv6比IPv4更加高效,例如:


避免了網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)的需要

通過使用簡化的頭提供了更快的路由通過網(wǎng)絡(luò)

防止網(wǎng)絡(luò)碎片

避免廣播鄰居地址解析

但最根本的原因莫過于蘋果審核的壓力,不得不將app適配IPv6。


三、測(cè)試應(yīng)該關(guān)注的點(diǎn)

1. 保證項(xiàng)目代碼中使用的是更高層次的網(wǎng)絡(luò)API,避免使用socket API

在蘋果官網(wǎng)上,有這么一張圖,說明了哪些框架支持IPv6,哪些不支持, 如下圖所示:


圖中藍(lán)色部分默認(rèn)支持IPv6,如果項(xiàng)目代碼中使用的是WebKit或者AFNetWorking這些網(wǎng)絡(luò)框架,那么需要改動(dòng)的代碼不會(huì)很多。

2. 走讀代碼中是否使用了IP地址

比如,檢查代碼中是否包含了類似于192.168.0.1的地址,如果有,需要換為其對(duì)應(yīng)的域名地址。

3. 檢查代碼是否包含只適用于IPv4的API

確保項(xiàng)目代碼中沒有以下API:

inet_addr()

inet_aton()

inet_lnaof()

inet_makeaddr()

inet_netof()

inet_network()

inet_ntoa()

inet_ntoa_r()

bindresvport()

getipv4sourcefilter()

setipv4sourcefilter()

如果有了這些代碼也不要怕,只需要將對(duì)應(yīng)的API換為IPv6所支持的API即可,下表是IPv4和IPv6的對(duì)應(yīng)關(guān)系表:



4. 本地搭建IPv6環(huán)境,回歸app中所有網(wǎng)絡(luò)請(qǐng)求的模塊

我們現(xiàn)在連的網(wǎng)絡(luò),無論是wifi還是移動(dòng)、聯(lián)通、電信的各種不同類型的網(wǎng)絡(luò),都是IPv4的,也就是實(shí)際生活中和我們打交道的全是IPv4環(huán)境。但我們需要測(cè)試IPv6在iOS APP中的兼容性,是必然不能在現(xiàn)有的網(wǎng)絡(luò)環(huán)境下測(cè)試的,需要測(cè)試人員自己構(gòu)建測(cè)試環(huán)境。

值得欣慰的是,蘋果公司在MAC OS X 10.11以后的系統(tǒng)中就埋下了開啟IPv6環(huán)境的彩蛋。我們所要做的就是參照官方文檔,在本地搭建這樣的測(cè)試環(huán)境。即用MAC機(jī)建立一個(gè)熱點(diǎn),然后用iPhone連接該熱點(diǎn),回歸待測(cè)模塊。簡單的示意圖如下所示:


a)需要準(zhǔn)備的設(shè)備:

系統(tǒng)是OS X 10.11以后版本的MAC機(jī)(該MAC機(jī)要使用非WIFI方式上網(wǎng),且支持雙網(wǎng)卡)一臺(tái),iPhone手機(jī)一臺(tái)。這個(gè)地方有些土豪同學(xué)可能會(huì)有疑問,我的Mac本本只有無線網(wǎng)卡,沒有有線網(wǎng)孔啊,這時(shí)你就需要一個(gè)蘋果Thunderbolt千兆以太網(wǎng)轉(zhuǎn)換器,如下圖所示:

b)開啟NAT64網(wǎng)絡(luò)

打開“系統(tǒng)偏好設(shè)置”,按住option鍵的同時(shí)點(diǎn)擊“共享”,如下圖所示:

之后,在共享頁就能看到“創(chuàng)建NAT64網(wǎng)絡(luò)”的可選框了,如下圖所示:

到此,我們的NAT64網(wǎng)絡(luò)就創(chuàng)建完成了,剩下的就是創(chuàng)建熱點(diǎn)了。

c)在MAC機(jī)上創(chuàng)建WiFi熱點(diǎn)

MAC上創(chuàng)建WiFi熱點(diǎn),很簡單,這里就不再詳細(xì)說明了,看下面這張圖也能知道怎么創(chuàng)建的:

這里想說明一點(diǎn),也是比較關(guān)鍵的一點(diǎn):點(diǎn)擊上圖中的“啟動(dòng)”button后,有些網(wǎng)絡(luò)會(huì)出現(xiàn)如下圖所示的共享失敗情況:

出現(xiàn)這種情況,說明你當(dāng)前使用的網(wǎng)絡(luò)受到了802.1x協(xié)議的限制,無法共享。只能通過去802.1x保護(hù)或者換其他可以共享的網(wǎng)絡(luò)進(jìn)行共享。

如果是在公司網(wǎng)絡(luò),可以尋求IT進(jìn)行網(wǎng)絡(luò)切換,或者找開發(fā)他們搭建好的網(wǎng)絡(luò)環(huán)境進(jìn)行測(cè)試(ps:如果開發(fā)沒有IPv6網(wǎng)絡(luò)環(huán)境,且發(fā)版時(shí)間又比較緊張的情況下,可以和老大申請(qǐng)回家辦公,或者隨便一個(gè)咖啡館)。

如果熱點(diǎn)搭建成功,是可以在mac機(jī)右上角的網(wǎng)絡(luò)狀態(tài)處看到如下圖所示的圖標(biāo):

d)iPhone手機(jī)連接創(chuàng)建好的熱點(diǎn),連接成功后,可以查下iPhone手機(jī)的IP地址。

我這里看到的是169.254..的IP地址,這類地址屬于保留地址,具體什么是保留地址,請(qǐng)自行百度。

e)回歸待測(cè)app,確保所有的網(wǎng)絡(luò)請(qǐng)求在本地搭建好的IPv6網(wǎng)絡(luò)環(huán)境下正常的,這里說的“正?!本褪侵负驮贗Pv4網(wǎng)絡(luò)環(huán)境下的表現(xiàn)一致。

經(jīng)測(cè)試,在IPv6網(wǎng)絡(luò)環(huán)境下,QQ可以正常使用,微信網(wǎng)絡(luò)連接失?。ㄎ⑿抛钚碌腟DK已支持IPv6)。

最后,如果感興趣的話,可以用抓包工具看一下,IPv6的地址長什么樣子,之前都是在課本中見到過,這次測(cè)試也算是頭一次真正看到IPv6的地址啦,如下圖所示:

四、項(xiàng)目實(shí)戰(zhàn)

這里以地圖SDK為例,簡單說明具體的測(cè)試步驟。地圖SDK,是地圖軟件開發(fā)工程師為特定的軟件包、軟件框架、硬件平臺(tái)、操作系統(tǒng)等建立應(yīng)用軟件時(shí)的開發(fā)工具的集合,它包括接口API、示例代碼、支持性的技術(shù)注解或者其他的支持文檔,有了這些,第三方開發(fā)者可以很方便的使用這些API開發(fā)自己所需的功能,這里附上騰訊地圖開放平臺(tái)地址:http://lbs.qq.com/ios_v1/index.html。

目前和騰訊地圖SDK合作的小伙伴有京東、58同城、攜程、嘀嘀等。

1. 首先需要分析該SDK使用到了哪些庫

地圖SDK中使用的framework如下圖:

針對(duì)地圖SDK中使用到的這些庫,逐一確認(rèn)是否支持IPv6,比如WebKit.framework框架,蘋果官方文檔就明確說明了支持IPv6。

2. 檢查SDK源碼中是否使用到了IP地址

這塊主要是走查所有有網(wǎng)絡(luò)請(qǐng)求的模塊,是否將IP地址替換為了域名,這塊一般是在代碼某個(gè)配置文件中進(jìn)行定義的。比如,下圖所示的server地址:

3. 檢查代碼中是否包含只支持IPv4的API

由于SDK使用的是WebKit.framework,不存在底層的socket API,這塊沒有風(fēng)險(xiǎn)。

4. 本地搭建測(cè)試環(huán)境,回歸SDK網(wǎng)絡(luò)相關(guān)模塊

這里,需要保證在IPv6環(huán)境下的功能與在IPv4環(huán)境下表現(xiàn)一致的,就可以說明測(cè)試通過。

5. 抓包確認(rèn)

最后,可以通過抓包看看是否真的走的是所搭建的IPv6的測(cè)試環(huán)境,當(dāng)然也可以親眼目睹下IPv6的IP地址長什么樣兒。


【騰訊WeTest iOS預(yù)審工具】

為了提高IEG蘋果審核通過率,騰訊專門成立了蘋果審核測(cè)試團(tuán)隊(duì),打造出iOS預(yù)審工具這款產(chǎn)品。經(jīng)過1年半的內(nèi)部運(yùn)營,騰訊內(nèi)部應(yīng)用的iOS審核通過率從平均35%提升到90%+。

現(xiàn)將騰訊內(nèi)部產(chǎn)品的過審經(jīng)驗(yàn),以線上工具的形式共享給各位。在WeTest騰訊質(zhì)量開放平臺(tái)上可以在線使用。

點(diǎn)擊鏈接:http://wetest.qq.com/product/ios即可立即體驗(yàn)!

iOS預(yù)審工具分四步進(jìn)行預(yù)審服務(wù)

【一鍵掃描】只需提供ipa包、審核圖片、審核視頻、應(yīng)用描述,即可在4小時(shí)內(nèi)拿到一份完整的檢測(cè)報(bào)告,定位問題的同時(shí)提供解決方案,助您成功通過審核。

【案例分享】集結(jié)iOS審核失敗常見原因,豐富案例為您提供參考依據(jù)。

【專家服務(wù)】騰訊專家團(tuán)隊(duì)為您分析各種疑難雜癥,提出最優(yōu)解決方案。

【ASO優(yōu)化】專業(yè)優(yōu)化AppStore內(nèi)關(guān)鍵字搜索結(jié)果,讓產(chǎn)品離用戶更近一步。希望App/手游在預(yù)審驗(yàn)收保證下,都可以快快樂樂過審,開開心心賺錢。

關(guān)注“騰訊WeTest”公眾號(hào),獲取更多干貨

開啟贊賞

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 研究IPv6 socket編程原因: Supporting IPv6 in iOS 9 WWDC2015蘋果宣布在...
    li大鵬閱讀 7,643評(píng)論 7 15
  • 原文連接 為了加深印象與理解,自己copy了一份,順便按照自己的理解稍作修改。參考資料 自從5月初Apple明文規(guī)...
    不會(huì)游泳De魚閱讀 4,843評(píng)論 2 12
  • 隨著時(shí)間的推移,人生在職場一般有三個(gè)階段,需要三個(gè)不同的著力點(diǎn)。以下的時(shí)間范圍僅是參考,因?yàn)橛行┤丝梢栽诤芏虝r(shí)間、...
    丘一森閱讀 1,588評(píng)論 0 0
  • 每一次的慢走長談,都是我們心靈深處最柔軟的地方,是的,這時(shí)候才最顯示語言如此蒼白,所有的安慰如此無力,但我們都知道...
    演繹主角閱讀 378評(píng)論 0 0
  • 圓和方看著簡單,畫起來不容易。尤其是畫正方體,注意透視關(guān)系的時(shí)候,最遠(yuǎn)處的那個(gè)點(diǎn)老是找不準(zhǔn)??粗睦锊粚?duì),就是不知...
    圍裙媽閱讀 366評(píng)論 2 3

友情鏈接更多精彩內(nèi)容