バンドルするリソース
実行ファイルにコンパイルしないファイル(画像、テンプレート、JSON、その他のデータ)は resources/ ディレクトリに置きます。CLI はその内容をパッケージ後のアプリにコピーします。実行中のアプリは AppPaths::resource_dir() から読みます。起動時のカレントディレクトリには依存しません。
コンパイル時にバイトを埋め込む場合は BundledAssets と Application::assets を使います。カスタムフォントは別オプションです。フォントを参照してください。
#resources ディレクトリ
my-app/
├── resources/
│ ├── icon.png
│ ├── hero.png
│ └── copy/
│ └── template.txt
├── src/main.rs
└── quickgui.config.ts各ファイルは resources/ からの相対パスを保ちます。resources/hero.png は hero.png としてインストールされます。resources/copy/template.txt は copy/template.txt としてインストールされます。行き先の名前は、fonts、AppIcon.icns、quickgui.json などの予約名を置き換えてはいけません。
quickgui dev と quickgui build はどちらもこれらのファイルをステージします。設定に書いた追加パスが無いとビルドは失敗します。resources/ ディレクトリ自体は任意です。Rust の識別情報とフォントパスは、同じリソースディレクトリの quickgui.json に書かれます。
#追加ファイル
resources 設定で、同じパッケージ先に追加のファイルやフォルダをマージします。各追加パスはベース名でコピーされます。プロジェクトの resources/ フォルダはここに書かないでください。自動で含まれます。
import { defineConfig } from "@quickgui/cli";
export default defineConfig({
language: "rust",
name: "My App",
identifier: "com.example.my-app",
entry: ".",
resources: ["legal/NOTICE.txt", "vendor/data"],
fonts: ["assets/MyFont.ttf"],
});legal/NOTICE.txt は NOTICE.txt としてインストールされます。vendor/data は data/ としてインストールされます。
#インストール先
| Platform | Resource directory |
|---|---|
macOS .app | Contents/Resources |
Linux AppDir, AppImage, and .deb | Next to the executable (usr/bin) |
Linux install.sh tarball | Next to the executable (~/.local/<package>.app/bin) |
| Windows installer | Next to the executable in $INSTDIR |
実行時はパッケージ名を resource_dir() に結合してください。プロジェクトツリーやカレントディレクトリからは読まないでください。
#ファイルの読み込み
let hero = cx
.app_paths()
.unwrap()
.resource_dir()
.join("hero.png");
img(hero).size(160.0, 120.0)img はファイルシステムパスを受け取ります。他のファイルも同じ結合を使い、std::fs::read で読むか、バイトをバイナリ内に置く場合はコンパイル時の BundledAssets マップを読みます。
let bundle = BundledAssets::new()
.with("copy/template.txt", include_bytes!("../resources/copy/template.txt"))?;
let assets = Assets::new(bundle);相対画像パスはリソースディレクトリに対して解決されません。
#フォント
fonts は OpenType ファイルです。CLI はそれらをリソースディレクトリ内の fonts/ にコピーし、最初のウィンドウを開く前に quickgui.json から登録します。
export default defineConfig({
language: "rust",
name: "My App",
identifier: "com.example.my-app",
entry: ".",
fonts: ["assets/MyFont.ttf"],
});Application::font にバイトまたはアセットパスを渡すこともできます。フォントは resources/ の代わりにはなりません。画像や JSON は、そのディレクトリ、追加の resources リスト、または BundledAssets に置きます。
