iOS アプリケーションを macOS上でテストする
このページの内容
- 概要
- サポートされている Xcode のバージョン
- Apple Silicon の Xcode 対応バージョン
- はじめよう
- Xcode プロジェクトの設定
- fastlane の使用
- Gemfile の追加
- CircleCI 上で使用する場合の fastlane のセットアップ
- CircleCI で fastlane を使用する場合の設定例
- Fastlane Match によるコード署名
- Ruby の使用
- macOS Orb を使った Ruby の切り替え
- 手動での Ruby の切り替え
- Ruby バージョンの追加インストール
- カスタムバージョンの CocoaPods と他の Ruby gem の使用
- NodeJS の使用
- Xcode 13 以降を使用したイメージ
- Xcode 12.5 以前を使用したイメージ
- Homebrew の使用
- デプロイの設定
- トラブルシューティング
- 次のステップ
このドキュメントでは、CircleCI を使用して iOS アプリケーションのテストをセットアップおよびカスタマイズする方法について説明します。
概要
CircleCI では、 macOS 仮想マシン(VM)での iOS プロジェクトのビルド、テスト、およびデプロイをサポートしています。 提供されている各イメージには、 Xcode と共に、 Ruby や OpenJDK などの共通のツールセットがインストールされています。 イメージの詳細については、各 Xcode イメージの ソフトウェアマニフェスト を参照してください。
iOSコード署名プロジェクトと MacOS での入門に関するドキュメントをご覧ください。
サポートされている Xcode のバージョン
Apple Silicon の Xcode 対応バージョン
設定ファイル | Xcode のバージョン | macOS のバージョン | VM ソフトウェアマニフェスト | リリースノート |
---|---|---|---|---|
| Xcode 14.3.1 (14E300b) | 13.2.1 | ||
| Xcode 14.2 (14C18) | 12.6.3 | ||
| Xcode 14.1 (14B47b) | 12.6.1 | ||
| Xcode 14.0.1 (14A400) | 12.6.1 | ||
| Xcode 13.4.1 (13F100) | 12.6.1 |
はじめよう
CircleCI Web アプリ の Projects ページで、ビルドしたい macOS プロジェクトのレポジトリを選択します。
CircleCI でのアプリケーションのビルドと署名には fastlane を使用することを強くお勧めします。 fastlaneを使うと、多くの場合が最小限の設定で簡単にビルド、テスト、デプロイプロセスを実行することができます。
Xcode プロジェクトの設定
CircleCI でプロジェクトを設定した後、 fastlane でビルドするスキームが Xcode プロジェクトで「 "shared"」としてマークされていることを確認する必要があります。 Xcode で作成されるほとんどの新規プロジェクトでは、デフォルトのスキームはすでに「shared」としてマークされています。 これを確認する、または既存のスキームを共有するには、次の手順を実行します。
-
Xcode で、「Product (プロダクト)」 → 「Scheme (スキーム)」→ 「Manage Schemes (スキーム管理)」 の順に選択します。
-
共有したいスキームの [Shared (共有する)] オプションを選択し、[Close (閉じる)] をクリックします。
-
myproject.xcodeproj/xcshareddata/xcschemes
ディレクトリが Git リポジトリに組み込まれていることを確認し、変更をプッシュします
単純なプロジェクトであれば、最小限の設定で実行できます。
fastlane の使用
fastlane は、モバイルアプリのビルドとデプロイのプロセスを自動化するためのツールセットです。 CicleCI上で fastlane を使用すると、ビルド、テスト、デプロイプロセスの設定や自動化が簡単に行えるため、ぜひご使用ください。 また、fastlane の使用によりビルドをローカルでも CircleCI 上でも同等に実行することができます。
Gemfile の追加
ローカルでも依存関係がすべてインストールされた CircleCI 上でも同じバージョンの fastlane が使用できるよう、 Gemfile
をリポジトリに追加することをお勧めします。 以下に Gemfile
の簡単なサンプル例を示します。
# Gemfile
source "https://rubygems.org"
gem 'fastlane'
Gemfile
をローカルで作成したら、bundle install
を実行し、Gemfile
と Gemfile.lock
の両方をリポジトリにチェックインする必要があります。
CircleCI 上で使用する場合の fastlane のセットアップ
Fastlane を CircleCI プロジェクトで使用する場合は、以下の行を Fastfile
の始めに追加することをお勧めします。
# fastlane/Fastfile
...
platform :ios do
before_all do
setup_circle_ci
end
...
end
以下のアクションを実行するには、setup_circle_ci
fastlane アクションを before_all
ブロック内に置く必要があります。
-
Fastlane match で使用する一時的なキーチェーンを新規作成する (詳細については、コード署名のセクションを参照してください)。
-
fastlane match を
readonly
モードに切り替えて、CI が新しいコード署名証明書やプロビジョニング プロファイルを作成しないようにする。 -
ログやテスト結果のパスをセットアップして、それらを収集しやすくする。
CircleCI で fastlane を使用する場合の設定例
以下に、CircleCI で使用できる fastlane の基本設定を示します。
# fastlane/Fastfile
default_platform :ios
platform :ios do
before_all do
setup_circle_ci
end
desc "Runs all the tests"
lane :test do
scan
end
desc "Ad-hoc build"
lane :adhoc do
match(type: "adhoc")
gym(export_method: "ad-hoc")
end
end
上記の設定は、以下の CircleCI の設定ファイルと組み合わせて使用できます。
# .circleci/config.yml
version: 2.1
jobs:
build-and-test:
macos:
xcode: 14.0.1
environment:
FL_OUTPUT_DIR: output
FASTLANE_LANE: test
steps:
- checkout
- run: bundle install
- run:
name: Fastlane
command: bundle exec fastlane $FASTLANE_LANE
- store_artifacts:
path: output
- store_test_results:
path: output/scan
adhoc:
macos:
xcode: 14.0.1
environment:
FL_OUTPUT_DIR: output
FASTLANE_LANE: adhoc
steps:
- checkout
- run: bundle install
- run:
name: Fastlane
command: bundle exec fastlane $FASTLANE_LANE
- store_artifacts:
path: output
workflows:
build-test-adhoc:
jobs:
- build-and-test
- adhoc:
filters:
branches:
only: development
requires:
- build-and-test
環境変数 FL_OUTPUT_DIR
は、fastlane ログと署名済み .ipa
ファイルを保存するアーティファクトディレクトリです。 この環境変数を使用して、ログを自動的に保存し、fastlane からアーティファクトをビルドするためのパスを store_artifacts
ステップで設定します。
Fastlane Match によるコード署名
ローカルでも CircleCI 環境下でもコード署名のプロセスを簡易化し自動化できるため、iOS アプリケーションの署名には Fastlane Match のご使用をお勧めします。
Fastlane match の使用に関する詳細は、 iOS コード署名に関するドキュメントをご覧ください
Ruby の使用
当社のXcodeイメージは、複数のバージョンの Ruby がインストールされた状態で出荷されています。 インストールするバージョンは、 Ruby-Lang.org downloads page によると、イメージを構築した時点でのRubyの最新安定版です。 各イメージにインストールされる Ruby のバージョンは、そのイメージで選択されたデフォルトの Ruby と共に、各コンテナのソフトウェアマニフェストに記載されています( 対応 Xcodeバージョン を参照)。
システムディレクトリに適用されるアクセス許可が制限されるため、Ruby システムを使って Gems をインストールすることは推奨しません。 一般的なルールとして、ジョブには Chruby (すべてのイメージでデフォルトとして設定) が提供する代替の Ruby を使用することを推奨します。
macOS Orb を使った Ruby の切り替え
公式の macOS Orb (バージョン 2.0.0
以降) を使用すると、ジョブ内で Ruby を簡単に切り替えることができます。 どの Xcode イメージを使用していても、適切な切り替えコマンドが自動的に使用されます。
まずは、Orb を設定の一番最初に含めます。
# ...
orbs:
macos: circleci/macos@2
次に、必要なバージョン番号と共に switch-ruby
コマンドを定義します。 たとえば、Ruby 2.6 に切り替える場合は、
steps:
# ...
- macos/switch-ruby:
version: "3.1"
3.1
をソフトウェアマニフェストファイルから必要なバージョンに変更してください。 3.1.3
のように Ruby のフルバージョンを記載する必要はなく、 メジャーバージョンのみで問題ありません。 そうすることで、設定を壊すことなく Ruby の新しいパッチバージョンの新しいイメージに切り替えることができます。
デフォルトの Ruby (macOS に Apple が搭載した Ruby) に戻すには、version
を system
として定義します。
steps:
# ...
- macos/switch-ruby:
version: "system"
手動での Ruby の切り替え
Xcodeのバージョン 14.2
以上の場合、ジョブの冒頭に以下を追加してください。
steps:
# ...
- run:
name: Set Ruby Version
command: rbenv global 3.1.3 && rbenv rehash
3.1.3
は、必要なRubyのバージョンに置き換えてください。
システム Ruby に戻す場合は、Rubyのバージョンに system
を指定してください。
Xcode のバージョン 14.1
以上の場合、ジョブの冒頭に以下を追加してください。
steps:
# ...
- run:
name: Set Ruby Version
command: sed -i '' 's/^chruby.*/chruby ruby-3.1.3/g' ~/.bash_profile
3.1.3
は、必要なRubyのバージョンに置き換えてください。
システム Ruby に戻す場合は、Ruby のバージョンに system
を指定してください。
Ruby バージョンの追加インストール
注: Ruby バージョンを追加インストールするにはかなりの時間を要します。 デフォルトでイメージにインストールされていな特定のバージョンを使用する必要がある場合のみ行うことを推奨します。
プリインストールされていない Ruby のバージョンでジョブを実行するには、必要なバージョンの Ruby をインストールする必要があります。
Xcodeのバージョン 14.2
以上の場合、rbenv installコマンドで実行でき、必要なRubyのバージョンをパスしていることを確認することができます。 新しいバージョンの Ruby が利用できない場合は、ruby-build
パッケージの更新 (brew upgrade ruby-build
) により、最新の Ruby のバージョン定義が利用できるようにする必要があります。
Xcode のバージョン 14.1
以下の場合は、 ruby-installツールを使って必要なバージョンをインストールします。 インストールが完了したら、上記の方法でバージョンを選択することができます。
カスタムバージョンの CocoaPods と他の Ruby gem の使用
ローカルで使用しているバージョンの CocoaPods を CircleCI のビルドでも使用するには、iOS プロジェクトで Gemfile を作成し、そこに CocoaPods バージョンを追加することをお勧めします。
source 'https://rubygems.org'
gem 'cocoapods', '= 1.3.0'
次に、Bundler を使用してインストールします。
steps:
- restore_cache:
key: 1-gems-{{ checksum "Gemfile.lock" }}
- run: bundle check || bundle install --path vendor/bundle --clean
- save_cache:
key: 1-gems-{{ checksum "Gemfile.lock" }}
paths:
- vendor/bundle
また、コマンドにプレフィックス bundle exec
を付加しておくと、確実に使用できるようになります。
# ...
steps:
- run: bundle exec pod install
NodeJS の使用
Xcode イメージには少なくとも一つのバージョンの NodeJS が使用可能な状態で提供されています。
Xcode 13 以降を使用したイメージ
Xcode 13 以降を使用したイメージには、nvm
が管理する NodeJS がインストールされており、イメージがビルドされた時点で最新の current
と lts
リリースが常に提供されます。
インストールされている NodeJS のバージョン情報は、 イメージのソフトウェアマニフェスト を参照するか、ジョブの中で nvm ls
を実行してご確認いただけます。
以下のコマンドで current
バージョンをデフォルトに設定します。
# ...
steps:
- run: nvm alias default node
lts
リリースに戻すには、以下を実行します。
# ...
steps:
- run: nvm alias default --lts
特定の NodeJS をインストールし使用しするには、以下を実行します。
# ...
steps:
- run: nvm install 12.22.3 && nvm alias default 12.22.3
これらのイメージは、 NodeJS のインストールとキャッシュパッケージの管理に役立つ公式の CircleCI Node Orb とも互換性があります。
Xcode 12.5 以前を使用したイメージ
これらのイメージには、少なくとも1つのバージョンのNodeJSが brew
を使って直接インストールされている。
インストールされている NodeJS のバージョン情報は、イメージのソフトウェアマニフェストに記載されています( 対応Xcodeバージョンをご参照ください)。
これらのイメージは、公式 CircleCI Node Orb にも対応しています。これは、キャッシュパッケージと一緒に nvm
をインストールすることで、NodeJS のインストールを管理するのに役立ちます。
Homebrew の使用
Homebrew は CircleCI にプリインストールされているので、brew install
を使うだけで、ビルドに必要な依存関係をほとんど追加することができる。 例えば下記のようにします。
# ...
steps:
- run:
name: Install cowsay
command: brew install cowsay
- run:
name: cowsay hi
command: cowsay Hi!
必要な場合は、sudo
コマンドを使用して、Homebrew 以外のカスタマイズも実行できます。
デプロイの設定
アプリケーションのテストと署名が完了したら、App Store Connect や TestFlight など、任意のサービスへのデプロイを設定できます。 Fastlane の設定例を含むさまざまなサービスへのデプロイ方法の詳細は、 iOS アプリケーション デプロイガイドをご覧ください。
トラブルシューティング
ジョブの実行中にビルドが失敗した場合は、 サポートセンターのナレッジベースで一般的な問題の解決方法を確認してください。
次のステップ
-
CircleCI で fastlane を使用して iOS プロジェクトをビルド、テスト、署名、およびデプロイする完全なサンプルについては、
circleci-demo-ios
の GitHub リポジトリ を参照してください。 -
Fastlane match をプロジェクトに設定する方法は iOS コード署名に関するドキュメントを参照してください。