fix(ui): Application icon on macos and windows (#74)

* change cargo-packager config to fix application icon on macos

* fix: add windows icon fixes

* chore(pkg): add cargo-packager removed stuff and clean build.rs

* fix: compile issue on unix

---------

Co-authored-by: Suyog Tandel <git@suyogtandel.in>
This commit is contained in:
Fabrice Bellamy
2026-02-28 22:45:17 +01:00
committed by GitHub
co-authored by Suyog Tandel
parent f6b9887f7f
commit c0412aff74
6 changed files with 106 additions and 51 deletions
+6 -1
View File
@@ -1,2 +1,7 @@
[alias]
run-watch = "watch -c -x check -x run"
run-watch = "watch -c -x check -x run"
# [target.'cfg(all(windows, target_env = "msvc"))']
# rustflags = ["-C", "target-feature=+crt-static"]
# rustflags = ["-C", "link-arg=/MANIFESTUAC:level='requireAdministrator' uiAccess='false'"]
# rustflags = ["-C", "target-feature=+crt-static", "-C", "link-arg=/MANIFESTUAC:level='requireAdministrator' uiAccess='false'"]
Generated
+12
View File
@@ -4326,6 +4326,7 @@ dependencies = [
"serde",
"serde_cbor_2",
"serde_json",
"tauri-winres",
"thiserror 2.0.18",
]
@@ -6018,6 +6019,17 @@ dependencies = [
"objc",
]
[[package]]
name = "tauri-winres"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1087b111fe2b005e42dbdc1990fc18593234238d47453b0c99b7de1c9ab2c1e0"
dependencies = [
"dunce",
"embed-resource",
"toml 0.9.12+spec-1.1.0",
]
[[package]]
name = "tempfile"
version = "3.25.0"
+43 -5
View File
@@ -5,14 +5,15 @@ description = "An open source commissioning tool for Pico FIDO security keys. De
authors = ["Suyog Tandel", "PicoForge Contributers"]
license = "AGPL-3.0"
edition = "2024"
build = "build.rs"
[dependencies]
# tokio = { version = "1.49", features = ["full"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
log = "0.4" # Logging facade
log4rs = "1" # For logging to output (like stdout)
directories = "6" # For Applcation config/data dir handling
log = "0.4" # Logging facade
log4rs = "1" # For logging to output (like stdout)
directories = "6" # For Applcation config/data dir handling
# For device management backend:
pcsc = "2" # Standard Smart Card API (connect to the key)
@@ -43,7 +44,44 @@ codegen-units = 1 # Allows LLVM to perform better optimization.
lto = true # Enables link-time-optimizations however is not stable.
opt-level = 3 # Prioritizes speed. Use `z` if you prefer small binary size.
# panic = "abort" # Higher performance by disabling panic handlers.
strip = true # Ensures debug symbols are removed.
strip = true # Ensures debug symbols are removed.
[target.'cfg(windows)'.build-dependencies]
tauri-winres = "0.3"
# Tauri winres config:g
[package.metadata.tauri-winres]
FileDescription = "An open source commissioning tool for Pico FIDO security keys."
ProductName = "PicoForge"
OriginalFilename = "picoforge.exe"
LegalCopyright = "Copyright © 2026 Suyog Tandel"
# Cargo-Packager config:
[package.metadata.packager]
# before-packaging-command = "cargo build --release"
name = "picoforge"
productName = "picoforge"
description = "An open source commissioning tool for Pico FIDO security keys. Developed with Rust and GPUI."
category = "Utility"
authors = ["Suyog Tandel", "PicoForge Contributers"]
identifier = "in.suyogtandel.picoforge"
license_file = "LICENSE"
icons = [
"./static/appIcons/icon.icns",
"./static/appIcons/icon.png",
"./static/appIcons/icon.ico",
]
[package.metadata.packager.macos]
info_plist_path = "Info.plist"
[package.metadata.packager.linux]
generate_desktop_entry = false
[package.metadata.packager.appimage]
excluded_libraries = ["libpcsclite*.so*"]
files = { "data/in.suyogtandel.picoforge.desktop" = "usr/share/applications/in.suyogtandel.picoforge.desktop", "static/appIcons/in.suyogtandel.picoforge-symbolic.svg" = "usr/share/icons/hicolor/symbolic/apps/in.suyogtandel.picoforge-symbolic.svg", "static/appIcons/in.suyogtandel.picoforge.svg" = "usr/share/icons/hicolor/scalable/apps/in.suyogtandel.picoforge.svg" }
# NOTE: The paths for .deb packages needs to be verified not sure about these.
[package.metadata.packager.deb]
files = { "data/in.suyogtandel.picoforge.desktop" = "usr/share/applications/in.suyogtandel.picoforge.desktop", "static/appIcons/in.suyogtandel.picoforge-symbolic.svg" = "usr/share/icons/hicolor/symbolic/apps/in.suyogtandel.picoforge-symbolic.svg", "static/appIcons/in.suyogtandel.picoforge.svg" = "usr/share/icons/hicolor/scalable/apps/in.suyogtandel.picoforge.svg" }
+32
View File
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>picoforge</string>
<key>CFBundleExecutable</key>
<string>picoforge</string>
<key>CFBundleIconFile</key>
<string>icon.icns</string>
<key>CFBundleIdentifier</key>
<string>in.suyogtandel.picoforge</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>picoforge</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>0.4.1</string>
<key>CFBundleVersion</key>
<string>0.4.1</string>
<key>CSResourcesFileMapped</key>
<true/>
<key>LSRequiresCarbon</key>
<true/>
<key>NSHighResolutionCapable</key>
<true/>
</dict>
</plist>
-45
View File
@@ -1,45 +0,0 @@
name = "picoforge"
productName = "picoforge"
description = "An open source commissioning tool for Pico FIDO security keys. Developed with Rust and GPUI."
category = "Utility"
version = "0.4.0"
authors = ["Suyog Tandel", "PicoForge Contributers"]
identifier = "in.suyogtandel.picoforge"
license_file = "LICENSE"
icons = [
"./static/appIcons/in.suyogtandel.picoforge.svg",
"./static/appIcons/icon.png",
"./static/appIcons/icon.ico",
"./static/appIcons/icon.icns",
"./static/appIcons/32x32.png",
"./static/appIcons/64x64.png",
"./static/appIcons/128x128.png",
"./static/appIcons/128x128@2x.png",
"./static/appIcons/Square30x30Logo.png",
"./static/appIcons/Square44x44Logo.png",
"./static/appIcons/Square71x71Logo.png",
"./static/appIcons/Square89x89Logo.png",
"./static/appIcons/Square107x107Logo.png",
"./static/appIcons/Square142x142Logo.png",
"./static/appIcons/Square150x150Logo.png",
"./static/appIcons/Square284x284Logo.png",
"./static/appIcons/Square310x310Logo.png",
"./static/appIcons/StoreLogo.png",
]
# beforePackagingCommand = "cargo build --release"
binaries = [{ main = true, name = "picoforge" }]
# outDir = "packaging/cargoPackager"
[linux]
generateDesktopEntry = false
[appimage]
excludedLibs = ["libpcsclite*.so*"]
files = { "data/in.suyogtandel.picoforge.desktop" = "usr/share/applications/in.suyogtandel.picoforge.desktop", "static/appIcons/in.suyogtandel.picoforge-symbolic.svg" = "usr/share/icons/hicolor/symbolic/apps/in.suyogtandel.picoforge-symbolic.svg", "static/appIcons/in.suyogtandel.picoforge.svg" = "usr/share/icons/hicolor/scalable/apps/in.suyogtandel.picoforge.svg" }
# NOTE: The paths for .deb packages needs to be verified not sure about these.
[deb]
files = { "data/in.suyogtandel.picoforge.desktop" = "usr/share/applications/in.suyogtandel.picoforge.desktop", "static/appIcons/in.suyogtandel.picoforge-symbolic.svg" = "usr/share/icons/hicolor/symbolic/apps/in.suyogtandel.picoforge-symbolic.svg", "static/appIcons/in.suyogtandel.picoforge.svg" = "usr/share/icons/hicolor/scalable/apps/in.suyogtandel.picoforge.svg" }
+13
View File
@@ -0,0 +1,13 @@
#[cfg(windows)]
use tauri_winres;
// Configures windows application resource.( fix for app icon and launching app as admin)
#[cfg(windows)]
fn main() {
let mut res = tauri_winres::WindowsResource::new();
res.set_icon("static/appIcons/icon.ico");
res.compile().unwrap();
}
#[cfg(unix)]
fn main() {}