Start Building for Free
CircleCI.comアカデミーブログコミュニティサポート

macOS 上の iOS アプリケーションのテスト

1 month ago2 min read
クラウド
このページの内容

このドキュメントでは、CircleCI を使用して iOS アプリケーションのテストをセットアップおよびカスタマイズする方法について説明します。

概要

CircleCI では、 macOS 仮想マシンでの iOS プロジェクトのビルド、テスト、およびデプロイをサポートしています。 提供されている各イメージには、 Xcode と共に、 Ruby や OpenJDK などの共通のツールセットがインストールされています。 イメージの詳細については、各 Xcode イメージの ソフトウェアマニフェストを参照してください。

iOS サンプルプロジェクト MacOS での入門に関するドキュメントをご覧ください。

サポートされている Xcode のバージョン

設定Xcode のバージョンmacOS のバージョンVM ソフトウェアマニフェスト
14.1.0Xcode 14.1 (14B47b)12.5.1 インストール済みソフトウェア
14.0.1Xcode 14.0.1 (14A400)12.5.1 インストール済みソフトウェア
13.4.1Xcode 13.4 (13F17a)12.3.1 インストール済みソフトウェア
13.3.1Xcode 13.3 (13E500a)12.3.1 インストール済みソフトウェア
13.2.1Xcode 13.2.1 (13C100)11.6.2 インストール済みソフトウェア
13.1.0Xcode 13.1 (13A1030d)11.6.1 インストール済みソフトウェア
13.0.0Xcode 13.0 (13A233)11.5.2 インストール済みソフトウェア
12.5.1Xcode 12.5.1 (12E507)11.4.0 インストール済みソフトウェア
11.7.0Xcode 11.7 (11E801a)10.15.5 インストール済みソフトウェア リリースノート

専有ホストのリソースクラスでサポートされている Xcode のバージョンについては、 専有ホスト内の表を参照してください

はじめよう

CircleCI Web アプリProjects ページで、ビルドしたい macOS プロジェクトのレポジトリを選択します。

CircleCI でのアプリケーションのビルドと署名には fastlane を使用することを強くお勧めします。 fastlaneを使うと、多くの場合が最小限の設定で簡単にビルド、テスト、デプロイプロセスを実行することができます。

Xcode プロジェクトの設定

CircleCI でプロジェクトを設定した後、 fastlane でビルドするスキームが Xcode プロジェクトで「共有」としてマークされていることを確認する必要があります。 Xcode で作成されるほとんどの新規プロジェクトでは、デフォルトのスキームはすでに「共有」としてマークされています。 これを確認する、または既存のスキームを共有するには、次の手順を実行します。

  1. Xcode で、[Product (プロダクト)]> [Scheme (スキーム)] > [Manage Schemes (スキーム管理)] の順に選択します。
  2. 共有したいスキームの [Shared (共有する)] オプションを選択し、[Close (閉じる)] をクリックします。
  3. 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 を実行し、GemfileGemfile.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 を ランダム モードに切り替えて、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 の使用

CircleCI の macOS イメージには、複数のバージョンの Ruby が格納されています。 すべてのイメージにおいて、Ruby がデフォルトで使用されています。 また、イメージがビルドされた時点において最新バージョンの動作が安定している Ruby も含まれています。 CircleCI では、 Ruby-Lang.org のダウンロードページを基に、動作が安定している Ruby のバージョンを判断しています。 各イメージにインストールされている Ruby のバージョンは、 各コンテナのソフトウェア マニフェストに記載されています。

マニフェストで「available to chruby (chruby で使用可)」と説明されている Ruby のバージョンでは、 chruby を使用してステップを実行できます。

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.0"

3.0 をソフトウェアマニフェストファイルから必要なバージョンに変更してください。 3.0.2 のように Ruby のフルバージョンを記載する必要はなく、 メジャーバージョンのみで問題ありません。 そうすることで、設定を壊すことなく Ruby の新しいパッチバージョンの新しいイメージに切り替えることができます。

デフォルトの Ruby (macOS に Apple が搭載した Ruby) に戻すには、versionsystem として定義します。

steps:
  # ...
  - macos/switch-ruby:
      version: "system"

手動での Ruby の切り替え

Ruby の別のバージョンに切り替えるには、ジョブの最初に以下を追加します。

steps:
  # ...
  - run:
      name: Ruby バージョンの設定
      command: sed -i '' 's/^chruby.*/chruby ruby-3.0/g' ~/.bash_profile

3.0 を必要な Ruby バージョンに変更します。3.0.2 のように Ruby のフルバージョンを記載する必要はなく、 メジャーバージョンのみで問題ありません。 そうすることで、設定を壊すことなく Ruby の新しいパッチバージョンの新しいイメージに切り替えることができます。

元の Ruby に戻すには、ジョブの最初に以下を追加します。

steps:
  # ...
  - run:
      name: Ruby バージョンの設定
      command: sed -i '' 's/^chruby.*/chruby system/g' ~/.bash_profile

Ruby バージョンの追加インストール

注: Ruby バージョンを追加インストールするにはかなりの時間を要します。 デフォルトでイメージにインストールされていな特定のバージョンを使用する必要がある場合のみ行うことを推奨します。

プリインストールされていない Ruby のバージョンでジョブを実行するには、必要なバージョンの Ruby をインストールする必要があります。 必要なバージョンの Ruby をインストールするには、 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 がインストールされており、イメージがビルドされた時点で最新の currentlts リリースが常に提供されます。 また、ltsはデフォルトの NodeJS バージョンとして設定されています。

インストールされている 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 以前を使用したイメージ

Xcode 12.5 以前を使用したイメージには、少なくとも1つのバージョンの NodeJS が brew を直接使用してインストールされています。

インストールされている NodeJS のバージョン情報は、 イメージのソフトウェアマニフェストをご覧ください。

キャッシュパッケージと一緒に nvm をインストールすることにより、これらのイメージは NodeJS のインストールの管理に役立つ公式の CircleCI Node Orb とも互換性を持つようになります。

Homebrew の使用

CircleCI には Homebrew がプリインストールされているため、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 の他のドキュメントと同様にオープンソースであり、 GitHub でご利用いただけます。 ご協力いただき、ありがとうございます。

サポートが必要ですか

CircleCI のサポートエンジニアによる、サービスに関する問題、請求およびアカウントについての質問への対応、設定の構築に関する問題解決のサポートを行っています。 サポートチケットを送信して、CircleCI のサポートエンジニアにお問い合わせください。日本語でお問い合わせいただけます。

または、 サポートサイト から、サポート記事やコミュニティフォーラム、トレーニングリソースをご覧いただけます。