iOS enterprise distribution with Xamarin

Recently, I took on a Xamarin iOS project where we used Apple Developer Enterprise Program to deploy the app, in-house to just their employees. We ended up deploying through their local intranet server and it works beautifully.

However getting to deployment was less than beautiful. I had to do lots of digging around and reading from many different sources to piece it all together. Here is process, streamlined.

Certificates and Identifiers, and Profiles, oh my!

If you've deployed iOS apps, you know the drill. While the Apple developer portal has gone through some changes over the years, the hassle of profiles and certificates hasn't been simplified. I won't write about the process as Xamarin has fine write up on what you need to get these in created for in-house distribution.

Building your IPA

Once you have your certificates, etc all created. You need to get them loaded on your system and put them into your Xamarin project. You've likely done this before as well so I won't get into it much. Basically, I set up a new build configuration for deployment and then make sure that config is set to use the proper certificates for deployment and is set to make an IPA in the Project Options.

Project Options

Wandering off the path

These first few steps all seemed easy and natural (for an iOS developer that is). Getting my IPA to install on a device was less than clear though and this is where my research started in earnest.

The basic premise is this. You need to make a manifest plist for your app which points to the url for your IPA. Then you need to link to the manifest from a web page (or an email) with a custom url for your iOS device.

I made a gist with a generic versions of the plist and an html file with the magic link. Start with these and change the "mycompany" and "myapp" stuff to match your needs.

Note: I had to use https for this to work. Older documentation often uses just http, but somewhere along the way that requirement was added.

Once you have your IPA and cleaned up versions of the plist and install html up on your web server, you are almost done. You now simply need to tell your web server had to handle these extensions (plist and ipa) if it doesn't know already.

ExtensionMIME Type
.plistapplication/xml
.ipaapplication/octet-stream

Installation

Finally, you are ready to install on your devices. From your iOS device, hit the web page and tab the install link. iOS will prompt you with an install option and once you confirm will start downloading the app.

Remember, you will need to trust the developer the before using the app for the first time. This is done in Settings, under General, then Device Management.

That's it. Hope your enterprise deployments go smoothly.