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オプションの値を変更し、複数、指定します。











