以下條件必須滿足:
蘋果開發者賬號和開發者證書
蘋果設備,確保這個設備已經被配置為開發機器。怎麽配置?
簽名過的 .ipa 文件或者源代碼
A Mac with Xcode and the Xcode Command Line Developer Tools,有 xcode和xcode command line 的 蘋果系統。別來問,windows 怎麽測試 iOS 應用。
Provisioning Profile
再次強調真機需要有效的開發分發證書和開發的 Provisioning Profile。
應用需要簽名。Appium 會參試使用 Fruitstrap 安裝應用。
但是使用 xcode 安裝到真機會方便很多。
拓展: 什麽是 Provisioning Profile?
運行
要指定真機運行有兩種方式:
appium 啟動的時候,指定 udid 和 app bundle appium -U <udid> --app <path or bundle>
或者在腳本裏指定兩個 desired capability
desired_capabilities={
'app':'com.xxx.iphone',
'udid':'70643e56c1b0f3c3132c44c87e433a48b5531ee6',
'platformName': 'iOS',
'deviceName': 'iPhone'
})
註意: 如果設備中未安裝 app 可以指定 ipa 地址,如果安裝了,
則指定 bundle ID。
所以對於第壹種情況,代碼可以這樣寫:
self.driver = webdriver.Remote(
command_executor='mand_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities={
'deviceName':'',
'platformName': 'iOS',
'app': app,
'udid': 'cc6bcd6a94aeb8490924dd05c5b318bfbfafb3bb'
})
調試的思路
確保 UDID 的正確,是真機的 UDID。(20+ 字符串)
確保在模擬器上已經能運行無誤了。
直接使用 Instruments 看看是否能在真機上運行。有些情況連 xcode 的 instruments 都不能在真機上調試,那更別談 appium 了
確保運行 appium 用例前, instruments 沒有啟動過。看看有沒有 instruments 的進程。
目前 1.2.2 的坑
目前 appium 1.2.2 上運行 iOS 真機測試,可能會遇到如下的錯誤:
info: [debug] Starting iOS device log capture via deviceconsole
error: iOS log capture failed: spawn ENOENT
info: [debug] Cleaning up appium session
error: Failed to start an Appium session, err was: Error: spawn ENOENT
info: [debug] Error: spawn ENOENT
at errnoException (child_process.js:1000:11)
at Process.ChildProcess._handle.onexit (child_process.js:791:34)
info: [debug] Responding to client with error: {"status":33,"value":{"message":"A new session could not be created. (Original error: spawn ENOENT)","code":"ENOENT","errno":"ENOENT","syscall":"spawn","origValue":"spawn ENOENT"},"sessionId":null}
info: <-- POST /wd/hub/session 500 1780.745 ms - 197
這是因為在 /usr/local/lib/node_modules/appium/build/deviceconsole/ 下面缺失了 deviceconsole。已經有 bug 追蹤了。
解決方法如下:
到該目錄底下 cd /usr/local/lib/node_modules/appium/build/deviceconsole/
打開這個deviceconsole project。 open deviceconsole.xcodeproj
重新 build 壹把。把 build 出來的 deviceconsole,復制到 /usr/local/lib/node_modules/appium/build/deviceconsole/去。
然後重新運行 Appium
註意: deviceName 就算為空也壹定要,代碼寫死的。