IOS App測試的那些坑和解決方案

  • 2019 年 11 月 10 日
  • 筆記

「Iphone app 測試有些坑,如何繞過這些坑呢?

蘋果系統跟 Android 系統完全不一樣,測試起來也有很大的不同。

在測試中常見的,如 xcode 版本問題,打包證書問題,閃退無法重現,不好抓 log, 上架被拒問題等等。本文總結一些常見的坑,可以完美繞過去。

閃退

Android 手機閃退,可以用 adb 很輕易的拿到 log. IOS 系統主要是沙盒,你沒法很輕鬆的就拿到 log. 在 iPhone 手機上的軟體發生閃退或開發 iOS 應用程式時出現的閃退,一般都會自己或系統生成崩潰日誌,那麼我們從哪裡以及怎麼獲取到崩潰日誌呢?

iPhone 手機一台 數據線一條 Xcode 開發工具(可選)

而由於 iOS 系統的沙盒機制,一般我們不能直接訪問它獲取,但可以有下面的幾種方法獲取。

1.在 iTunes Store 上獲取。使用數據線連接手機和電腦,就可以從電腦的以下路徑找到崩潰日誌了。

macOS :~/Library/Logs/CrashReporter/MobileDevice/< DEVICE_NAME > Windows :C:/Users/< USERNAME > /AppDataRoamingApple/ComputerLogsCrashReporterMobileDevice/< DEVICE_NAME >

2.如果你是開發者,可以從 iTunes Connect 上獲取。但前提需手機用戶打開設置->隱私->診斷與用量的開關。

3.可以通過開發工具 Xcode,數據線連接電腦獲取。通過在Xcode->Window->Devices,然後選中真機設備,點擊View Device Logs。等待掃描後獲取對應應用和日期的日誌。

4.如果是應用開發者,自己程式碼中記錄崩潰日誌,並上傳到伺服器,發生崩潰後從網站日誌管理中獲取對應的崩潰日誌即可。

上架流程

Mac 就一個市場,上架需要官方審核。Android 如果不上 Google play,審核相對松很多,快很多。

發布App Store 審核分 6 步進行。

1、申請 iOS 發布證書(p12)

2、申請 iOS 發布描述文件(mobileprovision)

3、打包 ipa

4、上傳 ipa 到 iTunes Connect

5、TestFlight 方式安裝到蘋果手機測試

6、設置 APP 各項資訊提交審核

TestFlight 測試

因為上線風險大,回撤成本高,一般都是灰度發布。

TestFlight 的測試方式分為兩種,一種是內部測試,一種是外部測試。從功能上講,這兩種方式都可以為測試人員在測試階段對你的 App 進行測試。內部測試最多可以邀請 25 個內部成員,而與之相對的外部測試,指的是那些不屬於你的團隊或者公司的測試者,外部測試人員的上限是 10000 人。這裡有一點需要注意的是,在你邀請外部成員參與測試之前,需要先通過蘋果的審核,一般審核會在一天左右。而這一限制在內部成員上就沒有,也就是說只要你把你的 App 上傳到 iTunes Connect 上之後內部成員就可以開始進行內部測試了,無需審核。

準備工作

待測試的 ipa 包(用 Application Loader 上傳)或者是 archive (用 Xcode Upload to App Store)文件(需要上傳到 iTunes Connect );

到 App Store 下載安裝軟體 TestFlight;

將打包好的 ipa 或 xcarchive 文件上傳到 iTunes Connect;

登錄到 iTunes Connect 進入我的 APP,選擇你的 APP;

到 TestFlight 模組下,如果 App Store 有提交過的版本,內部測試員就可以了,我們只需要添加內部測試員用戶即可。

iOS APP 上架被拒重新提交審核

iOS APP 審核比較嚴格,難免會出現被拒絕的情況,需要根據蘋果回饋的問題修改後重新打包上傳審核!

