GitLab CIが実行するXCTestのテスト環境を指定する

GitLabのCIからXCTestを使ってテストを行わせるときには、テスト環境を指定する必要があります。

macOSアプリでRunnerが動いているマシンがApple Siliconマシンであれば、ネイティブで実行するのか、Rosetta2でIntelバイナリを実行するのか。

iOSアプリのテストであれば、iOSシミュレータを使うのか、接続中の実機を使うのか。シミュレータはiPhone 13 Proなのか、iPad Airなのかなどです。

この記事では、指定方法について解説します。

GitLabのCI/CDのセットアップ方法については、次の記事を参照してください。

目次

Macアプリの場合

xcodebuild-destinationオプションに渡す、platformarchの値で指定します。

platformmacOSを指定します。

archは次のいずれかを指定します。

arch 説明
x86_64 64bitのIntel Macバイナリ
arm64 Apple Silicon Macネイティブバイナリ
archの値

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版のバイナリをテストするには、archx86_64を指定します。

Intel Macでarm64を指定した場合

Intel Mac上で動かすxcodebuildarm64を指定した場合はエラーとなり、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シミュレータを使用する
platformの値

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

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Akira Hayashiのアバター Akira Hayashi 代表・ソフトウェアエンジニア

アプリ開発が好きなアプリ開発者。このブログは学習メモを記事にしたテックブログです。仕事ではアプリ開発をメインに、技術書の執筆やセミナーの講師などもしています。業務や著書のサイトはこちらです→ アールケー開発

目次