App SwiftUI para iOS/iPadOS que monitora dados do servidor Raspberry Pi em tempo real.
- ADS-B: Rastreamento de aeronaves em tempo real
- Satélite: Imagens do Meteor M2-x via SatDump
- Sistema: Status do Raspberry Pi (CPU, RAM, disco, Wi-Fi)
- Rádio: Player da Diário FM com Now Playing no Control Center
- Clima: Previsão do tempo para Franca, SP
- Xcode 15.0+
- iOS 17.0+ / iPadOS 17.0+
- Swift 5.9+
xcodebuild -project MeuLabApp.xcodeproj \
-scheme MeuLabApp \
-configuration Release \
-destination 'generic/platform=iOS' \
-derivedDataPath build/DerivedData \
CODE_SIGNING_ALLOWED=NO buildxcodebuild -project MeuLabApp.xcodeproj \
-scheme MeuLabApp \
-configuration Debug \
-destination 'platform=iOS Simulator,name=iPhone 17,OS=26.2' \
-derivedDataPath build/DerivedDataSimNoSign \
CODE_SIGNING_ALLOWED=NO buildPara gerar screenshots de varias telas no simulador Apple Silicon:
./scripts/capture_apple_silicon_screenshots.shArquivos gerados em:
Screenshots/apple-silicon/
- Copie a pasta
MeuLabApppara seu Mac - Abra
MeuLabApp.xcodeprojno Xcode - Configure o Team de desenvolvimento em Signing & Capabilities
- Conecte seu iPhone/iPad ou selecione um simulador
- Build e Run (⌘R)
O app já está configurado para conectar à API em https://app.meulab.fun
Defina os segredos no Scheme do Xcode (Run > Arguments > Environment Variables) ou no Info.plist local:
MEULAB_API_TOKEN
MEULAB_OPENSKY_CLIENT_SECRET
MEULAB_MAPKIT_JWT
Sem essas variáveis, endpoints protegidos podem retornar não autorizado.
MeuLabApp/
├── MeuLabApp.swift # Entry point
├── ContentView.swift # TabView principal
├── Info.plist # Configurações do app
├── Models/ # Modelos de dados
│ ├── ADSBModels.swift
│ ├── SystemModels.swift
│ ├── RadioModels.swift
│ ├── WeatherModels.swift
│ └── SatelliteModels.swift
├── Services/ # Serviços
│ ├── APIService.swift # Cliente da API
│ └── AudioPlayer.swift # Player de streaming
├── ViewModels/ # Estado do app
│ └── AppState.swift
├── Views/ # Interfaces
│ └── Tabs/
│ ├── ADSBView.swift
│ ├── SystemView.swift
│ ├── RadioView.swift
│ ├── WeatherView.swift
│ └── SatelliteView.swift
└── Resources/
└── Assets.xcassets/
O app consome os seguintes endpoints:
| Endpoint | Descrição |
|---|---|
/api/adsb/summary |
Resumo do tráfego aéreo |
/api/adsb/aircraft |
Lista de aeronaves |
/api/system/status |
Status do sistema |
/api/radio/now-playing |
Música tocando agora |
/api/weather/current |
Clima atual e previsão |
/api/satdump/last/images |
Últimas imagens de satélite |
/api/satdump/passes |
Lista de passes |
/api/satdump/image |
Serve imagem PNG |
- Refresh automático: Dados atualizados a cada 250ms
- Interface estável: Updates condicionais para evitar "jitter"
- Background audio: Rádio continua tocando em background
- Now Playing: Metadados exibidos no Control Center
- iTunes integration: Artwork e informações das músicas
Para ativar notificações push:
- Configure um certificado APNs no Apple Developer Portal
- Adicione o capability "Push Notifications" no Xcode
- Configure o servidor para enviar notificações via APNs
Uso pessoal - MeuLab.fun
git init
git add .
git commit -m "Prepare Apple Silicon build and screenshots"
git branch -M main
git remote add origin <URL_DO_SEU_REPOSITORIO>
git push -u origin main