A minimal app illustrating Kotlin Multiplatform. Currently running on
- Android (available on Google Play)
- iOS (Rejected by Apple!)
- Web (view Demo)
- Web-React (in progress)
- macOS (TODO)
- CLI (TODO)
This project consists of several gradle modules as well as an xcode project.
This is the central module which contains shared client code. It includes an Api class with a method to query the apps endpoint using the Ktor http client.
This is an Android project consuming the :shared
module. It contains a single activity which calls the viewModel.load()
function and displays its output in UI.
The iOS app code is in the iosApp
directory. It uses SwiftUI to render output to screen.
This is a simple Ktor server running on the Netty engine with a single endpoint /api/v1/apps
, which outputs a list of Apps
object serialized to JSON.
Note that this repository may have not used the best practices on android or iOS implementation to help more clearly illustrate key parts of a Kotlin Multiplatform project and also to help someone just starting to explore KMP for the first time.
- Kotlin Coroutines
- Kotlinx Serialization
- Ktor client and server library
- Android Architecture Components
- Koin
- SwiftUI
- Android: For development, the latest version of Android Studio 4.0+ is required.
- iOS: The iOS code can be modified or built by opening
iosApp/KmpShowcase.xcodeproj
in Xcode. - Server: Running
./gradlew server:run
will deploy the server to localhost on port 9090. - Web: Running
./gradlew web:run -t
will run web client on localhost. - WebReact: Running
./gradlew webReact:run -t
will run web React client on localhost.
Once you setup the project, you might want to change server address in your ~/.gradle/gradle.properties
:
KMP_SHOWCASE_API_BASE_URL_DEFAULT=<insert> // default: http://localhost:9090
KMP_SHOWCASE_API_BASE_URL_ANDROID=<insert> // default: http://10.0.2.2:9090
KMP_SHOWCASE_API_BASE_URL_IOS_X64=<insert> // default: http://localhost:9090
KMP_SHOWCASE_API_BASE_URL_IOS_ARM64=<insert> // default: http://localhost:9090
If you've found an error in this sample or you want to improve the project, please read the Contributing Guide first.
Patches are encouraged, and may be submitted by forking this project and submitting a pull request. Since this project is still in its very early stages, if your change is substantial, please raise an issue first to discuss it.