A modern iOS game discovery app built with SwiftUI and Clean Architecture. Browse, search, and favorite your games using data from the RAWG API.
- Game Discovery: Browse popular games with beautiful card layouts
- Detailed Information: View comprehensive game details including ratings, genres, platforms, and descriptions
- Favorites System: Save your favorite games locally using Core Data
- Clean UI: Modern SwiftUI interface with smooth animations
- Offline Storage: Favorite games are stored locally and persist between app launches
- About Developer: Learn more about the developer and technical details
This project follows Clean Architecture principles with clear separation of concerns:
- Presentation Layer: SwiftUI views and ViewModels
- Domain Layer: Business logic and entities
- Data Layer: Repository pattern with local Core Data storage
- Dependency Injection: Centralized DI container for better testability
- Framework: SwiftUI
- Architecture: Clean Architecture + MVVM
- Local Storage: Core Data
- API: RAWG Games API
- Dependency Injection: Custom DI Container
- Image Loading: AsyncImage
- Navigation: NavigationView/NavigationLink
Browse through a curated list of popular games with ratings and release dates.
Get comprehensive information about each game including:
- High-quality screenshots
- Metacritic scores
- Supported platforms
- Genres
- Detailed descriptions
- Official website links
Save and manage your favorite games with a dedicated favorites tab.
Learn more about the developer, technical skills, and app information.
The demo shows the main features of the app including browsing games, viewing details, and managing favorites.
- Clone the repository:
git clone [repository-url]
cd Game-
Open
Game.xcodeprojin Xcode -
Build and run the project on your iOS device or simulator
- iOS 15.0+
- Xcode 13.0+
- Swift 5.5+
Game/
├── App/
│ └── GameApp.swift # App entry point
├── Core/
│ └── DI/
│ └── DIContainer.swift # Dependency injection container
├── Data/
│ ├── DataSource/
│ │ ├── GameLocalDataSource.swift
│ │ └── GameModel.xcdatamodeld/
│ └── Models/
│ ├── FavoriteGame+CoreDataClass.swift
│ └── FavoriteGame+Extensions.swift
└── Presentation/
├── ViewModels/
│ ├── DetailViewModel.swift
│ ├── FavoriteViewModel.swift
│ └── HomeViewModel.swift
└── Views/
├── AboutView.swift
├── ContentView.swift # Main tab view
├── DetailView.swift
├── FavoriteView.swift
└── HomeView.swift
The app uses a TabView with three main sections:
- Home: Game discovery and browsing (
HomeView.swift:8) - Favorites: Saved games management (
ContentView.swift:19) - About: Developer information (
ContentView.swift:25)
- Games are fetched from RAWG API through view models
- Local favorites are managed using Core Data
- Clean separation between remote and local data sources
@StateObjectfor view model lifecycle managementAsyncImagefor efficient image loadingNavigationLinkfor seamless navigation- Pull-to-refresh functionality
- Loading states and error handling
Hafid Ali Mustaqim
- Email: hafidalimustaqim13@gmail.com
- Phone: +62 822 3792 7844
- Location: Indonesia
- Swift, SwiftUI, UIKit
- Combine, Core Data
- MVVM, Clean Architecture
- Unit Testing, Git
- Version: 1.0.0
- Framework: SwiftUI
- Architecture: Clean Architecture
- Data Source: RAWG API
- Local Storage: Core Data
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is part of the Dicoding iOS Expert learning path and is intended for educational purposes.
Built with ❤️ by Hafid Ali Mustaqim as part of the Dicoding iOS Expert certification program.