Xcode アプリのビルド、テスト、デプロイ

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

このクイック スタートでは、Azure Pipelines で YAML パイプラインを使用して Xcode プロジェクトをビルドしてデプロイする方法について説明します。

前提条件

  • パイプラインを作成するし、アプリをデプロイするアクセス許可を持つ Azure DevOps 組織とプロジェクト。
  • GitHub リポジトリ内の Xcode 9+ プロジェクトとアプリ。 詳細については、「アプリの Xcode プロジェクトを作成する」を参照してください。

パイプラインを作成する

重要

GitHub の手順中に、GitHub サービス接続の作成を求められる、サインインするために Github にリダイレクトされる、Azure Pipeline をインストールするように求められる場合があります。 画面上の指示に従って、プロセスを完了します。 詳細については、「Github リポジトリへのアクセス」を参照してください。

  1. Azure DevOpsプロジェクトで、このパイプラインが最初のパイプラインである場合は、[パイプライン]>[新規パイプライン] の順に選択するか、[パイプラインを作成] を選択します。
  2. ソース コードの場所として [GitHub] を選択します。
  3. [リポジトリの選択] 画面で、Xcode プロジェクト向けリポジトリを選択します。
  4. [パイプラインを構成] 画面で [Xcode] を選択します。

Azure Pipelines には、Xcode テンプレートに基づくスターター パイプラインが用意されています。 azure-pipelines.yml のコードを確認します。

ビルド環境

Xcode は Azure Pipelines の Microsoft-hosted macOS agents にプレインストールされているため、インフラストラクチャを設定する必要はありません。 プレインストールされている Xcode の正確なバージョンについては、「Microsoft がホストするエージェント ソフトウェア」を参照してください。

azure-pipelines.yml ファイルの上部にある pool ノードによって、適切なエージェント プールが選択されます。

pool:
  vmImage: 'macOS-latest'

Xcode build タスク

Xcode タスクは、macOS で、Xcode ワークスペースをビルド、テストまたはアーカイブし、必要に応じて、アプリをパッケージ化します。 スターター azure-pipelines.yml ファイルの Xcode 手順では、パッケージ化しないで、シミュレーター用の既定のスキームを使用し、iOS プロジェクトをビルドします。 値を変更し、プロジェクトの構成に合わせてパラメーターを追加できます。

steps:
- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: ''
    sdk: 'iphoneos'
    configuration: 'Release'
    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
    xcodeVersion: 'default' # Options: 10, 11, 12, 13, 14, default, specifyPath

パイプラインを保存し、実行します

azure-pipelines.yml でコードの確認が完了したら、[保存して実行] を選択します。

新しい YAML パイプラインの [保存して実行] ボタンを示すスクリーンショット。

必要に応じて、[メッセージをコミット] を編集し、説明を入力します。 次に、[保存して実行] を再度選択し、azure-pipelines.yml ファイルをリポジトリにコミットして、ビルドを開始します。

[ビルド実行] ページには、ビルドの詳細を進行状況が表示されます。 動作中のパイプラインを確認するには、ページ下部にある [Job] を選択します。

これで、リポジトリで YAML パイプライン (azure-pipelines.yml) が稼働し、カスタマイズできるようになりました。

パイプラインをカスタマイズする

パイプラインに変更を加えるには、[パイプライン] パイプラインで、[編集] を選択します。 次のセクションでは、Xcode パイプラインをカスタマイズする一般的な方法について説明します。

signing タスクと provisioning タスクを追加する

Xcode アプリは、デバイス上で実行したり、App Store に公開したりするために、署名してプロビジョニングする必要があります。 署名およびプロビジョニング プロセスでは、P12 署名証明書と 1 つ以上のプロビジョニング プロファイルにアクセスする必要があります。 詳細については、「モバイル アプリに署名」を参照してください。

ビルド中に証明書とプロファイルを Xcode で使用できるようにするには、Install Apple Certificate タスクと Install Apple Provisioning Profile タスクをパイプラインに追加します。

Carthage 環境変数を使用する

プロジェクトでプライベート Carthage リポジトリで Carthage を使用する場合は、リポジトリにアクセスできるトークンの値を持つ named GITHUB_ACCESS_TOKEN という名前の環境変数を使用して認証を設定できます。 Carthage は、この環境変数を自動的に検出して使用します。

