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

No packages published

Languages