Making Sense Of iOS Provisioning

If you’re new to iOS development, whether you are using Xamarin, native, or another platform, you will want to debug and develop on an actual iOS device.  In addition, you probably want to deploy alpha or beta versions of your app to testers running on various iOS devices in real world scenarios.  If you’re developing for Android, this process is really easy as the Android operating system allows users to easily side load applications.  However, the opposite is true for iOS devices.  In fact, setting up an iPhone or iPad for development can be very frustrating and confusing, especially if you’re new to iOS development.


Debugging my app on an iPhone or iPad should be easy…right??


Xamarin and Apple both have excellent documentation on how to properly provision an iOS device for debugging, and testing.  Though it is really easy to follow the step-by-step procedures on creating the proper provisioning profiles, what I find lacking in such documentation is how provisioning works.  In this article, I’m not going to explain how to create provision profiles.  There’s plenty of documentation out there.  I’m going to explain how provisioning profiles work, and why the iOS operating system needs them.  A solid understanding is necessary if you run into any issues or errors such as “No valid iOS code signing keys found in keychain”, or “Code Sign error: Provisioning Profile ‘xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx’ can’t be found”.


Nuts & Bolts of Xamarin.iOS

In my previous post I gave a very high level overview of what Xamarin is and what Xamarin is not.  Though my post was more conversational and explained by example, I left out the technical details.  In this post, I’m going to focus on the nuts & bolts of Xamarin.iOS.  But before we start off coding a sample application, it is (in my opinion) essential to understand what Xamarin.iOS is, how it is compiled, and how it executes on your iOS device.  Though it is easy to jump right in and start coding, I believe it is essential to understand the Xamarin.iOS fundamentals, as well as the iOS operating system fundamentals.  In the long run, this will be beneficial when you have to start debugging your apps.  It will also help you troubleshoot issues and understand what is happening between the iOS operating system, Xamarin.iOS, and your own code.