I have done this several times.
Prequisites:
- An Apple iOS Enterprise Developer program
- A web server with SSL
Steps:
Create your app ID (in the apple provisioning profile - further "" ).
Create your DEVELOPMENT & PROVISIONG profile on the apple provisioning portal.
NOTE: In order to be allowed to continue you will have to include at least one device on which it will be tested. This means you must add at least one GENERAL device with its UDID. This GENERAL device does not have to be your costumers device. I set a iPhone 3GS for a iPad project. I never tested it and never got the iPad(s) UDID(s) on which I tested my app.
Create your iPhone/iPad project
Copy your app ID from the apProf - "Identifiers" for example: "com.MyCompanyName.MyAppNameShouldBeHere" into your Xcode project under "TARGETS" - "Info" - "BundleIdentifier".
IMPORTANT:The app ID HAVE TO BE THE SAME IN apProf and Xcode.
Finish you app and when ready for testing go to step 6.
In the top right corner change the testing device to "iOS Device" (instead of iPhone simulator or any other simulator).
NOTE: There is no need to connect a device. When you connect a device it automatically gives you the option to test it on the device if the device already has a valid provisioning profile on it.
7.At the top of Xcode go to "Product" and go "Archive".
7.1. If you get a Error try and let Xcode fix it.
7.2. If Xcode can not download/acquire the provisioning profiles created online in step two go to apProf and download the profiles. After that I always double clicked the profiles and copied the names into "TARGETS" - "Build settings" - "Code signing".
7.3. You can also go to "Xcode" - "preferences" - "accounts" - "view details" and hit the little round refresh button. This will refresh all the provisioning profiles from profPor.
NOTE:Try this few times. I had some problems and got it always working. When you fix it once it always works.
After the you finish step 7. you need to wait a bit for the archiving process to pass.
After that you should see the organizer window. Inside the window to the right is a small button "Distribute". Click it and select the OTA (over the air). I dont know the correct name but the other two options are clearly not the distribution way you want because one is the app store and other is something else.
After you selected the OTA distribution method YOU DO NOT NAME YOU APPLICATION AND CLICK CONTINUE.
I made this mistake few times. You need to check the "save for enterprise distribution" checkbox just below the browser screen near the cancel button. After that the window gets bigger and allows you to fill aditional information. Two things are important:
9.1. The URL of your SSL server : example. https://myPrivateserver.some/MyAppName.ipa
NOTE: The "MyAppName.ipa" has to be the same as in the top of this window.
9.2. The app name. This name you can write what ever you want. I recommend you do it smart like the date or changes because if you set several links on you test page you might want to see when the download is clicked which version of the app you are downloading. This app name will be presented before the installation & download in the pop window. It is self documenting and helps you a lot if you do many changes in a short time.
After you receive the two files (the .ipa and .plist) you copy those files onto your web server with a ftp client. However you need to copy them in the correct path/address you wrote in step 9
The last step is to create a index.html in the same directory with the correct link path. You can find more informations on the link path and why you need a ssl here:
Enterprise app deployment doesn't work on iOS 7.1
or simply put use the following line
itms-services://?action=download-manifest&url=https://example.com/yourGeneratedPlistFile.plist
These are the steps that worked for me. At the end you just send the https://example.com/index.html link to the testers or alike. These steps always worked for me. If you need any further explanations let me know. If I wrote something wrong let me know to edit it.
Hopefully it helps :)