Integração Nativa
Acesso ao sistema de arquivos, notificações e APIs do SO a partir de aplicativos desktop Rust - padrões portáteis e ressalvas de plataforma.
Receita
fn app_data_dir() -> std::io::Result<std::path::PathBuf> {
let base = dirs::data_local_dir().ok_or(std::io::ErrorKind::NotFound)?;
Ok(base.join("com.example.myapp"))
}Quando usar isso:
- Caixas de diálogo Abrir/Salvar e caminhos de arrastar e soltar
- Notificações do sistema para tarefas longas
- Autoinicialização, deep links e esquemas de URL personalizados
- Armazenamento seguro de credenciais no keychain do SO
Exemplo de Trabalho
fn ensure_data_dir() -> std::io::Result<std::path::PathBuf> {
let dir = app_data_dir()?;
std::fs::create_dir_all(&dir)?;
Ok(dir)
}
fn app_data_dir() -> std::io::Result<std::path::PathBuf> {
let base = dirs::data_local_dir().ok_or(std::io::ErrorKind::NotFound)?;
Ok(base.join("com.example.myapp"))
}
fn pick_config_file() -> Option<std::path::PathBuf> {
rfd::FileDialog::new()
.add_filter("toml", &["toml"])
.pick_file()
}O que isso demonstra:
- Diretório de dados apropriado para a plataforma via
dirs - Configuração de diretório para criar na primeira execução
- Seletor de arquivos filtrado para importação de configuração
Mergulho Profundo
Como Funciona
- Tauri expõe APIs de FS com escopo por meio de permissões na configuração.
- rfd bloqueia brevemente para caixas de diálogo modais - chame a partir do thread da UI.
- notify-rust / plugin de notificação Tauri posta toasts do SO.
- Crate keyring abstrai macOS Keychain, Windows Credential Manager, Secret Service.
Exemplos de Capacidade
| Necessidade | Crate / API |
|---|---|
| Caminho de dados do aplicativo | dirs, caminhos Tauri |
| Caixa de diálogo de arquivo | rfd, plugin de diálogo Tauri |
| Notificações | tauri-plugin-notification |
| Segredos | keyring |
Armadilhas
- Caminhos
/Users/...codificados - quebra Linux/Windows. Correção: sempre usedirsou o resolvedor Tauri. - Seguir links simbólicos para fora do sandbox - fuga de segurança. Correção: canonize e verifique o prefixo sob a raiz concedida.
- Caixa de diálogo fora do thread da UI no macOS - avisos de comportamento indefinido. Correção: apenas thread principal para caixas de diálogo modais.
- Permissão de notificação não solicitada (macOS) - falha silenciosa. Correção: solicite uma vez com uma explicação.
- Chaves de API em texto plano em config.toml - vazadas em backups. Correção: entrada de keychain por máquina do usuário.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Apenas CLI | Ferramentas de servidor | UX de desktop necessária |
Electron @electron/remote | Aplicativo legado | Modelo de segurança Tauri/Rust |
| FFI específico da plataforma | Abstração ausente | Prioridade de aplicativo portátil |
| Apenas aplicativo web | Nenhuma API nativa | Necessita de sistema de arquivos offline |
FAQs
Escopos de FS do Tauri?
Declare diretórios permitidos nas capacidades; use app_data_dir para a raiz gravável padrão.
Arrastar e soltar?
Eventos de webview Tauri ou manipuladores de soltar winit em egui/iced brutos - valide caminhos antes de ler.
Executar shell?
Abra URLs e pastas com o crate open ou o plugin de shell Tauri - nunca passe strings de usuário não sanitizadas para o shell.
Aplicativo de instância única?
tauri-plugin-single-instance ou bloqueio de arquivo na inicialização para aplicativos de bandeja do Windows.
Detecção de modo escuro?
Crate dark-light ou eventos de tema Tauri para sincronizar a UI com a configuração do SO.
Item de login de inicialização automática?
Crates específicos da plataforma ou scripts de instalação - documente o impacto na privacidade para os usuários.
Portais Linux?
Flatpak/snap usam portais XDG para acesso a arquivos - teste compilações empacotadas, não apenas cargo run.
ACLs do Windows?
Gravar em Program Files falha - use %LOCALAPPDATA% via dirs.
Testar sem GUI?
Injete um mock de trait FileSystem; testes de integração usam diretórios tempfile.
Laços de empacotamento?
Instaladores registram manipuladores MIME - veja Empacotamento e Distribuição.
Relacionado
- Tauri - modelo de permissões
- Estado e Arquitetura - onde a configuração de caminhos reside
- Empacotamento e Distribuição - pacotes assinados
- Noções Básicas de GUI - exemplo de caixa de diálogo de arquivo
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+.