AniVerse is a Compose Multiplatform Mobile (CMP) application designed for both Android and iOS platforms. It utilizes modern development practices with Clean Architecture and Model-View-Intent (MVI). AniVerse supports platform-specific native UI components while sharing the business logic.
- Cross-Platform Compatibility: Unified shared business logic for Android and iOS.
- Shared UI : Built using jetpack compose
- Architecture: Implements MVI for predictable and reactive state management.
- Networking: Powered by Ktor for efficient and flexible API communication.
- Dependency Injection: Modular and testable code with Koin.
AniVerse maximizes the potential of Kotlin Multiplatform Mobile by sharing core business logic while maintaining platform-specific UI experiences.
The shared module contains all reusable code:
- Data Layer: Manages data fetching via Ktor, mapping, and DTOs.
- Domain Layer: Includes use cases, repository abstractions, and business logic.
- Presentation Layer: Includes intent, viewmodels, and UiState.
- Android & iOS: Both platforms use Jetpack Compose to implement the UI, ensuring a consistent look and feel across devices while adhering to platform-specific guidelines.
Before setting up the project, ensure you have the following:
- Kotlin 1.9+ with the KMM plugin installed.
- Android Studio Giraffe or later for Android development.
- Xcode 14.0+ for iOS development.
- Gradle 8.0+ for project builds.
AniVerse/
βββ androidApp/ # Android application module
β βββ ...
βββ iosApp/ # iOS application module
β βββ ...
βββ shared/ # Shared KMM module
β βββ commonMain/ # Shared business logic for both platforms
β β βββ kotlin/
β β βββ com/
β β βββ generativeai/aniverse/
β β βββ data/ # Data layer
β β β βββ di/ # Dependency injection for data layer
β β β βββ dto/ # Data Transfer Objects
β β β βββ mappers/ # Data mapping between layers
β β β βββ remote/ # API communication
β β β βββ repositoryImpl/# Repository implementations
β β βββ domain/ # Domain layer
β β β βββ constants/ # Constant values
β β β βββ di/ # Dependency injection for domain layer
β β β βββ model/ # Domain models
β β β βββ repository/ # Repository interfaces
β β β βββ usecases/ # Business use cases
β β β βββ utils/ # Utility functions
β β βββ presentation/ # Presentation layer
β β βββ di/ # Dependency injection for presentation
β β βββ intent/ # User intents
β β βββ stateHandler/ # State handlers for MVI
β β βββ uiState/ # UI State models
β β βββ viewModel/ # ViewModels for state management
β βββ ...
To get started, clone the AniVerse repository:
git clone https://github.com/magneto3572/AniVerse.git
- Open the project in Android Studio.
- Build the project using the
Build
menu or with Gradle. - Run the app on an emulator or a physical Android device.
- Open the
iosApp
folder in Xcode. - Configure the target scheme and select a simulator or a physical iOS device.
- Build and run the app.
Screen_recording_20241203_213134.mp4
Simulator.Screen.Recording.-.iPhone.15.-.2024-12-03.at.21.31.14.1.1.mp4
For queries, suggestions, or feedback, feel free to reach out at:
- Email: [email protected]
- Email: [email protected]