Flutterでアプリを自分で作って、初めてGoogle PlayとApp Storeにリリースしてみました。
リリースしたアプリはこちら
Android版
https://play.google.com/store/apps/details?id=dev.otofu128.reverie
RSSフィードをスライドショーのように1記事ずつ表示するアプリを作りました。
リリースまでやったことを、ざっくりと振り返ってみたいと思います。
開発端末一式の準備
- 趣味で持っていたMac1台、iPhone3台、iPad1台、Android7台、Fireタブレット1台を流用しました
- iOSアプリの開発にはXcodeが必要であり、XcodeはmacOS専用アプリです
- 必要に応じてAndroid EmulatorやiOS Simulatorを使いました
GitHubアカウント
- 趣味で作成済みでした
独自ドメインの取得
- 趣味で取得済みでした
- Cloudflareで取得しました
Firebaseプロジェクトの作成
- Crashlytics、Performance、Remote Config、App DistributionをFirebaseで使っています
- Crashlytics: クラッシュレポートの収集
- Performance: パフォーマンス情報の収集
- Remote Config: 念のため後から変更できるようにするため、プライバシーポリシーページのURLを配信しています
- App Distribution: APKファイルやIPAファイルをアップロードすることで、PCに実機を繋がなくてもアプリの配布やインストールができます
- 自分の用途ではIPAファイルをDevelopmentのProvisioning ProfileでDistributeしていました
AdMobアカウント作成
- おまけ程度に広告をつけてみたいと思いAdMobを導入しました
Apple Developer Programの登録
- 登録時点では12,980円(税込)/年
- Certificates、Identifiers、Devices、Provisioning Profile(Profiles)の登録をします
- Certificates: 開発者の証明
- Identifiers: アプリそのものの登録
- Devices: DevelopmentなどのProvisioning ProfileでDistributeしたアプリをインストールできる端末の登録(UDIDを登録する)
- Provisioning Profile: XcodeでArchiveをDistribute(またはflutter build ipa)したIPAファイルの配布方法やインストール条件
- App Store: App Store Connectへのアップロード用またはTestFlight配布用
- Development: Devicesに登録済みの端末用
- Certificate Signing Request、Certificates、Identifiers、Provisioning Profileは勉強がてら手動で自分で管理しています
Flutterアプリの作成
- Flutterが好きなのでFlutterを採用しました
- パッケージ名(Android)、Bundle Identifier(iOS)の決定
- OSによって異なる名称ですが、どちらもアプリを識別するIDに近いものです
- 今回は同じ値にしました
- フレーバー分け(Android/iOS)
- 勉強がてらdevelopment、staging、productionの3フレーバーを作成しました
- Android: android/app/build.gradle.ktsを修正
- iOS: xcconfigファイルを作成して、SchemeとProject > Runner > Build ConfigurationsへXcodeで紐付け
- Firebaseプロジェクト紐付け設定(Android/iOS)
- flutterfire configureコマンドと一部手動で設定しました
- google-services.json(Android)とGoogleService-Info.plist(iOS)を所定のディレクトリに配置
- Xcodeには、Targets > Runner > Build Phasesに2種のScriptが追加されます
- フレーバーに応じたとGoogleService-Info.plistをArchiveにバンドルするScript
- dSYMをFirebaseへアップロードするScript
- Keystoreの作成(Android)
- APK/AABファイルの署名用
- Provisioning Profileの割り当て(iOS)
- 3フレーバー分
- Privacy Manifestファイルの作成(iOS)
Google Play Consoleを組織アカウントで開設する
- 2023年11月13日以降にGoogle Play Consoleを開設して個人アカウントとしてリリースする場合、12人のテスター(自分+11人)で14日以上連続でオプトインしてアプリのクローズドテスト実施の要件があります
- この要件を避けたいこともあり、個人アカウントではなく組織アカウント開設を目指しました
携帯電話番号の取得
- 開業届とGoogle Play Console掲載用に携帯電話番号を取得しました
- 維持費が基本0円のpovo2.0を契約しました
バーチャルオフィスの契約
- 開業届とGoogle Play Console掲載用にバーチャルオフィスを契約しました
- キャンペーンで安くなってたのでGMOオフィスサポートを契約しました
開業届の提出
- freee開業を使いました
独自ドメインメールアドレスの作成
- Cloudflare Email Routing経由で独自ドメインメールアドレスをGmailで送受信できるようにしました
D-U-N-Sナンバーの取得
- Apple Developer Program経由でD-U-N-S(ダンズ)ナンバー取得の申請をしました
- Apple Developer Program経由は無料で取得できますが、取得完了までの日数の目安の情報がありません
- 東京商工リサーチ経由でも取得できます https://duns.tsr-net.co.jp/duns-web/index
- 7営業日: 15,000円/件(税別)
- 30営業日(約1.5ヶ月): 0円
- Apple Developer Program経由で申請しても、東京商工リサーチから申告内容の確認や必要事項返信の依頼のメールが届きます
- 取得完了までかかった日数: 6日間
- 2026年3月4日: Apple Developer Programで申請
- 2026年3月5日: 東京商工リサーチから初回のメールが届く(以降、申告内容の確認や必要事項返信のために何通かやりとり)
- 2026年3月10日: Dun & BradstreetからD-U-N-Sナンバーが記載されたメールが届く
Google Play Consoleの開設
- 初回のみ$25.00
- 独自ドメインメールアドレスGoogleアカウントで開設しました
- 組織アカウントで開設しました
- 身分証明書のアップロード、組織関連の提出書類のアップロード、D-U-N-Sナンバーの登録をしました
- 組織関連の提出書類として、「個人事業の開業・廃業等届出書」と「電子申請等証明データシート」をmacOSで1つのPDFにしてアップロードしました
プライバシーポリシーページの作成
- 独自ドメイン配下にReact Router (Framework mode) + Cloudflare Workersで作成しました
ストア掲載用スクリーンショットの作成
- Android EmulatorとiOS Simulatorでスクリーンショットを撮影して、Figmaで加工しました
Google Play Consoleにパッケージ名の登録
- 少なくとも2026年5月頃時点ですが、Android開発者認証に関連してAndroidアプリのパッケージ名の登録を求められました
- パッケージ名の登録は、Google Play ConsoleまたはAndroid Developer Consoleにてできます
- https://developer.android.com/developer-verification?hl=ja
- 新規登録のつもりでいましたが、過去に登録予定のパッケージ名のビルドをAndroid実機へインストールしていたためか、既に使われているアプリとしてフィンガープリント3件が存在していました
- https://developer.android.com/developer-verification/guides/pdf-guides/pdc-guide.pdf の19ページのような状態です
- 推測ですが、過去にAndroid実機へインストールした履歴などをもとに、既知のフィンガープリントとして表示された可能性がありそうです
- ややこしいことに、releaseビルドではなくdebugビルドの署名から生成されたと思われるフィンガープリントも含まれていました
- 登録予定のパッケージ名のreleaseビルドをAndroid実機にインストールして数日経過したところ、目的のフィンガープリントが表示されました
- 結果として4つのフィンガープリントが登録されることになりましたが、すべて「確認済み」ステータスになりました(謎です)
Codemagic
- mainブランチへのプルリクエスト作成時にGoogle Play ConsoleとApp Store Connectにビルドが送信されるようにCI/CDを設定しました
ストア申請
思っていたより早く審査が完了して驚きました。
Google Play Console
- 審査完了までかかった日数: 0日
- 2026/06/18 01:40頃: 「変更の送信日」ステータス
- 2026/06/18 02:05頃: 「変更の承認日」ステータス
App Store Connect
- 審査完了までかかった日数: 0日
- 2026/06/18 01:40頃: 「提出準備中」「審査準備完了」「審査待ち」ステータス
- 2026/06/18 18:35頃: 「審査中」ステータス
- 2026/06/18 18:50頃: 「デベロッパによるリリース待ち」ステータス
想定外だったこと
- Codemagicの設定が正しくできておらず、CertificatesとProvisioning Profileが次々と自動作成されてしまいました
- iOS code signingをAutomaticに設定していたことが原因でした
- Manualに設定しました
- Figmaで作った素材をもとに、flutter_launcher_iconsパッケージでアプリアイコンを生成しましたが、iOS 26では意図しない見た目になりました
- アイコンが少しぼやけていました
- 自動でLiquid Glassエフェクトが適用されていたようでした
- iOSのみIcon Composerでアプリアイコンを作成しなおしました
- Google Play ConsoleもApp Store Connectも一度アップロードしたアプリは削除できませんでした
- お試し用で1.0.0+1をアップロードしてしまったために、配布用の1.0.0+1がアップロードできなくなりました
- アプリバージョンとビルド番号のセットは重複できないため、今回はビルド番号を2以上で再度アップロードする必要がありました
- ただ、直前に不具合に気づいては修正を繰り返したために、最終的には1.0.0+8を公開することになりました
参考