Launching My First iOS App


I’ve been working on my first mobile app (download Pool Wise for iOS today!) in my spare time for the past 18 months or so. Being a web developer, I decided to use Cordova and stick with HTML, CSS, and JavaScript rather than learn to code native iOS and Android apps. Getting a prototype up and running in a browser was very easy, but as I started transitioning to mobile I ran into some issues that I want to share for future reference and maybe to help someone else who might encounter them.

The app itself is built using Ember along with PouchDB for data storage via ember-pouch and a handful of other Ember addons. Up to this point things worked very smoothly.

Enter Cordova

The ember-cordova addon came to my attention a while back, so when my app was ready to move from the browser to an actual mobile device, I added it to the project. The addon abstracts away a lot of the steps needed to properly prepare an Ember app for use in Cordova.

My first hurdle came while preparing my mobile app development environments. I was able to get Xcode up and running quickly, but I ran into problems with Android Studio. Ultimately I decided to focus on the iOS version of the app until it launched and then circle back to Android afterward.

One other little issue that I ran into is that a few images I wanted to load from the Ember /public/assets/ folder weren’t showing up in the app if I ran a production build. I was able to get them to show by making sure the src attribute did not start with a leading slash (Ember apps in Cordova should use the hash locationType) (<img src="assets/image1.png" />) and also by excluding images from fingerprinting in the ember-cli-build.js file (see EmberCLI fingerprinting).

I’ll note briefly here that using Cordova doesn’t magically make a web app behave like a native app, and I implemented many tweaks to get there as well as used several Cordova plugins and ember-cordova addons to further customize the app experience. Check out this video for some tips on using Cordova with Ember (although many of these apply to any Cordova project):

Xcode Woes

With Xcode up and running, I decided to try my first build. Unfortunately the build failed with an error code 65, something about provisioning profiles. I was vaguely aware that I would need to sign up for a paid Apple Developer account to get access to their “walled garden” but I did not expect to run into a roadblock like this during development.

It turns out I had my iPhone plugged into the USB port on my MacBook (I was charging it) and this was causing the error. I unplugged my phone and reran the build and it worked just fine.

Eventually I signed up for an Apple Developer account and used Xcode to set up provisioning profiles. Of course at that point I ran into an issue with Xcode not being able to build for the latest iOS 10.3 that I had to work around.

iTunes Connect is Weird and Slow

Armed with my new Developer account status, I logged into iTunes Connect to fill out the initial paperwork. Everything was pretty straightforward until I got to the tax forms. Instead of just filling out a W9, there is a web form that sort of mimics a W9’s fields. However, iTunes Connect tries to be cool about it and some fields are read-only and others are dependent on certain selections. I get it, Apple is trying to make the form less error-prone, but for my situation the way they have the form set up made things a bit confusing. I would have been happier just filling out an actual W9.

Once my app was ready for beta testing, I logged into iTunes Connect to create a record for the app so I could upload the app bundle to it. As I filled out the form (app name, company name, language, etc.), I got stuck at a dropdown where needed to choose a bundle ID but none were listed. The help text under the dropdown directed me to the developer portal ( to create an appID entry for my app so I could use it when choosing a bundle ID. I did that, but the dropdown didn’t update.

I waited overnight, tried again with a test app, and even submitted a ticket to Apple about it, until it magically appeared in the dropdown about 15 hours after I created the appID (along with my test app too). I had been trying a few solutions I found online like logging out and back in, messing with a few things in Xcode to try to force a “sync”, etc., but I have no idea what made it ultimately work other than just waiting ¯\_(ツ)_/¯.

Getting My App Onto iTunes Connect for Testing

When I was ready to upload my app for beta testing in TestFlight, I created an archive in Xcode, then used Xcode to upload it. It got most of the way done and then showed a generic error message. So I ran a validation on the archive, which came back OK, then tried the upload again. This time it worked. Weird.

With the app uploaded, I went to the TestFlight section and filled out some forms. Then I added myself as a tester. Nothing happened. I refreshed the page and this time a message showed up saying I had to complete a compliance step regarding encryption. So I did that (my app uses no encryption at this time, but I did find a blog post that seems to cover this issue well if your app does use encryption). Then about 10 minutes later I got the invitation email and I was able to install the app on my phone for beta testing via the TestFlight iOS app.

Before I could invite anyone else to test the app it needed to go through beta review. That took only a few hours, after which I invited several other people for beta testing and they got emails after a few minutes, so that part seemed to go more quickly. After a couple rounds of feedback and uploading revised builds for more testing I was ready to submit the app for final review and release.

App Review and Release

The actual release process was pretty simple. I submitted my app for review, and after just a few hours I received an email saying it had been approved. I chose to manually release the app, which I did shortly after the review was approved. After that it took a couple of hours before I could actually find the app in the app store (and yes I was totally checking every few minutes that entire time). Once it was in the app store I updated my app’s website with the “Download on the App Store” badge.

I already have a couple of new features in-progress, so we’ll see what the update process is like soon. I’m also working on the Android version (having some issues getting Cordova to build and run the emulator at the moment).