【iOSアプリ開発】Apple Test FlightにiOSアプリのベータ版をリリースするための全ステップ

こんにちは。今日は、Apple Test FlightにiOSアプリをリリースする手順について整理しておこうと思います。

前提

手順の大きな流れは変わらないと思いますが、今回の手順は、以下構成のアプリをリリースする手順になっております。ビルドの方法が、言語固有です。

  • React Native
  • Expo
  • TypeScript
  • Mac OS

Test Flightとは?

Appleが提供するユーザテスト環境で、公式リリースに必要なAppleへの申請なく、リリース&ユーザ公開が可能となります。公式リリース前に、招待した一部ユーザに限定してアプリを公開してテストしたい場合などに、最適の環境です。

https://developer.apple.com/jp/testflight/

本記事では、このTestFlightを利用してアプリを公開するまでの手順を整理します。

Test Flightへのアプリリリースと利用の流れ

配信者側の操作

Apple Developer Programへ登録

このステップは、申請審査に数日を要するので、即日で完了しません。作業に前もって(1週間程度)登録するようにしてください。

Appleにアプリをリリースする場合(Test Flightも含めて)、Apple Developer Programへの登録が必要です。このプログラムは、有料(年間99ドル)で、個人ユーザからすると少しお高いのですが、これは避けて通ることができません・・・

Programへの登録方法はこちらに整理していますので、まだの方はご参考にしていただければと思います!

Apple Store Connectでアプリを登録

https://appstoreconnect.apple.com/login

ここで、バンドルIDの入力が求められます。

https://developer.apple.com/account/resources/identifiers/bundleId/add/

バンドルID(アプリの一意識別子)は、React Native + Expoプロジェクトの場合、プロジェクトルート配下のApp.jsonで確認できます。

バンドルID、SKUを指定してアプリ登録を完了すると、以下のような画面に飛びます。

これで、Apple側の事前設定は完了です。

iOSアプリのビルド

続けて、アプリのビルドです。Expoの場合は、色々よしなにやってくれて便利です。

iOSアプリのビルドは以下コマンドです。

expo build:ios

すると、色々聞かれますが、expoによしなにやってもらうオプションを選択していきます。

  • Apple Distribution Certification
  • Apple Push Notifications Service Key
  • Apple Provisioning Profile

数分ほど待つとビルドが完了し、アプリファイルをダウンロードできるようになります。

