アプリをMicrosoft Storeに提出してみる

# 背景

https://www.microsoft.com/store/productId/9PM1C2QD2DVC

弊社のイベントで、家計簿アプリ Kakeibo というアプリを自作し、Microsoft Storeに提出してみましたが、Microsoft Storeに提出することはQiitaの記事のネタとしては良いのでは？と思ったので、記事に書き起こしてみます。初回の審査ではKakeibo v0.1.3.0を提出しました。今回は少々手をいれて、Kakeibo v0.2.0.0 として審査に提出したいと思います。

# Microsoft Store アプリのリリース手順

私が普段 Microsoft Store にアプリを提出する手順を紹介します。

1. Visual Studioでビルドする
2. Package.appxmanifest に書かれるバージョン番号を更新する
3. コマンドプロンプトで`dotnet publish`する
4. Microsoftパートナーセンターでアプリ申請の準備をする
5. アプリの情報を記入する
6. アプリ申請を提出する
7. Microsoft Storeのスタッフが申請内容を審査する（実機テストも含みます）
8. （審査不合格の場合）アプリまたは申請の修正対応する
9. Microsoft Storeに公開される 

## 1. Visual Studioでビルドする

ビルドをします。この時Releaseビルドにした方が良いでしょう。
なぜなら、提出するファイル（msixファイルです）に含まれるのは普通Releaseビルドです。
デバッグシンボルが含まれているDebugビルドでは製品として余分な情報が含まれています。
Releaseビルドをして、それらを削減しましょう。

## 2. Package.appxmanifest に書かれるバージョン番号を更新する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/dd2f8a0f-3cdf-0da3-8a34-60f7a884294c.png)

Package.appxmanifestはPlatforms/Windowsにあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/fab4c141-7335-4f3b-673f-42812961292e.png)

この、Identity要素のVersion属性の値をリリースするバージョンに差し替えます。

## 3. コマンドプロンプトで`dotnet publish`する

msixファイルを生成するには、コマンドプロンプトで`dotnet publish`コマンドを叩くのが楽でいいと思います。
具体的には

```
dotnet publish -f net7.0-windows10.0.19041.0 -c Release
```

みたいな感じです。`-f`スイッチにはターゲットフレームワーク（TargetFramework）を入力します。`-c`スイッチにはコンフィギュレーション（Configuration）を入力します。

私は上記のコマンドをバッチファイルにしてソリューションフォルダに含めています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/54016d37-ee46-bfeb-1651-86e2f939e9a1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/33438629-59d1-6948-4cbe-d16ea5add218.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/9f8d2ac3-7a10-18dd-7d8c-9b36011790c0.png)

msixファイルが発行されました。これはまだ署名がされていないので、このファイルをダブルクリックしても実際にインストールすることはできません。Microsoft Storeに提出して公開されるまでおあずけです。

## 4. Microsoftパートナーセンターでアプリ申請の準備をする

ブラウザで、[Microsoft パートナーセンター](https://partner.microsoft.com/)のウェブサイトを開き、サインインします。

アプリをMicrosoft Storeで取り扱ってもらうためには、アプリ開発者契約 - Microsoft Storeというのに契約する必要があります。お金がかかります。この手順については割愛します。

次に、[アプリとゲームのページ](https://partner.microsoft.com/ja-jp/dashboard/apps-and-games/overview)で、「新しい製品」→「MSIXまたはPWAアプリ」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/d0789a97-11bd-7d83-aa30-09f330c2bfbd.png)

ポップアップ画面でアプリの名前を予約します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/407d1d47-5cb6-411d-ab48-f8e50d234002.png)

アプリの名前の予約が済むと、次の画面に遷移します。(Ruteinは画面を説明するための仮名です)

### 新規の場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/79bb4edf-1448-1b90-8890-a13ee7e5214c.png)

新規申請の場合は「申請を開始する」をクリックします。

### 更新の場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/841b01fe-271e-c98f-ad45-14521e0b59c2.png)

更新の場合は、最新の申請の「更新」をクリックします。

## 5. アプリの情報を記入する

### 新規の場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/8226f355-b1cc-3402-6ab9-ed8d8634f204.png)

新規の場合だと、すべての項目が未開始という状態です。推奨状態以外の項目をすべて入力する必要があります。

### 更新の場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/285cf0cb-eb45-30ea-65d7-94f4a6e4b3d8.png)

更新の場合だと、一つ前の申請の状態を受け継いで、各項目のステータスがグリーンになっています。
更新したい項目をそれぞれ編集します。

ここからは新規、更新関わらず、アプリの2回目以降の提出の時とほぼ同じなため、例としてKakeiboの新しいバージョンを申請しながら説明してみます。

### 価格と提供の状況

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/35891157-aba2-57b6-160b-d12dc30a7a80.png)

市場は、アプリを提供する地域を、国単位で選択することができます。オプションの表示をクリックすると国のチェックボックスリストが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/2bab146f-b2e1-4ff1-76bb-7a626f587ebe.png)

表示範囲は一般ユーザーに提供するのか、もしくはプライベートなユーザーにのみ提供するのか選べます。

見つけやすさについては画像の通りです。

スケジュールについては、アプリの提供期間を定めることができます。リリースはアプリ提供開始日時、購入の停止はアプリ提供終了日時を指しているものと思われます。特定の市場向けにカスタマイズすることもできるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/df022f15-6a82-26f8-966d-860432396ed1.png)

基本価格について、これはアプリのMicrosoft Account 1アカウントに提供する時の価格です。これも特定の市場のみ価格を変更したりすることができるようです。

