1. 程式人生 > >提升iOS稽核通過率之“IPv6相容測試”

提升iOS稽核通過率之“IPv6相容測試”

作者:jingle 騰訊系統測試工程師
商業轉載請聯絡騰訊WeTest授權,非商業轉載請註明出處。

一、背景

在WWDC2015大會上蘋果宣佈iOS9將支援純IPv6的網路服務。2016年6月1號,所有提交到AppStore上的應用都必須支援IPv6,否則將通不過稽核。為了確保我們的app正常提交到蘋果進行稽核,不耽誤專案進度,我們必須在提交到AppStore前對待提交app做IPv6相容測試

二、為什麼要使用IPv6

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

  1. 避免了網路地址轉換(NAT)的需要

  2. 通過使用簡化的頭提供了更快的路由通過網路

  3. 防止網路碎片

  4. 避免廣播鄰居地址解析

但最根本的原因莫過於蘋果稽核的壓力,不得不將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騰訊質量開放平臺上可以線上使用。

iOS預審工具分四步進行預審服務

【一鍵掃描】只需提供ipa包、稽核圖片、稽核視訊、應用描述,即可在4小時內拿到一份完整的檢測報告,定位問題的同時提供解決方案,助您成功通過稽核。

【案例分享】集結iOS稽核失敗常見原因,豐富案例為您提供參考依據。

【專家服務】騰訊專家團隊為您分析各種疑難雜症,提出最優解決方案。

【ASO優化】專業優化AppStore內關鍵字搜尋結果,讓產品離使用者更近一步。希望App/手遊在預審驗收保證下,都可以快快樂樂過審,開開心心賺錢。

掃面下面二維碼關注“騰訊WeTest”公眾號,獲取更多幹貨:
這裡寫圖片描述

相關推薦

提升iOS稽核通過率IPv6相容測試

作者:jingle 騰訊系統測試工程師 商業轉載請聯絡騰訊WeTest授權,非商業轉載請註明出處。 一、背景 在WWDC2015大會上蘋果宣佈iOS9將支援純IPv6的網路服務。2016年6月1號,所有提交到AppStore上的應用都必須支

iOS稽核總被拒?騰訊教你提升iOS稽核通過率

作者:Jamie,騰訊開發工程師,在iOS預審和ASO優化領域從事專項測試相關工作,為騰訊遊戲近100個產品提供專項服務。 商業轉載請聯絡騰訊WeTest獲得授權,非商業轉載請註明出處。WeTest導讀眾所周知,蘋果應用商店是蘋果公司提供給開發者釋出和使用者下

告別被拒,如何提升iOS稽核通過率(上篇)

iOS稽核一直是每款移動產品上架蘋果商店時面對的一座大山,每次提審都像是一次漫長而又悲壯的旅行,經常被蘋果拒之門外,無比煎熬。那麼問題來了,我們有沒有什麼辦法準確把握蘋果稽核準則,從而提升稽核的通過率呢?答案是肯定的,騰訊預審團隊從以下兩方面做了探索,經過近一年

家庭寬頻IPv6網路測試

之前總感覺IPv6距離我們很遠,然而它卻在悄無生息中走進我們的網路世界,之前有朋友說青島的家庭寬頻已經支援IPv6了,喲……那我們這裡呢? 我的家庭寬頻是聯通的,通過命令檢視本機獲取的IP地址,發現如下: 通過命令可以看到電腦的確獲取了IPv6地址。 通過https://test-ipv6.co

錯誤: iOS稽核被拒 ipv6

錯誤 最近蘋果稽核應用時, 被拒了, 才發現不支援IPv6 We discovered one or more bugs in your app when reviewed on iPad running iOS 10.3.2 on Wi-Fi connec

IOS-APP重構路(三) 引入單元測試

IOS-APP重構之路(一) 網路請求框架 IOS-APP重構之路(二) Model的設計 重構的時候我們需要一個模具,讓我們能夠大膽修改的同時確保結果的正確性,這個時候就要引入“單元測試”了。 前言 本文沒有給出任何測試程式碼,或者是在教你如何編寫一份

Jmeterapp效能測試ios,android)

效能測試的相關知識介紹 效能測試: 1、系統容量測試 即求得最大使用者數和最佳使用者數。我們需要對系統做出分析,找出系統的壓力點。 2、系統強度測試 系統在長時間的壓力下效能狀況 3、系統性能瓶頸 需要分析可能對系統造成瓶頸的邏輯業務,然後才能進行效能測試 效能測試常見分

手機APP測試相容測試

