desktop(installer): add icon generation script and ensure installer/uninstaller use multi-res ICO\n\n- Add apps/desktop/scripts/build-icon.mjs using png-to-ico\n- Add script in apps/desktop/package.json\n- Set NSIS uninstallerIcon to icons/icon.ico\n\nUsage: pnpm -C apps/desktop install && pnpm -C apps/desktop gen:icon && pnpm -C apps/desktop tauri build --bundles nsis

This commit is contained in:
Esdras Renan 2025-10-20 11:39:16 -03:00
parent f986fc667d
commit 29d5a07588
4 changed files with 42 additions and 1 deletions

View file

@ -7,7 +7,8 @@
"dev": "vite", "dev": "vite",
"build": "tsc && vite build", "build": "tsc && vite build",
"preview": "vite preview", "preview": "vite preview",
"tauri": "node ./scripts/tauri-with-stub.mjs" "tauri": "node ./scripts/tauri-with-stub.mjs",
"gen:icon": "node ./scripts/build-icon.mjs"
}, },
"dependencies": { "dependencies": {
"@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-tabs": "^1.1.13",
@ -21,6 +22,7 @@
"react-dom": "^19.0.0" "react-dom": "^19.0.0"
}, },
"devDependencies": { "devDependencies": {
"png-to-ico": "^3.0.4",
"@tauri-apps/cli": "^2", "@tauri-apps/cli": "^2",
"@vitejs/plugin-react": "^4.3.4", "@vitejs/plugin-react": "^4.3.4",
"typescript": "~5.6.2", "typescript": "~5.6.2",

View file

@ -0,0 +1,38 @@
#!/usr/bin/env node
import { promises as fs } from 'node:fs'
import path from 'node:path'
import pngToIco from 'png-to-ico'
async function fileExists(p) {
try { await fs.access(p); return true } catch { return false }
}
async function main() {
const root = path.resolve(process.cwd(), 'src-tauri', 'icons')
const candidates = [
'icon-512.png',
'icon-256.png',
'128x128@2x.png',
'icon-128.png',
'icon-64.png',
'icon-32.png',
]
const sources = []
for (const name of candidates) {
const p = path.join(root, name)
if (await fileExists(p)) sources.push(p)
}
if (sources.length === 0) {
console.error('[gen:icon] Nenhuma imagem base encontrada em src-tauri/icons')
process.exit(1)
}
console.log('[gen:icon] Gerando icon.ico a partir de:', sources.map((s) => path.basename(s)).join(', '))
const buffer = await pngToIco(sources)
const outPath = path.join(root, 'icon.ico')
await fs.writeFile(outPath, buffer)
console.log('[gen:icon] Escrito:', outPath)
}
main().catch((err) => { console.error(err); process.exit(1) })

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

View file

@ -53,6 +53,7 @@
"nsis": { "nsis": {
"displayLanguageSelector": true, "displayLanguageSelector": true,
"installerIcon": "icons/icon.ico", "installerIcon": "icons/icon.ico",
"uninstallerIcon": "icons/icon.ico",
"headerImage": "icons/nsis-header.bmp", "headerImage": "icons/nsis-header.bmp",
"sidebarImage": "icons/nsis-sidebar.bmp", "sidebarImage": "icons/nsis-sidebar.bmp",
"installMode": "perMachine", "installMode": "perMachine",