かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Qt 製のアプリを DesktopBridge でストアに公開する方法

意外と簡単だったのでメモします。

環境

  • Windows 10 Fall Creators Update
  • Visual Studio 2017
    • Qt Visual Studio Tools
  • Qt 5.10.0 for Windows

手順

配布対象のアプリケーションの準備

とりあえず私は Qt 製アプリを持ってないので適当に Qt GUI Application を作って下準備をしました。 新規作成した段階だとプロパティの一般のページにある Windows SDK バージョンが何故か 8.1 になっていたので Windows 10 の 10.0.xxxxx.0 に変更しておきます。

そして、リリースビルドをして exe を出力しておきます。

配布対象の依存ファイルを収集

exe が出来たので依存してる dll とかをとってきます。windeployqt.exe というコマンドで exe が依存してる Qt の dll ファイルをコピーしてくれるので実行します。

私の場合はこんな感じになりました。

C:\Users\xxxx\source\repos\QtGuiApplication1\x64\Release>C:\Qt\Qt5.10.0\5.10.0\msvc2017_64\bin\windeployqt.exe QtGuiApplication1.exe
C:\Users\xxxx\source\repos\QtGuiApplication1\x64\Release\QtGuiApplication1.exe 64 bit, release executable
Adding Qt5Svg for qsvgicon.dll
Skipping plugin qtvirtualkeyboardplugin.dll due to disabled dependencies (Qt5Qml Qt5Quick).
Direct dependencies: Qt5Core Qt5Widgets
All dependencies   : Qt5Core Qt5Gui Qt5Widgets
To be deployed     : Qt5Core Qt5Gui Qt5Svg Qt5Widgets
Warning: Cannot find Visual Studio installation directory, VCINSTALLDIR is not set.
Updating Qt5Core.dll.
Updating Qt5Gui.dll.
Updating Qt5Svg.dll.
Updating Qt5Widgets.dll.
Updating libGLESV2.dll.
Updating libEGL.dll.
Updating D3Dcompiler_47.dll.
Updating opengl32sw.dll.
Patching Qt5Core.dll...
Creating directory C:/Users/xxxx/source/repos/QtGuiApplication1/x64/Release/iconengines.
Updating qsvgicon.dll.
Creating directory C:/Users/xxxx/source/repos/QtGuiApplication1/x64/Release/imageformats.
Updating qgif.dll.
Updating qicns.dll.
Updating qico.dll.
Updating qjpeg.dll.
Updating qsvg.dll.
Updating qtga.dll.
Updating qtiff.dll.
Updating qwbmp.dll.
Updating qwebp.dll.
Creating directory C:/Users/kaota/source/repos/QtGuiApplication1/x64/Release/platforms.
Updating qwindows.dll.
Creating directory C:/Users/xxxx/source/repos/QtGuiApplication1/x64/Release/styles.
Updating qwindowsvistastyle.dll.
Creating C:\Users\xxxx\source\repos\QtGuiApplication1\x64\Release\translations...
Creating qt_bg.qm...
Creating qt_ca.qm...
Creating qt_cs.qm...
Creating qt_da.qm...
Creating qt_de.qm...
Creating qt_en.qm...
Creating qt_es.qm...
Creating qt_fi.qm...
Creating qt_fr.qm...
Creating qt_gd.qm...
Creating qt_he.qm...
Creating qt_hu.qm...
Creating qt_it.qm...
Creating qt_ja.qm...
Creating qt_ko.qm...
Creating qt_lv.qm...
Creating qt_pl.qm...
Creating qt_ru.qm...
Creating qt_sk.qm...
Creating qt_uk.qm...

VS のインストール場所の環境変数がないと言われていますが、欲しいのは Qt 関連のファイルだけなのでとりあえず大丈夫だと思いたい。

Windows アプリケーション パッケージ プロジェクトの作成

exe を作るプロジェクトと依存する dll が取得できたので次はソリューションに Windows アプリケーション パッケージ プロジェクトを追加します。そしてアプリケーションの項目に Qt のアプリケーションを追加します。 そして、 Windows アプリケーション パッケージ プロジェクトの下に Qt のプロジェクト名と同じフォルダを作って、その下に先ほど収集した依存する dll ファイルをまるっとコピーします。

現状こんな感じになってます。

f:id:okazuki:20171229164700p:plain

あとは、Windows アプリケーション パッケージ プロジェクトで右クリックしてストアからパッケージを作ります。今回はとりあえず x64 だけあればいいやって思ったので x64 だけにしてます。多くのプラットフォームで動かしたかったら x86 の方がいい感じですね。

x86 の appx に x64 のバイナリを含んでたりするとストアで審査落ちするので、こういう風に依存する dll みたいなバイナリをプロジェクトに含めるときはいい感じにする必要があるのですが… ターゲットが x86 か x64 でパッケージングするファイルをいい感じに仕分ける方法を知らないので、とりあえずどちらかのみを対象にするのが楽そうです。

ということでストアに提出するパッケージが出来ました。あとは、ストアに出すだけなので、以下のフォームから申し込みって感じですね。

Desktop Bridge Sign Up Form - Windows app development

まとめ

DesktopBridge はアプリの exe と依存するものを全て appx(実態はただの zip ファイル)に AppxManifest.xml というマニフェストファイルとともに固めるというだけのものになります。Windows 10 S で動作することが求められるため、外部から別途 exe や dll を所定のフォルダにおいて…というのは許されないという点にとりあえず気を付けていれば結構いけるんじゃないかと思います。

ということでお手持ちのアプリを Microsoft Store に出すのは、そう難しくないかも?という感じでした。