UWPアプリにDesktop Bridgeを用いてPythonスクリプトを組み込んだアプリをMicrosoft Storeに提出して、承認されるまでの記録です。Windows アプリ認定キット (WACK)で警告が出てきたり、プロジェクトのテンプレートに修正が必要だったりと、アプリのパッケージ化・Microsoft Storeへの提出には注意が必要な点もいくつかありました。
[toc]今回の検証について
普段研究用の統計処理や画像解析、機械学習などのコードはPythonで書いているので、これをUWPアプリに組み込めないかと思い、実際にアプリを作成してMicrosoft Storeに提出して検証してみることにしました。
特に今回の検証では次のようなことを確かめることを目的としています。
- Desktop BridgeのFullTrustProcessLauncherで起動したプログラムからProcess.Startメソッドを使ってさらに外部アプリを起動できるのか?
- FullTrustProcessLauncherで.NET 5のアプリを起動させると、Windows アプリ認定キットで警告が出るが、無視して構わないのか?
- Desktop Bridgeを使って作成したアプリをMicrosoft Storeへ提出する際の認定手順は?
- 本当にUWPアプリにPythonのスクリプトを組み込むことは可能なのか?
作成したアプリ:Python-UWP サンプルアプリ
今回検証用に作成したアプリは以下の記事で作成した「Python-UWP サンプルアプリ」です。
Python-UWP サンプルアプリは、UWPアプリからFullTrustProcessLauncherでランチャーを起動し、ランチャーからProcess.Startメソッドでexeファイル化したPythonスクリプトを起動するアプリです。
アプリのパッケージ化
アプリパッケージの作成
アプリが完成したらパッケージ化して公開の準備をしましょう。作成したプロジェクトのうち、「Windowsアプリケーションパッケージプロジェクト」であるPython-UWP_Sampleから「公開」→「アプリパッケージの作成」でパッケージを作成します。
今回はx86でアプリを作成したので、パッケージ化の際もx86を指定しておきましょう。
Windows アプリ認定キット (WACK) を用いた検証
アプリパッケージの作成に成功したら、Windows アプリ認定キット (WACK)を用いて技術的な問題がないかどうかをチェックします。
「Python-UWP サンプルアプリ」の認定結果は一応合格となりましたが、警告が発生が発生しました。警告の内容は以下の通りで、「ブロック済みの実行ファイル」の項目での警告です。
UWPアプリでは、アプリパッケージに含まれない実行ファイルを呼び出すことは禁止されています。Windows アプリ認定キットでは実行ファイルの呼び出しの有無がチェックされ、その実行ファイルがアプリパッケージに含まれるかどうかは自分で判断する必要があるようです。エラーメッセージが多くその内容を1つ1つ見ていくことは難しかったのですが、プログラム上明らかに外部の実行ファイルを呼び出している箇所はなさそうだったので、ここではこの警告は無視して次に進むことにしました。
ちなみに、フレームワークを.NET Frameworkとして作成したexeファイルではWindows アプリ認定キットでエラーが出なくても、フレームワークを.NET 5に変更すると「ブロック済みの実行可能ファイル」の項目で警告が出るようになったので、.NET 5ではこの警告が出るのはあまり気にしなくてもよさそうでした。
Microsoft Storeへの提出
パッケージのMicrosoft Storeへのアップロード
ここまで出来たら、後はMicrosoft Storeに提出してみましょう。しかし、実際にここで作成した「Python-UWP サンプルアプリ」のパッケージをMicrosoft Storeにアップロードしてみると次のようなエラーが出てしまってアップロードが受け付けられませんでした。
- パッケージ受領の検証エラー:パッケージ○○の解析中に致命的なエラーが発生しました: Value cannot be null. Parameter name: source。
この原因は、Visual Studioで作成した「Windowsアプリケーションパッケージプロジェクト」のテンプレートのソースコードにあるようでした。プロジェクトの設定ファイル(ここではPython-UWP_Sample.wapproj)における以下のコードを削除してアプリのパッケージ化をやり直すことでアップロード時のエラーを消して、無事にアップロードできるようになりました。
...(略)...
<ItemGroup>
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.19041.8" PrivateAssets="all" />
</ItemGroup>
...(略)...
(これが「Windowsアプリケーションパッケージプロジェクト」のテンプレートのバグなのか仕様なのかは分かりませんでした)
「制限付き機能」の承認申請
パッケージのアップロードに成功すると次のような警告が出てきます。
これはアプリでFullTrustProcessLauncherを用いて外部アプリを起動する処理を組み込む場合は、そのことをアプリ提出時に宣言しておきMicrosoft Store提出時に承認を得る必要があるためです。
Microsoft Storeのアップロードページに次のフォームが追加されるので、ここでなぜFullTrustProcessLauncherを用いる必要があるのか、どのような機能に用いているのかを記載しておきましょう。
ちなみに、以前はMicrosoft Storeへの提出前に専用のフォームからFullTrustProcessLauncherを用いる承認を得てから、改めてMicrosoft Storeへの提出をする必要があったようなので、それに比べるとだいぶ手順は簡略化されているようでした。
後は必要な項目を入力してMicrosoft Storeへの提出を完了させましょう。承認にかかる時間はケースバイケースだと思いますが、今回のサンプルアプリの場合は2日ほどかかりました。アプリがMicrosoft Storeで承認されると、次のようにMicrosoft Storeに掲載されます。
今後の検討課題
以上のようにPythonの処理を組み込んだUWPアプリもMicrosoft Storeに承認され、このようなアプリも提出可能であることが示されました。ここではアプリのプラットフォームはx86に限定しており、またMicrosoft Storeでの提出時はデバイスファミリを「Windows 10 デスクトップ」だけに限定していますが、他のプラットフォームでも動作可能なのかはもう少し検証が必要です。
また、もう一つ気になる点として、アプリのパッケージ化の際は完成したアプリサイズが112MB程度だったのに、実体に提出してMicrosoft Storeに登録されたアプリサイズは295MBになっていました。
なぜこれほど大きなサイズになっているのかはよく分かりませんが、Pythonの処理を1つ組み込むだけで300MB近くのサイズになってしまうのはさすがに大きすぎるように思いました。実際にはPythonでインポートしているモジュール数などに依存するのだとは思いますし、Pythonのexeファイルへの変換方法によってはサイズは小さくできるはずですが、この点についてももう少し検証が必要と思われます。
コメント