TestFlightを今更まとめてみた 


こんにちわ。iOSアプリ開発をしている[@haseken_dev](https://twitter.com/haseken_dev)です。
[iOS Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ios) の 10日目を担当させていただきました！

# 1. はじめに
この記事はAppleが提供するTestFlightについて、今更ながらまとめてみました。
今回のこの記事を書いてみようと思った経緯は、こんな感じです。

- Flutterなど、マルチプラットフォームが採用される流れの中で、元々Androidアプリを開発していた同僚の方から、TestFlightについてよく相談されることがあった
- (特に新卒入社など)iOSのアプリ開発担当者でもTestFlightを使う機会がなく、相談されることがあった

今更だとは思ったんですが、iOS 13で追加された新機能などもあったので、まとめてみようと思いました。
これから触ってみよう、利用を検討してみようとする方の参考になれば嬉しいです。

# 2. イメージする対象の方
本記事の対象者は下記のような方をイメージしています。

- TestFlight聞いたことはあるが、具体的に何ができるのかをわかっていない方
- これからTestFlightなどのbeta app配信サービスの利用を検討している方

# 3. 目次
- TestFlightとは
- TestFlightのテスター・ベータApp配布方法
    - 内部テスター
    - 外部テスター
    - パブリックリンク
- iOS 13から追加されたTestFlight便利機能
    - テスト内容表示
    - スクリーンショット付きfeedback
    - クラッシュログ送信機能
- TestFlightのメリット・デメリット
- 最後に
- 参考

## 3.1. TestFlightとは
[TestFlight](https://testflight.apple.com/)とは、Appleが提供するベータ版ビルドの配信サービスになります。
<img width="320" alt="invite.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453700/d5f10407-e184-1ab4-21fb-85bf81b2f316.png">

招待されたテスターは、ベータ版ビルドをAppleが配信する[TestFlight App](https://apps.apple.com/jp/app/testflight/id899247664)からインストールし、試すことが可能になります。
招待はEメールまたはパブリックリンクを介して受けることができます。

また、ベータ版ビルドがアップデートされた場合は、通知も届く様になるので、
更新し忘れがなくなり、配信側もわざわざ連絡する必要がありません。

また、TestFlightはiOS beta SDKでビルドしたappもテスト対象になります。
ただし、テスト可能になるにはiOS betaが配信されてから少し時間がかかる場合があります。
<img width="150" alt="invite.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453700/e4e47b54-1feb-d7c8-467b-8ce674d855e6.png">　→　<img width="150" alt="invite.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453700/4680d698-7085-6af3-fa8f-f7cd0552bcfa.png">
(招待メールの「View in TestFlight」をタップし、TestFlight Appで「同意する」をタップすればインストール可能になります。)


## 3.2. TestFlightのテスター・ベータApp配布方法
TestFlightのテスターは内部テスターと外部テスターの2種類存在します。
また外部テスターの配信方法は2つあります。

 - **内部テスター**
チーム内の最大25名までテストすることが可能です。
また、各メンバーは最大30台のデバイスでテストが可能です。
テスターはチーム内の下記の役割を割り当てられている必要があります。
- Admin
- Technical
- App Manager
- Developer
- Marketer

 - **外部テスター**
チーム外のメンバーもテストが可能です。
人数は最大10,000名までテスト可能です。
ただし、テスト開始には、[「App Store Reviewガイドライン」](https://developer.apple.com/jp/app-store/review/guidelines/)に従っているかどうかのAppleの審査が必要になります。

 - **パブリックリンク**
パブリックリンクは[2018年9月](https://developer.apple.com/jp/app-store-connect/whats-new/?id=100002351)から利用可能になった、外部テスター向けの比較的新しい配信方法になります。
リンクを公開するだけで、不特定多数のユーザーをテスターとして招待することが可能になります。
そのため、これまでの方法ではメールアドレスを管理する必要があったのが、なくなりました。
なお、リンクごとに招待できるユーザー数を設定することも可能です。
ただし、こちらの方法も外部テスターと同様の審査が必要となります。


## 3.3. 配布方法まとめ
ここまでお話ししたテスターの種類を表でまとめてみます。

| 種類     |内容                | 利用できそうなシーン       |
|:-----------------|:------------------|:-------------------|
| 内部テスター       |・チーム内の該当役割メンバー<br>・最大25名<br>・最大30台/名のデバイスでテスト可能 |・社内でのbetaテスト<br> - 新規アプリとか新規機能|
| 外部テスター       |・チーム外の人向け<br>・最大10,000人<br>・Appleの審査が必要|・社外へのバイナリ配布<br>・ユーザーへのbeta機能・新規アプリのbeta版配布|
| パブリックリンク    |・不特定多数のユーザー(人数制限可能、最大10,000人)<br>・メールアドレスの管理不要<br>・Appleの審査が必要|・外部テスターと同様？|

それぞれテスターの種類に応じて、利用できるシーンがあるかと思います。
担当する案件ではどのテスター配布が良いか、ご検討ください。

ただ、内部テスター以外は審査もあり、少し手間と時間がかかること、そしてパブリックリンクはメールアドレスの管理が不要な反面、リンクが流出してしまうと、DLが容易にできてしまう点には、注意が必要そうです。

なお、[最近配信されたドラクエウォークはTestFlightでbeta版が配信](https://twitter.com/DQWalk/status/1138075253970653184?s=20)されていたようです。
このように、TestFlightを利用することで、配信前の機能やアプリをユーザーにテストしてもらうことも強みです。

# 4. iOS 13からのTestFlight便利機能
ここからは、iOS 13から追加されたTestFlightの便利機能を紹介していきます。

## 4.1. テスト内容表示機能
配信されたappを初回立ち上げ時に、テスト内容が表示される様になりました。
今までは、TestFlight app内で表示されていましたが、この機能によってより簡単にテスト内容が確認できる様になりました。
テストの内容はApp Store Connectから編集が可能です。
<img width="150" alt="起動画面.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453700/bad6809d-9722-694f-de29-59dbfd8bc180.png">
(起動時に上記スクリーンショットの様にテスト内容が表示されます。)


## 4.2. ベータAppからのフィードバックの送信
これまで、TestFlight appからフィードバックを送ることができましたが、iOS 13からスクリーンショット付きのフィードバックをappから離れることなく送ることができる様になりました。

操作は簡単で、
1. appのスクリーンショットを撮る
2. 画面左下に出てくるサムネイルをタップし、必要に応じてマークアップでスクリーンショットを編集
3.「完了」->「ベータフィードバックを共有」をタップし、必要に応じてフィードバックコメントを編集して、「送信」を押すだけです。
<img width="150" alt="App.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453700/7020079c-7fad-5b22-df25-1dc3da6f32b0.png">　→　<img width="150" alt="MarkUp.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453700/289a9017-48ce-c4a0-d28c-f8e23900cbd7.png">　→　<img width="150" alt="IMG_6096.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453700/2048607e-6170-e264-7603-5b375caaddd7.png">
(取り直したので、3枚目のマークアップがちょっと違います。ごめんなさい。。)


フィードバックはApp Store Connectから確認することが可能で、app Ver、ビルドVer、送り元のデバイス、iOS Verでフィルタが可能です。
またフィードバックには送り元の端末の情報が含まれているため、調査にも役立ちます。
(通信事業者、ディスク空き容量、バッテリー残量など)

## 4.3. クラッシュ情報の送信
iOS 13からクラッシュログ情報の送信方法も簡単になりました。
ベータappを試しているときにクラッシュすると、ホーム画面でクラッシュ情報を送信するかどうかのアラートが表示されます。
テスターはアラートの「共有」をタップし、必要に応じてコメントを追加して「送信」をタップするだけです。
<img width="150" alt="crash.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453700/137cb418-2acb-ad94-2425-2d303c032a12.png">　→　<img width="150" alt="crash_comment.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453700/92ec518a-0251-783d-2a03-6dab9e33d4ad.png">


ログはApp Store Connectで確認が可能となり、デバイス情報が確認可能です。
また、クラッシュログファイルもDL可能なため、クラッシュした箇所の確認が簡単に行えることが魅力です。
beta機能等を試す上で、クラッシュフィードバックがすぐに送れる、また調査がより簡単に行えることはかなりの強みになると思います。

<img width="700" alt="スクリーンショット 2019-12-09 2.22.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453700/7342a292-3625-3012-f5a0-4e98807db396.png">
(ログの一部になります。この様にクラッシュログをすぐに見ることができるため、調査が捗ります。)

# 5.TestFlightのメリット、デメリット
TestFlightのメリット、デメリットをまとめてみます。

- **メリット**
 - テスト用に端末を iOS Developer Centerに登録する必要がない 
 - TestFlight Appがあれば、すぐにテストAppをインストールできる
 - クラッシュログやfeedbackを送りやすい、調査しやすい
 - テストappのアップデート通知がやりやすい (Push通知が届く)

- **デメリット**
 - Appleの外部テスター審査には1日程度かかる(ただし、審査はApp Verごとに必要 ・ビルドVerごとには審査不要)
 - バイナリサイズによってはアップロードが遅い
 - JIRA連携とかができないので、ちょっと不便(App Store Connectのクラッシュログ閲覧→チケット発行とか本当はしたい・・・)
 - Appleのプラットフォームにしか配信できない

# 6. 最後に
TestFlightについて、iOS 13から登場した新機能を含めてまとめてみました。

TestFlightも頻繁にアップデートされ、機能も追加されており、個人的には結構好きでよく利用しています。
今後、さらにマルチプラットフォームな開発が進んで行くことも予想されますので、TestFlightでもマルチプラットフォーム配信対応されて欲しいな、と期待しております。

app開発者は様々なベータappの配信ツールがある中で、どれを利用するかの判断が求められると思いますが、判断材料として本記事が参考になれば幸いです。
今後のTestFlightのさらなるアップデートにも期待したいと思います！

# 7. 参考
・[TestFlightでAppをテストする](https://testflight.apple.com/)
・[TestFlightでベータ版テストが簡単に](https://developer.apple.com/jp/testflight/)