前回、『XCTestCaseで作ったテストをxcodebuildで実行する方法』についてまとめましたが、引き続きxcodebuildでシミュレータビルドと.ipaファイルのビルドをやったのでその試験のまとめです。
概要
目的は以下の2点です。
- iOSシミュレータにアプリを転送して実行させる
- .ipaファイルを作る
準備
以下の準備を済ませておくこと。
- 証明書登録諸々
- どのシミュレータを扱うか決めておく
$ instruments -s devices
$ xcrun simctl list
シミュレータ
以下の各記事を参考に実機でのビルドよりも先にシミュレータビルドを行う。
- Xcodeでのビルドを自動化するxcodebuildコマンドとIPAファイルを作成してiTunes Connect(Testflight)に投げる方法
- xcodebuild: Deploy iOS app from Command Line
- simctl: Control iOS Simulators from Command Line
- Xcodeのカスタムビルドアクションで使える環境変数 - matsukaz's blog
- xcodebuildでipa作成 -exportOptionsPlist対応版
$ xcrun simctl
では、シミュレータの画面が表示されないため状況が分からないことから別の方法で対応することに。
まずは、シミュレータに転送できる.appファイルをビルドするところまで作業する。
$ cd ios_app
# .appファイルをビルド
xcodebuild \
-workspace AppName.xcworkspace \
-scheme AppName \
-destination OS=13.2,name="iPhone 11" \
-derivedDataPath ./build \
clean build
# `-derivedDataPath`がない時のビルド先
# /Users/gremito/Library/Developer/Xcode/DerivedData/AppName-xxxxxxxxxxxxxxxxxxxxxxx/Build/Products/Debug-iphonesimulator/AppName.app
上記の場合、ios_app/build/Build/Products/Debug-iphonesimulator/AppName.app
実機端末
.ipaファイルをビルドします。『ipaファイルのエクスポートとdeploygateへのアップロードの自動化しました』という記事を参考にさせていただきました🙏
$ cd ios_app
# アーカイブをビルド
$ xcodebuild \
-workspace AppName.xcworkspace \
-scheme AppName \
-configuration Release archive \
-archivePath ./build/AppName.xcarchive
# アプリをビルド
$ xcodebuild \
-exportArchive \
-archivePath ./build/AppName.xcarchive \
-exportPath ./build \
-exportOptionsPlist ./build/AppName.xcarchive/Info.plist
実機へのアプリ転送とアプリの実行は次のどれかのツールを使って試すことにしてまだ未対応。
申請用ビルド
次の記事が参考になりました。
# アーカイブ時のみ
$ xcodebuild \
-workspace AppName.xcworkspace \
-scheme AppName \
-configuration Release archive \
-archivePath ./build/AppName.xcarchive \
CODE_SIGN_IDENTITY="${SIGN}" \
PROVISIONING_PROFILE_SPECIFIER=${PROVISIONING}
fbsimctlとidb
Facebookが作ったiOSシミュレーターとデバイスを自動化するためのCLIツールとのこと。
もうfbsimctlは使えないのかなぁ、全然ダメで何やっても`fbsimctl: command not found`って言われてしまう😇
— gremito #ものラジ CSM® フリーランス (@grem_ito) November 28, 2019
代わりにidbがあるけどfbsimctlはidbのリポジトリ内にあって作り直した感じなのか?🤔
てか今頃気づいたけどiOS専用だからAndroidで同じことできんしAppium使うかwhttps://t.co/IM2HHJwivW
idb
を使うとシミュレータの起動→アプリ転送→アプリ起動→アプリ終了のコマンドを動作確認しました。
# シミュレータ起動
$ idb boot --udid XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX
# シミュレータ連携
$ idb connect XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX
# アプリ転送
$ idb install ~/ios_app/build/AppName.xcarchive/Products/Applications/AppName.app
# アプリ起動
$ idb launch net.gremito.ios.appname
# アプリ終了
$ idb terminate net.gremito.ios.appname
# アプリ削除
$ idb uninstall net.gremito.ios.appname
Appium
appium
は、デスクトップ版とCLI版があり、CI環境を作る場合は、appium/appiumにあるgetting-started.mdを参考にCLI版を入れる方が良い。
appium
の最初の難関は、$appium doctor
で❌が表示している内容を対応するところでしょう。
と言ってもすんなり終わる場合もあるのでappiumを使う前に問題は把握して対処しておく。
Airtest
サクッと試したかったが、そもそもPythonの管理でガッツリハマる。
MojaveはMissing the OpenSSL lib?の問題でCatalinaはRead-only file systemの問題でってどういうこっちゃねんwww
— gremito #ものラジ CSM® フリーランス (@grem_ito) November 28, 2019
次にopencv-contrib-pythonのインストール時に指定した古いバージョンが取れなかった。
おそらくopencv-pythonも同様だと思い、少し調査して対応していたもののサクッとできなかったため中断した。
$ python3 -m pip install -U airtest
Collecting airtest
Using cached
# 省略
Collecting opencv-contrib-python<=3.4.2.17 (from airtest)
ERROR: Could not find a version that satisfies the requirement opencv-contrib-python<=3.4.2.17 (from airtest) (from versions: 3.4.8.29, 4.1.2.30)
ERROR: No matching distribution found for opencv-contrib-python<=3.4.2.17 (from airtest)
WARNING: You are using pip version 19.2.3, however version 19.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
おまけ
Debug-iphonesimulator
について
シミュレータビルドの際、ios_app/build/Build/Products/Debug-iphonesimulator/AppName.app
に成果物ができています。
コマンドラインでもiPhone 11
と指定しているので気づきにくいですが、iPadの場合はDebug-iphonesimulator
ではなく、Debug-ipadsimulator
と作られパスが変わってしまうのか、という疑問について。
$ xcodebuild -showsdks
iOS SDKs:
iOS 13.2 -sdk iphoneos13.2
iOS Simulator SDKs:
Simulator - iOS 13.2 -sdk iphonesimulator13.2
macOS SDKs:
DriverKit 19.0 -sdk driverkit.macosx19.0
macOS 10.15 -sdk macosx10.15
tvOS SDKs:
tvOS 13.2 -sdk appletvos13.2
tvOS Simulator SDKs:
Simulator - tvOS 13.2 -sdk appletvsimulator13.2
watchOS SDKs:
watchOS 6.1 -sdk watchos6.1
watchOS Simulator SDKs:
Simulator - watchOS 6.1 -sdk watchsimulator6.1
上記のようにiOS Simulator SDKs
は一律iphonesimulator13.2
と括られています。
試しに-destination OS=13.2,name="iPad (7th generation)"
とオプションの値を変えてビルドしてみたところパスは変わらずでDebug-iphonesimulator
でした。