- Kotlin Multiplatform Mobile
- MVVM with clean architecture
- Firebase SDK
- Firebase Authentication
- SQL Delight
- Kotlin corutines in shared module
- Declarative UIs
Dev Notary is a simple application that lets developers create notes, documentations or memos and interact with them. Basic CRUD with addition of sharing the notes with other users. The functional requirements were simple:
- Authentication
- Managing a note: create, read, edit, delete, share
- Restore notes
- List, sort, search
In order to run an app you need to provide firebase related files:
- for Android: google-services.json
- for iOS GoogleService-Info.plist
Both of them are generated by firebase.
Since KMM community is still relatively slow and the internet isn't yet rich in tutorials and guides how to work with Kotlin Multiplatform Mobile I had to gain knowledge straight from KMM samples. In particular I've had analysed carefully https://github.com/MartinRajniak/CatViewerDemo and https://github.com/joreilly/MortyComposeKMM.
One of the goals of this application was to explore KMM and try to share as much code between platforms as it is possible. Since my stronger side is on Android Development, I've decided to develop this project with common for Android MVVM pattern. Additionally, I spiced it up with clean architecture. With a little help of ViewModel wrapper class on iOS side, everything turned out great. Wrapper class is essential because flows that are widely used in shared module can't be consumed in iOS app.
- Firebase Kotlin SDK
- SQL Delight
- Kodein DI
- Navigation Component
- Multiplatform UUID
- Kotlin Coroutines
- KotlinX Datetime
- Multiplatform Settings
- KotlinX Serialization
- Jetpack Compose
- Accompanist
- Swift UI
Perhaps someone might be interested in actual code distribution between each module. I find it interesting that iOS app needs much less code than an Android application. However, code percentage is a little biased because there are UI test included in Android App. For Android and Shared modules only .kt files are counted. For iOS module only .swift files are counted.