| Демонстрация русской локализации | Demo |
|---|---|
![]() |
![]() |
Games DB is an iOS application designed to explore and display comprehensive game data fetched from the public IGDB API. Built primarily for educational purposes, it serves as a practical demonstration of modern iOS development patterns and reactive programming principles.
- Browse Game Data: Navigate through a vast collection of game titles with detailed information.
- Detailed Game Profiles: View information for each game, including descriptions, release dates, genres, platforms, and cover art.
- Responsive UI: Adapts to various iOS device sizes and orientations, uses UICollectionViewDiffableDataSource.
This project was developed with a focus on clean architecture and reactive programming, utilizing the following key technologies:
- MVVM Architecture: Employed for a clear separation of concerns, improving testability (conceptually, not implemented) and maintainability of the codebase
- RxSwift & RxCocoa: Leveraged for handling asynchronous operations and binding UI elements to reactive sequences for a responsive user experience
- RxDataSources: Integrated to simplify the management and binding of collection view data to reactive sources
- SnapKit: Used for programmatic, constraint-based layout, avoiding verbose NSLayoutConstraints approach
- Minimum iOS Version: Targeting iOS 15+
- External API Integration: Interacts with the IGDB API for fetching game data
This project was a significant learning experience, allowing me to dive deep into some advanced iOS development concepts:
- Reactive Programming with RxSwift & RxCocoa:
- Gained a solid understanding of
Observables,Subjects(PublishRelay,BehaviorRelay), and keyOperators(map,filter,bind) for transforming and managing data streams - Proficiently used
RxCocoato bind UI elements (e.g.,UICollectionView.rx.items) to reactive sequences, simplifying event handling and state management
- Gained a solid understanding of
- Building Dynamic UIs with Compositional Layouts:
- Implemented
UICollectionViewCompositionalLayoutto create flexible and adaptive UI structure on the main screen with different sections.
- Implemented
- Fast Layout with SnapKit:
- Developed UI layouts entirely programmatically using
SnapKit
- Developed UI layouts entirely programmatically using
- MVVM Architecture in Practice:
- Solidified understanding of the MVVM pattern, specifically how to integrate it with RxSwift to create a clean, modular, and maintainable codebase where ViewModels expose
Observablesthat Views subscribe to
- Solidified understanding of the MVVM pattern, specifically how to integrate it with RxSwift to create a clean, modular, and maintainable codebase where ViewModels expose
- API Integration & Query Building:
- Successfully integrated with a third-party REST API (IGDB), handling asynchronous network requests, parsing complex JSON responses into custom data models
- Gained experience in constructing complex string-based queries tailored to the IGDB API's specific filtering and sorting requirements
- Accessibility & Dynamic Type Consideration:
- Explored and applied principles of iOS accessibility, particularly by supporting
Dynamic Typefor scalable text, allowing users to customize font sizes for better readability - Utilized the
Accessibility Inspectorduring development to identify and address potential accessibility barriers, aiming for a more inclusive user experience - Learned about localization using String catalogs
- Explored and applied principles of iOS accessibility, particularly by supporting
To get a local copy of this project up and running, follow these steps:
- Clone the Repository:
git clone https://github.com/arsnyan/gamesdb.app.git cd GamesDB - Obtain IGDB API Credentials:
- Visit igdb.com to sign up for an account and register your application to obtain a Client ID and Client Secret.
- Alternatively, you can request temporary credentials from me (see "Contact" section).
- Create
Secrets.plist:- Within the main project group in Xcode (or inside
Supporting Filesgroup), ensuring it's not committed to Git), create a newProperty Listfile namedSecrets.plist. - Add two new entries (rows) to this file:
- Key:
Client ID, Type:String, Value:YOUR_IGDB_CLIENT_ID - Key:
Client Secret, Type:String, Value:YOUR_IGDB_CLIENT_SECRET
- Key:
- Important: Make sure
Secrets.plistis added to your.gitignorefile to prevent sensitive API keys from being committed to public repositories. Add the following line to your.gitignore:<direction_to_secrets.plist>/Secrets.plist
- Within the main project group in Xcode (or inside
- Open and Run:
- Open
GamesDB.xcworkspace(not.xcodeproj) in Xcode (due to Swift version in the project, you may need Xcode 26 beta to open the project). - Select your target device or simulator.
- Build and run the application (
⌘R).
- Open
Note that the project may show all strings in caps on run. This is intented behavior to find unlocalized strings. To turn it off: go to Product -> Scheme -> Edit Scheme -> Run (in sidebar) -> Options -> untick Show non-localized strings.
(Replace this section with actual screenshots of your app. Aim for 2-4 good quality images that showcase key features like the main listing, a detailed view, and perhaps the search screen.)
| Home Screen | Detail View |
|---|---|
![]() |
![]() |
- Arsen - Link to my LinkedIn Profile | E-mail | Telegram
This project is not licensed. Feel free to do anything you want with it. Btw yes I used AI to make this gorgeous looking readme.



