Closed7

ExpoのInternal Distribution機能を用いたReactNative製iOSアプリのテスト環境の構築

志水 亮介 (Ryosuke Shimizu)志水 亮介 (Ryosuke Shimizu)

ExpoのInternal distribution機能を活用したiOSアプリのテスト環境構築

一般的に、iOSアプリのテスト環境を構築する際には、TestFlightを使用することが多いです。TestFlightは審査・提出までできますが、同時に複数の環境を確認することができず、これがチームでの開発時に問題となることがあります。

そこでExpoが提供するInternal distribution機能を使うこととしました。

https://docs.expo.dev/build/internal-distribution/

この機能を使用すれば、複数のテスト用アプリをビルドし、それぞれのURLを通じて共有することが可能になります。これにより、チームメンバーはそれぞれ独立した環境でアプリを検証でき、開発作業の効率を高めることができます。

志水 亮介 (Ryosuke Shimizu)志水 亮介 (Ryosuke Shimizu)

EAS CLI 導入

npm install -g eas-cli

ログイン

$eas login
? Email or username > [expoで作成したアカウント名]
? Passwod > [パスワード]
Logged in

設定ファイルの作成(iOSだけ)

$cd [projectのフォルダ]
$eas build:configure
? Which platforms would you like to configure for EAS Build? › - Use arrow-keys. Return to submit.
    All
❯   iOS
    Android


✔ Generated eas.json

🎉 Your project is ready to build.

- Run eas build when you are ready to create your first build.
- Once the build is completed, run eas submit to upload the app to app stores.
- Learn more about other capabilities of EAS Build: https://docs.expo.dev/build/introduction

環境変数の設定

登録方法の詳細は下記

https://zenn.dev/ryosuketter/articles/01d6d43a01dda7

eas secret:listで登録結果を確認できます。

$ eas secret:list

Secrets for this account and project:
ID          xxxxxxxxxxxxxxxxxxx
Name        MICROCMS_API_KEY
Scope       project
Type        STRING
Updated at  Jul 04 23:22:13

———

ID          xxxxxxxxxxxxxxxxxxx
Name        MICROCMS_SERVICE_DOMAIN
Scope       project
Type        STRING
Updated at  Jul 04 23:22:35
志水 亮介 (Ryosuke Shimizu)志水 亮介 (Ryosuke Shimizu)

Internal distribution

まず、eas.jsonファイルを開き、"internal"という配布オプションを設定します。これにより、EAS Buildが内部配布向けのビルドを作成するように指示します。この設定は、すでに有料のApple Developerアカウントがある場合に使用できます。

eas.json
{
  "build": {
    "preview": {
      "distribution": "internal"
    }
  }
}

アプリ署名の設定

iOSでは、Ad Hoc Provisioning Profileを用いてアプリの実行を特定のデバイスに制限します。これは主にテスト目的で利用されます。Ad Hoc Provisioning Profileを作成するためには、アプリを実行するための特定のデバイスがApple Developer Portalに登録されている必要があります。

eas device:createコマンドは、このデバイスの登録作業を簡単に行うためのものです。このコマンドを使ってデバイスをApple Developer Portalに登録することで、そのデバイス上でアプリを実行することが可能になります。これにより、開発者は自分のアプリが動作するデバイスを明示的に指定できます。

eas device:create

このコマンドで検証したいデバイスをApple Developer Portalに登録します。

これにより、新たに登録されたデバイス上でアプリケーションをビルド・テストすることが可能になります。

ビルドの実行

次に、内部配布用のビルドを作成します。

$ eas build --profile preview --platform ios
// or
$ eas build --profile preview --platform all

というコマンドを使用して行います。

ビルドが完了すると、アプリをダウンロードしてインストールするためのURLが提供されます。このURLをチームメンバーと共有してアプリをテストしてもらいます。

志水 亮介 (Ryosuke Shimizu)志水 亮介 (Ryosuke Shimizu)

問題

整合性を確認できない問題が発生。

