Yuniframeパッケージングまつり
今迄面倒で真面目にやってこなかったパッケージングをひととおり実装してみるテスト。
そもそもパッケージングとは何か
iOSやAndroid、macやWindowsのように、いわゆるアプリストアのあるシステムでは、アプリケーションを "パッケージ化" する必要がある。
単にC/C++ソースコードをコンパイルしてリンクするだけでは不十分で:
- アプリケーションのアイコンや利用する機能を設定/宣言する
- パッケージに署名する
- ストアへの提出用にアーカイブする
といった処理を行う必要がある。
3つのパッケージング流儀
CMakeプロジェクトを想定した場合、パッケージングの流儀は3つに分類できる。
- 自分でSDKのコマンドを1つ1つ呼んでパッケージしなければならない派 -- SteamやEmscriptenがここに相当する。今回は扱わず後回し。
- ビルドシステムに統合: CMakeで生成できるプロジェクトファイルを利用してパッケージを作成する派 -- iOSやWindows Storeがこれに相当する。iOSの場合はXcode、Windowsの場合はVisual Studioが使え、これらのプロジェクトファイルはパッケージングの制御も含めてCMakeから行える。
- ビルドシステムに統合: Java -- Android。AndroidのビルドシステムはJavaが前提となっているため、CMakeでは生成できない。
ReactNativeや各種ゲームエンジンはこれらを抽象化しているが、Yuniframeは素のCMakeで記述できることに重きを置いているのでそれぞれに自前で対応する必要がある。
iOS / macOS
iOSはXcodeのプロジェクトを生成すれば良い。
Windows(UWP)とも共通する流れとしては、 add_executable
したターゲットに適切なプロパティを設定することで実行ファイルだけでなく .app
(フォルダ、mac流儀ではバンドルと呼ばれる) の作成もさせることができ、Xcodeは専用のコマンドでこれを提出/インストール用の .ipa
にエクスポートできる。
Windows UWP
普通にExecutableを作れば良い。ただし、標準のリンクコマンドラインは未だに間違っているので手動でライブラリを追加する必要がある。
一応現状の設定で最新のXbox SeriesSでも実行できることを確認した。ただ、XboxにおけるUWPはいつまで残るのか謎と言える。
UWPは地味に実行時のパーミッションチェックが厳しいようなので要注意。
Android
問題児 。Androidは自前のGradle pluginの形でSDKを配付しているため、アプリケーションのビルドはGradleで行わなければならない。Gradle 側にCMakeを呼出す機能があるので、GradleからCMakeプロジェクトを呼出す方向で実装した。