And 10 Terrible Mistakes to Avoid When Releasing Your Indie iOS App

Writing a new mobile game is hard enough. But what if nearly everything about your product launch went wrong? Here’s a story about Go to Market, TestFlight folly, the Apple Watch launch, expectations, assumptions, and a lot of things that just went wrong. It’s the story of the launch of my new iOS app SparkWord. If I can save just one person from the folly of shit that we went through to bring this game to market, then the world is a better place for it.

SparkWord started as a fun side project , not a “company” or a “job,” just an idea that popped up into my head one day. I’d never written a native iOS app before and wanted to learn Swift. I mentioned it to my wife and it sounded like a good idea, so gestation ensued.

Being a husband and wife team, and not a game conglomerate, I decided to keep the game simple. I would focus mainly on gameplay and nothing else. No servers, no databases, no notifications or leaderboards, all of that would be taken care by Apple’s Game Center. I coded everything, styled everything, edited the App Store video***. Bev or I made it all.

The code, the design, getting users, none of that was a problem, but as we learned, everything that could go with our game launch, went wrong. For your benefit, here are all the things that we had issues, and what anyone launching an app on the App Store should avoid.

10: One does not simply get a developer business account.

Registering as an individual for an Apple Developer Account is easy. Registering as a company is the opposite of easy.

Why? First off, Apple requires that you have a Dun and Bradstreet number (DUNS). DnB is a huge pain the ass to deal with, but they keep a database of corporations in the US that Apple cross checks against — apparently Apple uses that. It sucks. And it’s wrong sometimes. Like in my case.

Our LLC (Lynchseattle) was incorrectly marked as a sole proprietorship in DnB. I don’t know why. It doesn’t matter. While registering for a corporate account, Apple was convinced Lynchseattle, LLC was not an LLC. So guess what? We had to update our DUNS number, which a very non-Apple-like process to go through. It’s one step better than filing a tax return.

Updating our DUNS took almost two weeks. During that time we wanted to start testing, so we tiptoed right into another issue.

9: Transferring apps between accounts is nearly impossible.

So hey, while that DUNS number is being fixed at DnB, we decided we’d start with an individual account. We wanted to get started with TestFlight, and since things were chugging along at a snail’s pace with our own account, we used our KCBMedia account for another game of ours called CelebHookup. KCB is a partnership with another Seattle investor, but we knew the game couldn’t launch from that account. The decision to proceed with TestFlight through KCBMedia’s account was purely made out of convenience, but this would be one of the biggest mistakes we made.

The good news is you can transfer iOS apps between developer accounts in iTunes Connect. There’s a cool little checklist that shows if you’re ready to transfer your app:

Things are going well here.

It’s a great checklist of things you should think about to prep your app to move. Unfortunately it’s kinda full of shit.

Since one of the requirements to transfer an app using this checklist is to have an approved version, we submitted our app for approvals. This can take a long time (more on this later), but it wasn’t until everything was a green checkmark that we got this:

This… is bad.

See, if you use iCloud data syncing at any point in your app, you can’t ever transfer. Ever. As in, it’s not possible. As in, your app will not transfer to another account. That should probably show up on that nice checklist earlier, but it doesn’t.

If you use iCloud data syncing at any point in your app, you can’t ever transfer. Ever.

Of course, SparkWord uses iCloud to sync your preferences between your iPhone and iPad. That little bit of convenience was our deal killer. Ugh.

A better resource for transferring an app is this FAQ.

8: FEIN is a PAIN.

As clever people sometimes do, we decided to be clever. While we kicked off our TestFlight with our beta testers, we got impatient (again) and (again) made a pretty huge mistake. We decided to just go ahead and create our new Lynchseattle, LLC account as a personal account. The thinking was that we would simply convert it to a corporate account once DnB finished correcting our DUNS number to reflect it was in fact an LLC.

For whatever reason… and I don’t know why, when creating the personal account, I put down the Lynchseattle Federal Employer ID Number (FEIN) in our Tax Information in iTunes Connect instead of my SSN. It was a mistake, but keep in mind it was our actual intent to have this account actually be a corporate one.

But here’s the thing and it’s an important one: there is no way to change your Tax ID number in iTunes Connect.

7: Binary Reassignment is not the solution you are looking for.

Okay, so SparkWord was now approved and stuck in a developer account we couldn’t use to release our game. On the phone with Apple Developer Program Support, who are simply the most amazing people in the world (Beatriz and Danielle, you both rock), it was discovered there was an option!

So, Binary Reassignment. It sounds surgical.

Essentially what it means is that your game is deleted from one account and recreated in another developer account but you get to keep the name. Everything else is lost: TestFlight users, data, etc. While painful because our TestFlight beta users were actively loving SparkWord, it was our only option.

