I’m happy to announce the release of Messy, an iOS puzzle game I’ve been working on for the last few months. ๐
![](/blog/2019/05/28/Introducing-Messy-An-iOS-Grid-Puzzle-Game/messy_icon_hud292a0cc8ebc49ec185afdabcbe88c83_52369_0x150_resize_lanczos_3.png)
It’s a fairly simple game: you move tiles by dragging, and the goal is to arrange sequences of 5-or-more tiles in a row. Each time you make a move, more tiles are added to the board. Game difficulty is modulated by the number of piece types that can be added to be board.
![](/blog/2019/05/28/Introducing-Messy-An-iOS-Grid-Puzzle-Game/messy_screenshots_hu70d2b396ead677002624f54254432e33_406561_0x500_resize_lanczos_3.png)
Most of the game is written using SpriteKit, Apple’s sprite rendering engine. SpriteKit isn’t quite a game engine, but it’s sufficiently advanced to support a game like Messy. The advantage of using SpriteKit is that you stay entirely within the Apple ecosystem and you don’t have to deal with the bloat associated with using a more heavyweight game engine. The obvious alternative would be to use something like Unity, which is both more feature-rich and supports multiple platforms. However, since this project was more to get my shoe in the door of mobile development (and not really to become a game developer), I stuck with the simpler approach.
Animations are really easy to create in SpriteKit. UI layout is a bit of a pain, as you have to do everything with screen coordinates. I initially had most of the UI rendering within SpriteKit, but later fell back to using UIKit (which has more advanced layout tools) for all but a couple of game UI elements.
![Example Gameplay](/blog/2019/05/28/Introducing-Messy-An-iOS-Grid-Puzzle-Game/messy_gameplay.gif)
Example Gameplay
I don’t expect to make much money from Messy, but I did add some in-app purchases. For $1.99, you get access to all the difficulty levels as well as some challenge levels that feature alternate board layouts. For $0.99, you can purchase 100 additional “Undos”, which allow you to reverse the last move in case of making a mistake / bad move. It was a good exercise to go through the process of adding IAPs and having something that I could “sell” after finishing it was satisfying.
So, why did I make Messy? I’ve been wanting to get back into iOS development for a while. Objective-C was the first programming language I ever learned (Iโฆ wasn’t a fan), but I haven’t done anything serious with iOS since ~2012. XCode and the iOS SDKs have come a long way since then, andโฆ hey, Swift is pretty great!
Working with iOS again was quite fun. The iOS development experience feels a lot different than the web, presumably because large portions of it are controlled top-down by decisions made by Apple. And that’s not necessarily a bad thing: UIKit and Interface Builder have their warts but are clearly thoughtfully designed. SpriteKit feels a bit neglected, but it works well enough. The APIs for integrating with iOS hardware features were super easy to use. Adding haptic support, GameCenter integration, and cross-device game save sync via iCloud were all quite straightforward.
Swift, too, was a pleasure to use. In the experiences I had with it, it seems well suited to mobile development. It’s miles more ergonomic to use than Objective-C and has a variety of nice syntactic sugar features (extensions, closures, fully featured collection types). I rarely, if ever, felt like I was fighting Swift. There aren’t many other languages that I can say that about.
Check out Messy on the App Store. It’s free to play indefinitely, with an in-app purchase to unlock some additional levels. If you have any feedback, send me a tweet or reach out via email to “me at bcon.gdn”.