Kotlin Multiplatform project with SharedUI and Shared Logic.
Android | IOS (I'm limited only to 10mb video) |
---|---|
AZAnimeAndroid.mp4 |
AZAnimeIOS.mp4 |
- ππ Single codebase for both Android and IOS, and YES even Shared UI ππ and should also work across all platforms.
- Jetpack Compose for writing only single code for Android and IOS.
- Ktor client for handling network requests.
- SqlDelight database for saving favorite anime locally.
- Koin for dependency management across both Android and IOS.
- Compose ImageLoader for loading images.
- Decompose + Router for easily handling navigation on all platforms.
- Kotlin date-time for working with data and time.
- Multiplatform Settings for saving key-value pairs like datastore.
- AZ-Paging for handling paginating data from data sources like network or database. I still need to publish it until we have paging support.
- MOKO Mvvm provides architecture components of Model-View-ViewModel for UI applications.
- MOKO resources A great library for providing access to shared resources (like images, fonts, and strings) on all platforms.π₯π₯
- MOKO Biometry for handling biometric authentication (Face ID, Touch ID, and also using PIN code).
- Pull Refresh Standalone pull to refresh library for Jetpack Compose multiplatform without the reliance on Material (As the dev says).
- Material 3 for theming and using dynamic color on Android.
- Saving favorite Anime images to local file Shoutout to Philipp Lackner.
- Shared UI for both Android and IOS.
- Single code for writing the logic of the app using Kotlin.
- Handling paging data from network (loading initial, next, and refresh) and using it together with search functionality.
- Add favorite Anime to a local database but save the image to a local file.
- The App supports 3 languages (English, Arabic, and German).
- Supports Dark and Light mode with Dynamic coloring on Android only.
- Saving key-value pair (saving either to use Lock or not for the app).
- Locking the app using Face ID, Fingerprint, and/or PIN code.
- Handling navigation and passing objects between screens.
- Injecting dependencies for the shared main and injecting platform-specific dependencies from each platform.
- Use default images for error and loading state.
- Swipe to refresh data.
- Search with paging for your favorite anime.
- Show all Top-rated anime.
- check your system with KDoctor
- install JDK 17 on your machine
- add
local.properties
file to the project root and set a path to Android SDK there
To run the application on android device/emulator:
- open project in Android Studio and run imported android run configuration
To build the application bundle:
- run
./gradlew :shared:assembleDebug
- find
.apk
file inshared/build/outputs/apk/debug/shared-debug.apk
Run the desktop application: ./gradlew :shared:run
To run the application on iPhone device/simulator:
- Open
iosApp/iosApp.xcproject
in Xcode and run standard configuration - Or use Kotlin Multiplatform Mobile plugin for Android Studio
- The idea of this app is to use as many features as possible to explore the power of KMP (The app doesn't have to make sense π) so feel free to add or request any feature you like.
- The IOS still alpha currently (11/10/2023) so it is a bit laggy even with release.
- Can't record the Biometric Auth screen.