Mini-Pkg: 各社パッケージングSDK調査
パッケージングSDKって何だよ。。という感があるが、
の話。あれから3年経って諸々出そろったので再度。
Yuniframeではプロジェクトをビルドする際にCMakeでパッケージを生成する必要もあるため、機能を検討しておく。
機能性の最小公約数
- 公式アプリストアをCDNとして利用する機能
- システム標準のダウンロードUIを提供し、その進捗とエラーを取得できる機能
- アプリの起動に必要な最低限のファイル群を設定できる機能
GoogleのPlay Asset Deliveryは更に同じ仕組みでアプリのアップデート機能もカバーしている等細部は各社違いがある。また、Amazonのように公式ストアでこのスタイルのCDNを提供していない事業者も存在する。
TBD: 本体の設定言語や画面サイズによるアセットの打ち分けのサポート状況
Apple
- On Demand Resource: https://developer.apple.com/library/archive/documentation/FileManagement/Conceptual/On_Demand_Resources_Guide/
- Xcodeドキュメント: https://developer.apple.com/documentation/xcode/doing-advanced-optimization-to-further-reduce-your-app-s-size
- Unityのガイド: https://docs.unity3d.com/ja/2021.1/Manual/AppThinning.html
AppleはOn Demand Resource(ODR)という形でファイルを"タグ"に分類し、タグの単位でファイルを請求できる。昔のAppleTVには200MiBの本体容量制限があったが、後に撤回された。 現在は 4GBまで のアプリを配信できる 。
App の未圧縮サイズは合計 4 GB 未満でなければなりません。Apple Watch App は 75 MB 未満でなければなりません。
さらに、実行可能な命令の最大サイズも 500 MiB に限定されている。こちらはおそらくセキュリティ都合だろう。
この4GBのサイズはApp Storeで配信されるアプリの制約で、 ODRに設定されるリソースには別の制約がある 。App Storeの外部でアプリを配布する場合は4GBの制約を越えることができ、アプリ全体で20GB、アクティブになれるのが4GBとなる。また、1つのタグに所属できるリソースは合計512MBの制限がある。
パッチはmetadata-preservingでない。
Don’t rely on the creation and modification dates of files in your application bundle. The operating system updates your app using the update package, and updates files only if their content changes. It doesn’t update files because of changes to metadata; for example, the creation and modification dates.
Android(Play Asset Delivery)
- 本家: https://developer.android.com/guide/playcore/asset-delivery
- Unityのガイド: https://docs.unity3d.com/ja/2021.1/Manual/play-asset-delivery.html
GoogleのPlay Storeでサポートされている Play Asset Deliveryは、ファイルを install-time
fast-follow
on-demand
の3群に分け、個別に請求できる。
ただし、実はコレはシステム組込みの仕組みではなくあくまでPlay Storeのサービスであるため、 install-time
が通常の.apk内リソース同様 AAsset
でアクセスできるのと比較して、それ以外はAPIでパスを取得して普通のファイルAPIでアクセスするという違いが存在する。よってエンジンはこの点を隠蔽しておく必要がある。
最大サイズは今のところ.apk単体で150MiBなのが、 install-time
までの合計で1GiB、いわゆる .aabとして提出できる最大が2GiBとなる。ODRのタグに相当するasset-packの最大サイズが512MiB、50個までのpackを定義できる。
Amazon App Store (Amazon Fire、将来的にWindows11)
何もない 。外部配布を推奨している。
APKのファイルサイズの上限は、2.5GBです。ただし、ダウンロードとインストールをすばやく行えるようにサイズの小さいAPKファイルをデプロイし、アプリの初回起動時に追加のリソースをダウンロードしてユーザーのローカルファイルシステムに保存することをお勧めします。また、AmazonアプリストアではバイナリBLOB(.obb)がサポート対象外のため、適切なパスに置いた外部リソースをランタイム時にダウンロードしてからインストールするか、.obbファイルを含めずにコンパイルしたAPKを申請するかを選択してください。
上限は2.5GBあるため、通常のPlayStore向けのアプリが容量制限のために配布できないということは無い。
Microsoft Store
- ストリーミングインストールのコンテンツグループ: https://docs.microsoft.com/ja-jp/windows/msix/package/create-cgm
- MS Storeのサイズ要件: https://docs.microsoft.com/en-us/windows/uwp/publish/app-package-requirements
- ブロックマップ形式: https://docs.microsoft.com/ja-jp/windows/msix/app-package-updates
- パッケージAPIのドキュメント: https://docs.microsoft.com/ja-jp/uwp/api/windows.management.deployment?view=winrt-20348
- Unityのドキュメント: https://docs.unity3d.com/ja/2021.1/Manual/class-PlayerSettingsWSA.html#Streaming
... あんまり需要が無いからかストリーミングインストールの解説があっさり目だな。。
パッチはパッケージ内のファイルが64KiBのブロック単位でデルタパッチされる。
TBD: テスト方法。。?