🛠️Migrating to Compose Multiplatform - Develop Branch
An android and iOS app built using Kotlin Multiplatforom that consumes TMDB API to display current trending, upcoming and popular movies🍿 and tvshows🎬.
Kotlin Multiplatform is a framework of Kotlin that allows for sharing of a single codebase for business logic across different targets/platforms. Some of the targets supported by kotlin are: Android, iOS, Kotlin/JVM, Kotlin/JS, Android NDK, Windows, Linux, macOS etc.
Compose Multiplatform is a UI framework maybe by Jetbrains that allow for simple and accelerated desktop application and web development using compose. Compose multiplatform also allows sharing compose UI code between diffrent platforms. eg android, iOS desktop(Windows, Linux, MacOS) and web.
- Prerequisite
- Running
- Pros of KMP/KMM
- App Structure
- Libraries
- Extras
- Demo
- Android App
- Desktop
- Related Resources
- Other Helpful Resources
// ToDo
Set up the local.properties
file in the project's root directory (if it doesn't already exist) by adding the following properties:
api_key=<YOUR TMDB API KEY>
Run with the following command:
./gradlew run
- Faster development since you only need to write most of the business logic and tests only once.
- Improve code quality.
- Highly maintainable and testable code due to separation of concern in the codebase.
The project currently has 3 main modules:
1. appAndroid
This module contains the android application's UI built using Jetpack compose.
2. appiOS
This module contains iOS code that holds the iosApp UI built using Swift UI
3 . shared
This module contains shared code that holds the domain and data layers and some part of the presentation logic ie.shared viewmodels
This is the core layer of the application. The domain
layer is independent of any other layers this means that changes in other layers will have no effect on domain layer eg. screen UI (presentation layer) or changing database (data layer) will not result in any code change withing domain layer.
Components of domain layer include:
-
Models: Defines the core structure of the data that will be used within the application.
-
Repositories: Interfaces used by the use cases. Implemented in the data layer.
The data
layer is responsible for selecting the proper data source for the domain layer. It contains the implementations of the repositories declared in the domain layer.
Components of data layer include:
-
Models
-Dto Models: Defines POJO of network responses.
-Entity Models: Defines the schema of the database.
-
Mappers: They perform data transformation between
domain
,dto
andentity
models. -
Network: This is responsible for performing network operations eg. defining API endpoints using Ktor.
-
Cache: This is responsible for performing caching operations using Realm.
-
Data Sources: Responsible for deciding which data source (network or cache) will be used when fetching data and presenting the data to viewmodels.
The presentation
package contains shared viewmodels code.
- Compose Multiplatform - Compose Multiplatform is a declarative framework for sharing UIs across multiple platforms with Kotlin based on Jetpack compose.
- Koin - Kotin dependency injection library with multiplatform support.
- Ktor - Provides multiplatform libraries required to make network calls to the REST API.
- Multiplatform Settings - This is a Kotlin library for Multiplatform apps, so that common code can persist key-value data.
- kotlinx.coroutines - Library support for Kotlin coroutines with multiplatform support.
- kotlinx.serialization - Provides sets of libraries for various serialization formats eg. JSON, protocol buffers, CBOR etc.
- kotlinx.datetime - A multiplatform Kotlin library for working with date and time.
- Napier - Logger library for Kotlin Multiplatform.
- BuildKonfig - Supports embedding values from gradle file.
- Image Loader - Compose Image library for Kotlin Multiplatform
In this section I've included some resources ie. articles and GitHub repositories that i used to learn about kotlin multiplatform mobile:
- Your First Kotlin Multiplatform Mobile App Tutorial
- Sharing Code between iOS and Android with Kotlin #1
- Kotlin Multiplatform Hands-on: Networking and Data Storage
- KaMPKit General Architecture
- Using Koin in a Kotlin Multiplatform Project
- Create your first cross-platform mobile app – tutorial - Learn how to create and run your first Kotlin Multiplatform Mobile application.
- Kotlin Multiplatform. Very beginner’s guide (part 1-3)
- Using Realm persistence library in a Kotlin Multiplatform project
- KMM Sample - A sample project for experiments with Kotlin Multiplatform mobile.
- Fantasy Premier League - Kotlin Multiplatform project with Jetpack Compose, Compose for Desktop and SwiftUI clients (and using Ktor for remote API requests and Realm for persistence).
- KaMPKit
- People In Space - Minimal Kotlin Multiplatform project with SwiftUI, Jetpack Compose, Compose for Wear OS, Compose for Desktop, Compose for Web, and Kotlin/JS + React clients along with Ktor backend.
- Poetree - Poetree is a minimalistic poetry app that helps people freely access art from a global community full of poetry lovers.
In this section I've included resources that are not related to kotlin multiplatform mobile but were really helpful in learning other android components and tools:
- ToDo
- Introduction to Github Actions for Android blog by Mindorks on how to set up GitHub actions for an android project.