macOS 実行環境の使用
On This Page
- サポートされている Xcode のバージョン
- 利用可能なリソースクラス
- macOS VM のストレージ
- macOS Executor のイメージ更新サイクル
- ベータ版イメージのサポート
- Apple シリコンのサポート
- Xcode のクロスコンパイル
- ユニバーサルバイナリ
- 不要なアーキテクチャの抽出
- バイナリのクロスコンパイル
- 最適化とベストプラクティス
- シミュレーターの事前起動
- iOS シミュレーターのクラッシュレポートの収集
- fastlane の最適化
- CocoaPods の最適化
- Homebrew の最適化
- サポートされているビルドおよびテストのツール
- 一般的なテストツール
- React Native プロジェクト
- config.yml ファイルの作成
- 複数の Executor タイプ (macOS + Docker) の使用
- 次のステップ
macOS 実行環境は iOS と macOS の開発用に提供されるもので、これを使用して macOS および iOS アプリケーションのテスト、ビルド、デプロイを CircleCI 上で行えます。 macOS Executor は、macOS 環境でジョブを実行し、iPhone、iPad、Apple Watch、および Apple TV の各シミュレーターへのアクセスを提供します。
macOS 実行環境を使用すると、仮想マシン (VM) 上の macOS 環境で ジョブを実行できます。 macOS 実行環境にアクセスするには、macos
Executor を使用して Xcode バージョンを指定します。
jobs:
build:
macos:
xcode: 12.5.1
steps:
# Commands will execute in macOS container
# with Xcode 12.5.1 installed
- run: xcodebuild -version
サポートされている Xcode のバージョン
設定ファイル | Xcode のバージョン | macOS のバージョン | VM ソフトウェアマニフェスト | ベアメタル ソフトウェアマニフェスト | リリースノート |
---|---|---|---|---|---|
14.0.0 | Xcode 14 Beta 3 (14A5270f) | 12.4 | インストール済みソフトウェア | N/A | リリースノート |
14.0.0 | Xcode 14 Beta 2 (14A5229c) | 12.4 | N/A | インストール済みソフトウェア | リリースノート |
13.4.1 | Xcode 13.4 (13F17a) | 12.3.1 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
13.3.1 | Xcode 13.3 (13E500a) | 12.3.1 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
13.2.1 | Xcode 13.2.1 (13C100) | 11.6.2 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
13.1.0 | Xcode 13.1 (13A1030d) | 11.6.1 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
12.1.0 | Xcode 13.0 (13A233) | 11.5.2 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
12.5.1 | Xcode 10.2.1 (10E1001) | 11.4.0 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
12.4.0 | Xcode 12.4 (12D4e) | 10.15.5 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
12.3.0 | Xcode 12.3 (12C33) | 10.15.5 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
12.2.0 | Xcode 12.2 (12B45b) | 10.15.5 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
12.1.1 | Xcode 12.1.1 RC (12A7605b) | 10.15.5 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
12.0.1 | Xcode 12.0.1 (12A7300) | 10.15.5 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
11.7.0 | Xcode 11.7 (11E801a) | 10.15.5 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
11.6.0 | Xcode 11.6 (11E708) | 10.15.5 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
11.5.0 | Xcode 11.5 (11E608c) | 10.15.4 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
11.4.1 | Xcode 11.4.1 (11E503a) | 10.15.4 | インストール済みソフトウェア | インストール済みソフトウェア | リリースノート |
10.3.0 | Xcode 10.3 (10G8) | 10.14.4 | インストール済みソフトウェア | 適用外 (1) | リリースノート |
CircleCI 専有ホストでは (1) Xcode 10.3 はサポートしていません。 See the Dedicated Host for macOS page to learn more about this resource class.
Note: macOS App UI Testing is supported on Xcode 11.7 and higher
利用可能なリソースクラス
クラス | vCPU | RAM |
---|---|---|
medium | 4 @ 2.7 GHz | 8 GB |
macos.x86.medium.gen2 | 4 @ 3.2 GHz | 8 GB |
large | 8 @ 2.7 GHz | 16 GB |
macos.x86.metal.gen1 | 12 @ 3.2 GHz | 32 GB |
注: macos.x86.metal.gen1
リソースは、最低 24 時間の利用が必要です。 このリソースクラスの詳細については、 macOS の専有ホストを参照して下さい。
注: large
リソースクラスは、年間契約のお客様のみご利用いただけます。 年間契約プランの詳細については、 サポートチケットをオープンしお問い合わせください。
jobs:
build:
macos:
xcode: 12.5.1
resource_class: large
macOS VM のストレージ
CircleCI macOS 仮想マシンで使用できるストレージの量は、リソースクラスや使用される Xcode イメージによって異なります。 Xcode イメージのサイズは、プリインストールされているツールによって異なります。 以下の表で、Xcode とリソースクラスの各組み合わせにおける使用可能なストレージ量をご確認ください。 また、表の下に記載されている例外もご確認ください。
Xcode のバージョン | クラス | 最小ストレージ容量 |
---|---|---|
10.3.0 | Medium、Large | 36GB |
10.3.0 | macos.x86.medium.gen2 | 36GB |
11.* | Medium、Large | 23GB |
11.* | macos.x86.medium.gen2 | 23GB |
12.* | Medium、Large | 30GB |
12.* | macos.x86.medium.gen2 | 30GB |
13.* | Medium、Large | 23GB |
13.* | macos.x86.medium.gen2 | 89GB |
注: Xcode 12.0.1、12.4.0、12.5.1 を指定する場合、最小ストレージ容量は 100GB です。
macOS Executor のイメージ更新サイクル
各 macos
ジョブは、特定のバージョンの macOS を実行する新しい仮想マシン上で実行されます。 CircleCI では、Apple から新しい安定版 (またはベータ版) バージョンの Xcode がリリースされるたびに、新しいイメージをビルドしてデプロイします。 ほとんどの場合、ビルドイメージの内容は変更されません。 しかし、例外的に、CircleCI でコンテナの再ビルドが必要になる場合があります。 CircleCI では、安定した実行環境を維持し、config.yml
ファイルに xcode
キーを設定し、お客様が最新の macOS 環境にオプトインできる状態にすることを目標としています。
弊社では、実行環境を可能な限り最新の状態に保つために、各イメージに含まれる macOS のバージョンを定期的に更新しています。 macOS の新しいメジャーバージョンがリリースされると、Xcode の新しいメジャーバージョンが xx.2
リリースに達した時点で更新を行います。 これにより、実行環境の安定性が保たれます。
Xcode のベータ版を含む、新しい macOS コンテナに関する情報は、 Discuss サイトの Announcements (お知らせ) で確認できます。
ベータ版イメージのサポート
CircleCI では、開発者の皆様が Xcode の次の安定版がリリースされる前にアプリのテストを行えるよう、Xcode のベータ版を macOS Executor で可能な限り早期にご利用いただけるよう尽力しています。
ベータ版イメージについては、CircleCI の安定版イメージ (更新されない) とは異なり、GM (安定版) イメージがリリースされ更新が停止するまでは、新規リリースのたびに既存のベータイメージが上書きされます。
現在ベータ版となっているバージョンの Xcode イメージを使用している場合、Apple が新しい Xcode ベータ版をリリースした際に、最小限の通知によりそのイメージに変更が加えられる場合があります。 これには、CircleCI では制御できない Xcode および関連ツールに関する互換性を損なう変更が含まれる場合があります。
ベータ版イメージに関する CircleCI のカスタマーサポートポリシーについては、 サポートセンターに関するこちらの記事をご覧ください。
Apple シリコンのサポート
Apple は、今回のリリースで Intel (x86_64
) と Apple シリコン (arm64
) の両方のツールチェーンを提供しているため、Xcode 12.0.0
以降を使用して Apple シリコンバイナリおよびユニバーサルバイナリをビルドすることが可能です。 Intel のホスト上で Apple シリコンバイナリをクロスコンパイルするとオーバーヘッドが増加し、コンパイル時間が Intel のネイティブコンパイル時間より長くなります。
CircleCI ビルドホストは Intel ベースの Mac であるため、Apple シリコンアプリケーションをネイティブで実行またはテストすることは、現時点では不可能です。 アプリケーションをローカルでテストするには、バイナリを アーティファクト としてエクスポートする必要があります。 または、
CircleCI のランナーを使用して、 Apple シリコン上でネイティブにジョブを実行することもできます。</p>
Xcode のクロスコンパイル
ユニバーサルバイナリ
Xcode は現在、x86_64
と ARM64
の両方の CPU アーキテクチャで実行できるユニバーサルバイナリの作成をサポートしています。この場合、別々の実行可能ファイルをリリースする必要はありません。 この機能は Xcode 12.2 以降でのみサポートされていますが、古い Xcode バージョンを使用して、それぞれの x86_64
と ARM64
実行可能ファイルをコンパイルすることもできます。
不要なアーキテクチャの抽出
デフォルトで、Xcode 12.2 以降ではユニバーサルバイナリが作成され、x86_64
および ARM64
ベースの両方の CPU をサポートする単一の実行可能ファイルにコンパイルされます。 一連の説明を削除する必要がある場合は、lipo
ユーティリティを使って削除できます。
circleci-demo-macos
というユニバーサルバイナリからスタンドアロンの x86_64
バイナリを作成する場合は、次のコマンドを実行します。
lipo -extract x86_64 circleci-demo-macos.app/Contents/MacOS/circleci-demo-macos -output circleci-demo-macos-x86_64
次に、lipo -info circleci-demo-macos-x86_64
を使って抽出したバイナリがサポートするアーキテクチャを確認します。すると、以下が出力されます。
Architectures in the fat file: circleci-demo-macos-x86_64 are: x86_64
バイナリのクロスコンパイル
ユニバーサルバイナリは、Xcode 12.2 以降でのみサポートされていますが、バイナリのビルドに使用されるマシンのアーキテクチャ以外のアーキテクチャ用にバイナリをクロスコンパイルすることが可能です。 xcodebuild の場合、プロセスは比較的簡単です。 ARM64
バイナリをビルドするには、xcodebuild
コマンドの先頭に ARCHS=ARM64 ONLY_ACTIVE_ARCH=NO
を追加して、xcodebuild ARCHS=ARM64 ONLY_ACTIVE_ARCH=NO ...
となるようにします。 x86_64
アーキテクチャの場合、ARCHS
を x86_64
に変更します。
最適化とベストプラクティス
シミュレーターの事前起動
アプリケーションをビルドする前に iOS シミュレーターを起動して、シミュレーターの稼働が遅れないようにします。 こうすることで、ビルド中にシミュレーターのタイムアウトが発生する回数を全般的に減らすことができます。
シミュレーターを事前に起動するには、macOS Orb (バージョン 2.0.0
以降) を設定ファイルに追加します。
orbs:
macos: circleci/macos@2
次に、preboot-simulator
コマンドを以下の例のように呼び出します。
steps:
- macos/preboot-simulator:
version: "15.0"
platform: "iOS"
device: "iPhone 13 Pro Max"
シミュレータがバックグラウンドで起動するまでの最大時間を確保するために、このコマンドをジョブの初期段階に配置することをお勧めします。
Apple Watch シミュレータとペアリングされた iPhone シミュレータが必要な場合は、macOS Orb で preboot-paired-simulator
コマンドを使用します。
steps:
- macos/preboot-paired-simulator:
iphone-device: "iPhone 13"
iphone-version: "15.0"
watch-device: "Apple Watch Series 7 - 45mm"
watch-version: "8.0"
注: シミュレーターの起動には数分、ペアのシミュレーターの起動にはそれ以上かかる場合があります。 この間、xcrun simctl list
などのコマンドの呼び出しは、シミュレータの起動中にハングしたように見える場合があります。
iOS シミュレーターのクラッシュレポートの収集
テストランナーのタイムアウトなどの理由で scan
ステップが失敗する場合、多くの場合テストの実行中にアプリケーションがクラッシュした可能性があります。 このような場合、クラッシュレポートを収集することでクラッシュの正確な原因を診断することができます。 クラッシュレポートをアーティファクトとしてアップロードする方法は以下の通りです。
steps:
# ...
- store_artifacts:
path: ~/Library/Logs/DiagnosticReports
fastlane の最適化
デフォルトで、fastlane scan はテスト出力レポートを html
形式や junit
形式で生成します。 テストに時間がかかり、これらの形式のレポートが必要でない場合は、 fastlane のドキュメントで説明されているように、パラメーター output_type
を変更して、これらの形式を無効化することを検討してください。
CocoaPods の最適化
基本的なセットアップ手順に加えて、Specs リポジトリ全体をクローンするのではなく、CDN を利用できる CocoaPods 1.8 以降のバージョンを使用することをお勧めします。 ポッドをすばやくインストールできるようになり、ビルド時間が短縮されます。 1.8 以降のバージョンでは pod install
ステップのジョブ実行がかなり高速化されるので、1.7 以前のバージョンを使用している場合はアップグレードを検討してください。
実行するには Podfile ファイルの先頭行を次のように記述します。
source 'https://cdn.cocoapods.org/'
1.7 以前のバージョンからアップグレードする場合はさらに、Podfile から以下の行を削除すると共に、CircleCI 設定ファイルの “Fetch CocoaPods Specs” ステップを削除します。
source 'https://github.com/CocoaPods/Specs.git'
CocoaPods を最新の安定版に更新するには、以下のコマンドで Ruby gem を更新します。
sudo gem install cocoapods
さらに、 Pods ディレクトリをソース管理にチェックインすることをお勧めします。 そうすることで、決定論的で再現可能なビルドを実現できます。
注: CocoaPods 1.8 のリリース以降、CocoaPods Spec リポジトリ用に提供した以前の S3 ミラーは整備も更新もされていません。 既存のジョブへの障害を防ぐために利用可能な状態ではありますが、上記の CDN 方式に変更することをお勧めします。
Homebrew の最適化
デフォルトでは、Homebrew はすべての操作の開始時に更新の有無を確認します。 Homebrew のリリースサイクルはかなり頻繁なため、brew
を呼び出すステップはどれも完了するまでに時間がかかります。
ビルドのスピード、または Homebrew の新たな更新によるバグが問題であれば、自動更新を無効にすることができます。 それにより、1 つのジョブにつき最大で平均 2-5 分短縮することができます。
自動更新を無効にするには、ジョブ内で HOMEBREW_NO_AUTO_UPDATE
環境変数を定義します。
version: 2.1
jobs:
build-and-test:
macos:
xcode: 12.5.1
environment:
HOMEBREW_NO_AUTO_UPDATE: 1
steps:
- checkout
- run: brew install wget
サポートされているビルドおよびテストのツール
CircleCI では、macOS Executor を使って iOS のビルドやテストに関するほぼすべての戦略に合わせてビルドをカスタマイズできます。
一般的なテストツール
以下のテストツールは、CircleCI で有効に機能することが確認されています。
React Native プロジェクト
React Native プロジェクトは、CircleCI 上で macos
および docker
Executor タイプを使用してビルドできます。 React Native プロジェクトの設定例は、 React Native のデモアプリケーションを参照してください。
config.yml
ファイルの作成
プロジェクトの CircleCI 設定を .circleci/config.yml
で変更することにより、ビルドを最も柔軟にカスタマイズすることができます。 この方法により、任意の bash コマンドを実行したり、ワークスペースやキャッシュなどの組み込み機能を利用することができます。 .circleci/config.yml
ファイルの構造の詳細については、 CircleCI の設定ドキュメントを参照してください。
複数の Executor タイプ (macOS + Docker) の使用
同じワークフロー内で、複数の Executor タイプを使用することができます。 以下の例では、プッシュされる iOS プロジェクトは macOS 上でビルドされ、その他の iOS ツール ( SwiftLint と Danger) は Docker で実行されます。
version: 2.1
jobs:
build-and-test:
macos:
xcode: 12.5.1
environment:
FL_OUTPUT_DIR: output
steps:
- checkout
- run:
name: Install CocoaPods
command: pod install --verbose
- run:
name: Build and run tests
command: fastlane scan
environment:
SCAN_DEVICE: iPhone 8
SCAN_SCHEME: WebTests
- store_test_results:
path: output/scan
- store_artifacts:
path: output
swiftlint:
docker:
- image: bytesguy/swiftlint:latest
auth:
username: mydockerhub-user
password: $DOCKERHUB_PASSWORD # context / project UI env-var reference
steps:
- checkout
- run: swiftlint lint --reporter junit | tee result.xml
- store_artifacts:
path: result.xml
- store_test_results:
path: result.xml
danger:
docker:
- image: bytesguy/danger:latest
auth:
username: mydockerhub-user
password: $DOCKERHUB_PASSWORD # context / project UI env-var reference
steps:
- checkout
- run: danger
workflows:
build-test-lint:
jobs:
- swiftlint
- danger
- build-and-test
次のステップ
CircleCI でシンプルな macOS アプリケーションを設定することから始めます。
ドキュメントの改善にご協力ください
このガイドは、CircleCI の他のドキュメントと同様にオープンソースであり、 GitHub でご利用いただけます。 ご協力いただき、ありがとうございます。
- このページの編集をご提案ください (最初に「コントリビューションガイド」をご覧ください)。
- ドキュメントの問題点を報告する、またはフィードバックやコメントを送信するには、GitHub で issue を作成してください。
- CircleCI は、ユーザーの皆様の弊社プラットフォームにおけるエクスペリエンスを向上させる方法を常に模索しています。 フィードバックをお寄せいただける場合は、リサーチコミュニティにご参加ください。
サポートが必要ですか
CircleCI のサポートエンジニアによる、サービスに関する問題、請求およびアカウントについての質問への対応、設定の構築に関する問題解決のサポートを行っています。 サポートチケットを送信して、CircleCI のサポートエンジニアにお問い合わせください。日本語でお問い合わせいただけます。
または、 サポートサイト から、サポート記事やコミュニティフォーラム、トレーニングリソースをご覧いただけます。
CircleCI Documentation by CircleCI is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.