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.