1,作業系統版本 國內Andoird系統:一加氫Os,華為 EMUI,魅族 Flyme,小米 miui等 Andoird版本:android 6、android 7、android 8、android 9 iOS版本:iOS8、iOS9、iOS10、iOS11、iOS1

IPv6被拒絕 IPv6-only 被拒絕 ios稽核通過者給大家的建議

這段時間超多朋友的ios app被拒,加了一個被拒的群都快1000人了,在大家幫助下我的app成功過稽核了。下面給大家幾點建議,正常情況2次必過稽核: 1.沒有必要買什麼box為你做ipv6轉換的裝置,因為那玩意和mac筆記本的功能一樣。 2.還是要搭建一個共享網路的模擬i

關於iOS稽核由於ipv6環境下無法連線的問題

根據蘋果公司的要求,6月1號後所有應用需要支援ipv6的環境,根據網上的文件,對客戶端進行了修改(如更新第三方庫,替換若干方法等),按照蘋果公司和網路上的說法,不需要對伺服器進行修改,因此從一開始就將重心放在了客戶端上面,未考慮過伺服器上的問題。 但是經過了至少5次的提交,

ios稽核被拒、提示ipv6、實際是阿里雲OSS的問題

背景: 被ios開發告知因為ipv6問題app稽核被拒,首先是想到把阿里雲的ECS伺服器上配置上ipv6,但感覺不應該是伺服器的問題,國內運營商的網路都不支援ipv6,伺服器支援也沒用啊!於是諮詢了下阿里雲的客服,客服回答說: 大體是說,如果是客戶端app,只要使用的

iOS稽核IPv6被拒

最近提交的新版本因為IPv6問題被拒,稽核組給的截圖,頁面是空的,說明請求之後沒有拿到資料。在這之前,17年元旦之後,我們先後提交了三個版本,均稽核通過,真是一臉懵逼,先自己搭環境測試。 搭建IPv6環境進行測試 兩種方式:用網線、不用網線(熱點方式)

iOS項目蘋果審核被拒

att orm chart nali art rim screen 例如 pps 被拒情況一: 3. 2.2 BUSINESS: OTHER BUSINESS MODEL ISSUES - UNACCEPTABLE Business - 3.2.2 Your app

iOS安全攻防結構體保護使用

fff n) cnblogs 調用 hook hang ras evel amp   Objective-C 代碼很容易被 hook,因此需要對一些重要的業務邏輯進行保護,可以改用結構體的形式,把函數名隱藏在結構體裏,以函數指針成員的形式存儲。這樣編譯後只留了下地址,去掉了

iOS逆向工程App脫殼

工程 脫殼 一、生成dumpdecrypted.dylib動態庫首先我們要生成“砸殼”用的動態庫dumpdecrypted.dylib,我們“砸殼”時主要用到這個動態庫。該動態庫的源碼在github上是開源的(Github地址),要想得到dumpdecrypted.dylib這個動態庫,只需要從git

iOS逆向工程Hopper中的ARM指令

工程一、Hopper中的ARM指令ARM處理器就不多說了,ARM處理器因為低功耗等原因,所以大部分移動設備上用的基本上都是ARM架構的處理器。當然作為移動設備的Android手機,iPhone也是用的ARM架構的處理器。如果你想對iOS系統以及你的應用進一步的了解,那麽對ARM指令集的了解是必不可少的,ARM

iOS安全攻防使用 Frida 繞過越獄設備檢測

檢測 攻防 -i blog 越獄 工具 分析工具 href 設備   Frida 是 一款有趣的手機應用安全分析工具。   文章參考:Bypass Jailbreak Detection with Frida in iOS applications      iOS安全攻防

iOS開發實踐網絡檢測Reachability

bsp eight 友好 4.3 port span 官方 ren ref 在網絡應用開發中。有時須要對用戶設備的網絡狀態進行實時監控。以至於對用戶進行友好提示 或者依據不同網絡狀態處理不一樣的邏輯(如視頻播放app,依據當前的網絡情況自己主動切換視頻清晰度

Android5.0網絡ipv6

ipv6地址 自己的 mod 大量 路由 ng- and 問題 ati 移動設備的大量興起勢必進一步加強ip地址不足的危機。ipv6或許成為一種比較好的選擇方案。 ipv6地址的獲取分為兩種方式:無狀態;有狀態 無狀態:通過接收路由公告(RA)來設置自己的ipv

pythonunittest單元測試

lis sel self. 斷言 python port cnblogs 單元 brush # unittest單元測試 import unittest from class_demo import Car class TestCar(unittest.TestCase