From 1ce5151e598def55dad459ec2e553446441f676d Mon Sep 17 00:00:00 2001 From: Josh Knapp Date: Sun, 1 Mar 2026 00:49:08 +0000 Subject: [PATCH] Fix Rust build errors: use setup hook for window icon, enable image-png feature The previous approach used Builder::default_window_icon() which doesn't exist in Tauri 2.10. Instead, set the icon via window.set_icon() in the setup hook, and enable the "image-png" feature flag so Image::from_bytes can decode the PNG icon at runtime. Also change bundle identifier from "com.triple-c.app" to "com.triple-c.desktop" to avoid conflicting with the .app bundle extension on macOS. Co-Authored-By: Claude Opus 4.6 --- app/src-tauri/Cargo.toml | 2 +- app/src-tauri/src/lib.rs | 9 ++++++++- app/src-tauri/tauri.conf.json | 2 +- app/src/test/icon-config.test.ts | 9 +++++++-- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/app/src-tauri/Cargo.toml b/app/src-tauri/Cargo.toml index fffba15..7756ee0 100644 --- a/app/src-tauri/Cargo.toml +++ b/app/src-tauri/Cargo.toml @@ -12,7 +12,7 @@ name = "triple-c" path = "src/main.rs" [dependencies] -tauri = { version = "2", features = [] } +tauri = { version = "2", features = ["image-png"] } tauri-plugin-store = "2" tauri-plugin-dialog = "2" tauri-plugin-opener = "2" diff --git a/app/src-tauri/src/lib.rs b/app/src-tauri/src/lib.rs index 3bbb7d4..c01435c 100644 --- a/app/src-tauri/src/lib.rs +++ b/app/src-tauri/src/lib.rs @@ -18,7 +18,6 @@ pub fn run() { env_logger::init(); tauri::Builder::default() - .default_window_icon(tauri::image::Image::from_bytes(include_bytes!("../icons/icon.png")).expect("Failed to load window icon")) .plugin(tauri_plugin_store::Builder::default().build()) .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_opener::init()) @@ -27,6 +26,14 @@ pub fn run() { settings_store: SettingsStore::new().expect("Failed to initialize settings store"), exec_manager: ExecSessionManager::new(), }) + .setup(|app| { + let icon = tauri::image::Image::from_bytes(include_bytes!("../icons/icon.png")) + .expect("Failed to load window icon"); + if let Some(window) = app.get_webview_window("main") { + let _ = window.set_icon(icon); + } + Ok(()) + }) .on_window_event(|window, event| { if let tauri::WindowEvent::CloseRequested { .. } = event { let state = window.state::(); diff --git a/app/src-tauri/tauri.conf.json b/app/src-tauri/tauri.conf.json index 3c9724d..cfae16a 100644 --- a/app/src-tauri/tauri.conf.json +++ b/app/src-tauri/tauri.conf.json @@ -2,7 +2,7 @@ "$schema": "https://raw.githubusercontent.com/tauri-apps/tauri/dev/crates/tauri-cli/schema.json", "productName": "Triple-C", "version": "0.1.0", - "identifier": "com.triple-c.app", + "identifier": "com.triple-c.desktop", "build": { "beforeDevCommand": "npm run dev", "devUrl": "http://localhost:1420", diff --git a/app/src/test/icon-config.test.ts b/app/src/test/icon-config.test.ts index cad6c42..172cfa6 100644 --- a/app/src/test/icon-config.test.ts +++ b/app/src/test/icon-config.test.ts @@ -5,12 +5,17 @@ import { resolve } from "path"; describe("Window icon configuration", () => { const srcTauriDir = resolve(__dirname, "../../src-tauri"); - it("lib.rs sets default_window_icon using the app icon", () => { + it("lib.rs sets window icon using set_icon in setup hook", () => { const libRs = readFileSync(resolve(srcTauriDir, "src/lib.rs"), "utf-8"); - expect(libRs).toContain("default_window_icon"); + expect(libRs).toContain("set_icon"); expect(libRs).toContain("icon.png"); }); + it("Cargo.toml enables image-png feature for icon loading", () => { + const cargoToml = readFileSync(resolve(srcTauriDir, "Cargo.toml"), "utf-8"); + expect(cargoToml).toContain("image-png"); + }); + it("icon.png exists in the icons directory", () => { const iconPath = resolve(srcTauriDir, "icons/icon.png"); expect(existsSync(iconPath)).toBe(true);