Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【Mac不要】開発中のFlutter製アプリを仲間のiOS端末に実機配備する手順 - Codemagic&TestFlight編

はじめに

※この記事は、以下の記事の続編の一つです。

【Mac不要】開発中のFlutter製アプリをiOSとAndroidに実機配備する手順 - Codemagic編

Macなし、Windows機のみという環境でも、Flutterはクロスプラットフォーム対応ですので、作成したアプリはiOSにもリリースすることができることは上記の記事で紹介しました。

ただ、上記の記事では「開発者自身が所有するiOS端末に」という前提があります。しかし、開発は複数人のチームで行うことも多いと思います。

そこでこの記事では、上記の記事の手順を少し変更して、仲間(=開発チームメンバー)のiOS端末にリリースする手順を紹介します。

前提

この記事は、以下に当てはまる人向けの iOS 対応アプリを開発する手順を紹介します。

  • 開発機はWindowsだ
  • Macを持っていない
  • Flutterで開発したい
  • Apple Developer Programに既に登録している、または年間で約12,000円を支払えるクレジットカードまたはデビットカードを持っていて、支払い後に最大48時間待ってやるのも悪くない。※1
  • 複数人で開発するので、仲間のiOS端末にもアプリを配備したい

※1: 2020/03/25現在。

開発環境の前提

以下の記事の手順に沿って、FlutterアプリをCodemagicでビルドし、自身のiOS端末にアプリを配備できる状態にしておいてください。※Androidに関する部分は飛ばして構いません。
* 【Mac不要】開発中のFlutter製アプリをiOSとAndroidに実機配備する手順 - Codemagic編

ソースコードの公開

この記事の手順で作成したソースコードはGithubで公開しています。併せてご参照ください。
https://github.com/atsuteru/flutter_firebase_0507/tree/Qiita-FlutterTestFlight-v1.0

本文

ここまでの手順では、iOSアプリは、以下の設定により「Development」としてApple Developer Programに登録した状態になっています。
App settings - Google Chrome 2020_05_10 12_32_44.png

なのでApple Developer Program側には、以下のようにアプリが(自動的に)登録されています。
自身のアカウントから Certificates, Identifiers & Profiles - Profilesを開くと登録済みの一覧を見ることができます。その中、以下の登録ができていると思います。
App settings - Google Chrome 2020_05_10 12_37_53.png

ここでポイントは、以下の部分。

  • Type が Development になっている
  • Devices が 1 Totals になっている

なので、自身が登録した端末にしか配備できない、というわけです。
※「ならば仲間の端末もこのアカウントに登録したらいいじゃん♪」と思われるかもしれませんが、Apple Developer Programのアカウントに登録できる端末は、「自身が所有する」端末なので、やってはいけません。

iOSの場合、自身が所有する以外の端末にも配備するためには、以下の作業が必要です。

  • アプリを Type=App Store として署名する
  • 署名されたアプリを App Store Connectの自身のアカウントに登録する(自動的にできます)
  • App Store Connectの自身のアカウントに、仲間を「内部テスター」として登録する。
  • 仲間は、端末にAppleが提供するiOSアプリTestFlightをインストールしておく
  • App Store Connectの自身のアカウントから、仲間に対してテストしてほしいアプリを通知する。

ではさっそく、手順を進めていきましょう。

ビルド側の設定変更

Codemagicのビルド設定を App Store Connect 向けに変更する

Build

  • Build arguments - iOS: --build-number $BUILD_NUMBERをそのまま貼り付けてください。 App settings - Google Chrome 2020_05_10 13_30_42.png

Publish

1) iOS code signing

  • Provisioning profile type: App Storeに変更する
    App settings - Google Chrome 2020_05_10 12_54_16.png

App Store Connect

  • Enable App Store Connect publishing: チェックを付ける
  • Apple ID: ご自身のApple Developer Programに登録しているApple ID(をメールアドレス)入力します。
  • App-specific password: 認証用に取得した特別なパスワードを設定します。詳細は下に。
  • App ID: iOS code signingBundle identifierと同じものを入力しておきましょう

認証用に取得した特別なパスワード

あなたのAppleIDの管理ページを開き、セキュリティの段落にあるApp用パスワードの項目で、パスワードを生成します。ラベルは自分が識別できれば、何でも構いません。するとパスワードが払い出されますので、それを入力します。

Codemagic側の設定は、以上です。

App Store Connect側の設定

App Store ConnectにAppを登録する

App Store Connectにアクセスしましょう。初めてアクセスされた場合は、アカウントを作成してください。(Apple Developer Programのアカウントが必要です)

アクセスしたら、新規Appを登録しましょう。
以下、登録内容のイメージです。
※私の都合でイメージのアプリ名が0503から0507に代わってしまいました。そこに深い意味はありません。

App Store Connect - Google Chrome 2020_05_09 18_30_49.png

特に気を付けるところは、バンドルIDの選択を間違えないことと、SKUに「Codemagicで入力したApp Store ConnectApp IDと同じものを入力」する点です。

App Store Connectに仲間を「内部テスター」として登録する

