eXandOs icon

eXandOs

Background

This was the very first SwiftUI and 'Game' app I ever created. I followed the tutorial from Sean Allen, who created a iOS PortFolio project on YouTube where he builds this Tic Tac Toe app.

I then built on this starter project and expanded it to let the user change everything from the aesthetics to the actual game modes. The user can now select 3 different AI difficulties, choose who starts the game and even switch to a 4x4 grid.

In addition, the user can also change the actual grid shapes, player indicators and all colors form these components as well. Plus I have added a interactive slide-in menu and some custom pop-up alerts with fun animations.

eXandOs Screenshots

Focal Points

Programming icon App Requirements
  • Multiple AI difficulties
    The player can choose 3 different AI difficulties, easy, regular and hard.
  • Grid Sizes
    It is possible to change the grid size from a 3x3 grid to a 4x4 grid!
  • Grid shapes
    The player can choose between 17 different grid shapes.
  • Indicators
    The player can also choose 70 different player indicators.
  • Version-control
    GitHub was used for version-control.
  • MVVM
    Implemented the MVVM pattern to organize code and break into modules to make development, updating and reuse of code simpler and faster.
  • Animations
    I experimented with multiple animations to make the game more fun.
Software icon Used Frameworks
  • SwiftUI
    100% programmatically designed with SwiftUI.
  • SFSymbols
    The app makes great use of 'SF Symbols' throughout the app.
  • ColorPicker
    Implemented the native ColorPicker to change colors throughout the app.
  • MessageUI
    Allowing the user to send emails with the native mail app.
  • ShakeGesture
    Experimented with Shake Gesture, to show an alert and reset the game.
  • GoogleMobileAds
    Used to implement the Google AdMob SDK.
  • AppTrackingTransparency
    AdMob uses tracking for ads, so I implemented tracking transparency (mandatory since iOS 14.5).
  • AdSupport
    To show AdMob mobile ads, implemented a banner ad and an interstitial video ad after 20 games played.
  • @AppStorage
    Used to store small data like the score and games played.
  • @Environment
    The @Environment property wrapper in combination with @Published was used to implement MVVM.

eXandOs Screenshots

What I've Learned

During this portfolio project I learned to work with the SwiftUI declarative framework. I mainly focused on implementing the MVVM pattern in SwiftUI, by creating an @Environment Observable object.

In addition, I learned to interface UIKit frameworks within a SwiftUI project. I wanted to send emails using the MessageUI framework, but this framewrok is not yet available in SwiftUI.

So I created a UIViewControllerRepresentable object and implemented both functions: makeUIViewController and updateUIViewController to interface with UIKit within SwiftUI.


Future Features

Future idea icon New Ideas / Improvements
  • Multiplayer Mode
    Update the game to use multiplayer mode (without a CPU).
  • Premium Profile
    Add the option to create a premium user profile so you don't see ads anymore.
  • Ipad Support
    De app currently only supports iPhone.
  • Achievements
    Add achievements and trophies for the player to play for.

Download

Scan the QR code to download the app.

Alternatively you can search the App store for 'eXandOs' or 'Giordano Menegazzi' or use the button below.

Mi Shopping List Download Btn
eXandOs Download QR code