GitLabのCIにXCTestを利用した、テストを設定する際、テスト環境を明示的に指定する必要があります。
テスト対象がmacOSアプリで、Runnerを実行しているマシンがApple Silicon Macである場合には、2つの選択肢があります。ネイティブで実行するのか、それともRosetta2経由でIntelバイナリを実行するのかという選択です。
iOSアプリのテストであれば、iOSシミュレータを使うのか、接続中の実機を使うのか。シミュレータはiPhone 13 Proなのか、iPad Airなのかなどです。
この記事では、テスト環境の指定方法について解説します。
GitLabのCI/CDのセットアップ方法については、次の記事を参照してください。
Macアプリの場合
xcodebuild
の-destination
オプションに渡す、platform
とarch
の値で指定します。
platform
はmacOS
を指定します。
arch
は次のいずれかを指定します。
arch | 説明 |
---|---|
x86_64
| 64bitのIntel Macバイナリ |
arm64
| Apple Silicon Macネイティブバイナリ |
GitLab CI/CDの設定ファイルの例
Apple Silicon Mac上で、Intel版、Apple Silicon版の順で両方ともテストするときの設定ファイル.gitlab-ci.yml
は次のようになります。
stages:
- build
- test
- archive
- deploy
build_project:
stage: build
script:
- xcodebuild clean -project CITestMac.xcodeproj -scheme CITestMac | xcpretty
- xcodebuild test -project CITestMac.xcodeproj -scheme CITestMac -destination 'platform=macOS,arch=x86_64' | xcpretty -s
- xcodebuild test -project CITestMac.xcodeproj -scheme CITestMac -destination 'platform=macOS,arch=arm64' | xcpretty -s
tags:
- mac
Rosetta2で実行するには
Apple Silicon MacのRosetta2上で動かして、Intel Mac版のバイナリをテストするには、arch
にx86_64
を指定します。
Intel Macでarm64
を指定した場合
Intel Mac上で動かすxcodebuild
にarm64
を指定した場合はエラーとなり、GitLab CIのジョブが失敗したというエラーが通知されます。
xcodebuild: error: Unable to find a destination matching the provided destination specifier:
{ platform:macOS, arch:arm64 }
Available destinations for the "CITestMac" scheme:
{ platform:macOS, arch:x86_64, id:906947B6-2F2A-5257-9AA3-A0AF24CDA8DE }
Ineligible destinations for the "CITestMac" scheme:
{ platform:macOS, name:Any Mac }
両方のバイナリをテストしたいときは、Apple Silicon Macを用意する必要があります。
iOSアプリの場合
xcodebuild
の-destination
オプションに渡す、platform
,name
, OS
の値で指定します。
platform
で実機かシミュレータかを指定します。通常、CIから実行する場合は、実機よりもシミュレータを使うことが一般的です。
platform | 説明 |
---|---|
iOS
| マシンに接続されているデバイスを使用する |
iOS Simulator
| iOSシミュレータを使用する |
name
は使用するシミュレータやデバイスの名前を指定します。たとえば、iPhone 13
などです。
OS
はシミュレータのOSのバージョンを指定します。iOS 15.5
であれば、15.5
を指定します。
XcodeはOSのバージョンを指定してシミュレータを追加インストールできます。OSのバージョンが異なるシミュレータを複数インストールしておけば、複数のOS上でのテストも行えます。
OSによって挙動が違うとき、シミュレータでも挙動が変わるので、手動では難しい(というよりも手間が大変)複数バージョンでのテストが可能になります。
シミュレータの追加方法
Xcodeにデフォルトで含まれていないシミュレータを追加インストールする方法は次のとおりです。
(1) XcodeのメニューバーのXcode
メニューから、Preferences...
を選択する。
(2) Components
タブを開く。
(3) 追加インストール可能なシミュレータがテーブル表示されるので、インストールしたいシミュレータの、左横に表示された下向きの矢印ボタン(ダウンロードボタン)をクリックする。
GitLab CI/CDの設定ファイルの例
たとえば、iOS 15.5
のiPhone 13のシミュレータを使いたい場合、設定ファイルは次のように記述します。
stages:
- build
- test
- archive
- deploy
build_project:
stage: build
script:
- xcodebuild clean -project CITest.xcodeproj -scheme CITest | xcpretty
- xcodebuild test -project CITest.xcodeproj -scheme CITest -destination 'platform=iOS Simulator,name=iPhone 13,OS=15.5' | xcpretty -s
tags:
- mac
複数のシミュレータでテストしたいとき
script:
には、Runnerに実行させたいスクリプトを記述します。複数のシミュレータでテストしたい場合には、xcodebuild test
文の-destination
オプションの値を変更し、複数、指定します。