Open4

Yuniframeパッケージングまつり2

okuokuokuoku

iOS / macOS

add_executable に足して RESOURCE にする。

https://cmake.org/cmake/help/latest/prop_tgt/RESOURCE.html

パスを得るのが超むずかしい。SDLはBundle自体の filesystemRepresentation を取得して済ませている。

https://github.com/libsdl-org/SDL/blob/acf0f09320ec75528d74b1fd160090ea262c0698/src/filesystem/cocoa/SDL_sysfilesystem.m#L51

... これってディレクトリとして使えるって保証されてるんだっけ。。?

いちばん回りくどい方法はひとつひとつURLを得る方法。

https://stackoverflow.com/questions/54099589/in-ios-in-pure-c-is-this-the-way-to-get-a-local-file-path

アクセス

パスに変換したあとは普通のstdioが使える。

okuokuokuoku

Android

CMakeには ANDROID_ASSETS_DIRECTORIES プロパティがある。 ...なんで。。?

https://cmake.org/cmake/help/latest/prop_tgt/ANDROID_ASSETS_DIRECTORIES.html

AndroidのGradleはデフォルトで src/main/assets のようなディレクトリを使うので、そこに合わせて手動でコピーすることになるのではないか。

アクセス

AAsset API群でアクセスする。

https://developer.android.com/ndk/reference/group/asset

fd を得ることもできるが、パスの解決等をAAsset側に任せる必要があるのでReadも含めて抽象化してしまった方が良いと思う。圧縮リソースのfdを得ることはできないが、AAPT2 https://developer.android.com/tools/aapt2 は生assetを圧縮することは無い(はず)。

okuokuokuoku

Emscripten

さっき実装した。 emcc コマンドに --preload-file オプションに続けて 相対 パスを渡すとパッケージできる。 @ を続けてファイルのマッピングを書くことも。

https://zenn.dev/link/comments/e9252608c157e4

アクセス

普通のstdioでアクセスできるが、メインスレッドではブロッキングアクセスができないのに注意。Preloadで作成したファイルシステムはRAMディスクになるので普通に使えるが、アプリの起動時に全量をロードするため起動に時間が掛かる。