Developing an iPhone or iPad Game

Image Courtesty of Super Evil Megacorp

If you have a passion for developing games, it is never too late to get started. While the App Store isn't quite the gold rush of the early days, it is still quite possible to develop an app, build a following, and make money. The best part of all of this is the low cost of entry into the market. Apple charges $99 a year for a developer subscription, which allows you to submit iPhone and iPad games to the App Store. You can also download the Xcode development kit for free after you register as a developer.

While it is unrealistic to believe you will immediately strike it rich with your game, every year independent developers and small independent teams come out of nowhere to capture our imaginations on the App Store. There is no doubt that large development companies have a leg up, but the beauty of the App Store is that everyone can compete for gamers. There isn't a separate App Store for the big guys. We all go to the same place to download our games.

What Do You Need to Start Developing Games?

Outside of the $99 developer subscription, you will need programming skills, graphics and patience. Lots of patience. Even small projects require a certain degree of patience. While you don't want to be the perfectionist that never publishes because they always find some small thing that is wrong, you also don't want to put out a bug-riddled product.

And if you don't have an artists' touch when it comes to graphics, don't worry. There are a number of resources for free or cheap graphics. If you are a one-man shop, you will need enough skill to create buttons and put together a serviceable user interface, but most of us can handle that with a few lessons on how to use Photoshop or the free alternative to Photoshop.

Which Development Platform Should You Use?

The first big choice is in the development platform. If you only intend to develop for the iPhone and the iPad, Apple's Swift programming language makes the most sense. It is a rapid development language compared to the old Objective-C, and when you develop directly for the device, you can use new features of the operating system as soon as they are released. If you use a third-party development kit, you will often need to wait for that third-party to support the new feature. There are a number of third-party iOS emulators that can come in handy, too.

But don't dismiss third-party development kits. If you plan on releasing your game across all platforms, the ability to develop in one development kit and publish across iOS, Android and other platforms will save a lot of time and frustration. In this area, you will want to avoid the "build a game in an hour" development kits that are oftentimes too limited to develop complicated games. Here are a few solid development platforms that are free to use for independent developers who fall under certain revenue limits:

  • Unity. This is one of the most popular third-party development kits, especially for those that plan on using 3D graphics. You can start using Unity for free so long as your annual revenue is less than $100,000.
  • Corona SDK. If you are looking for a fast development with 2D graphics, the Corona SDK is a solid choice. It uses LUA as its programming language, which is both flexible and very quick. Corona SDK is free for the personal edition and doesn't have a revenue limit. The enterprise edition allows offline builds and the ability to build your own custom API, which makes it very flexible.
  • PhoneGap. One of the most popular third-party tools, PhoneGap offers a lot of support and third-party plugins. If you land more on the graphics side than the programming side, this can give you a real leg up. PhoneGap also uses web-based tools (HTML, CSS, etc.) as the core of the development experience. PhoneGap is free.

What About Graphics?

For those lucky few that both have great graphical skills and find app development easy, getting started with game development is more a matter of simply finding the time to do it. For those of us that don't have an artistic bone in our body, graphics can seem like a giant roadblock. But there's a way around this roadblock: asset stores.

  • OpenGameArt. One of the most popular sources for free graphics come from OpenGameArt. Most of the assets in this store fall under a creative commons license that usually requires attributing the graphics to the artist.
  • Unity Asset Store. One great part about using Unity is the asset store, which has graphics crossing a lot of different genres and includes both 3D and 2D graphics. Best of all, you don't need to use Unity to use the asset store.
  • GameArt2D. This site has a nice 'freebies' section and a good collection of royalty-free graphics that don't cost an arm and a leg.
  • Scirra. The Scirra store includes both graphics and audio assets like music and sound effects.
  • Game Assets at Reddit. This subreddit doesn't contain actual game assets, but it is a great discussion forum for finding assets.

I'm an Artist, But...

One great aspect of being good with graphics is being able to sell or trade that skill. The asset stores listed above can be a great way to help fund your game by selling some graphics. You can also use the Reddit subforum as a way to trade your skill (graphics) for other skills (programming, music, etc.)

If you are comfortable with both graphic design and programming, you can leverage those graphics skills to raise money for marketing your game. This can be a great way to kickstart your game once you get to that final step of publishing.

Start Small

Why not jump directly into your project and learn these games? For one, game development is hard. Depending on the scope of your game, you may be developing it for months, a year or even several years. Even if your concept is relatively simple, getting your feet wet with a small project is a good idea. Great programming is a matter of iteration. Each time we implement a feature, we get a little better at coding it. In the end, developing a small game at first will help your main project turn out better.

Publish Fast

Coming up with s simple concept and developing it to the point where it can stand on its own in the app store allows you to learn about the publishing process. Not only will you find out how to publish apps on the Apple App Store and Google's Play store, but you will also learn about the post-publication process, which includes marketing your app, getting it at the right price point, implementing the right advertisements, patching bugs, etc.

Break Your Game Into Parts, Build Game Engines and Publish Multiple Games

It is always important to take a project, break it into its various parts and then break those parts into even smaller parts. Not only will this help you keep organized, it will also allow you to see progress on a project that could take months to complete. Your game will likely need a graphics engine, a gameplay engine, a leaderboards engine and various parts like a user interface, menu system, etc. 

The key to smart development is to always be on the lookout for repetitive pieces of code and take it as an opportunity to build a function or class around that code. For example, placing a button on the screen might take several lines of code, but there may only be a few variables that change each time you place a button. This is an opportunity to create a single function for placing the button in which you pass those variables, thus cutting down the amount of time it takes to develop a menu system.

This same concept applies no matter how big in scope. Building up a set of reusable code and code "engines" can make future game development much easier.

Quality Assurance and Patience

Game development can be a long process and it can take a lot of patience to see it through to the end. One reason why it is important to break the project into small parts is to see noticeable gains as you develop. It is also important to set aside some time each day or each week to develop. And—most important—to keep developing.

The biggest trap first-time developers fall into is the idea of taking time off to give yourself a fresh look at the project. This leads to the "Oh yeah, I was developing a game last year, whatever happened to it?" moment.

Unless you are developing a game that can be built in a matter of days or weeks, you will probably hit a wall. You may hit several walls if your project stretches out over half a year. But it is important to keep working on it. One phrase writers often repeat to themselves when working on a novel is to "write every day." It doesn't matter if the writing is good. Skipping a day can lead to skipping two days, a week, a month...

But that doesn't mean you need to focus on the same thing every day. One trick to dealing with the wall is to skip over to another part of the project. If you are coding a complicated engine, you might spend some time looking for graphics for your game or looking for sound effects you can use in your user interface. You can even open up notepad on your computer and simply brainstorm.

This mantra of patience is never more important than on that all-important last phase of development: Quality Assurance. This phase isn't just about squashing bugs. You must also evaluate various portions of the game based on the one metric that really matters: is it fun? Don't be afraid to make changes to the game if you don't feel like it is meeting the fun requirement, but also keep in mind that you've been playing the game as a part of testing since development began. You don't want to fall into the trap of the game being familiar and therefore thinking the game is boring. Think about how that first-time user is going to feel playing the game.

Quality assurance is important because that initial release is very, very important. This is never truer than when an independent developer or a small indy team release that game they've been working on for months and months. The very best marketing is the organic downloads that occur when the game is released on the App Store. The more polished the game, the better its initial reception, which will lead to more downloads in the long run.