iOSエンジニアのkirichanです。最近は Famm 年賀状の Android アプリも作ってます。
Bitrise で fastlane を使用して、TestFlight に Debug 版のビルドをアップロードするようにした話になります。
なぜやったのか
TestFlight で配信するメリットはいくつかありますが、Famm においての1番の課題はUDID の管理でした。 新規端末、新規メンバーが増えるたびに UDID を登録しないといけないため、開発者にもインストールしたい側にも一定のコストがかかります。
参考にした記事
AdHoc 配信の歴史や TestFlight の仕組み、TestFlight で配信するメリットなどについてわかりやすくまとめられている記事がありますので、併せて参考にしてみてください。
上記記事ではBitriseの下記ステップを使用した方法ですが、今回Fammでは fastlane の upload_to_testflight アクションを使用して実現しています。
fastlane で行うことで、ローカルで配信をする際もCIと同じコマンドで行うことができますし、可能性は低いですがもしCIサービスの変更を行う際もスムーズな移行をすることができます。
また前職で同様のことをやったことがあり、知見が多少あったことから fastlane での アップロードを採用しました。
やったこと
App Store Connect に Debug 版のアプリを追加する
https://appstoreconnect.apple.com/apps
Bitrise から App Store Connect にビルドをアップロードするための認証設定
Bitrise のヘルプページを参考に、p8ファイルを使用した認証設定を行う。
Bitrise Workflow の設定
- fastlane ステップを追加
fastlane lane
にbeta
と入力(後述するFastfile
のlane名)API Key: URL
とAPI Key: Issuer ID
に先ほど設定した認証情報を入力(URL の Key は Code Signing タブにあります)
Fastfile の変更
指定する Provisioning Profile は Distribution = App Store、App ID = Debug版アプリのID になります。
Bitrise の iOS Auto Provision with App Store Connect API
ステップで管理していると、"Bitrise iOS app-store - (com.example.dev)"
のような名前になるかと思います。
platform :ios do desc "Submit a new Beta Build to Apple TestFlight" lane :beta do build_app( workspace: "Famm.xcworkspace", scheme: "FammDev", export_method: "app-store", configuration: "Debug", export_options: { provisioningProfiles: { "com.example.dev" => "Bitrise iOS app-store - (com.example.dev)", "com.example.dev.NotificationExtension" => "Bitrise iOS app-store - (com.example.dev.NotificationExtension)", "com.example.dev.ShareDev" => "Bitrise iOS app-store - (com.example.dev.ShareDev)", "com.example.dev.WidgetExtension" => "Bitrise iOS app-store - (com.example.dev.WidgetExtension)" } } ) upload_to_testflight( app_identifier: "com.example.dev", notify_external_testers: false, skip_waiting_for_build_processing: true ) end end
輸出コンプライアンス設定の自動入力
TestFlight にアップロードした後に輸出コンプライアンスを設定しないと配信できないため、info.plist
に下記を追記して自動的に設定されるようにします。
<key>ITSAppUsesNonExemptEncryption</key> <false/>
詰まったところ
TestFlight 各ビルドの Test Details に任意のメッセージを入れたい
upload_to_testflight
アクションのchangelog
で反映することができるのですが、アップロード後の Processing 中は反映できないようです。
Proccesing が完了するまで待つと30分ほどかかってしまい、その間Bitriseの並列実行数を占有してしまうため諦めました。QA依頼時は自動でインクリメントされるビルド番号をQAメンバーに伝える運用にしています。
ちなみにブランチ名の取得はこのようにできます。
さいごに
TestFlight に変更したことで、配信時間が約2倍になってしまいましたが、急いで実機インストール確認をしたいケースはほぼないため問題にはならないかなと思います。
それよりも UDID 登録の呪縛から解放されるメリットが圧倒的に大きいので、TestFlight 配信はおすすめです!
積極採用中!!
子育て家族アプリFammを運営するTimers inc.では、現在エンジニアを積極採用中! 急成長中のサービスの技術の話を少しでも聞いてみたい方、スタートアップで働きたい方など、是非お気軽にご連絡ください! 採用HP: http://timers-inc.com/engineerings