シークレット トークンをパイプライン YAML に直接追加しないでください。 代わりに、[パイプライン] ページで [変数] を選択して [変数] ペインを開き、このトークンの変数を作成します。 変数の値を暗号化するには、必ずロック アイコンを有効にします。 詳細については、「シークレット変数を設定する」を参照してください。

次のパイプライン コードでは、GITHUB_ACCESS_TOKEN 環境変数の値に myGitHubAccessToken という名前のシークレット変数を使用します。

- script: carthage update --platform iOS
  env:
    GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)

Azure でホストされるデバイス上でテストする

Visual Studio App Center で iOS デバイスのホストされたラボでアプリをテストするには、App Center Test タスクをパイプラインに追加します。

このタスクには、App Center 無料試用版アカウントが必要です。テスト ラボを引き続き使用するには、30 日後に有料版に移行する必要があります。 このタスクを使用する前に App Center アカウントにサインアップします

次の例では、App Center テスト スイートを実行します。 タスクは、セットアップが必要なサービス接続を使用します。

タスクの完全な構文とリファレンスについては、「App Center Test タスク」を参照してください。 詳細については、「UI テストに Azure DevOps を使用する」を参照してください。

- task: AppCenterTest@1
  inputs:
    appFile: path/myapp.ipa
    artifactsDirectory: '$(Build.ArtifactStagingDirectory)/AppCenterTest'
    frameworkOption: 'appium'
    appiumBuildDirectory: test/upload
    serverEndpoint: 'My App Center service connection'
    appSlug: username/appIdentifier
    devices: 'devicelist'

ビルド レコードを使用して成果物を保持する

iOS AppStore Package (IPA) ファイルをビルド レコードで保管する、またはそれらを後続のパイプラインでテストやデプロイするには、Copy Files タスクと Publish Build Artifacts タスクをパイプラインに追加します。 詳細については、「パイプライン成果物を発行してダウンロードする」を参照してください。

- task: CopyFiles@2
  inputs:
    contents: '**/*.ipa'
    targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

App Center にデプロイする

テスターまたはベータ ユーザーのグループにアプリを配布したり、アプリを Intune または Apple App Store に宣伝したりするには、App Center Distribute タスクを追加します。 このタスクには、無料の App Center アカウントが必要です。

次の例では、アプリをユーザーに配布します。 タスクの完全な構文とリファレンスについては、「App Center Distribute」を参照してください。 詳細については、「App Center を使用した Azure DevOps ビルドのデプロイ」を参照してください。

- task: AppCenterDistribute@3
  inputs:
    serverEndpoint: 'AppCenter'
    appSlug: '$(APP_CENTER_SLUG)'
    appFile: '$(APP_FILE)' # Relative path from the repo root to the IPA file you want to publish
    symbolsOption: 'Apple'
    releaseNotesOption: 'input'
    releaseNotesInput: 'Here are the release notes for this version.'
    destinationType: 'groups'

Apple App Store 拡張機能をインストールして Apple App Store にデプロイする

Apple App Store とのやり取りを自動化するには、Apple App Store 拡張機能をインストールし、パイプラインで次のタスクを使用します。 デフォルトでは、これらのタスクは、構成する必要があるサービス接続を使用して Apple に対して認証されます。

App Storeの 既存の iOS TestFlight ベータ アプリまたは運用アプリのアップデートのリリースを自動化するには、App Store Release タスクを追加します。

Apple 2 要素認証でこのタスクを使用するには、制限があります。 Apple 認証は地域固有であり、fastlane セッション トークンはすぐに期限切れになるため、再作成して再構成する必要があります。

- task: AppStoreRelease@1
  displayName: 'Publish to the App Store TestFlight track'
  inputs:
    serviceEndpoint: 'My Apple App Store service connection' 
    appIdentifier: com.yourorganization.testapplication.etc
    ipaPath: '$(build.artifactstagingdirectory)/**/*.ipa'
    shouldSkipWaitingForProcessing: true
    shouldSkipSubmission: true

以前に送信したアプリの iTunes Connect から App Store へのプロモーションを自動化するには、App Store Promote タスクを追加します。

- task: AppStorePromote@1
  displayName: 'Submit to the App Store for review'
  inputs:
    serviceEndpoint: 'My Apple App Store service connection'
    appIdentifier: com.yourorganization.testapplication.etc
    shouldAutoRelease: false