But remember — you’ll lose everything. You even have to change your bundle identifier for your app, which is about as fun as running through a mine field and taking notes of where not to step as your listen for the explosions behind you. It tends to be a whack-a-mole session where things break and then you find and fix them.

For us, this wasn’t a huge deal, but it was a time suck.

6: About that Individual Developer Account…

As I mentioned before, Apple offers a way to convert your individual Developer Account to a corporate one. Since we were well underway on our beta on another account, we didn’t fret too much about this. That was a big mistake.

We had thought Apple transferred and converted our account to a corporate one correctly, but as it turned out, another bomb awaited when we went to submit the tax forms. BAM!

Remember, ladies and gentleman: you can’t edit your Tax ID in iTunes Connect. Since our new Tax ID number for SparkWord and Lynchseattle was the same as our old, iTunes Connect refused to complete the account change.

So effectively this entire account was stuck. Unusable. Couldn’t even create an app to use for TestFlight. Nothing. Nada.

Oh and that’s when we contacted…

5: Apple Developer Support rocks. Contacting the Tax Team is like reaching out to the IRS.

Apple Developer Program support is great. Unbelievably friendly, sympathetic, nice, fun, and helpful. They really do go the extra mile.

I got to know two people by voice and name during our release. Look, the reality is I would have hoped everything would go smoothly, but this isn’t the first time I’ve released a product. Shit goes wrong. Always. At least things can be delightful if you’re in the suck.

This was different. We needed to change out the FEIN on my account to my SSN. That required an ominous submission to the Tax Team. A different form. A different system. They even have a really ugly support case response email.

Not very Apple-like.

Even that response email looks like it came from the IRS. It’s not friendly. It’s not Apple. My favorite is the “Disabled Fields:” part. Wut.

After sending this in, we heard nothing for days (5 days). Keep in mind at this point, we’re basically ready to release. Finally, someone from the Tax Team sent a very professional but completely unsympathetic email stating that because we had screwed up by using our FEIN, we should be prepared to wait “a few weeks”.


4: Blow up the corporate account and start over — I’m done waiting!

Waiting 3 weeks to simply have Apple’s tax team fix our Tax ID in our unusable Corporate Developer Account sounded horrific.

I called up Developer Program Support and told them to blow up the account. We would just release SparkWord as Chris Lynch, not as Lynchseattle, LLC. Apple was awesome about this (except for the Tax Team, who sent back a snarky email informing me that my Lynchseattle FEIN would be unusable forever until I correctly went through this process).

FEIN be damned, I’m releasing this!

And so it is I created a new individual Developer Account with my personal SSN. Apple was kind enough to refund the registration charges since… well.. nothing ever went right with the other accounts. Again, their support is really great.

Finally I could create a new SparkWord app! ERMRGRD! It’s happening! Let’s go…

3. Hey, let’s do an Apple Watch app…

The Apple Watch was due to launch on April 24th. We were rapidly accelerating towards that date, but had decided along that since we were waiting for processes and approvals, we’d submit a version of SparkWord with a WatchKit app extension and see if it got approved (on the KCB account we wouldn’t be launching under).

And you know what? We got approved! Awesome! The Apple Watch app portion of SparkWord is fairly simple to start with for now: see current moves, games, status, and word lists. I’d planned on adding better support once I had a Watch as it’s very difficult to debug and write for without one right now.

Anyhow, that was cool because out of the blue on the Friday before the Apple Watch launch week, a games manager for the iTunes store reached out to us about our app letting us know we had to be submitted and approved by the following Monday to make the launch! Of course, he was looking at the app we wouldn’t be submitting, but he was awesome about working with Developer Program Support to get an expedited approval for our game on… our new account!

Funny enough, if we had decided to try and correct the FEIN on our Lynchseattle account, we wouldn’t have even had a chance.

Time to get our app approved and reviewed. Let’s ship!

2: It’s a sprint to the waiting line!

And then it was the waiting game. Be prepared to wait. You can get an idea of app approval times at #iosapprovaltime on Twitter. Without an expedited review, we were facing 8 days. We had 3.

On the Monday deadline to hit the Watch launch, we got an email stating SparkWord was being reviewed. To say Bev and I were nervous would be an understatement. In a fit of unease, we headed out for breakfast to help pass the time.

App reviews are like sending your kid to 1st day of school, but you don’t know the school or the teachers, and they might reject your kid. It’s not a fun process — it’s a black box. We nervously watched our analytics to see if someone from Cupertino was playing. Turned out a player we didn’t know who had played SparkWord on our older version in KCB was playing. It was for reals!

