This post is more of a public service announcement. Prior to Tilt to Live’s Game Center/Retina update we wanted to extensively test the game with a wider tester base. So we ran a small ‘open beta’ (as open as Apple’s ad-hoc program would allow us). Prior to iOS 4.0 users had to do a cumbersome dance to get an ad-hoc game on their devices. And by cumbersome, I mean anything dealing with the desktop iTunes client. There was a lot of room for error, and for those (like me) that loathe syncing with iTunes, it creates a barrier because the act of adding an ad-hoc pretty much wipes my personal device since I buy all my apps 100% on the device and never sync.
Enter iOS 4.0. I discovered this tidbit on Twitter one day. Sadly, I can’t recall who tweeted or retweeted it, but thanks!
With the new iPhone iOS 4, you can distribute apps wirelessly without iTunes intervention. You still need to collect the appropriate devices id’s and create the appropriate provisioning profiles but if you already have those sending out files is easy.
The benefit? Oh where to start? Your testers no longer need to be tethered to a desktop to actually test your app! Our beta e-mails contains direct links to the provisioning and ipa file. The user simply has to tap on both and the game installs over the air! It’s almost easier than buying an app on the app store. The barrier to beta testing has been dramatically lowered because of just this one feature. You can almost coin it as ‘one-click beta installs’. It’s good stuff.
The other upshot? You get more feedback. Some beta testers may simply be out and about and won’t remember to connect to their iTunes client when they return home for the day. We had a lot more responses this go around and even some quick back and forth e-mail discussions as people installed, played, and replied all in one sitting.
Another good thing is we were able to get some ‘field data’ on our Game Center implementation. I would imagine most people have wifi on their homes nowadays. We were getting some feedback from some testers that were on EDGE or 3G that Game Center was causing a long ‘pause’ between games. This was something that didn’t turn up in our internal testing because we’re always on Wifi. Turning over to 3G to test still didn’t give me any hang ups. So just the knowledge that a good portion of people were getting a significantly slower response from GC prompted me to investigate better ways to mitigate this and ‘hide’ the response time delay so users weren’t met with an unresponsive UI.
Downsides? It’s a bit cumbersome to create a build for wireless distro as you’re required to do a ‘build and archive’ from XCode. I have an automated build process for the old-school ad-hoc way. I wish there was a way to automate this as well. I feel that there might be a way, but not sure if ‘build and archive’ is doing any magic behind the scenes. If anyone’s got any info on this or whether xcodebuild has some way of doing this all through the command line please let me know!
A quick guide to build a wireless distro game or app
1. Choose Build->Build and Archive
2. If it already isn’t open, open the Organizer window (window->Organizer) and choose ‘Archived Applications.
3. Highlight the build you just archived and click on “Share Application”

4. Select “Distribute for Enterprise”. The correct provisioning profile should be automatically selected. If not, correct it.
5. At this point you’re presented with a form (pictured below) that you need to fill out.

