最終更新: 2026年6月5日
.NET MAUI 10アプリをApp StoreおよびGoogle Playに公開するには、(1) Apple Developer Program/Google Play Developerアカウントの取得、(2) Release構成での署名済みビルド(iOSは.ipa、Androidは.aab)生成、(3) App Store Connect/Google Play Consoleへのバイナリアップロード、(4) アプリプライバシー情報・スクリーンショット・データセーフティの登録、(5) 審査リクエストの送信、という5段階のプロセスを踏みます。本ガイドでは2026年現在の最新ポリシーと.NET MAUI 10固有の設定を踏まえ、よくある却下理由とその回避策まで実装レベルで解説します。正直なところ、私自身が最初の申請で4回連続却下を食らった経験があるので、その時に詰まったポイントも各所で共有していきますね。
iOS公開にはApple Developer Program(年間99 USD)への登録、Distribution証明書・Provisioning Profileの作成、App Store Connectへの.ipaアップロードが必須です。
Android公開にはGoogle Play Developerアカウント(一回限り25 USD)と、署名済みAndroid App Bundle(.aab)形式でのアップロードが2021年8月以降必須化されています。
iOSではPrivacyInfo.xcprivacy(プライバシーマニフェスト)が2024年5月以降必須となり、SDK由来のAPI使用理由を申告しないと却下されます。
Google Playでは2025年8月から新規アプリのターゲットSDKがAndroid 15(API 35)以上 であることが義務化されています。
iOSの平均審査時間は約24〜48時間、Android Playは初回審査で最長7日かかるケースもあります。TestFlight・内部テストトラックで事前に検証しましょう。
GitHub Actions+Fastlaneによる自動配信パイプラインを構築すれば、リリース工数を週単位から分単位に短縮できます。
このページの内容
公開前に揃えるべき4つの前提条件
iOS版:Release構成でipaを生成する手順
App Store Connectへのアップロードとメタデータ登録
Android版:署名済みAABを生成する手順
Google Play Consoleでの内部テストと製品版公開
プライバシーマニフェストとデータセーフティの記入
App Store審査でよくある却下理由と対策
GitHub ActionsとFastlaneによる自動配信
よくある質問
公開前に揃えるべき4つの前提条件
.NET MAUIアプリをストアに提出する前に、開発者アカウント・署名アセット・アプリメタデータ・ビルド環境という4つの要素を準備する必要があります。これらが揃っていないと、Visual StudioやCLIから正常にビルドできても、ストアアップロード段階で必ず失敗します。特にiOSは秘密鍵のエクスポート漏れで再生成不能になるケースがあるため(以前これで丸一日溶かしました)、最初のセットアップ段階で.p12形式のバックアップを必ず取得してください。
1. 開発者アカウント
iOSはApple Developer Program (年間99 USD、法人向けEnterprise Programは299 USD)への登録が必要で、登録から承認まで通常24〜48時間かかります。AndroidはGoogle Play Console での登録で、2023年以降は本人確認(D-U-N-Sナンバーまたは身分証明書)が必須になりました。法人アカウントの場合、書類審査に1〜2週間かかることを見越したスケジュールを組みましょう。リリース日が決まっているプロジェクトだと、ここがクリティカルパスになりがちです。
2. 署名アセット
iOSはDistribution証明書とApp Store用Provisioning Profileを、AndroidはJKS/PKCS#12形式のキーストア(Upload Key)を準備します。Google Playでは2021年以降、Play App Signingによりアップロード鍵と署名鍵が分離されたため、開発者はアップロード鍵のみ管理すれば足ります。とはいえ、アップロード鍵を紛失すると面倒な復旧申請が必要になるので、1Passwordなどのシークレット管理ツールに必ず保管しておくのが安心です。
3. アプリメタデータ
App名、サブタイトル、説明文(4000文字以内)、キーワード、サポートURL、プライバシーポリシーURL、年齢制限レーティング、スクリーンショット(iOS:6.7インチ・6.5インチ・5.5インチの3サイズ/Android:携帯電話・7インチ・10インチタブレット)が必要です。スクリーンショット撮影は意外と時間がかかるので、ビルド完成前から並行で進めておくと締切に余裕が生まれます。
4. ビルド環境
iOSビルドにはmacOS+Xcode 16.2以上が必須で、WindowsからのリモートビルドにはMac mini/Mac StudioまたはGitHub Actionsのmacos-15ランナーを利用します。Androidは.NET MAUI workload がインストールされたWindows/Mac/Linuxいずれでもビルド可能です。
iOS版:Release構成でipaを生成する手順
.NET MAUI 10でiOS向けのApp Store配布バイナリを生成するには、RuntimeIdentifier=ios-arm64とCodesignKey/CodesignProvisionプロパティを正しく指定する必要があります。Visual Studio 2022 17.12以降ではIDEからの「アーカイブ」操作がサポートされていますが、CIに乗せる場合はdotnet publishコマンドベースの方が再現性が高くておすすめです。IDE経由のビルドは「自分の手元では通るのに、CIで落ちる」現象を生みやすいんですよね。
csprojの設定
.csprojに以下のプロパティグループを追加し、本番ビルド時のみ署名情報が適用されるようにします。Configuration=ReleaseかつTargetFramework=net10.0-iosの条件下で発火する設計です。
<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
<ArchiveOnBuild>true</ArchiveOnBuild>
<CodesignKey>Apple Distribution: Your Company Name (TEAMID12345)</CodesignKey>
<CodesignProvision>MyApp AppStore Profile</CodesignProvision>
<CodesignEntitlements>Platforms/iOS/Entitlements.plist</CodesignEntitlements>
<EnableAssemblyILStripping>true</EnableAssemblyILStripping>
<MtouchLink>SdkOnly</MtouchLink>
</PropertyGroup>
publishコマンドの実行
macOSターミナルで以下を実行すると、bin/Release/net10.0-ios/ios-arm64/publish/配下に.ipaが生成されます。生成された.ipaをTransporter アプリまたはxcrun altoolコマンドでApp Store Connectにアップロードします。
dotnet publish -f net10.0-ios \
-c Release \
-p:RuntimeIdentifier=ios-arm64 \
-p:ArchiveOnBuild=true \
/p:CodesignKey="Apple Distribution: Your Company Name (TEAMID12345)" \
/p:CodesignProvision="MyApp AppStore Profile"
xcrun altool --upload-app --type ios \
--file bin/Release/net10.0-ios/ios-arm64/publish/MyApp.ipa \
--username "[email protected] " \
--password "@keychain:AC_PASSWORD"
注意: xcrun altoolはXcode 15以降では非推奨となり、Xcode 16.2ではxcrun notarytoolとTransporterへの移行が推奨されています。CI環境ではApp Store Connect APIキー(.p8ファイル)を使った認証が望ましいです。
App Store Connectへのアップロードとメタデータ登録
App Store Connectは、ビルドのアップロード、メタデータの管理、TestFlightによるベータ配布、本番審査リクエストを一元管理するAppleの公式ポータルです。アップロード後にビルドが処理されて表示されるまで、通常15〜30分かかります。処理中にエラーが発生した場合は登録メールアドレス宛に詳細が送信されるので、必ず開発者アカウントに紐付くメールアドレスを受信可能な状態にしておきます。
TestFlightで内部テストを必ず実施する
App Store審査前にTestFlightで動作確認しておくと、本番審査での却下率がガクッと下がります。社内テスター(Apple ID登録不要、最大100名)と外部テスター(最大10,000名、ベータ審査が必要)の2モードがあり、社内テスターはアップロード後すぐに利用可能です。クラッシュレポートと操作ログがTestFlightダッシュボードに集約されるため、本番リリース前のリグレッションテスト基盤としても活用しましょう。
必須スクリーンショットとプレビュー動画
2024年以降、6.7インチ(iPhone 15 Pro Maxサイズ:1290×2796)と6.5インチ(iPhone 11 Pro Maxサイズ:1242×2688)の2サイズが最小要件です。iPad対応アプリは12.9インチ(2048×2732)も必要です。プレビュー動画は最大3本、各15〜30秒で、アプリ内画面のみ使用可能(実機撮影は不可)です。.NET MAUIアクセシビリティ実践ガイド で解説したSemanticPropertiesによる対応状況も、レビュー時の評価ポイントになります。
Android版:署名済みAABを生成する手順
Google Playは2021年8月以降、新規アプリでAndroid App Bundle(.aab)形式の提出を必須化しており、APKでは提出できません。.aabはデバイスのアーキテクチャ・画面密度・言語に応じて最適化された.apkをGoogle Play側が動的に生成する仕組みで、平均20〜30%のダウンロードサイズ削減効果があります。.NET MAUIではdotnet publishに-f net10.0-androidを指定するだけで.aabが出力されます。
キーストアの作成
Upload Keyとなるキーストアをkeytoolで作成します。一度紛失するとアプリの更新が不可能になる(Play App Signingを使えばGoogle側でリセット申請が可能)ため、複数の安全な場所にバックアップを保存しましょう。
keytool -genkeypair -v \
-keystore mymauiapp-upload.keystore \
-alias mymauiapp \
-keyalg RSA -keysize 2048 \
-validity 10000 \
-storetype pkcs12
署名済みAABのビルド
csprojに署名プロパティを追加し、Release構成でpublishを実行します。Play Console側でPlay App Signingが有効な場合、アップロードキーで署名するだけで足ります。Native AOT・r2r(Ready-to-Run)の最適化を併用すると、起動時間が最大40%短縮可能です。詳細は.NET MAUI起動高速化とメモリ最適化のガイド を参照してください。
dotnet publish -f net10.0-android \
-c Release \
/p:AndroidPackageFormat=aab \
/p:AndroidKeyStore=true \
/p:AndroidSigningKeyStore=mymauiapp-upload.keystore \
/p:AndroidSigningStorePass=$KEYSTORE_PASSWORD \
/p:AndroidSigningKeyAlias=mymauiapp \
/p:AndroidSigningKeyPass=$KEY_PASSWORD
補足: 2025年8月31日以降、Google Playに新規提出するアプリはtargetSdkVersion=35(Android 15)以上が必須です。既存アプリも2025年11月までに対応が必要で、未対応のアプリは新規ユーザーからインストールできなくなります。
Google Play Consoleでの内部テストと製品版公開
Google Play Consoleでは「内部テスト」「クローズドテスト」「オープンテスト」「製品版」という4段階のリリーストラックが用意されており、それぞれ独立して.aabをアップロードできます。新規アプリの場合、内部テスト→クローズドテスト(20名以上、14日間継続)→製品版審査という流れが2023年以降必須化されており、いきなり製品版申請ができなくなった点に注意してください。これ、私も最初は知らずに「あれ、製品版ボタンが灰色のまま…」と数時間悩みました。
14日間のクローズドテスト要件
2023年11月のポリシー変更により、個人デベロッパーアカウントで作成された新規アプリは、20名以上のテスターでクローズドテストを最低14日間連続で実施する必要があります。「Apply for production access」ボタンは、このテスト期間を満たしたあとに初めて活性化されます。法人アカウントはこの要件の対象外ですが、内部テストでの動作確認は強く推奨されます。
データセーフティセクション
2022年4月以降、データ収集・共有の有無、収集データ種別(位置情報・連絡先・財務情報など14カテゴリ)、暗号化・削除リクエスト対応の可否を申告するデータセーフティセクションの記入が必須です。アプリ内で利用しているSDK(Firebase、AdMob、Crashlyticsなど)が収集するデータも申告対象に含まれます。.NET MAUIセキュアストレージとOAuth実装ガイド で扱った認証情報も「個人ID」カテゴリに該当します。
プライバシーマニフェストとデータセーフティの記入
2024年5月1日以降、iOSアプリはPrivacyInfo.xcprivacy(プライバシーマニフェスト)の提出が必須化されました。これはアプリ本体および同梱SDKがどのデータを収集し、どのAPI(UserDefaults、FileTimestamp、SystemBootTime、DiskSpace、ActiveKeyboardsの5種類)を使用するかをXML形式で宣言するもので、未対応の場合App Store Connectから警告メールが送信され、最終的には審査拒否となります。
.NET MAUIプロジェクトへの追加方法
Platforms/iOS/PrivacyInfo.xcprivacyを作成し、.csprojでBundleResourceとして登録します。NSPrivacyTrackingはトラッキング有無、NSPrivacyCollectedDataTypesは収集データ種別、NSPrivacyAccessedAPITypesは必須API使用理由を表します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array><string>CA92.1</string></array>
</dict>
</array>
</dict>
</plist>
App Store審査でよくある却下理由と対策
Apple公式のApp Reviewガイドライン の運用上、初回申請の約30%が却下されており、その60%以上は事前に回避可能な技術的・規約的問題が原因です。.NET MAUIアプリで特に頻出する却下パターンと対策を、ガイドライン番号別に整理します。私の経験上、2.1と4.0は本当に多いので、まずはこの2つを潰すだけでも通過率が大きく変わります。
ガイドライン 却下理由 対策
2.1 (Performance) クラッシュ、ログイン不可、機能未実装 TestFlightで主要フロー全網羅、Sentry等でクラッシュ収集
2.3.10 (Accurate Metadata) スクリーンショットと実機UIの不一致 スクリーンショットは最新ビルドで撮り直す、フレーム加工は最小限
4.0 (Design) Webラッパー、機能の薄さ ネイティブUI(XAML)を主体に、Hybrid率を50%以下に
5.1.1 (Privacy) プライバシーポリシー未掲載、収集データ不一致 HTTPS公開URLを必ず登録、データセーフティと整合
5.1.2 (Data Use) ATTダイアログ未実装でIDFA取得 App Tracking Transparency APIで明示同意取得
GitHub ActionsとFastlaneによる自動配信
手動でipa/aabをビルドして毎回ストアアップロードする運用は、ミスとボトルネックの温床になります。GitHub Actionsのmacos-15ランナーとFastlane を組み合わせれば、git tag v1.2.3のpushをトリガーにTestFlight/Play内部テストへの自動配信が可能です。.NET MAUIテスト自動化とCI/CDガイド で構築したユニットテスト・UIテストをbuildジョブで通過させたあと、deployジョブに進む構成が安全です。
GitHub Actions ワークフロー例
以下はiOS版をTestFlight、Android版をPlay内部テストトラックに同時配信する最小構成例です。シークレットはGitHubリポジトリのSettings → Secretsに登録し、ベースキーストアやp12ファイルはBase64エンコードして格納します。
name: Release Mobile
on:
push:
tags: ['v*.*.*']
jobs:
ios:
runs-on: macos-15
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- run: dotnet workload install maui
- name: Decode signing assets
run: |
echo "${{ secrets.IOS_P12_BASE64 }}" | base64 -d > dist.p12
echo "${{ secrets.IOS_PROFILE_BASE64 }}" | base64 -d > appstore.mobileprovision
- name: Build and publish ipa
run: dotnet publish -f net10.0-ios -c Release
- name: Upload to TestFlight via Fastlane
run: fastlane pilot upload --ipa ./MyApp.ipa
env:
APP_STORE_CONNECT_API_KEY_CONTENT: ${{ secrets.ASC_API_KEY }}
android:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- run: dotnet workload install maui-android
- name: Build signed aab
run: dotnet publish -f net10.0-android -c Release \
/p:AndroidPackageFormat=aab
- name: Deploy to Play internal track
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.PLAY_SERVICE_ACCOUNT }}
packageName: com.example.mymauiapp
releaseFiles: '**/*.aab'
track: internal
ヒント: バージョン番号はgit tagからパースし、ApplicationDisplayVersionとApplicationVersion(ビルド番号)に注入すると一元管理できます。dotnet publishに-p:ApplicationDisplayVersion=$VERSIONを渡すだけです。
よくある質問
.NET MAUIアプリをApp Storeに公開するにはMacが必要ですか?
はい、最終的なipa生成と署名にはmacOS環境とXcode 16.2以上が必須です。ただし開発・デバッグはWindowsから「Mac経由のペアリング」もしくは「Hot Restart」で実施可能で、CI環境ではGitHub Actionsのmacos-15ランナーやMacStadiumを利用することでMac本体を保有せずにビルドできます。
Google Play Consoleでの審査にはどれくらい時間がかかりますか?
2026年現在、新規アプリの初回審査は3〜7日、更新版は通常24〜48時間です。個人デベロッパーアカウントの場合、製品版申請の前に20名以上で14日間のクローズドテスト実施が必須化されているため、実質的な公開リードタイムは最短でも3週間程度を見込んでください。
TestFlightとは何ですか?無料で使えますか?
TestFlightはAppleが提供する公式ベータテスト基盤で、Apple Developer Programに加入していれば追加料金なしで利用できます。社内テスター最大100名、外部テスター最大10,000名まで配布でき、ビルド有効期限は90日間です。App Store本番審査の前段階として、安定性とレビュー却下リスクを大幅に下げる手段として推奨されています。
プライバシーマニフェスト(PrivacyInfo.xcprivacy)が無いとどうなりますか?
2024年5月1日以降、App Store Connectへのアップロード時に必須API使用理由が未申告だと「ITMS-91053」などの警告が送信されます。当初は警告のみでしたが、2024年後半以降は実際に審査拒否やアップロード失敗の対象となっており、SDK側のマニフェストも含めて整合性を取る必要があります。
App Storeで一度却下された後、再申請の回数制限はありますか?
回数制限はありませんが、同じ理由で繰り返し却下されるとレビュー優先度が下がる傾向があります。Resolution Centerで指摘事項に対し、修正内容と再現手順を具体的に英語で返信し、TestFlightリンクを添付すると審査がスムーズに進むケースが多いです。