I hope this is the right place to ask this question, since it isn't actually programming related.

I work at a company which is taking the first steps in iOS development, and we realised that there is a problem on how to demonstrate a fully functional developed application to a client.

The situation is quite simple:

Let us say some company (referred as "client") asks us to develop an application about whatever. The client can be geographically distant or even in another country. The client owns its set of iPhones/iPads and at end of development, it would like to run the app on their phones, so they can see it works and is fully functional.

So, the question is how to do it? How to make an app demonstration to this client on their iPhones?

We haven't done this before, but we realised that there is no other way to install an app from any source apart from the Store, or compiling it from a developer Xcode environment. I mean legally. We also understand that it takes quite a lot of time to deploy an application to the Apple Store, in order for Apple to check it out and other stuff.

Please, correct me if I said something wrong, but we are in the baby steps of this, and we would like to understand a bit more about all these issues.

So, are there any technical solutions to this problem? I mean, which do not involve sending phones by mail, and anything like that.

3 Answers 3


Yes, there is a way to install apps on stock OS iOS devices, other than from Apple's App store or when tethered directly to the developers Mac.

An enrolled iOS Developer can sign an app with an Ad Hoc Distribution certificate and a mobileprovision file which includes the UDID's of the client's devices. You can email this app and provision file to a client. Then the client can install this app (and the mobileprovision files required for it to operate) using the iTunes app on their Mac or PC. Or the client can download direct to their device from a (OTA) web page using HTTPS plus a manifest plist.

This is very commonly done for beta testing of iOS apps.

Ad Hoc provisioning expires at least once per year, so these apps are only temporarily useable. A Developer is limited to no more than 100 UDIDs max total per year, so can only do this for a very limited number of clients.

  • Thank you for the suggestions. I suppose it will take time for us to do this, but it is awesome to know. Nov 18, 2011 at 16:41

You need to add the UUIDs of your client's devices to a provisioning profile in the Apple Developer Center, then you archive and sign your app with this profile.

The easiest way to distribute the .ipa you get then is probably to use a service like TestFlight or if you want to use your own server the app iOS beta builder.

The biggest problem with iOS beta distribution is that you are limited to 100 devices per account and year, but other than that it is pretty straighforward.


This is very easy to do once you get into how app signing works in iOS.

In a nutshell either you or your client will get a certificate from Apple that lets you list certain devices that can run your apps that will be side loaded directly from your build machine and not going through the store.

Xcode will use that certificate to sign the app when built and it won't matter so much how the app got onto your demo device as long as the provisioning profile on that device matches the certificates on the app you built. You can send the app via email to the device, shared as a file to iTunes for the client, or even set up a server to deliver the app over the air (OTA) using a web server.

You will have to do some reading and learning on the developer site as well as some trial and error as you learn how picky the certificates are and how things can and will break. There are many books and tools to help you out - but I've found making some efforts to attend cocoa / Xcode / iOS events in your community to be extremely valuable for learning the ropes and having resources to ask and be asked yourself how to get over hurdles.

Not the answer you're looking for? Browse other questions tagged .