MyKoltinMulti é um projeto Kotlin Multiplatform Mobile (KMM) que compartilha regras de negócio entre Android e iOS. Ele demonstra um fluxo simples de autenticação e o consumo de uma API de citações (quotes), com UI nativa em cada plataforma:
- Android: Jetpack Compose (Material 3)
- iOS: SwiftUI
- Módulo compartilhado: lógica de autenticação, validação e repositórios (chamadas de rede e regras)
- Login com validação de email e senha compartilhada entre plataformas
- Tratamento de erros de autenticação padronizado via
LoginResult - Tela Home exibindo uma citação aleatória (
QuoteResponse) buscada de um serviço HTTP - Botão de refresh para buscar nova citação
- Kotlin Multiplatform (KMM) para compartilhamento de código
- Android: Jetpack Compose, Material 3,
ViewModel+StateFlow - iOS: SwiftUI,
ObservableObject,@Published - Camada de dados compartilhada:
Repository+ serviços de rede (ApiService) - Coroutines (Kotlin) e interoperabilidade com Swift Concurrency (via
async/awaitno iOS)
AndroidStudioProjects/
└─ MyKoltinMulti/
├─ androidApp/ # Aplicativo Android
│ ├─ src/main/java/com/example/mykoltinmulti/android/
│ │ ├─ MainActivity.kt # Raiz de composição e navegação simples
│ │ ├─ ui/theme/Theme.kt # Tema Material 3
│ │ └─ screens/
│ │ ├─ login/
│ │ │ ├─ LoginScreen.kt # Tela de login (Compose)
│ │ │ └─ LoginViewModel.kt # Chama `LoginRepository`
│ │ └─ home/
│ │ ├─ HomeScreen.kt # Exibe citação, botão de refresh
│ │ └─ HomeViewModel.kt # Usa `QuoteRepository`
│ └─ src/main/AndroidManifest.xml
│
├─ iosApp/
│ └─ iosApp/
│ └─ ContentView.swift # Fluxo de login e Home em SwiftUI
│
└─ shared/ # Módulo compartilhado (KMM)
└─ src/commonMain/kotlin/com/example/mykoltinmulti/
├─ repository/
│ ├─ LoginRepository.kt # Validação e autenticação fake
│ └─ QuoteRepository.kt # Chama `ApiService` para buscar citação
├─ auth/ # (esperado) `AuthValidator`, `LoginResult`, `LoginError`
└─ network/ # (esperado) `ApiService`, modelos (`QuoteResponse`)
LoginScreen(Android) eContentView(iOS) capturam email e senha.LoginViewModel(Android) eLoginVM(iOS) invocamLoginRepository(compartilhado).LoginRepository.login(email, password)retorna:LoginResult.Successem caso de sucessoLoginResult.Failure(LoginError.*)para erros (email inválido, senha inválida, não autorizado)
- Regra atual (demo): senha correta é
"123456"; validações de formato usandoAuthValidator.
HomeViewModel(Android) eHomeViewModel(iOS) consomemQuoteRepository(compartilhado).QuoteRepository.getQuote()delega paraApiServiceobter umQuoteResponse.- Android expõe
StateFlow<QuoteResponse?>; iOS usa@Publishedeasync/await.
- Pré-requisitos:
- Android Studio Jellyfish ou superior, com plugin KMM
- JDK 17 (ou conforme
gradle.properties/build.gradledo projeto) - Android SDK atualizado
- Abrir a pasta
MyKoltinMulti/no Android Studio. - Selecionar a configuração
androidAppe executar em um emulador ou device.
- Pré-requisitos:
- Xcode 15+ (macOS)
- CocoaPods (se o projeto utilizar integração via pods) e toolchain KMM configurada
- Sincronizar o projeto via Android Studio (KMM) para gerar artefatos iOS.
- Abrir o workspace/projeto iOS (se existir) ou rodar o target iOS via Android Studio KMM plugin.
- Selecionar um simulador e executar.
Observação: Em KMM, o módulo shared é construído como framework para iOS; o Swift importa shared e usa as classes Kotlin expostas (como LoginRepository, QuoteRepository e modelos como QuoteResponse).
- Android: abrir no Android Studio e rodar
androidApp. - iOS: gerar o framework
shared, abrir o target iOS e rodar em simulador via Xcode/Android Studio KMM. - Login de teste: qualquer email válido; senha
123456.
- Faça um fork do repositório
- Crie um branch a partir de
master:git checkout -b feat/nome-da-feature - Abra um Pull Request com descrição clara, screenshots (se aplicável) e itens de verificação
