This repository includes the Android app (androidApp) and the shared KMM module (shared) for the WaiterRobot App. The iOS app can be found here.
The shared module is published as an SPM package and Java/Android library to the GitHub Package Registry. For this the KMMBridge tool is used.
For local development the Android module directly depends on the local shared version (gradle project dependency). When releasing the published library version is used.
For a guide to use a local version of the KMM module see KMMBridge local dev spm
The main branch contains the Package.swift
file ready for local dev.
./gradlew spmDevBuild
(must be run after each change in the KMM module)- Drag the whole KMM project folder (top level git folder) into the WaiterRobot project in Xcode
- Start programming :)
- When finished delete folder, make sure to select "Remove References"!!! (otherwise the whole KMM project will be deleted locally)
Production release is triggered on push to main. The CI then builds the app and deploys it to
the internal
Track on Google Play. After testing the app then must be promoted to production
manually from there. A tag in the form of android/major.minor.patch
(e.g. android/1.0.0) is
created. (see publishAndroid.yml)
Do not forget to bump the android version (version.properties) on the dev branch after a production release was made.
On each push to develop a lava (dev) build is triggered and published to internal
track of
the WaiterRobot Lava app on Google Play. A tag in the form
of android/major.minor.patch-lava-epochMinutes
is created (e.g. android/1.0.1-lava-27935730). (
see publishAndroid.yml)
A release is triggered on push to main or develop (only when shared module changed). The CI then
builds the shared Xcode Framework (Swift Package) and the shared Android library. Both artifacts
are uploaded to the GitHub Package registry. A tag in the form of major.minor.patch
(
e.g. 1.0.0) is created. (see publishShared.yml)
Unfortunately SPM does not support custom tag prefixes (e.g. shared/1.0.0) and kmmbridge does not support tag suffixes (without creating a custom release action). Therefor the currently the no shared identifier is added to the tag of shared releases.
- Kotlin
- Kotlin Multiplatform (Mobile)
- KMMBridge
- Ktor Http client
- Content Negotiation Body serialization
- Client Auth Authentication (Bearer)
- Client Logging Logging
- Realm (Kotlin) Database
- Koin Dependency injection
- Kermit Logger
- Orbit MVI MVI implementation
- Moko MVVM shared viewModelScope
- KMM Resources shared localization
- KotlinX DateTime Multiplatform DateTime
- KotlinX Serialization (Json) JSON serialization
- BuildKonfig BuildConfig for Kotlin Multiplatform Projects
- Jetpack Compose Declarative UI
- Material Material UI
- Material Icons Material UI Icons (extended)
- Compose Destinations Typesafe navigation for Jetpack Compose
- Accompanist Permissions Helper for permission management in JetpackCompose
- Barcode-Scanning QR/Barcode scanner
- Gradle Play Publisher
- Kotlin/kmm-sample
- KaMPKit Collection of code and tools for getting started with KMP/KMM
- KMMBridge sample
- joreilly/PeopleInSpace Minimal KMP project using SwiftUI, Jetpack Compose, SQLDelight, Koin (also includes many other platforms)
- KMP library/tool collection 1
- KMP library/tool collection 2
- Koin for KMP
- Converting Kotlin Flow to Swift Combine Publisher