Design A postmortem on publishing to iOS and Android with GMS


Hi there!

I’m happy to say that Super Silly Soccer is finally out for iOS and for Android! Check it out in the Made with GameMaker forum:

Here are a few things I learned from working with GameMaker Studio 2, Apple, and Google. I also list a few tools that I’ve used. Hopefully some of this will come in handy on your own project. Take a look at the headers to see if there's anything you're interested in, and expand the spoiler to read more. Please ask away about anything here! Also, take a look at my post on a list of over 150 press contacts here.

My tools/setup
  • 2013 13” MacBook Pro: 2.4 GHz i5, 4GB Ram, 120 SSD HD
  • Test devices: iPhone 5, iPhone 6s, iPhone 6s Plus, iPad 4, Samsung S4, Samsung S7.
  • GMS 2 - Mac (latest build)
  • Gitlab - Amazingly useful for saving your project to the cloud
  • Pixelmator - General image editing: spritesheets and marketing images
  • Aseprite - Makes working with pixel graphics a lot easier with tools made just for pixels
  • Visual Studio Code - Helps when editing save and level files saved in JSON
  • Audacity - Everyone has this. Edit your sounds and music.
  • Evernote - Since I’m a one-man studio, I don’t need anything fancy like a tracker.
  • OpenShot Video Editor - iMovie used to be awesome, but now it sucks! This is the best free alternative that I found. It’s simple, but powerful. I was even able to export my trailers in 1920 x 1080 and in portrait mode for iOS: 1080 x 1920

Set up git and back up often!
I can’t stress this one enough! There were two major instances of when I had to revert/import the game to my computer. First, I began implementing Admob, but it turns out that Google changed how it communicated with the Yoyo extension, and it ended up breaking my game--it wouldn’t even compile. Reverting the game to a previous version saved me from having to undo all my work.

Second, because my computer’s HDD only has 120 GB of space, I was often having to juggle all of my files. One time, I had to update my OS. I downloaded the 20gb update, and had 20 gb free. Turns out it needed more than 20gb for the update, but it didn’t to a simple if() check to see if I had that much space, and it ran out of space during the update (Apple’s quality sucks these days). I had to wipe my computer at that point. Fortunately, all of my changes were saved in my GitLab, and I was able to continue where I left off.

Here’s a Yoyo doc on how to set up Git on your computer. Highly recommended.

Scale your game for thousands of screen resolutions!
Think about how you’ll scale your game early on, as this can have an impact on how it runs on older devices, if you’re planning on making it available on those. For example, the game runs buttery smooth on most modern devices. On the Samsung S4 it sometimes chugs because of collision checks, and because of the way I implemented buttons. Buttons are created by tiling chucks of buttons and by scaling them, which relies on a lot of draw function calls—not great!

Besides performance, I initially didn’t understand why the game looked fine on phones, but stretched on my iPad. After lots of trial and error, and by following these Yoyo guides, I was able to find that the problem was with how I had implemented my camera and the view. The sooner you can have your test devices match, the sooner you can get to the funner parts of game dev.

Launching on Google Play and Apple App Store
GameMaker Studio is amazing and you can quickly get your game up and running on mobile without much trouble. I followed these two guides: iOS and Android. If you carefully followed those instructions, your game should easily compile at the push of a button.
For the most part, setting up for your game on the two stores is similar: You can add the name, descriptions in multiple languages (I have English and Spanish), and you add your marketing materials such as screenshots and videos.

Here’s where they differ:

Apple: Apple tells you from the start that once you upload your game, it could take between 24-72 hours to tell you if the game was approved. I initially thought this was annoying. Keep this in mind for when I talk about Android. The first time I submitted the game to Apple, they got back to me within about 18 hours. The game was not approved because of a few graphics showing up blurry on higher-res devices. My game is pixel-based, so the view is really zoomed in, and that makes it so that some graphics become distorted. When I updated those and resubmitted, I had an answer from them overnight and it was approved!
After pushing the ‘Publish’ button, it can take up to 24 hours for it to show up on the App Store. My game was up within about 10 hours.