無料試用版については、字の通り、試用版を無料提供することが可能です。提供しないか、時間制限をかけるか、無制限を選べます。無料試用版ではプロダクトコード内に機能制限を設けるコードを仕込む事が多いです。

販売価格について、これはアプリの販売価格を期間限定で値下げしたりすることができる設定のようです。

組織のライセンスについて、これは文字通り組織がアプリをボリュームライセンスのようにボリューム購入することができる仕組みです。

### プロパティ

プロパティはアプリが属するカテゴリ、サブカテゴリを設定したり、アプリのサポートをする時に必要な連絡先を記入したり、システム要件を設定したりするページです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/cb650663-8507-4749-700b-c230fd8d4d8a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/e59e5ba0-a08e-d32a-3710-2edccfc6af91.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/08f73ee9-7a09-3d09-6c0b-9a0bdf6ac4db.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/0ef8dd5a-ae74-f1b7-091f-ce86d5b70c2b.png)


### 年齢別レーティング

年齢別レーティングは、いくつかの質問に答えることでレーティングを判定します。

以下はKakeiboの例です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/865c02bf-dcc5-e2e3-137c-1d6f74ac4e81.png)

### パッケージ

パッケージのページでは、いよいよmsixファイルなどの納品物を収めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/4fb91510-d477-28fc-4319-79a207b35d96.png)

アップロード中の様子。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/4f29c53a-11b4-4a5c-29aa-85a788c3b52c.png)

しばらく検証されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/4193b778-03bb-4df1-3e4a-2bbe7ea3c06a.png)

古いパッケージは削除リンクをクリックして、削除をするのが当たり前だと私は考えていますが、運用の仕方によっては過去アップロードしたパッケージも残す方もいるかもしれません。定石はよくわかりません。人によります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/0b8119b4-b051-44d5-c957-4406f0d43b31.png)


### Store登録情報

「言語の追加/削除」リンクから次の画面が開けます。
どの言語でアプリを提供するかを設定します。
ここで設定した言語の数だけ、次の作業でアプリの説明や最新情報（リリースノート）などをその言語で記入する必要があります。また、おそらくアプリで表示可能な言語に限られると推測されます。たぶんアプリで表示可能な言語以外をこのページで登録すると、審査が通らないのでは？と考えます。気をつけてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/7a44da35-9f85-83e5-c835-4919d2917fe6.png)

パッケージでサポートされている言語にリストアップされている言語をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/57c37693-7c55-8e40-403e-0562d219af0b.png)

以下は日本語の例です。

説明はおそらく必須です。
このバージョンの最新情報は初回のみ空白を許されます。2回目以降の申請だと、埋める必要があります。リリースノートの抜粋を書けばいいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/3a409ce8-da70-7a0b-047c-4190888aaef3.png)

スクリーンショットも1つ以上必要です。
イケてるスクリーンショットを貼りましょう。個人情報は含めないように気をつけてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/a09a9525-d192-0fd5-627a-7537048ee289.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/a39cf7c6-e325-9c8f-0db7-b86f642a8a60.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/56a3a2e9-dd33-28a4-ba88-d51d755372d7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/0fb1634e-5f8e-2edc-48bd-a4c6db5d63ef.png)

あと重要なのは著作権と商標の情報をちゃんと書きましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/247bd64e-a10c-3c6a-684c-68129f92f4ca.png)


### 申請オプション

申請オプションでは、公開の保留オプションや認定の注意書きが記入できます。
認定の注意書きでは、Microsoft Storeのテスターが実機でテストを行う際に、あった方がいい情報を添える目的で記入しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/cafcaedd-4b75-6bf5-66f6-4ba5c20a2506.png)


## 6. アプリ申請を提出する

これで、あとは「Microsoft Storeに提出」ボタンをクリックして、賽は投げられます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/61f61660-51cf-a103-d564-17a3cabb0adc.png)

## 7. Microsoft Storeのスタッフが申請内容を審査する（実機テストも含みます）

審査を待ちます。（1日～1週間営業日。Microsoft Storeの営業日は平日です。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/c14acbf5-cad3-344b-0711-768fe337a68a.png)

## 8. （審査不合格の場合）アプリまたは申請の修正対応する

審査不合格の場合、以下のようなメールが届きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/5b87ab41-b714-f121-3824-816989aa6934.png)

Microsoft パートナーセンターを確認すると、審査結果のレポートが閲覧できます。
※以下のレポートは初回審査の時のものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/22ae1ba6-8b00-3f53-9a14-e0a85cec0287.png)

簡単に説明すると、「10.1.2.10 Functionality」では「～でクラッシュしました」という報告。クラッシュする要因は徹底的に潰さなければ、審査は通りません。
また、「10.1.1.1 Inaccurate Representation」では「アプリ名がアプリの機能に則していません」という感じです。この時はまだアプリ名が「K2IB」という名前で分かりにくかったのは確かです。KaKeIBo、Kが2個とIBみたいな？
「10.1.4.3 App Quality - Description」では「アプリの説明が明瞭ではない」と言っています。

以上から、アプリ本体だけでなく、申請で書いた文章にも修正が及びました。

## 9. Microsoft Storeに公開される 

審査が無事終わると、以下のようなメールが届きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/937c4c20-3ddb-5f0c-163c-3f5a2fd2b068.png)

晴れて、Microsoft Storeに公開されました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4734/a1c0c910-484f-3d0b-10dd-4e605461c06c.png)

# まとめ

いかがでしたか？今回はアプリをMicrosoft Storeに提出することのみに焦点を絞って、記事を書きました。
.NET MAUIの知見が徐々に溜まりつつあるので、次はマウイの記事でも書きたいなー。

なお、弊社ではC#エンジニアを積極的に採用しています。ご興味ある方は是非。