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

GitLabのCIにXCTestを利用した、テストを設定する際、テスト環境を明示的に指定する必要があります。

テスト対象がmacOSアプリで、Runnerを実行しているマシンがApple Silicon Macである場合には、2つの選択肢があります。ネイティブで実行するのか、それとも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オプションの値を変更し、複数、指定します。

著書紹介

Authored Books

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

この記事を書いた人

Akira Hayashi (林 晃)のアバター Akira Hayashi (林 晃) Representative(代表), Software Engineer(ソフトウェアエンジニア)

アールケー開発代表。Appleプラットフォーム向けの開発を専門としているソフトウェアエンジニア。ソフトウェアの受託開発、技術書執筆、技術指導・セミナー講師。note, Medium, LinkedIn
-
Representative of RK Kaihatsu. Software Engineer Specializing in Development for the Apple Platform. Specializing in contract software development, technical writing, and serving as a tech workshop lecturer. note, Medium, LinkedIn

目次