Google: Google was a little weird here. Once you fill out your store listing and upload the .aab file (previously .apk), you will see a status at the top of your account. Mine said ‘Ready to publish.’ DON’T BELIEVE WHAT IT SAYS. There is a button that says ‘Rollout to [something]’ and when you click it, it says “Are you sure you want to do that? Once you do, your game will be available on the Play Store.” I then clicked the cancel button, since the Apple version wasn’t ready yet. Little did I know, when the Apple version was ready, I clicked this button, and it then told me that it would need to be reviewed, and that it would be ready within 2-7 days! Arg! That completely threw off my launch plans. It wasn’t for five days that my game would be ready on the Play Store. And Google didn’t communicate as Apple did. Apple sent out emails as the game was going from status to status. I only found that it had been approved because I received an email from the ratings company (kind of like the ESRB, but for mobile games). Keep this in mind when you plan your game rollout, announcement, etc schedule.

Using the Admob Yoyo games extension with GameMaker
Yoyo did an excellent job with the Admob extension. Simply follow this guide to learn how to put ads on your game. It offers support for banners, interstitials, and reward ads. The functions are super simple to use. My only recommendation is to make your own functions to make it work how you want. For example, maybe you only want to display banner ads in some places/views, but not others. Having a single function that controls the ad logic will come in useful.

If you have/want language support, do it smart early on
Don’t do what I did. I initially made the game to be played in English only. As I was wrapping it up, I remembered (too late, lol) that being a soccer game, Spanish speakers would probably be interested in playing it. Because I was trying to finish it before the end of the year, I decided to use a simple isEnglish boolean and added both the English and Spanish strings directly into the game. Doing things this was a chore. If I would have used a spreadsheet, for example, this would have made it more flexible should I wish to expand language support in the future. That is my next big project.

Level editors are awesome, but keep track of how much time it takes to make one
I made a level editor where I can see info on objects, pick up and move them with the mouse, and then export the level data to JSON. I fine-tune in Visual Studio and then re-import into GMS. Were I to type out the data for each object directly into GMS or even into a JSON file would take so long and would be annoying. Now, every time I add or update an object, GMS generates the file, and saves me so much time. Creating levels now takes mere minutes as opposed to an entire afternoon. However, do keep track of how much time it’s taking you to create a level creator. I had some bugs/out-of-range errors when building it, and it would sometimes take time to fix.

That’s all I can think of for now. But check out the game. Maybe you have questions about how I did certain things? Should anyone be interested, I can talk about notifications, as those were pretty interesting to add. Do reach out if you have questions, comments, feedback or anything else! Thanks for reading if you made it this far. :)


GMC Memer
GMC Elder
Set up git and back up often!
This, so much this! I've seen countless examples on people losing tons of work because they made no backups whatsoever. Git uses minimal space for the backups (since it only stores diffs instead of the entire files) and this makes it really quick and easy to revert to previous versions when needed as well, on top of being able to have parallel versions (e.g. a "demo" version where you delete certain content, or a version where you replace an API). Basically it lets you "fire and forget" in your development + lets you back things up easily in the cloud... it's meant for team projects originally, but the ability to jump around between versions solves a lot of other issues as well.


Greed! I'm not even using it to its full potential by creating branches and switching between them or using it as a team, but the fact that it saved me a couple of times during this project makes it completely worth it.


Greed! I'm not even using it to its full potential by creating branches and switching between them or using it as a team, but the fact that it saved me a couple of times during this project makes it completely worth it.
You can also edit in github itself for remote access to your project, use it to review your code, and act as a backup to related files, and I use git project boards pretty regularly. Git can also host websites, have wikis and more.

Did they ever fix the corrupting bug that occurs with merging multiple git branches? I only use it for single branch backups and editing but I'd like to use some of the abilities that having multiple branches would allow. (looking at the ticket it seems like it might get fixed in 2.3).

Also, as a side note, I still find that using the built in git systems can cause freezing and hanging, so I recommend (to anyone reading this) that you stay away from that and use git bash or whatever gui you want.