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]