Empacotamento e Distribuição
Envie aplicativos de desktop Rust com instaladores, assinatura de código e canais seguros de atualização automática.
Receita
# Tauri
cd src-tauri && cargo tauri build
# Rust Puro + cargo-bundle
cargo install cargo-bundle
cargo bundle --releaseQuando usar isso:
- Primeira versão pública para não desenvolvedores
- Habilitar atualizações no aplicativo sem downloads manuais
- Notarização do macOS para passar pelo Gatekeeper
- Distribuição na Microsoft Store ou como flatpak no Linux
Exemplo de Trabalho
Esboço de configuração do atualizador Tauri (tauri.conf.json fragmento):
{
"plugins": {
"updater": {
"endpoints": ["https://releases.example.com/{{target}}/{{current_version}}"],
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6I..."
}
}
}O que isso demonstra:
- Template de endpoint HTTPS por triple de destino
- Chave pública incorporada verifica artefatos de atualização antes da aplicação
- Limitação de versão impede downgrades, se configurado
Mergulho Profundo
Como Funciona
- Build produz binário de release + assets.
- Bundle envolve em
.dmg,.msi,.deb, ou.AppImage. - Sign anexa identidade do publicador (Apple, Authenticode).
- Updater baixa diff do bundle assinado ou pacote completo.
Notas de Plataforma
| SO | Artefato | Assinatura |
|---|---|---|
| macOS | .dmg / .app | Developer ID + notarizar |
| Windows | .msi / NSIS | Certificado Authenticode |
| Linux | deb/AppImage/flatpak | GPG para metadados do repositório |
Armadilhas
- Build macOS não assinado - usuários recebem diálogos assustadores. Correção: notarizar em CI com credenciais da Apple.
- Caminhos de desenvolvimento codificados no bundle - travam em máquinas de usuários. Correção: resolução de caminho apenas em tempo de execução.
- Atualizador sem HTTPS - MITM instala malware. Correção: TLS + verificação de assinatura obrigatórios.
- Build universal macOS ausente - atrito do Rosetta no Apple Silicon. Correção:
aarch64-apple-darwin+x86_64-apple-darwinlipo ou artefatos separados. - Símbolos de depuração em release - downloads enormes. Correção: dividir debuginfo ou remover para a linha de release.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Homebrew cask | CLI/GUI de ferramenta de desenvolvimento | Usuários consumidores não técnicos |
| Microsoft Store | Implantação corporativa | Necessidade de atualizador personalizado imediato |
| Zip portátil | Ferramentas internas | Instalação esperada com duplo clique para consumidores |
| Docker | Aplicativos de servidor | GUI de desktop com GPU |
FAQs
Tauri vs cargo-bundle?
Tauri inclui atualizador, hooks de assinatura e assets de WebView; cargo-bundle é um wrapper mínimo para GUIs Rust puras.
Onde armazenar segredos de assinatura?
Segredos de CI (GitHub Actions) com token de hardware ou HSM na nuvem - nunca no repositório.
Escolha de empacotamento Linux?
AppImage para universal; flatpak para loja sandbox; deb para empresas baseadas em apt.
Esquema de versionamento?
Semver; migrações de banco de dados que quebram o padrão incrementam a versão secundária/principal e são documentadas nas notas de release.
Relatórios de falha?
Sentry ou similar na camada Rust; simbolizar com símbolos de depuração enviados do build de release.
Canal beta?
Endpoint de atualizador separado ou flag beta no manifesto JSON listando versões compatíveis.
Matriz de CI?
Compilar macOS em runners macOS, Windows em windows-latest, Linux em ubuntu - compilar cruzado apenas quando testado.
Tamanhos de ícone?
Fornecer conjunto icns/ico/png de acordo com as diretrizes da plataforma - o gerador de ícones Tauri ajuda.
Avisos legais?
Incluir arquivo LICENSE e de avisos de terceiros para obrigações de webview e crate Rust.
Especificidades do framework?
Tauri para UI web; egui/iced usam cargo-bundle ou instaladores manuais.
Relacionado
- Tauri - caminho principal de empacotamento
- Integração Nativa - caminhos de instalação
- Boas Práticas de GUI - checklist de release
- Noções Básicas de GUI - exemplo de build
Versões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.