Player de web rádio construído com Tauri v2, React e TypeScript.
- Pré-requisitos
- Desenvolvimento local
- Build de produção (desktop)
- Build mobile
- Publicar na Google Play Store
- Publicar na Apple App Store
# Instalar Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Instalar pnpm
npm install -g pnpm- Android Studio (inclui Android SDK e NDK)
- Java JDK 17+
- Variáveis de ambiente configuradas:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export ANDROID_HOME=$HOME/Android/Sdk
export NDK_HOME=$ANDROID_HOME/ndk/$(ls $ANDROID_HOME/ndk)
export PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools- Targets Rust para Android:
rustup target add \
aarch64-linux-android \
armv7-linux-androideabi \
i686-linux-android \
x86_64-linux-android- Xcode 15+ (disponível na Mac App Store)
- Xcode Command Line Tools:
xcode-select --install - Conta Apple Developer ($99/ano) para distribuição
- Target Rust para iOS:
rustup target add \
aarch64-apple-ios \
x86_64-apple-ios \
aarch64-apple-ios-sim# Instalar dependências
pnpm install
# Rodar em modo dev (desktop)
pnpm tauri dev
# Rodar em modo dev (Android) — emulador ou dispositivo físico conectado
pnpm tauri android dev
# Rodar em modo dev (iOS) — apenas macOS
pnpm tauri ios devArch Linux / Hyprland: a variável
WEBKIT_DISABLE_DMABUF_RENDERER=1já está configurada no scripttauridopackage.jsonpara evitar tela cinza no WebKitGTK.
pnpm tauri buildOs artefatos gerados ficam em src-tauri/target/release/bundle/:
| Sistema | Formato |
|---|---|
| Linux | .deb, .rpm, AppImage |
| Windows | .msi, .exe (NSIS) |
| macOS | .dmg, .app |
pnpm tauri android initIsso gera a pasta src-tauri/gen/android/.
pnpm tauri android build --debugAPK gerado em:
src-tauri/gen/android/app/build/outputs/apk/universal/debug/app-universal-debug.apk
Crie um keystore (apenas uma vez — guarde o arquivo com segurança):
keytool -genkey -v \
-keystore somdomato.keystore \
-alias somdomato \
-keyalg RSA \
-keysize 2048 \
-validity 10000Configure a assinatura em src-tauri/gen/android/app/build.gradle.kts:
android {
signingConfigs {
create("release") {
storeFile = file("../../../somdomato.keystore")
storePassword = System.getenv("KEYSTORE_PASSWORD")
keyAlias = "somdomato"
keyPassword = System.getenv("KEY_PASSWORD")
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
}
}
}Build do AAB (formato exigido pela Play Store):
KEYSTORE_PASSWORD=sua_senha KEY_PASSWORD=sua_senha \
pnpm tauri android build --aabAAB gerado em:
src-tauri/gen/android/app/build/outputs/bundle/universalRelease/app-universal-release.aab
pnpm tauri ios initIsso gera a pasta src-tauri/gen/apple/.
pnpm tauri ios xcodeNo Xcode:
- Selecione o target
somdomato - Em Signing & Capabilities, selecione seu Apple Developer Team
- Confira o Bundle Identifier:
com.somdomato.app
pnpm tauri ios buildO .ipa é gerado via Xcode Archive. Para gerar o arquivo diretamente pela linha de comando:
pnpm tauri ios build --release- Conta no Google Play Console ($25 taxa única)
- AAB assinado (ver seção Android — Build de release)
-
Criar o app no Play Console
- Acesse Play Console → Todos os apps → Criar app
- Preencha nome, idioma padrão e categoria
-
Configurar ficha da loja
- Descrição curta (80 caracteres) e descrição completa
- Screenshots: mínimo 2 por tipo de dispositivo (celular, tablet)
- Ícone de alta resolução: 512×512 px PNG
- Imagem de capa: 1024×500 px
-
Definir classificação etária
- Acesse Classificação de conteúdo e preencha o questionário
-
Configurar preço e distribuição
- Defina se o app é gratuito ou pago
- Selecione os países de distribuição
-
Fazer upload do AAB
- Acesse Produção → Criar nova versão
- Faça upload do
.aabgerado - Preencha as notas de versão
-
Enviar para revisão
- Clique em Revisar versão → Enviar para produção
- A revisão costuma levar de algumas horas a 3 dias úteis
- Conta no Apple Developer Program ($99/ano)
- Mac com Xcode 15+
.ipaassinado com certificado de distribuição
- Abra Xcode → Settings → Accounts → adicione seu Apple ID
- Selecione o time e clique em Manage Certificates
- Crie um certificado Apple Distribution
- No Apple Developer Portal, crie:
- Um App ID com Bundle ID
com.somdomato.app - Um Provisioning Profile do tipo App Store Distribution
- Um App ID com Bundle ID
- Acesse App Store Connect
- Apps → + → New App
- Preencha:
- Nome: Som do Mato
- Bundle ID:
com.somdomato.app - SKU:
somdomato-001 - Idioma principal: Português (Brasil)
- Descrição, palavras-chave, URL de suporte
- Screenshots obrigatórias por tamanho de tela (6,7", 6,5", 5,5" e iPad se aplicável)
- Ícone do app: 1024×1024 px PNG sem transparência
- Classificação etária: preencha o questionário
No Xcode:
- Selecione o scheme Release e destino Any iOS Device
- Product → Archive
- Na janela Organizer, clique em Distribute App
- Selecione App Store Connect → Upload
- Aguarde o processamento (pode levar até 30 minutos)
Alternativa via linha de comando com xcrun altool:
xcrun altool --upload-app \
--type ios \
--file caminho/para/somdomato.ipa \
--username "seu@apple.id" \
--password "@keychain:AC_PASSWORD"- No App Store Connect, selecione o build que apareceu após o upload
- Preencha informações de conformidade de exportação
- Clique em Add for Review → Submit to App Review
- A revisão costuma levar de 24 a 48 horas
mobile/
├── src/ # Frontend React
│ ├── App.tsx # Componente principal (player)
│ └── App.css # Estilos
├── src-tauri/
│ ├── src/
│ │ ├── main.rs # Entrypoint Rust
│ │ └── lib.rs # Comandos Tauri
│ ├── capabilities/
│ │ └── default.json # Permissões da janela
│ ├── Cargo.toml # Dependências Rust
│ └── tauri.conf.json # Configuração do app
├── public/
│ └── logo.svg
└── package.json
| Variável | Descrição |
|---|---|
WEBKIT_DISABLE_DMABUF_RENDERER |
Desabilita DMA-BUF no WebKitGTK (necessário no Hyprland) |
GDK_BACKEND |
Força backend X11 no GTK (x11) |
KEYSTORE_PASSWORD |
Senha do keystore Android |
KEY_PASSWORD |
Senha da chave Android |
ANDROID_HOME |
Caminho para o Android SDK |
NDK_HOME |
Caminho para o Android NDK |