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):
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 (developer.apple.com) 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).