App reviews are like sending your kid to 1st day of school, but you don’t know the school or the teachers, and they might reject your kid.

And then…


Apple Watch. Yeah, the same Apple Watch app that had already been approved in our KCB account was just rejected. Not the game. Not the video app preview. Not a bug. Our app apparently was missing a “Bundle display name” in our Info.plist for the Apple Watch app and the app was showing as “SparkWord Watch App”, which is verboten. Damn I wish that had been caught the first time the thing had been approved!

But they also said the app didn’t run — blank screen. Of course, I’d never seen that on the simulator. Sure enough they showed screenshots and there was a black screen. No bueno.

The SparkWord Watch app uses a page based navigation with a loading controller that sets up the pages. I loaded the pages in awakeWithContext(), which made me wonder if that was the wrong place on an actual Watch. With no way to test, I made two changes in haste — I moved our Deployment Target to iOS 8.2 (from 8.1) and then moved the reloadRootControllersWithNames() call to willActivate().

All looked good in the simulator (although to be fair it did before as well), so we resubmitted.

Now about that black box — we didn’t know if an expedited review would carry over to a new build for a rejected app. The day felt empty — that rejection was a huge blow to Bev and I. We’re not a huge company and we’re just two people with other lives going on and other things for work, so getting SparkWord out is mostly for the love of the game. And our stress level was through the roof.

But then 6PM that night, the app went back into review. Pins and needles. The waiting game all over! Would our child be accepted?

YES! We are approved! What fixed the black screen on the Watch app for sure, I’m not sure — switching SparkWord’s iPhone app to 8.2? Changing how the page based nav was set up? Unknown. Didn’t matter.

We were launching. Let’s do this.

1: Houston, we have a problem.

The games manager at iTunes confirmed we made the Apple Watch launch. So that was great. Bev and I went out to celebrate over dinner. Awesome!

And then… the app… never showed up. We showed as “Ready for Sale”, but the app wasn’t actually live. In iTunes Connect you can say “View in App Store” but the landing page threw an error that the item wasn’t available in the US.

Our assumption was that Apple was holding the app until April 24th’s Apple Watch release. That had to be it, right? So we waited.

By Wednesday that week we started to get worried. What if we were wrong? What if something was wrong with our app, and it was living in some kind of app limbo like poor Carol Anne in Poltergeist? I shot an email off to the iTunes Store Manager for games to just verify the game would be live on Friday. Just a little peace of mind.

Later that day we found out that wasn’t the case. Something with the app had gone wrong, and instead of sitting poolside with Watch apps like a boss, SparkWord was sitting alone in the forest unsure of how to find its friends. There was in fact an indexing problem that had stalled our launch.

Instead of sitting poolside with Watch apps like a boss, SparkWord was sitting alone in the forest unsure of how to find its friends.

Shit. Another mistake.

Bonus Problem: Surprise! We’re live! Oh, and no reviews for you!

When the Store Manager saw that the game was stalled, he contacted engineering to fix everything.

Our beautiful, beautiful baby!

And so it was… SparkWord was launched.

That’s both good and bad. Now our app launched without any notice, and it also appeared to have screwed up our ability to show up as a new app that launched for the week — a huge driver for discovery that our app missed.

On top of that, all reviews in the app store seemed to stop working. So the beta players who were in love with SparkWord in our game had no way to write reviews — they’d been playing for months and our stats are fantastic (average game session around 14 minutes or so). All that love had no way to translate.

So we started scrambling to post, share, and generally get the word out. Of course, starting from our own network. Ouch.

The lesson here? Don’t assume everything that just because you launched that things will work well.


In retrospect, a lot of mistakes were made. Many of them were seemingly innocuous at the time, but ended up having huge repercussions later. Starting off using the wrong dev account for convenience on starting our beta was a huge mistake.

Bev and I were chatting and she mentioned that she wished we hadn’t rushed to launch with Watch. I agree — our launch calendar would have been followed more closely, the game would have been indexed as normal, and we wouldn’t have cut corners to hit an arbitrary date that we didn’t really need to hit.

Launching at the same time as a big Apple product launch is a blessing and a curse. You have an opportunity to get news pickup based on novelty, but the reality is the news channels are flooded with similar stories, so the signal to noise ratio is off. A product launch is all about rising up above the noise.

For that reason we’ve decided this was our soft launch — find some bugs (iOS 8.3 actually introduced a number of bugs that we are fixing now). We’re sending out fresh PR and outreach over the next week or two along with our launch party, and taking these lessons learned as indicators of what we should never do again. It’s time to really launch SparkWord.

Indie developers face so many hurdles that sometimes it’s easy to focus on what could be an opportunity. Pick wisely and don’t rush.

And now I’m off to play SparkWord…