TestFlight — iOS、iPadOS、watchOS、tvOSアプリケーションのベータテストのためのApple公式サービスです。TestFlightを通じて、開発者は最大10,000人の外部テスターにプレリリースビルドを配布し、App Storeに公開することなくフィードバックやクラッシュレポートを収集できます。Apple Developer Documentation, 2025によると、App Storeのアプリの80%以上がリリース準備段階でTestFlightを使用しています。
主なポイント
TestFlight は、App Storeに公開せずにテスト用のiOSアプリケーションを配布する正当かつ唯一の公式方法です。このサービスは、2014年にAppleが同名の企業を買収した後に開始されました。TestFlight以前は、開発者はシーズンあたり100デバイスの制限があるAd Hoc配布を使用していましたが、TestFlightはこの制限を撤廃し、プロセスを数クリックに簡素化しました。
iOSには厳格なセキュリティポリシーがあります。アプリケーションはApp Storeを通じて、または特別な証明書を使用してのみデバイスにインストールできます。TestFlightは、開発者とテスターの間のプロキシとして機能することでベータテストの問題を解決します。Appleがビルドを基本的な要件に対してチェックし、その後テスターはApp StoreからTestFlightアプリを通じてアプリケーションを受け取るため、署名されていないファイルを信頼する必要がありません。
App Store外でiOSアプリケーションを配布するには3つの方法があります。Ad Hoc(100デバイスの制限、各デバイスのUDIDが必要)、Enterprise(無制限の社内配布、$299/年のApple Enterprise証明書が必要)、TestFlight(最大10,000人のテスター、無料、UDID収集不要)。TestFlightはベータテストに最適な選択肢で、Ad Hocはデバイス固有のテストに、Enterpriseは企業アプリケーションに適しています。
TestFlight を通じてビルドを公開するプロセスは5つのステップで構成されます。Xcodeでのビルド、Archive Organizerを介したApp Store Connectへのアップロード、Appleの処理、テスターの招待、TestFlightアプリを介したアプリのインストール。各ステップはプロジェクトの複雑さに応じて数分から1時間かかります。
ビルドは配布証明書と有効なプロビジョニングプロファイルで作成する必要があります。Appleは証明書の有効性、バンドル識別子の一致、プライベートAPIの不在、正しいアイコン(1024×1024)、App Storeアイコンの存在をチェックします。ビルドがチェックに合格しない場合、TestFlightは問題の説明とともにエラーを表示します。
アップロード後、ビルドはAppleの自動検証(バイナリコードの静的解析、デジタル署名の検証、プライベートAPIの使用とマルウェアのスキャン)を受けます。処理には最初のビルドで15分から2時間かかり、以降のビルドでは通常150分かかります。処理状況はApp Store ConnectのActivityに表示されます。
// Swift AppDelegateでのTestFlight設定
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
// 確認: TestFlightを介してアプリがインストールされているか
if Bundle.main.appStoreReceiptURL?.lastPathComponent
== "sandboxReceipt" {
print("TestFlight経由のベータ版")
}
return true
}
}
TestFlight はテスターを内部テスター(Internal Testers)と外部テスター(External Testers)の2つのグループに分けます。違いは参加者数、ビルドへのアクセス、Appleによるレビューの必要性です。適切なグループを選ぶことでテストプロセスが加速し、App Storeポリシーに準拠します。
Apple Developer Programチームの最大100人の参加者。内部テスターを招待するには、App Store ConnectでApple IDを追加するだけで、すぐにすべてのビルドにアクセスできるようになります。Appleのレビューは不要です。毎日のスモークテストと早期段階の機能検証に最適です。
開発チームに所属しない最大10,000人の参加者。外部テスター向けの最初のビルドは基本的なAppleレビュー(通常12日)を受けます。コア機能に影響を与えない変更を含む後続のビルドは、再レビューなしで通過できます。外部テスターはメールまたは公開リンクを通じて招待されます。
| パラメータ | 内部テスター | 外部テスター |
|---|---|---|
| 最大数 | 100 | 10,000 |
| Appleレビュー | 不要 | 最初のビルド — 必須 |
| 招待方法 | チームのApple ID | メール / 公開リンク |
| ビルドの有効期限 | 90日 | 90日 |
| ビルドアクセス | すべて一度に | アクティブなグループのみ |
TestFlight へのビルドのアップロードは、Xcode、Application Loader、またはxcrunを使用したコマンドラインで実行できます。最も一般的な方法は、プロジェクトアーカイブを作成した後のXcode Archive Organizerを使用する方法です。代替方法はCI/CDパイプライン向けのFastlaneによる自動化です。
アーカイブを作成し(Product → Archive)、Organizerを開き、アーカイブを選択してDistribute Appをクリックします。配布方法としてTestFlightを選択し、証明書とプロビジョニングプロファイルを指定します。XcodeがビルドをApp Store Connectにアップロードし、処理後に表示されます。最初のアップロードにかかる時間は1020分です。
Fastlane はTestFlightへのビルドアップロードを自動化するための最も人気のあるツールです。fastlane pilotコマンドは、Xcodeを開かずにビルドをアップロードしテスターを管理します。FastlaneをCI/CDサーバーと統合すると、すべてのテストに合格した後、自動的にTestFlightにビルドを公開できます。
# Fastfile — TestFlightへのビルドアップロード
default_platform(:ios)
lane :beta do
# matchによる証明書の取得
match(type: "appstore")
# ビルドと署名
build_app(
scheme: "MyApp",
export_method: "app-store",
workspace: "MyApp.xcworkspace"
)
# TestFlightにアップロード
pilot(
skip_waiting_for_build: true,
distribute_external: false,
notify_external_testers: false
)
end
Fastlane pilot は自動的にIPAをApp Store Connectにアップロードし、処理を待機し(skip_waiting_for_build = falseの場合)、選択したテスターグループにビルドを割り当てます。distribute_external: trueコマンドは、処理後すぐにビルドを外部テスターに送信します。
Fastlaneなしでも、xcrunを使用できます。xcrun altool --upload-app --file path/to/app.ipa --username YOUR_APPLE_ID --password @keychain:AC_PASSWORD。altool はCI環境向けにAppleがサポートしており、グラフィカルインターフェースは必要ありません。パスワードはキーチェーンまたはアプリ固有のパスワードを介して渡されます。プレーンテキストのパスワードは使用しないでください。
TestFlight は、組み込みのフィードバックフォーム、自動クラッシュログ収集、使用状況メトリクス、スクリーンショットなど、いくつかのフィードバックメカニズムを提供します。チームは、ベータテスト用のサードパーティSDKを統合することなく、App Store Connectですべてのデータを取得できます。
テスターはTestFlightアプリを開き、ビルドを選択してSend Feedbackをクリックします。フォームではテキストフィードバックの送信、スクリーンショットの添付、重要度の指定が可能です。すべてのフィードバックはApp Store ConnectのTestFlight → Feedbackに収集されます。開発者がフィードバックに返信すると、テスターはTestFlightアプリで通知を受け取ります。
アプリがクラッシュすると、TestFlightは自動的にクラッシュレポート(コールスタック、OSバージョン、デバイスモデル、クラッシュ時刻)を収集します。クラッシュログはXcode Organizer(Crashes)とApp Store Connect(TestFlight → Crashes)で利用できます。シンボル化されたクラッシュログを取得するには、ビルドと一緒に、またはXcodeを介して個別にdSYMファイルをアップロードする必要があります。
TestFlightはインストール数、アクティブテスター数、セッション数、クラッシュ数などのメトリクスを表示します。分析は毎日更新され、テスターのエンゲージメントを評価するのに役立ちます。1週間テスターがアプリを開かなかった場合、グループとのコミュニケーションやビルドの品質を再検討する必要があります。
TestFlight はApp Store公開プロセスの不可欠な部分です。TestFlightでベータテストを通過した同じビルドは、再ビルドすることなくAppleのレビューに提出できます — App Store Connectでボタンをクリックするだけです。これにより、本番ビルドがテスト済みビルドと異なるリスクが排除されます。
App Store Connectで、テストを通過したビルドを選択しSubmit for Reviewをクリックします。AppleはTestFlightと同じビルドを使用するため、再アップロードは必要ありません。レビュー時間は通常13日です。ビルドが却下された場合は、問題を修正し、新しいビルドをTestFlightにアップロードしてプロセスを繰り返します。
レビューに提出する前に、TestFlightでの最終テストラウンド後2448時間待つことをお勧めします。この時間により、テスターは自動テストをすり抜ける可能性のある重要なバグを発見できます。TestFlightのリリース候補(RC)ビルドは、成熟したiOSチームの標準的なプラクティスです。
TestFlightビルドは、App Storeでリリース版が公開されると、新しいインストールが自動的にできなくなります。すでにベータ版をインストールしたテスターは、リリース公開後30日間は引き続き使用できますが、その後アプリは開かなくなります。テスターがApp Store版にアップデートするようにしてください。
よくある質問
TestFlight はApple Developer Program($99/年)のメンバーには完全に無料です。ビルド数やテスター数に関係なく、サービスの利用に追加料金は発生しません。Apple開発者サブスクリプションのみを支払います — TestFlightはデフォルトで含まれています。
いいえ、TestFlightはAppleエコシステム限定のサービスです。Androidには同様のツール — Google Play ConsoleのInternal TestingおよびOpen Testingトラックがあります。Androidでのベータ版公開にはFirebase App DistributionやDeployGateも使用されています。
アップロード後の最初のビルドの処理には15分から2時間かかります。以降のビルドはより高速に処理され — 通常150分です。処理時間はAppleサーバーの負荷に依存します。ステータスはApp Store ConnectのActivityセクションで追跡できます。
各ビルドはアップロードから90日間テストに利用できます。ビルド数に制限はありませんが、同時にアクティブにできるビルドは最大30個です。古いビルドは期限切れまたは上限に達すると自動的に削除されます。
TestFlightでのテスト参加にはApple IDが必要です。外部テスターはメールリンクで招待されます — 初めてリンクを開くと、Apple IDがない場合に作成を促す画面が表示されます。ソーシャルネットワークやブログで配布するための公開リンクも利用できます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。