2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Flutterでアプリを自分で作って、初めてGoogle PlayとApp Storeにリリースしてみました。

リリースしたアプリはこちら

Android版
https://play.google.com/store/apps/details?id=dev.otofu128.reverie

iOS版
https://apps.apple.com/jp/app/%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89%E3%82%B7%E3%83%A7%E3%83%BCrss%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC-reverie-%E3%83%AC%E3%83%B4%E3%82%A7%E3%83%AA%E3%83%BC/id6766731355

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アプリのパッケージ名の登録を求められました
  • 新規登録のつもりでいましたが、過去に登録予定のパッケージ名のビルドをAndroid実機へインストールしていたためか、既に使われているアプリとしてフィンガープリント3件が存在していました
  • ややこしいことに、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を公開することになりました

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?