Our product has began a drifting our API. This drift within a specific release cycle is problematic, however we’ve released multiple versions with business requirements changes. Unforunately the sands of time have grown few for this particular version. Months ago I had built a meachnism to verify the client is compatbile and today it was called in service. The check is fairly simple, it passes a semantic version into the API along with a client identifier. If the version provided is lower than what is supported then the client will ask the user to upgrade.

The machnisms work right now insofar as to ask the user to upgrade. I had other stories in play and intended to return back to redirect the user to upgrade in the app store. But there is no time like the present to do so. According to Apple directing a user to the App Store is a very easy thing to do. I’m a little disappointed I didn’t look this up earlier if it was this easy. I don’t think we had the App Store version up yet though. Anyway, onto figuring out the link. Looking at it though, that is an HTTP link. I think a much more professional expierence is to direct them to the App Store Application driectly.

Direct link for application updated version in AppStore looks most promising. Now to put it into the code! For this particular task I’m not work with the bleeding edge build nor the staging build. I’ve had to go back to our last build from a few weeks ago. My have we been busy elves. Anyway, the technique kind of worked. As in the code compiles and tries to launch the link. The emulator doesn’t, presumably because the app store isn’t actually installed on the simulators. There are varying opinions on the exact URL, which is unfortunate since I don’t have my test device on me. Gah! Turns out using itms-apps://itunes.com/apps/:appname will result in a search. Not entirely what I was hoping for. Better to open the specific application…how to do that. On a real device so far what I’ve tried:

  • itms-apps://itunes.com/apps/id:id - No search result
  • itms-apps://itunes.com/apps/:id - HTTP/1.1 Service Unavailable
  • itms-apps://itunes.com/apps/:bundle - Item Not Found
  • “itms-apps://itunes.apple.com/app/id:id” - Well that worked

Where

  • :id is the numeric id of the application. You can find this in iTunes Connect’s app summary page.
  • :bundle is teh bundle identifier of the application.

Well that was a relatively painful since I actually had to a use my real device. Not that I mind too much however it’s much easier to keep my hands on the computer than switching back and forth. So now I’ve got that sorted out, the forced upgrade is definitely a feature which needs to roll up far in adavnce of when you will need it. As a user I’m generally okay with updating often, however for those who sometimes they get left behind. As applications evovle and development APIs need to change. Hopefully you can get away with varying the content return type, but sometimes compatability does break. This was one of those cases. Plus, it’s a very small handful we could personally reach out to.