[C#][.NET][WinUI 3] Visual Studio で作成したアプリを Microsoft Store に配布する

自分も詳しくはないですが、Microsoft Store への配布方法を調べつつ備忘録としてまとめていきます。

今回は Visual Studio 2022 で WinUI 3 Packaged アプリを開発している想定で進めます。

Microsoft Store の開発者登録

Microsoft Store にアプリを公開するには開発者登録をしたアカウントが必要です。
ということでまずはアカウント登録をしましょう。

アカウント登録には 1800 円ほどかかりますが、初回のみの支払いだけすればいいので、継続してお金がかかることはありません。

個人開発者の「Microsoft Store」登録が無料に ~企業向けも含めさまざまなてこ入れ – 窓の杜

と思っていたら今では無料でアカウント登録できるようです。
Microsoft の公式 Web ページから登録しましょう。手順は省略します。

アプリ名の予約

アプリの管理・公開は Microsoft Partner Center の Apps and games で行います。

配布するアプリに応じて適切な項目を選択してください。ゲームだけは別カテゴリだそうです。

おそらく以下の表のような感じ(未確認)

MSIX or PWA appWinUI 3 Packaged, UWP, PWA (Webページをアプリみたいにするやつ)
EXE or MSI appWinUI 3 Unpackaged, WPF, WinForms, その他EXEファイル, MSIインストーラ
Gameゲーム


今回はC# / WinUI 3 Packaged プロジェクトなので、「MSIX or PWA app」を選択します。

するとモーダルが表示されるので、Microsoft Storeに登録するアプリ名を予約します。これは全ユーザで固有の名前となります。
Storeの表示名とは異なります。winget で調べるときに表示されるやつはこれが使われるのかな?

MSIX アプリの名前を予約する – Windows apps | Microsoft Learn

右側の「Check availability」がPassするような名前で予約しましょう。
今回は「ClipOverlay」という名前で予約します。

いろいろ設定

予約ができると以下の画面に遷移します。

ここ(Application overview)の「Start submission」ボタンを押します。
すると下記のような画面になるので、各項目を設定していきます。

「Submit for certification」ボタンが押せるようになるまでは設定しないといけません。

以降は各項目の入力方法をまとめますが、基本的には最低限の情報を箇条書きにしていきます。

Pricing and availability

  • Markets
    • デフォルトはすべての国と地域で利用可能にする
    • Show options を押すことで国と地域を選択可能
  • Visibility
    • Audience
      • Public audience:全ユーザに公開(デフォルト)
      • Private audience:指定されたメールアドレスと紐づけられたMicrosoftユーザのみが閲覧・インストールできる
    • Discoverability
      • デフォルトはMicrosoft Storeで検索・表示可能に
      • 設定を変更することで、リンクを知っている人のみ、または入手済みまたはプロモコードをもったユーザしかインストールできないようにできる
    • Schedule
      • 公開タイミングを指定できる
      • デフォルトはASAP
      • 配信停止日も指定可能
      • マーケットごとに指定可能
    • Pricing
      • アプリの価格
      • ここで設定できるのは無料か買い切りか(というか価格設定で0円が選べる)
      • 料金の単位を決めて金額を選択
      • 日時指定して価格変更も可(こちらはおそらく途中から価格変える時用?)
      • サブスク方式にしたい場合は Add-on を組み合わせる(詳細は 価格戦略 セクション参照)
    • Trial
      • 有料アプリの無料トライアル期間
      • トライアル期間の日数を設定するか無期限にするかを設定可能
    • Sale pricing
      • セールの設定
    • Organizational licensing
      • 組織ライセンス周り(よくわかっていない)

Properties

  • Category and subcategory
    • アプリのカテゴリ
    • 最大2つ設定可能
  • Privacy Policy
    • アプリが個人の情報にアクセスするかどうか
    • アクセスする場合、プライバシーポリシーが記載されているページのURLかプライバシーポリシーの文面を記入
  • Support info
    • 問い合わせ用のサイトや住所、電話番号などの情報
    • Websiteだけ必須?
    • 住所 (address line 1)・市・国と地域・メールアドレス (support contact info)・電話番号 も必須とはなっているが、記入しなくてもよい。その場合、開発者アカウントに紐づけられている情報が使用されるそう
    • Microsoft Storeでユーザに実際に公開されるのは support contanct info に入れたメールアドレスとWebサイトだけっぽい
      • support contact info を空欄にした場合はStoreに表示されない
    • 結論:Webサイトだけ記載すればいい
  • Display mode
    • アプリがXR (VR, AR, MR) を活用したアプリである場合に指定
    • XRを活用しない一般的なアプリではチェック不要
    • HoloLens以外のヘッドセットを使用するアプリ(VRヘッドセットなどで仮想空間にはいるアプリなど)では「PC」をチェック、HoloLensを使用するMR活用アプリの場合は「HoloLens」をチェック
    • PCを選択した場合はページ下部の Minimum Hardware / Recommended Hardware で「Windows Mixed Reality immersive headset」をチェックする必要がある
    • PCを選択した場合は Boundary setup も設定する必要がある
      • Seated + standing:ユーザが座ったまま使えるアプリ
      • All experiences:ユーザが部屋の中を動き回ったりする必要のあるアプリ
  • Product declarations
    • 製品の細かい設定項目
    • 「This product allows users to make purchases, but does not use the Microsoft Store commerce system.」
      • 課金アプリだったり、アドオンでサブスクやったりして、Storeでの決済処理や税部対応が必要なアプリの場合はチェック
    • 「This product has been tested to meet accessibility guidelines.」
      • WCAG 2.1 AA などの国際的なアクセシビリティガイドラインに準拠していることを確認済みである場合はチェック
    • 「Customers can install this product to alternate drives or removable storage.」
      • デフォルトでチェック済み
      • アプリがCドライブのデフォルトパス(C:\Program Files または C:\Program Files (x86) )以外のパスにインストールされても正常に動作する場合はチェック
    • 「Windows can include this product’s data in automatic backups to OneDrive.」
      • アプリが出力するデータをOneDriveでバックアップしても問題ない場合はチェック
      • 基本的には %USERPROFILE%\Documents, Pictures, AppData にデータを保存する場合が対象
      • 保存するデータがなければチェック外してOK
      • [C#][.NET][WinUI 3] アプリの設定の保持の仕方 – GrapeJuice=Motorvlog で保存している設定は対象外なので、これがあっても保存データがなければチェック外してOK
    • 「Customers can use Windows 10/11 features to record and broadcast clips of this game.」
      • ゲーム以外はチェック外す
      • ゲームだが画面キャプチャを禁止する場合チェックは外す
      • 申請の一番最初の時にGameを選択しており、かつこの項目でチェックがついていると XBox Game Bar (Win+G) で録画ができるっぽい
    • 「This product supports pen and ink input.」
      • アプリがInkCanvasWindows.UI.Input.Inking API を使用しており、ペン入力をサポートしている場合はチェック
  • System requirements
    • アプリのハードウェア要求
    • アプリを使用するにあたって必要なハードウェア要件を指定(キーボード・マウスの有無など)

Age rating

先頭にアプリのIARC証明書IDを持っているかの選択肢が表示されるので、適切な法を選択する。(持っていない場合はこのページでのいくつかの質問に答えてRatingを決定する。)
持っている場合は選択時にID入力欄が表示されるので入力すればOK。

持っていない場合は質問に回答する。回答の内容によって質問の項目が変わるのでここでは省略する。

最終的に上記のようにRatingが出ればOK。

Packages ※この項目だけ内容多いです

ここでアプリパッケージのアップロードを行う。
アップロードできるファイル形式は以下。

  • .msix
  • .msixbundle
  • .msixupload
  • .appx
  • .appxbundle
  • .appxupload
  • .xap

ファイルアップロードのほかに、Visual Studio ではプロジェクトと Partner Center で作成したアプリを紐づけて、直接出力することも可能です。
今回はその方法でアプリパッケージをアップロードしてみます。

ソリューションエクスプローラーで対象のプロジェクトを右クリック >「パッケージ化して公開する」>「アプリケーションとストアを関連付ける」を選択します。

ポップアップが表示されるので「次へ」を選択します。
Visual Studio は開発者アカウントであらかじめサインインしておきましょう。

サインインしている開発者アカウントで作成したアプリパッケージが表示されるので、これを選択して「次へ」を選択します。

関連付ける内容が表示されるので、間違っていないことを確認したうえで「関連付け」を選択します。

これでアプリの関連付けが完了しました。
これは最初の1回だけ行えばOKです。

次に作成したアプリをアップロードします。

パッケージ作成の前に、必要であればアプリの信頼度・ランタイム動作の設定をしておいてもよいです。
設定は Package.appxmanifest ファイルの下記項目です。

内容は以下のようにすればいいです。
ただし、一般的にはすべて右のMediumIL / PackagedClassicApp の構成でよく、(設定なし)のときはデフォルトでこちらになるので、あくまで明示的に指定したい場合だけ設定すればいいと思います。

目的厳格なサンドボックス環境で動かしたい場合(本来UWP向け?)制約なしで動作させたい場合・WinRT / UWP API を利用したい場合
(デフォルト)
信頼レベルAppContainerMediumIL
ランタイムの動作WindowsAppPackagedClassicApp

ソリューションエクスプローラーで対象のプロジェクトを右クリック >「パッケージ化して公開する」>「アプリ パッケージの作成」を選択します。

アプリの関連付けを行った状態のとき、配布方法に「○○により {アプリ名} として Microsoft ストアに」と表示されるので、それを選択して「次へ」を選択します。

作成するアプリパッケージの内容を設定します。
詳細は青文字部分がリンクになっているのでそこを参照してください。
今回は以下の構成で作成します。

「作成」ボタンを選択すると .msix ファイルが作成され、以下の画面が表示されます。
作成したパッケージは Partner Center にアップロードする前に検証を行う必要があります。
基本的にはこのまま「Windowsアプリ認定キットを起動する」を選択すればいいです。
下記の出力場所を覚えておいてください。以降このパスが表示されることがないのでどこかわからなくなります。
あと、x64/x86の両方をパッケージ化した場合、下記に表示されるパスにはx64またはx86のいずれかのパスしか表示されません。パス内の「x64」「x86」の部分を置き換えたパスにあると思うので、アプリパッケージをアップロードする際にはそこからmsixファイルを拾ってください。

基本的にはすべて選択した状態で「次へ」を選択。

以下の画面になれば検証合格です。
msix ファイルをPartner Centerにアップロードしましょう。

アップロードすると下記画面のようになります。
今回は x64 と x86 の2つのパッケージをアップロードしたので2つ項目が表示されています。(正直 x86 のパッケージ作る必要ないと思いますが)

Device family availability セクションではアプリをどのプラットフォームで使用できるようにするかを指定できます。
デフォルトではサイト側で自動的に設定されて、色付きの項目すべてにチェックがついていると思いますが、お好みで対象のプラットフォームを変更して保存してください。

ところで上のほうのファイル名の下に「⚠️Package acceptance validation warning: The following restricted capabilities require approval before you can use them in your app: runFullTrust.」という警告が出ると思います。
これはアプリが runFullTrust という 制限付き機能 (restricted capability) を使っている(上記画像の赤枠参照)と表示される警告で、アプリがフルトラストでの実行(=通常のデスクトップアプリのような自由度の高い動作) を必要とする場合に必要なものになります。
そんな設定してないよと思うかもしれませんが、これは Desktop Bridge という技術(.NET や Win32 アプリが UWP API や WinRT API を利用できるようにしつつ MSIX にパッケージングすることでStore配布を可能にさせる技術)を使ってパッケージ化したアプリが必要になる機能で、WinUI 3 や WPF, Electron などが対象となります。
Visual Studio の WinUI 3 プロジェクトテンプレートではデフォルトで runFullTrust となっており、これを変更するには明示的な指定 (Partial Trust) が必要になります。
ただ、一部 WinRT / UWP API の利用が制限されるため、わざわざ変更するメリットはないと思います。

ちなみに、Partial Trust か Full Trust かの設定は Package.appxmanifest の信頼レベルが該当します。
AppContainer が Partial Trust に該当し、厳格なサンドボックス環境でアプリが動作し、ファイルアクセスやCOMの利用に制限がかかります。
MediumIL が Full Trust に該当し、ユーザ権限でのフルトラストなアプリの信頼レベルになります。

上記警告については一旦無視してOKです。
後述する Submission Options セクションでこの警告について説明する欄があるので、そこでどうすればいいか記載します。

長々と書きましたが、ここまでが Packages の設定内容です。

Store listings

ストアに表示される説明文やアイコン・バナー画像などの設定。

アプリパッケージをアップロードすれば、上側の「Languages supported in packages」に言語が追加されます。
アプリのサポート言語設定を特に設定していない場合は、デフォルトで英語だけサポートしている状態になると思います。
この言語名の部分のリンクを選択すると、その言語における設定を表示することができます。
また、アプリはサポートしていないがストアで表示させたい言語がある場合(この記事を見ている人は日本語がそれに該当すると思います)、下の「Additional Store listing languages」の「Manage additional languages」ボタンを選択することで追加の言語を選択することが可能です。
言語を追加した場合は一度「Save」ボタンを選択して内容を保存しないと、言語名の部分がリンクになりませんので、先に保存しましょう。

登録する言語の数だけ以下を登録します。

  • Product name(必須)
    • 製品名
    • 最初に登録した名前と別にしたい場合は追加で登録可能
  • Description(必須)
    • 説明文
    • アプリがどのようなものか記載する
  • What’s new in this version
    • 更新内容
  • Product features
    • アプリの特徴的な機能の概要を記載
    • Add more を押すと項目を追加でき、最大で20個記述可能
  • Screenshots(最低1枚必須)
    • Storeでアプリページを開いた時に表示されるスクリーンショット
    • デスクトップとXBOXそれぞれで設定可能
    • 画像の拡張子や解像度などの指定は Partner Center のページ右側参照
  • Store logos
    • Poster art はXBOXで表示されるロゴ
    • Box art はデスクトップで表示されるロゴ
    • 通常のデスクトップアプリであれば最低限 Box art だけ設定すればOK
  • Trailers and additional assets
    • スクリーンショットと同じ欄に表示する追加のトレーラー動画や画像
  • Choose a trailer to play at the top of your Store listing
    • トレーラー動画を設定した場合、スクリーンショット欄の先頭に表示するトレーラー動画を選択可能
  • Windows and Xbox image
    • Super hero art を設定すればアプリページのヘッダの背景画像を設定可能
    • XBOX 向けには追加の画像設定欄あり
  • Supplemental fields
    • (おそらく)XBOX 向けの設定項目のようなので省略
  • Additional information
    • Keywords でアプリの検索関連ワードを設定
    • Copyright and trademark info にはコピーライトを記載
      • Copyright© 2025 {開発元}. All rights reserved.
    • Additional license terms で追加のライセンスを記載(商用利用の制限や再配布禁止など)
    • Developed by に開発元を記載

Submission options

  • Publishing hold options
    • いつ公開するか設定
    • ASAP or 公開ボタン押したら or 指定日時
  • Notes for certification
    • Microsoft 側のテスターが検証をするにあたって伝えておくべき情報
    • 左側項目の「Supplemental info」>「Additional Testing Information」へのリンクが置かれているので、そちらで記載する
  • Restricted capabilities
    • アプリに与える権限のうち、一部においては権限が必要な理由の説明が必要
    • WinUI 3 アプリを公開する場合の制約 により runFullTrust が与えられている場合にもこの項目が必要(不要な場合はたぶんこの項目が表示されません)
      • この場合は「Because it is a store registration by AppPackage using the bridge of the desktop application, runFullTrust is necessary.」と記載すればOK
  • Submission notification audience
    • 検証完了して公開が可能な状態になったら通知をもらう人を指定

入力が完了したら…

はい、ここまでですべての項目が入力完了しました。
項目がすべて Complete になっていればOKです。

アプリが有料の場合、口座情報の紐づけを先に行っておく必要があります。
方法は おまけ:口座情報の紐づけ を参照して下さい。

以上が完了したら、いよいよ公開です。
「Submit for certification」を選択して検証しましょう。検証が Pass すれば指定タイミングでアプリが公開されます。

おわりに

公開準備も結構大変ですね…
実際に Store に公開しながら都度書き足していったので、わかりにくいまとめかとは思いますが、ご容赦ください。

この「おわりに」セクションもアプリが配布されていることを確認する前に書いているので、何か間違っているかもしれません。
その時は都度修正していきます。

次ページ以降におまけを置いているので必要に応じて見てみてください。

投稿者 ぶどうじゅーす【公式】

多趣味な人です

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です