次に、仲間を登録しましょう。
App Store Connectのユーザーとアクセスページを開きます。

App settings - Google Chrome 2020_05_10 13_11_15.png

左側のリストから、Developerを選択し、仲間のApple IDを登録しましょう。※仲間はApple Developer Programのアカウントを持っている必要はありません。

登録すると、仲間のApple IDのメールアドレスに、次のような招待メールが届きます。
unnamed.jpg

Accept invitationをクリックしてもらい、仲間による「Apple IDアカウントでのApp Store Connectへのサインイン」「利用規約(英語)の承諾」を経て登録が完了し、私のイメージの絵の具で塗りつぶしたような行のような表示になります。

App Store ConnectにAppを配備する (Codemagicでのビルドの実行)

ここで、Codemagicに戻り、Start new Buildをクリックして、ビルドしましょう。
ビルドが成功すると、App Store ConnectにAppを配備されます。

App Store ConnectのMyAppTestFlightページを開きましょう。
以下のビルド6のように、ビルドが成功したバージョンが一覧に表示されると思います。
App settings - Google Chrome 2020_05_10 13_56_26.png

一覧からそのビルドを選択してみましょう。以下のようなページが表示されると思います。
App settings - Google Chrome 2020_05_10 13_56_49.png

App Store Connectからの開発中のアプリをテスターに配付する場合でも、輸出コンプライアンスの提出が必要です。これは主に「暗号化の利用に対する申告」に対するもの。輸出コンプライアンスの提出のリンクをクリックすると、提出まで進めることができます。

記事【Mac不要】開発中のFlutter製アプリをiOSとAndroidに実機配備する手順 - Codemagic編の手順で作成したアプリは、暗号化を利用していないので、そのように申告して提出すればOKです。また、アプリ自体に暗号化を使用していない申告を埋め込むことで、App Store Connect上の作業をスキップすることができます。この手順は後ほど。

なお、あなたがもし暗号化(HTTPSの利用も暗号化!)を利用する実装を行っている場合は、正しく申告して提出しましょう。そのあたりは私は以下の記事が参考になりました。
参考: iOSアプリ提出の輸出コンプライアンスで、通信にHTTPSを使っているだけの場合の解釈 - @osamu1203

さて、提出を終えると、以下のビルド6ような表示になります。

App settings - Google Chrome 2020_05_10 14_11_10.png

App Store Connectユーザに仲間を登録する

ビルドのページでは、ビルドごとに、端末にアプリを配備できる仲間の管理ができます。

そこに、デフォルトでApp Store Connectユーザというグループが追加されていると思います。自分自身は、ここに属している形です。またグループは、「TestFlight Appを使用して、すべての利用可能なビルドをテストできる」特別な「内部テスター」のグループです。

ビルドごとに仲間を登録するのは面倒大変なので、仲間をこのグループに登録しちゃいましょう。左側のメニューから、テスター&グループ配下のApp Store Connectユーザページを開きます。
App settings - Google Chrome 2020_05_10 13_40_04.png

このページで、テスターとして、際に登録しておいたDeveloperである仲間を追加しましょう。すると、仲間のメールアドレスに、以下ような招待メールが送付されます。
unnamed(2).jpg

仲間は、このメールのView in TestFlightをタップすることで、アプリを端末にインストールできるようになります。また仲間が上記の操作を行い、インストールを行うことで、先ほどの絵の具で塗りつぶした行の表示にされます。

テスターにテストを依頼する

以上で、テスターへのビルドの通知を送る設定は完了しています。次のビルド以降、TestFlightを端末にインストールしてくれた仲間には、新しいビルドが登録された旨の通知が届くようになります。

アプリへの「暗号化を使用していない旨の申告」の埋め込み

さて、最後に、アプリへの「暗号化を使用していない旨の申告」の埋め込み方法の手順です。

Macを持っている人は、XCodeを利用してApp Uses Non-Exempt Encryptionの設定を行いますが、Macを持っていない我々は、ファイルに設定を直接追記します。

iOS/Runner/Info.plist
    <key>ITSAppUsesNonExemptEncryption</key>
    <false/>

この修正をPushした以降のビルドでは、App Store Connect上で「輸出コンプライアンスがありません」とはならないので、仲間に対しては「PushするだけでTestFlightからのビルド通知が届く」環境を構築することができます。

さいごに

iOSアプリの配付は、Appleのセキュリティに対する徹底した姿勢があり、開発中のベータ版といえども多くの手順が必要になります。しかしCodemagicを利用することで、署名に関する手順やApp Store Connectに連携する手順が自動化できるので、開発者はよりコンテンツ制作に集中できることでしょう。

この記事が一人でも多くのFlutter開発者の助けになれば、幸いです。

kami_teru
SIを楽しむプログラマです。いろんなものを作るのが好き。
peoplesoftware
主にJavaやC#を使った受託開発や、BaaSなどのクラウドサービス、スマホアプリの自社開発を行っている会社です。※各記事の内容は個人の見解であり、所属する会社の公式見解ではありません。
http://www.pscsrv.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away