登錄 itunesconnect、https://itunesconnect.apple.com [1]進入被拒絕的 APP 頁面

點擊未解決的 iOS 問題,進入查看原因。

查看具體被拒絕的原因,查看回饋的審核截圖,根據問題修改 app 重新打包上傳。

有些蘋果要求你在下面回復回饋的問題,可以直接寫中文,回復了就不用上傳新的 ipa 重新提交審核了。

看具體的回饋,決定是否直接回復還是重新打包上傳 ipa 提交審核!

證書有效期測試

為什麼要測試這個玩意,因為 app 是跟開發者證書綁定的,證書是有有效期限的,如果過期,就不能正常使用。也許開發沒注意到這點,在上線前,測試要看看這個過期時間是不是很近了。如果是,要告知風險。

Do the following:

unzip -q MyApp.ipa  $ codesign -d --extract-certificates Payload/*.app  $ openssl x509 -inform DER -in codesign0 -noout -nameopt -oneline -dates

自動化測試

WebDriverAgent 是由 Facebook 開發的一套開源框架,用於端對端的 UI 測試,能同時支援模擬器和真機。

因為 Mac 系統的特性,我們很難操作非越獄的手機,幸好有 Facebook 的 WebDriverAgent,通過它可以實現遠程控制手機,一般自動化測試用的多,其它用途需要自己探索。如果想要 python 調用 WebDriverAgent 的功能,那麼還需要 facebook-wda。

安裝 WebDriverAgent

  1. 從 github 上下載 WebDriverAgent,git clone https://github.com/facebook/WebDriverAgent或者直接下載 ZIP 壓縮包
  2. 在 WebDriverAgent 文件路徑下執行./Scripts/bootstrap.sh
  3. Xcode 打開 WebDriverAgent 項目(我使用的是免費證書,免費證書如何弄請百度),修改 TARGETS 下所有對象的 Bundle Id

image

  1. TARGETS 下所有對象的 team 替換成自己開發者帳號,並勾選 Automatically

image

  1. 選擇運行的 Scheme 與設備

image

  1. 執行 Test,可以看到手機上多了一個無圖標的 WebDriverAgent 應用,此 app 會打開,馬上又回到手機桌面,正常

image此時控制台介面可以看到設備的 IP:

image此 IP 地址加上status,例如http://169.254.120.53:8100/status,用瀏覽器打開,會顯示一串 JSON 串,則代表成功,如果加上 inspector,會得到如下介面

image

  1. 假如上述所說的地址打不開,那也正常,我自己的手機就是這樣,需要轉發埠 安裝 usbmuxd brew install usbmuxd把手機上的 8100 埠轉到電腦上iproxy 8100 8100

image以後輸入地址只需要輸入 localhost 即可,例如:http://localhost:8100/inspector

安裝 facebook-wda

  1. 給 python 安裝 facebook-wda 擴展,sudo pip install --pre facebook-wda
  2. 從 github 上下載 facebook-wda,git clone https://github.com/openatx/facebook-wda或者直接下載 ZIP 壓縮包
  3. 在 facebook-wda 文件路徑下執行sudo python setup.py install

如何使用 facebook-wda

前提條件:首先啟動 WebDriverAgent,運行 Test,待顯示出 ip 地址,然後轉換埠。給 iPhone 截屏並保存,更多功能請自己在 GitHub 上查找https://github.com/openatx/facebook-wda[2]

import wdac = wda.Client('http://localhost:8100')c.screenshot('/Users/gcf/Desktop/shotImg/%dscreen.png' % (tag))

遇到的問題

  • 提示Failed to download resource "carthage",需要安裝 carthage brew install carthage

參考資料

[1]

https://itunesconnect.apple.com : https://itunesconnect.apple.com/

[2]

https://github.com/openatx/facebook-wda: https://link.jianshu.com?t=https%3A%2F%2Fgithub.com%2Fopenatx%2Ffacebook-wda