ダウンロードURLは、ビルド完了時に表示されます。(Successfully built standalone app: https://expo.io/artifacts/xxxxのURL)

expo build:ios
┌─────────────────────────────────────────────────────────────────────────┐
│                                                                         │
│   There is a new version of expo-cli available (4.11.0).                │
│   You are currently using expo-cli 4.10.0                               │
│   Install expo-cli globally using the package manager of your choice;   │
│   for example: `npm install -g expo-cli` to get the latest version      │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
✔ Choose the build type you would like: › archive

Checking if there is a build in progress...

Accessing credentials for XXXXXXX in project xxxx
✔ Do you have access to the Apple account that will be used for submitting this app to the App Store? … yes

› Log in to your Apple Developer account to continue
✔ Apple ID: … XXXXX
› Using password for XXXX from your local Keychain
  Learn more: https://docs.expo.io/distribution/security#keychain
✔ Logged in, verify your Apple account to continue
Two-factor Authentication (6 digit code) is enabled for XXXX. Learn more: https://support.apple.com/en-us/HT204915

✔ How do you want to validate your account? … device / sms
✔ Please enter the 6 digit code … xxxxx
✔ Valid code
✔ Logged in and verified
› Team XXXXXX
› Provider XXXXX
✔ Bundle identifier registered com.example.XXXXX
✔ Synced capabilities
✔ Fetched Apple distribution certificates
✔ Will you provide your own Apple Distribution Certificate? › Let Expo handle the process
✔ Created Apple distribution certificate
Successfully assigned Distribution Certificate to XXX (com.example.xxx)
✔ Fetched Apple push keys
✔ Will you provide your own Apple Push Notifications service key? › Let Expo handle the process
✔ Created Apple push key
Successfully assigned Push Key to xxxx(com.example.xxxx)
✔ Fetched Apple provisioning profiles
✔ Will you provide your own Apple Provisioning Profile? › Let Expo handle the process
✔ Created Apple provisioning profile
Successfully created Provisioning Profile

  Experience: xxx, bundle identifier: com.example.xxx
    Provisioning profile (ID: xxx)
    Apple Team ID: xxx,  Apple Team Name: xxx (Individual)


Project Credential Configuration:
  Experience: xxx, bundle identifier: com.example.xxx
    Provisioning profile (ID: Y3S4L645NK)
    Apple Team ID: xxx,  Apple Team Name: xxx (Individual)

  Distribution Certificate - Certificate ID: xxx
    Apple Team ID: xxx,  Apple Team Name: xxx (Individual)
  Push Notifications Key - Key ID: xxx
    Apple Team ID: xxx,  Apple Team Name: xxx (Individual)

› Expo SDK: 42.0.0
› Release channel: default
› Workflow: Managed

Building optimized bundles and generating sourcemaps...
Starting Metro Bundler
Finished building JavaScript bundle in 143231ms.

Bundle                     Size
┌ index.ios.js          4.48 MB
├ index.android.js      4.49 MB
├ index.ios.js.map      13.9 MB
└ index.android.js.map  13.9 MB

💡 JavaScript bundle sizes affect startup time. Learn more: https://expo.fyi/javascript-bundle-sizes

Analyzing assets
Saving assets
No assets changed, skipped.

Processing asset bundle patterns:
- /Project Dir/**/*

Uploading JavaScript bundles
Publish complete

📝  Manifest: https://exp.host/xxxx/index.exp?sdkVersion=42.0.0 Learn more: https://expo.fyi/manifest-url
⚙️   Project page: https://expo.io/xxxx Learn more: https://expo.fyi/project-page

Checking if this build already exists...

Build started, it may take a few minutes to complete.
You can check the queue length at https://expo.io/turtle-status

You can monitor the build at

 https://expo.io/accounts/xxxx/projects/xxx/builds/xxxx

Waiting for build to complete.
You can press Ctrl+C to exit. It won't cancel the build, you'll be able to monitor it at the printed URL.
✔ Build finished.

Successfully built standalone app: https://expo.io/artifacts/xxxx

You can now publish to the App Store with Transporter.app (​https://apps.apple.com/us/app/transporter/xxx​) or eas submit --platform ios. Learn more: https://docs.expo.io/distribution/uploading-apps/

Apple Test Flightにアプリファイルをアップロード

ビルドが完了したら、ビルドしてできたアプリファイルをいよいよTest Flightへ提出していきます。

App Store ConnectのTestFlightタブを開くと、指定するツールを使ってビルドをアップロードしてくれ、と書かれています。

そのツールとは、以下のいずれかのようです。Xcode以外聞いたことない・・・。

https://help.apple.com/app-store-connect/#/devb1c185036

今回は、私はExpoを利用していたので、XCodeでプロジェクトを作成していなかったので、真ん中のaltoolを利用したコマンドラインベースでアップロードする方法としました。

アップロードする前に、以下のコマンドでビルドファイルの検証を行います。

xcrun altool --validate-app -f [path to ipa file] -t ios -u [userid] -p [password]

待つこと数分。問題なかったよ、というメッセージを受け取り検証は無事完了。

No errors validating archive at '/project dir/buildfilename.ipa'.

続けてアップロードです。

xcrun altool --upload-app -f [path to ipa file] -t ios -u [userid] -p [password]

こちらも、待つこと数分、問題なかったよ、というメッセージとともにアップロードが完了した。

No errors uploading '/project dir/buildfilename.ipa'

1点、上記の注意ですが、指定するパスワードは、Apple Store Connectにログインするパスワードではなく、App用パスワードというものを指定する必要があります。

自分もつまづいたので、こちらにまとめました。

テストグループの作成

アップロードが完了したら、次はテストグループの作成です。これは、アプリを公開するグループを指定するために利用します。

テストグループを作成し、そこにテスターを追加していきます。

テスト情報の入力

アップロードが完了し、テスターグループの設定が完了したら、いよいよアプリの公開の最終ステップです。

再びApple Store ConnectのTest Flightタブを確認してみます。

“ビルド”に、”iOS”が追加されていますね。これは先程アプリファイルのアップロードが完了したためですね。が、まだアプリが公開可能な状態になっていません。

公開可能にするには、テスト情報を入力する必要があります。

情報はなんでも良いと思うのですが、全ての項目を埋めないと warningが消えません。

必要情報を埋めたら、再びビルドメニューを確認してみます。お、処理中になった。

この処理中の表示は、数十分ほど待つと、変わります。

と、今度は、”輸出コンプライアンスがありません”という ワーニングが。

この表記については、Qiitaの記事にまとめられていましたのでリンクを貼っておきます。

https://qiita.com/osamu1203/items/35df25d93e9d12b11222

これで、配信準備完了です!

テストグループへのアプリの配信

最後に、先程作成したテストグループに対して、このアプリの配信を開始します。

Test Flight > iOSビルド > 該当のバージョンのビルドを選択すると、グループの追加ボタンがあります。こちらに、先程作成したdemoグループを割り当てます。

すると、このグループ内の各ユーザにテストへの招待が送信されます。

ユーザ側の操作

Test Flight アプリのインストール

事前に必要な準備は、Test FlightアプリをApple Storeからインストールしておくだけです。

招待コードを入力してアプリ利用開始

招待メールからサインインすると、アプリの招待コードが受け取れますので、これをスマホにインストールしたTest flightアプリに入力すると、スマホ上でアプリが利用開始できます。

新バージョンをリリースするときの注意点

テストを続けていく中で、新しいバージョンをリリースすることも多いと思います。最後に、その際の注意点について記載しておきます。

新バージョンをリリースする際、プロジェクトのビルドバージョンをインクリメントすることをお忘れなく・・・!

アプリコードを修正して、上記と同様のステップでビルドを行い、ビルドファイルのアップロードを行おうとすると、以下のエラーが。

*** Error: Unable to validate archive '<build file>'.
*** Error: Redundant Binary Upload. You've already uploaded a build with build number '1' for version number '1.0.0'. Make sure you increment the build string before you upload your app to App Store Connect. Learn more in Xcode Help (http://help.apple.com/xcode/mac/current/#/devba7f53ad4). App Store operation failed. (1091)

どうやら同じビルドバージョンのファイルをアップロードすることはできないようです。プロジェクトのApp.jsonでバージョンを更新して、再ビルドすればうまくいきました!

<App.json>
{
  "expo": {
    "name": "xxx",
    "slug": "xxxx",
    "version": "1.0.1",
・・・

以上、Apple Test Flightを使ってベータ版アプリをリリースするまでの流れ、でした!

最後までご覧いただきありがとうございました。この記事が少しでもお役に立ちましたら、下のいいねボタンをポチっていただけると励みになります!

おしまい

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US

Yuu113
初めまして。Yuu113と申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。