Win32アプリのMicrosoft Store申請



## はじめに

個人で開発していたWin32デスクトップアプリを、Microsoft Storeへ申請しようと思います。ここでは、Win32デスクトップアプリをStoreアプリとしてパッケージングする方法について情報共有したいと思います。

### 前提


- すでにVisual Studioにて開発した自作のWin32デスクトップアプリがあるものとして話を進めます。Store用のアプリの発行(パッケージング)もVisual Studio 2022上から操作します。
- すでにMicrosoftの開発者アカウント登録が済んでいるものとします。登録がまだの方は前の記事「[ElectronアプリのMicrosoft Storeアプリ申請](https://qiita.com/pochman/items/756a5446bec2ea0f16d8)」のリンクから登録してください。19ドル程度を一度払うだけ(年額ではない)なので、個人の勉強代としても高くないと思います。
- また、開発者登録したアカウントで「[マイクロソフトパートナーセンター](https://partner.microsoft.com/ja-jp/)」にログインできるか確認しておいてください。

## Visual Studio上でプロジェクトの追加

アプリをパッケージングする機能は、Visual Studioの「プロジェクト」として提供されています。アプリのコンパイル用のプロジェクトと同様に、ソリューションに追加してやることで、パッケージングを行えるようになります。主に次の手順で行います。

### 1. 目的のWin32デスクトップアプリのソリューションをVisual  Studioで開く

ストア配布したいアプリのプロジェクトを含むソリューションをVisual Studio で開きます。このソリューションにパッケージング用のプロジェクトを追加します。

### 2. Windowsアプリケーションパッケージプロジェクト(Wap)の追加

ソリューションエクスプローラからソリューションを右クリック→「追加」→「新しいプロジェクト」を選択します。すると図1のような画面になります。この図を参考に、「Windows アプリケーションパッケージプロジェクト」を選び、「次へ」をクリックします。今回はC++のアプリですが、言語に応じて対応するものを選びましょう。

![fig1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/aa776315-749e-8d36-9fd6-84b2f4dec94a.png) 
図1：Windows アプリケーションパッケージプロジェクトを追加する

プロジェクト名を選ぶことになりますので好きな名前を付けてください。今回のスクリーンショットでは「WapProjTemplate1」だったり、「WapForStore」だったり統一されていませんがご容赦ください。以後、ここで追加したWindows アプリケーションパッケージプロジェクトをWapと略記します。

### 3. WapにWin32デスクトップアプリのプロジェクトを紐づけ

図2のように、ソリューションエクスプローラにおいてWap以下の「依存関係」を右クリック→「プロジェクト参照の追加」を選ぶ

![fig2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/dad86ff1-0bb9-da8b-d9ac-10e569a01096.png)
図2

すると、図3のようにWin32デスクトップアプリのプロジェクトがリストアップされるので、選択します。ここで、リストに表示されない場合は、同じソリューションにWin32デスクトップアプリとWapのプロジェクトが入っているかどうかを確認してください。

![fig3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/eee1d423-b301-eaf0-993f-b5c1f4210529.png)
図3

### 4. ストア(パートナーセンター)との紐づけ

開発したアプリをパートナーセンターと紐づけます。ストアに登録せず、サイドローディングで試すだけなら、この節の内容はスキップできます。

大まかな手順としては、次のようになります。

4.1 パートナーセンターにログインし、アプリ名を予約(仮発行)します。

4.2 Visual Studioで今回パッケージングするアプリと、パートナーセンターで予約したアプリを紐づけます。

さて、4.1を行うには、方法は以前の記事「[ElectronアプリのMicrosoft Storeアプリ申請](https://qiita.com/pochman/items/756a5446bec2ea0f16d8)」を参考にしてください。ここでは4.1の作業は終わっているとして、4.2について説明します。

Visual StudioのソリューションエクスプローラにおいてWapを右クリック→「公開」→「アプリパッケージの作成」を選びます(図4)。

![fig4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/8399cf45-f3e3-e5cd-17bf-e057661af9bd.png)
図4

すると、図5のようにパートナーセンターで予約したアプリ名がリストアップされますので、これを選び「次へ」進みます。

![fig5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/d6e9272e-ba19-91cf-ee0a-eaa06574e578.png)
図5

これだけで上手くいくと思いますが、上手くいかない場合はアカウントを確認してください。おそらくVisual Studioのアカウントとパートナーセンターの開発者アカウントが同じアカウントである必要があります。

### 5. パッケージング

Win32アプリを実際にビルドし、配布ファイルとしてパッケージングしてみます。まずは、テストを兼ねて自分向けに「サイドローディング」形式のパッケージングを行ってみます。

図6のように、ソリューションエクスプローラにおいて、Wapを右クリック→「公開」→「アプリパッケージの作成」を選びます。

![fig6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/e36c750a-5bfd-9379-477d-636138e48f2b.png)
図6

すると、図7のようにパッケージングするアプリの種類が選べるので、ここでは「サイドローディング」を選びます。この図では選択肢は3つ表示されていますが、前節のストアとの関連付けをスキップした時は、第一の選択肢が表示されません。

![fig7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/50db1ef6-9477-632e-d13d-049c8a2babb1.png)
図7

次に進むと、図8の様に署名方法の選択になります。Store申請するには開発者を証明する署名が必要です。前節の方法でストアと関連付けた場合は、「Storeから選択」を選ぶと自動で入力されます。関連付けてない場合は何らかの方法で証明書ファイル`*.pfx`を作り、「ファイルから選択」を選びます。「作成」で新規に作ることが出来るかもしれませんが、今回はチャレンジしていませんので記載しません。

![fig8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/29d0469d-aaf3-8f1d-4b1d-789aee8e441d.png)
図8

上手くいくと、図9のように`件名：CN=`で始まる項目と、`拇印：`で始まる項目が入力されます。ここは大切な情報なので、他者に開示しないようにしましょう。

![fig9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/5c5a1f15-d93a-1658-773d-0b5090aea965.png)
図9

次へ進むと、図10の画面になります。パッケージングする時点での自作アプリのバージョン番号を入力します。「自動的に増加」のチェックを外すと、サブマイナー番号まで入力できます。発行先のディレクトリを確認し、右下の「作成」をクリックすれば、アプリがビルドされ、パッケージングされます。

![fig10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/d5749bf6-720a-8ccd-81c4-8e2d1ccd8af2.png)
図10

図11の様に表示されれば成功です。パスの青文字をクリックすると、発行先のディレクトリが開きます。

![fig11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/a211480f-ecf3-bcfe-b68e-8771a234127c.png)
図11

### パッケージ(サイドローディング)のお試しインストール

パッケージングされたファイルは、`*.msixbundle`という名前になっています。ダブルクリックすると、ンストールが始まりますので上手くいくか試してみましょう。

*補足：試しに作ったインストールパッケージをインストールしようとすると「同じ名前のアプリが既にインストールされているので云々～」というメッセージが出て失敗することがあります。パッケージ名は自動生成されたGUIDですが、これが被っているアプリがインストール済みの場合に起こるようです。私の場合は、以前にもUWPアプリやDirectXアプリのサンプルテンプレートで遊んでいたので、その時のテストアプリがインストールされたままになっていたようです。これらをアンインストールすれば無事に進みました。*

## Microsoft Store アプリとしての要件の確認

この後、実際にストアに申請して審査を受けることになると思いますが、合格するためには要件を満たしておく必要があります。 Windows SDKがインストールしてあれば、要件の確認用のアプリ「Windows App Cert Kit」もインストールされているでしょう。 Windowsメニューより、「Windows Kit」→「Windows App Cert Kit」を起動しましょう。

軌道に少し時間が掛かりますが、図12のように表示されると思います。ここで、上段の「検証するアプリを選択します」の欄で、ここまでに作ったパッケージファイル`*.msixbundle`を選択しましょう。これでアプリが要件を満たしているかどうか調べて、問題点を列挙してくれます。

![fig12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/a8d27aa5-a24a-23d0-08c9-add8d462e4e4.png)
図12

検証が終わると、図13のように表示されます。保存される`*.xml`ファイルもありますが、結果が見やすいのは、この画面上の青字で書かれた「結果を表示するにはここをクリックしてください」をクリックすると表示される`*.htm`ファイルでしょう。こちらはブラウザで表示されますので、保存しておきましょう。

![fig13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557342/dcd0d3f4-b8fe-ac4c-8bf5-1bb30e451b80.png)
図13

要件として、専用のアイコンを用意することも必要だったりしますので、頑張って絵も描きましょう。


## ストアアプリの申請

### 申請作業

Microsoftストアアプリの申請作業は、パートナーセンターのweb上で行いました。以前の記事「[ElectronアプリのMicrosoft Storeアプリ申請](https://qiita.com/pochman/items/756a5446bec2ea0f16d8)」を参考に進めてみてください。パートナーセンターのUIデザイン自体は多少変わっていますが、基本的な設定項目は同様です。

*Braveなどブロック機能のあるブラウザだと上手くいかない事例に実際に遭遇しました。ブロック機能はOFFにして行ってください*

### アプリのアップロード

申請要件の「パッケージ」の項目において、アプリをアップロードします。先ほどまでに**「サイドローディング」として作成した**アプリ`*.msixbundle`をここに追加してください。

### プライバシーポリシー用のwebページの準備

申請要件の「プロパティ」の中で、プライバシーポリシーに関する情報を記したwebページのURLを入力する必要があります。特に情報収集を行っているアプリではありませんが、その旨を記したwebページを準備する必要があります。github pagesを用意し次のように記載することで、審査を通過することができました。
```
Privacy Policy
- This application (AIScope) and developer do not collect any personal information or privacy-related information about user.
- The application and developer do not collect information of keyboard typing by user.
- The application and developer do not collect the information of files opened by the application.
```

### 審査の経過

審査には概ね半日～数日掛かるようです。また審査通過後も、実際にStoreでの検索で表示されるまでに少し時間が掛かります。ただ、Store用のwebページはすぐに作られるようなので、通過したらすぐに参照したい場合は、パートナーセンターの「製品管理」→「製品ID」の項目にて、「URL」や「プロトコルリンク」のURLへ進めば、Store上のページが見られます。

個人勢としては自分のアプリがStoreに並ぶのは感動しますね！


## まとめ

Win32アプリのMicrosoft Store向けのパッケージングについて纏めました。基本的には[MS公式サイト](https://learn.microsoft.com/ja-jp/windows/msix/desktop/desktop-to-uwp-packaging-dot-net)の情報を日本語に図を加えて再編集した自分用のメモですが、誰かのお役に立てば幸いです。

また、当初は厳しかったアプリの要件もだいぶ緩和されたようで、特に工夫もしていないWin32アプリがMicrosoft Store並べてもらえるようになりました。数年前のデスクトップブリッジ云々も特に意識することなくパッケージングすることもできましたし、Win32アプリ配布場所としてMicorosoft Storeは個人開発者にとって強い味方になった、という印象です。


### 参考

[MS公式サイト](https://learn.microsoft.com/ja-jp/windows/msix/desktop/desktop-to-uwp-packaging-dot-net)

  
[今回申請したアプリ：AIScope](https://www.microsoft.com/store/apps/9N72H5QXD0MW)