- URL: You need to decide beforehand what the name of the ipa and the location on a webserver the file will reside at. For this example we’ll use ‘http://www.onemanleft.com/tilttotlive/Tilt_to_Live.ipa’
- Title/Subtitle: self explanatory.
- Large/Small image URL: not needed. But since I had this on hand I just put them in the same folder on the web server as the ipa file.
Now when you click ‘OK’ it will ask you to save the file. Be sure to save it as the same file name you gave it in the URL (in our previous example it was ‘Tilt_to_Live.ipa’).
Now upload both the ipa and plist file to the URL you put in the form. Drop the index.php file created by Jeffrey Sambells in this post to the directory you uploaded the IPA file and you’re good to go. This index file will generate the links for both the provisioning and ipa files.
Now any user that is in the provisioning profile can visit that link in safari on their device and download the app directly. Or more conveniently, you can just copy and those links into an e-mail
.
November 8th, 2010 at 12:03 pm
It won’t do everything you want here, but I’ve written a shell script that should perform a valid Build & Archive from the command line.
I’ve got it hooked into CruiseControl.rb, and whilst it’s pretty hardcoded to my personal requirements, I’ve released it as a gist under the MIT Licence, so feel free to fork it and make improvements.
https://gist.github.com/668002
Let me know if it’s useful!
November 8th, 2010 at 12:07 pm
@Warren Thanks for the script! I’ll definitely look into using it and seeing if I can automate the distribution packaging.
November 8th, 2010 at 12:39 pm
I recently did this with a client and they were completely blown away at how much easier it was to install a developer build than previously. Recommended.
November 8th, 2010 at 9:53 pm
Thanks for sharing this! Gonna be very useful for distributing to project clients as well.
November 10th, 2010 at 8:14 am
I’ve been doing recently a Ad-Hoc beta for the first time and many users said they didn’t test the app because it required them to sync their iPhone to the desktop iTunes.
I wish I’d have known about the wireless ad hoc distribution 2 weeks ago
Thank you for the post!
November 11th, 2010 at 8:59 pm
Hello,
I follow the intructions step by step but when I click on my ‘Install Application’ link, I did not get my app installed. It seems that the web browser doesn’t recognize ‘itms-services’ protocol in PC and iPhone.
How did you fix the problem?
Thanks.
November 16th, 2010 at 4:54 pm
Hi,
Interesting post !
I found a way to automate ad-hoc distribution by packaging the app from the command line using the “xcrun” command, ‘i’ve written an article about this:
http://blog.octo.com/en/automating-over-the-air-deployment-for-iphone/
Please let me know if you found this usefull
Bye,
Vincent
November 18th, 2010 at 10:24 am
@vdaubry Thanks a lot for the heads up and the article. I’ll definitely be looking over this in a few days as I’ll be updating my build scripts, it looks like exactly what I was looking for
.
November 24th, 2010 at 10:54 am
Awesome! A way to get the software to testers that is easier for them is great!
December 16th, 2010 at 8:11 am
[...] Under Organizer window, select the archive app and select Share > Distribute for Enterprise. You will see this (screenshot from paradeofrain): [...]
December 16th, 2010 at 12:43 pm
Parade of Rain » Blog Archive » Taking the pain out of ad-hoc testing…
Thank you for submitting this cool story – Trackback from ShMarker.com…
December 16th, 2010 at 6:12 pm
[...] Parade of Rain » Blog Archive » Taking the pain out of ad-hoc testing (tags: iphone adhoc iphonedev development ios) [...]
December 16th, 2010 at 6:23 pm
[...] a few developers have discovered the secret, documented in detail here. Now you may say that this isn’t a secret at all, but a well-known feature most developers [...]
January 6th, 2011 at 8:49 am
[...] http://www.paradeofrain.com/2010/11/taking-the-pain-out-of-ad-hoc-testing/ [...]
January 18th, 2011 at 5:34 pm
Do you have to still build it with the Entitlements.plist setup, or does the archive supplant that process?
January 24th, 2011 at 10:59 am
@zemchemical Yes you still have to setup valid entitlements.
January 26th, 2011 at 9:26 am
I have tried this several times and for some reason the provisioning file I keep getting the error “cannot install profile, safari could not install a profile due to an unknown error.” – so clearly something is up with the provisioning file.. any more detail on how to do this correctly
February 7th, 2011 at 10:43 am
Any luck doing this on the XCode 4 GM?
February 12th, 2011 at 5:28 pm
@Mariano Haven’t given XCode 4 GM a try yet.
February 23rd, 2011 at 1:39 am
hi am able to open the page but when i click on provisioning profile link, it says safari cannot download the file. I generated the provisioning profile in my developer account of apple and uploaded in the webserver.
Any clue why this is happening?
April 13th, 2011 at 10:29 am
I think you should get into the habit of syncing your devices! This should not wipe the apps you purchased on your device … when I sync, iTunes asks me if I want to copy items purchased on the device back to my computer and I say yes. You might want to reset your alerts to make sure you see this option.
One benefit of syncing is that iTunes backs up your device, including all your app data, contacts, etc. So if you lose or break your device, or just buy an upgrade, setting up a new device to match your old one is painless.
July 4th, 2011 at 9:31 am
[...] Answer: iOS 4.0 and later: Instructions on wirelessly distributing your application to beta testers. [...]
August 12th, 2011 at 12:52 am
Lindsey:
shaxpear:
I had the same problem. Once I put the correct provisioning profile on my server (the profile for distribution, with my device listed in it), it worked fine.
October 24th, 2011 at 7:33 am
Could someone pls mail me the index.php created by Jeffrey Sambells because the site doesn’t exists anymore.
December 24th, 2011 at 5:18 pm
[...] Parade of Rain » Blog Archive » Taking the pain out of ad-hoc testing So we ran a small ‘open beta’ (as open as Apple’s ad-hoc program would allow us). Prior to iOS 4.0 users had to do a cumbersome dance to get an ad-hoc game on their devices. And by cumbersome, I mean anything dealing with the desktop iTunes client. There was a lot of room for error, and for those (like me) that loathe syncing with iTunes, it creates a barrier because the act of adding an ad-hoc pretty much wipes my personal device since I buy all my apps 100% on the device and never sync. [...]
January 9th, 2012 at 9:03 pm
[...] 之前让测试的人做iphone app的adhoc测试一直都是build一个app,让他们从itunes里面去同步安装到iphone里面的,直到看了这篇和这篇文章之后才发现原来用itunes同步这个方法好笨哦。。因为 With the new iPhone iOS 4, you can distribute apps wirelessly without iTunes intervention. You still need to collect the appropriate devices id’s and create the appropriate provisioning profiles but if you already have those sending out files is easy. [...]
January 25th, 2012 at 5:48 am
I am getting the error “Cannot connect to mydomain.com” when i am clicking on the link in iPhone browser. However i can browse my domain in iPhone browser. any help?
February 7th, 2012 at 2:17 am
I get ‘Cannot connect to domain-of-server’ when i click on the ‘Install Application’ link.
anyone knows what i am doing wrong?
March 15th, 2012 at 10:11 pm
I am being told it can’t connect to the website for both, so not sure if iOS 5 has broken this?
March 15th, 2012 at 10:11 pm
My mac can’t get there, either – perhaps the web server is doing something freaky with the extensions?
March 15th, 2012 at 10:51 pm
Webserver was causing problems, but when I ran it on a local server it finds the files OK – still won’t install, though. AGGGG
March 15th, 2012 at 10:54 pm
For this ad-hoc testing, while I would spend the time troubleshooting it months ago, I think at this point you are *much* better off just using TestFlightApp.com. Let them deal with server-side issues and developers can focus on testing, getting feedback, and rolling out new builds quickly and painlessly. They even have an API if you want to have automated builds.
March 19th, 2012 at 7:41 am
[...] [...]
May 23rd, 2012 at 8:04 pm
[...] Answer: iOS 4.0 and later: Instructions on wirelessly distributing your application to beta testers. [...]
August 2nd, 2012 at 11:06 am
Can this be automated using XCodeBuild rather than manually through Xcode?
September 24th, 2012 at 1:04 pm
[...] started to change since 2011 (well, 2010 to be exact, but I only realize it then), with this and that article. Apparently since iOS 4.0, developer can distribute app wirelessly [...]
March 12th, 2013 at 4:21 am
[...] Answer: iOS 4.0 and later: Instructions on wirelessly distributing your application to beta testers. [...]