Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este guia demonstra como usar a CLI winapp com uma aplicação Tauri, para depurar utilizando a identidade do pacote e empacotar a sua aplicação como MSIX.
A identidade de pacote é um conceito central no modelo de Windows app. Permite que a sua aplicação aceda a APIs específicas do Windows (como Notificações, Segurança, APIs de IA, etc.), tenha uma experiência limpa de instalação/desinstalação e muito mais.
Para um exemplo completo e funcional, consulte o exemplo Tauri deste repositório.
Pré-requisitos
- Windows 11
-
Node.js -
winget install OpenJS.NodeJS --source winget -
Rust Toolchain - Instale o Rust usando rustup ou
winget install Rustlang.Rustup --source winget -
winapp CLI -
winget install microsoft.winappcli --source winget
Sugestão
Se já tiver estes instalados, execute os comandos winget install na mesma para verificar se há atualizações.
1. Criar uma nova aplicação Tauri
Comece por criar uma nova aplicação Tauri usando a ferramenta oficial de andaime:
npm create tauri-app@latest
Siga as indicações:
-
Nome do projeto:
tauri-app(ou o seu nome preferido) -
Linguagem frontend:
JavaScript -
Gestor de pacotes:
npm -
Modelo de interface:
Vanilla -
Estilo da interface de usuário:
JavaScript
Navegue até o diretório do seu projeto e instale as dependências:
cd tauri-app
npm install
Executa a aplicação para garantir que tudo está a funcionar:
npm run tauri dev
2. Atualizar o código para verificar a identidade
Vamos atualizar a aplicação para verificar se está a correr com identidade de pacote. Vamos usar o crate windows no backend do Rust para aceder às APIs do Windows e expô-las no frontend.
Alterações no backend (Rust)
Adicionar Dependência: Abra
src-tauri/Cargo.tomle adicione as seguintes linhas no final do ficheiro. Isto adiciona as ligações da API do Windows para que possamos verificar a identidade do pacote:[target.'cfg(windows)'.dependencies] windows = { version = "0.58", features = ["ApplicationModel"] }Adicionar Comando: Abre
src-tauri/src/lib.rse adiciona aget_package_family_namefunção. Coloque-o antes dapub fn run()função:#[tauri::command] fn get_package_family_name() -> String { #[cfg(target_os = "windows")] { use windows::ApplicationModel::Package; match Package::Current() { Ok(package) => { match package.Id() { Ok(id) => match id.FamilyName() { Ok(name) => name.to_string(), Err(_) => "Error retrieving Family Name".to_string(), }, Err(_) => "Error retrieving Package ID".to_string(), } } Err(_) => "No package identity".to_string(), } } #[cfg(not(target_os = "windows"))] { "Not running on Windows".to_string() } }Comando de Registo: No mesmo ficheiro (
src-tauri/src/lib.rs), atualiza arunfunção para registar o novo comando:pub fn run() { tauri::Builder::default() .plugin(tauri_plugin_opener::init()) .invoke_handler(tauri::generate_handler![greet, get_package_family_name]) // Add get_package_family_name here .run(tauri::generate_context!()) .expect("error while running tauri application"); }
Alterações na Frontend (JavaScript)
Atualize HTML: Abra
src/index.htmle adicione um parágrafo para mostrar o resultado:<!-- ... inside <main> ... --> <p id="pfn-msg"></p>Lógica de Atualização: Abrir
src/main.jspara invocar o comando e mostrar o resultado:const { invoke } = window.__TAURI__.core; // ... existing code ... async function checkPackageIdentity() { const pfn = await invoke("get_package_family_name"); const pfnMsgEl = document.querySelector("#pfn-msg"); if (pfn !== "No package identity" && !pfn.startsWith("Error")) { pfnMsgEl.textContent = `Package family name: ${pfn}`; } else { pfnMsgEl.textContent = `Not running with package identity`; } } window.addEventListener("DOMContentLoaded", () => { // ... existing code ... checkPackageIdentity(); });Agora, executa a aplicação como de costume:
npm run tauri devDeverás ver "Não em execução com identidade de pacote" na janela da aplicação. Isto confirma que a compilação de desenvolvimento padrão está a funcionar sem identidade de pacote.
3. Inicializar o Project com a linha de comando winapp
O winapp init comando configura tudo o que precisas de uma só vez: manifesto da aplicação e assets. O manifesto define a identidade da sua aplicação (nome, publicador, versão) que o Windows usa para conceder acesso à API.
Execute o seguinte comando e siga as indicações:
winapp init
Quando solicitado:
- Nome do pacote: Pressione Enter para aceitar o padrão (tauri-app)
- Nome do Publicador: Pressione Enter para aceitar o padrão ou inserir o seu nome
- Versão: Pressione Enter para aceitar 1.0.0.0
- Ponto de entrada: Pressione Enter para aceitar o padrão (tauri-app.exe)
- Configurar SDKs: Selecione "Não configurar SDKs" (o Tauri utiliza o crate do Rust, não os cabeçalhos do SDK C++)
Este comando irá fazer:
- Criar
Package.appxmanifest— o manifesto que define a identidade da sua aplicação - Criar
Assetspasta — ícones necessários para o empacotamento MSIX e envio para a loja
Note
Como nenhum pacote SDK está a ser gerido, nenhum winapp.yaml é criado — a Tauri usa o crate Rust windows via Cargo, pelo que não há nada para winapp restore/update rastrear.
Pode abrir Package.appxmanifest para personalizar ainda mais propriedades como o nome de visualização, publicador e capacidades.
4. Depuração com Identidade
Para depurar com identidade, precisamos de construir o backend do Rust e executá-lo com winapp run. Como npm run tauri dev gere o ciclo de vida do processo, é mais difícil injetar a identidade aí. Em vez disso, vamos criar um script personalizado. Não é necessário nenhum certificado ou assinatura para a depuração.
Adicionar Script: Abrir
package.jsone adicionar um novo scripttauri:dev:withidentity:"scripts": { "tauri": "tauri", "tauri:dev:withidentity": "cargo build --manifest-path src-tauri/Cargo.toml && (if not exist dist mkdir dist) && copy /Y src-tauri\\target\\debug\\tauri-app.exe dist\\ >nul && winapp run .\\dist" }O que este script faz:
-
cargo build ...: Recompila o backend do Rust. -
copy ... dist\\: Coloca apenas o exe numadistpasta (atarget\debugpasta é muito grande e contém artefactos intermédios de build que não fazem parte da tua aplicação). -
winapp run .\\dist: Regista um pacote de layout solto (tal como numa instalação real do MSIX) e inicia a aplicação.
-
Corra o Script:
npm run tauri:dev:withidentity
Sugestão
Pode ver uma janela de terminal/consola aparecer atrás da janela da aplicação — isto é normal em compilações de depuração do Tauri (é a consola do processo Rust).
Agora deve ver a aplicação aberta a mostrar o "Nome da família do pacote", confirmando que está a executar com identidade! Agora pode começar a usar e a depurar APIs que exigem identidade de pacote, como as Notificações ou as novas APIs de IA como a Phi Silica.
Sugestão
winapp run Também regista o pacote no seu sistema. É por isso que o MSIX pode aparecer como "já instalado" quando tentar instalá-lo mais tarde, no passo 5. Use winapp unregister para limpar os pacotes de desenvolvimento ao terminar.
Sugestão
Para fluxos de trabalho avançados de depuração (anexação de depuradores, configuração do IDE, depuração de arranque), consulte o Guia de Depuração.
5. Pacote com MSIX
Quando estiver pronto para distribuir a sua aplicação, pode empacotá-la como um MSIX, que fornecerá a identidade do pacote à sua aplicação.
Primeiro, adiciona um pack:msix script ao teu package.json:
"scripts": {
"tauri": "tauri",
"tauri:dev:withidentity": "...",
"pack:msix": "npm run tauri -- build && (if not exist dist mkdir dist) && copy /Y src-tauri\\target\\release\\tauri-app.exe dist\\ >nul && winapp pack .\\dist --cert .\\devcert.pfx"
}
O que este script faz:
-
npm run tauri -- build: Constrói o backend do Rust em modo de lançamento. -
copy ... dist\\: Coloca apenas o exe numadistpasta (atarget\releasepasta é muito grande e contém artefactos intermédios de build que não fazem parte da tua aplicação). -
winapp pack .\\dist --cert .\\devcert.pfx: Empacota e assina a aplicação como MSIX.
Gerar um Certificado de Desenvolvimento
Os pacotes MSIX têm de ser assinados. Para testes locais, gere um certificado de desenvolvimento autoassinado:
winapp cert generate --if-exists skip
Sugestão
O emissor do certificado deve corresponder ao Publisher no seu Package.appxmanifest. O cert generate comando lê isto automaticamente do teu manifesto.
Construir, Preparar e Empacotar
npm run pack:msix
Sugestão
O pack comando usa automaticamente o Package.appxmanifest do teu diretório atual e copia-o para a pasta de destino antes de o empacotamento. O ficheiro .msix gerado estará no diretório atual.
Instalar o Certificado
Antes de poderes instalar o pacote MSIX, precisas de confiar no certificado de desenvolvimento da tua máquina. Executa este comando como administrador (só precisas de o fazer uma vez por certificado):
winapp cert install .\devcert.pfx
Instalar e Executar
Sugestão
Se usou winapp run no passo 4, a encomenda pode já estar registada no seu sistema. Use winapp unregister primeiro para remover o registo de desenvolvimento, depois instale o pacote de lançamento.
Instale o pacote fazendo duplo clique no ficheiro gerado .msix , ou usando o PowerShell:
Add-AppxPackage .\tauri-app.msix
Sugestão
O nome do ficheiro MSIX inclui a versão e a arquitetura (por exemplo, tauri-app_1.0.0.0_x64.msix). Verifique o seu diretório para o nome exato do ficheiro. Se precisares de reempacotar após alterações de código, incrementa o Version no teu Package.appxmanifest — Windows requer um número de versão superior para atualizar um pacote instalado.
Depois de instalado, pode iniciar a sua aplicação a partir do menu Iniciar. Deves ver a aplicação a executar com autenticação.
Tips
- Quando estiver pronto para a distribuição, pode assinar o seu MSIX com um certificado de assinatura de código de uma Autoridade Certificadora, para que os seus utilizadores não tenham de instalar um certificado auto-assinado.
- A Microsoft Store assina o MSIX por si, não precisa de assinar antes de submeter.
- Pode ser necessário criar vários pacotes MSIX, um para cada arquitetura que suporta (x64, Arm64).
Próximas Etapas
- Distribua via winget: Submeta o seu MSIX ao Repositório Comunitário Windows Gestor de Pacotes
-
Publicar no Microsoft Store: Use
winapp storepara submeter o seu pacote - Configurar CI/CD: Use o GitHub Action para automatizar o empacotamento no seu pipeline
- Explore Windows APIs: Com a identidade do pacote, pode agora usar Notifications, on-device AI e outras APIs dependentes da identidade
Windows developer