「整合性を確認できない」というエラーメッセージが表示された場合の考えられる原因

「デバイスのUDIDが(正しく)登録されていない」のせんで当たってみる

Apple Developer Portalで確認

  • Apple Developerのウェブサイトにログイン
  • 「Program Resources」>「Additional resources」>「Devices」を選択
  • ここでデバイスのUDIDが登録されていないことを確認

EAS CLIのeas device:createコマンドを使用してデバイスを登録した場合、そのデバイスのUDIDは自動的にApple Developer Portalに追加されます。

登録されたデバイスは、次にEAS Buildを行うときに適切なプロビジョニングプロファイルに含まれます。

EAS CLI を使用して Ad Hoc プロビジョニングプロファイルを更新するには、以下の手順を実行します

eas device:list コマンドを使用して、登録されているすべてのデバイスのリストを表示します。ここで、新しく追加したデバイスがリストに表示されていることを確認します。

eas build --profile preview --platform ios コマンドを実行します。

すると、EAS CLI がプロビジョニングプロファイルに不足しているデバイスを検出し、次のようなプロンプトが表示されます

The provisioning profile is missing the following devices:
- [新しいデバイスのUDID] (デバイス名)
✔ Would you like to choose the devices to provision again? … yes

ここで yes を選択します。

次に、プロビジョニングするデバイスを選択するプロンプトが表示されます

✔ Select devices for the ad hoc build: › [新しいデバイスのUDID] (デバイス名)

指定されたIDのプロビジョニングプロファイルがApple Developer Portalに存在しない問題

このエラーは、プロビジョニングプロファイルがApple Developer Portalから削除され、ローカルの設定がまだそのプロビジョニングプロファイルを参照している場合に発生します。

この問題を解決するためには、新しいプロビジョニングプロファイルを作成し、それを使用してビルドを行う必要があります。

具体的な手順

  • eas credentialsを実行
    • 現在のプロジェクトの認証情報を管理します
  • iOSの認証情報を選択
  • "Provisioning profile"を選択
    • 新しいプロビジョニングプロファイルを作成するか既存のものを更新

これにより、新しいプロビジョニングプロファイルが作成され、それがビルドに使用されます。

その後、eas build --profile preview --platform ios コマンドを実行

いろいろ選択して

...
✔ All your registered devices are present in the Provisioning Profile. Would you like to reuse the profile? › Show devices and ask me again

Devices registered in the Provisioning Profile:
- xxxxxxxxxxxxxxx (iPhone XS) ←あった!
- xxxxxxxxxxxxxxx (iPhone)

✔ Would you like to reuse the profile? › Yes

Project Credentials Configuration

Project                   xxxxxxxxxxxxxxx
Bundle Identifier         xxxxxxxxxxxxxxx

Ad Hoc Configuration

Distribution Certificate
Serial Number             
Expiration Date           
Apple Team                
Updated                   

Provisioning Profile
Developer Portal ID       xxxxxxxxxxxxxxx
Status                    active
Expiration                Wed, 26 Jun 2024 00:48:25 GMT+0900
Apple Team                xxxxxxxxxxxxxxx
Provisioned devices       - iPhone XS (UDID: xxxxxxxxxxxxxxx)
                          - iPhone (UDID: xxxxxxxxxxxxxxx)
Updated                   2 minutes ago

これにより、生成されるアプリケーションはこれらの2つのデバイスでのみ実行できるようになります。

必要に応じてデバイスの選択を変更すれば、選択したデバイス用の新しいプロビジョニングプロファイルが作成されます。

志水 亮介 (Ryosuke Shimizu)志水 亮介 (Ryosuke Shimizu)

iOS16から導入された「デベロッパモード」は有効にする

iOS 16以上を使用していて、まだデベロッパーモードを有効にしていない場合は、ビルドを実行する前にそれを有効にする必要があります(企業プロビジョニングを使用している場合は除く)。

https://press.monaca.io/takuya/12662

これで検証環境を作ることができました。

このスクラップは2023/07/18にクローズされました