Skip to content

hafidmust/Game

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Game App 🎮

A modern iOS game discovery app built with SwiftUI and Clean Architecture. Browse, search, and favorite your games using data from the RAWG API.

Features ✨

  • 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

Architecture 🏗️

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

Tech Stack

  • 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

Screenshots 📱

Home Screen

Browse through a curated list of popular games with ratings and release dates.

Game Details

Get comprehensive information about each game including:

  • High-quality screenshots
  • Metacritic scores
  • Supported platforms
  • Genres
  • Detailed descriptions
  • Official website links

Favorites

Save and manage your favorite games with a dedicated favorites tab.

About Developer

Learn more about the developer, technical skills, and app information.

Demo 🎬

Game App Demo

The demo shows the main features of the app including browsing games, viewing details, and managing favorites.

Installation 🔧

  1. Clone the repository:
git clone [repository-url]
cd Game
  1. Open Game.xcodeproj in Xcode

  2. Build and run the project on your iOS device or simulator

Requirements

  • iOS 15.0+
  • Xcode 13.0+
  • Swift 5.5+

Project Structure 📁

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

Key Features Implementation 🔍

Tab-Based Navigation

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)

Game Data Management

  • Games are fetched from RAWG API through view models
  • Local favorites are managed using Core Data
  • Clean separation between remote and local data sources

Modern SwiftUI Patterns

  • @StateObject for view model lifecycle management
  • AsyncImage for efficient image loading
  • NavigationLink for seamless navigation
  • Pull-to-refresh functionality
  • Loading states and error handling

Developer Information 👨‍💻

Hafid Ali Mustaqim

Technical Skills

  • Swift, SwiftUI, UIKit
  • Combine, Core Data
  • MVVM, Clean Architecture
  • Unit Testing, Git

App Information ℹ️

  • Version: 1.0.0
  • Framework: SwiftUI
  • Architecture: Clean Architecture
  • Data Source: RAWG API
  • Local Storage: Core Data

Contributing 🤝

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License 📄

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.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages