Ad-hoc distribution to Windows iTunes works as it does for Mac iTunes. I set up my Xcode projects per Apple's instructions for ad-hoc distribution, then added my own Makefile to create the distribution. Makefile snippet:
AdHoc AppStore :
rm -rf iphone/build/$@-${DEVICE_SDK}/${APP_NAME}.app
cd iphone ; xcodebuild -target ${APP_NAME} \
-configuration $@ -sdk ${DEVICE_SDK}${SDK_VERSION}
for f in embedded.mobileprovision CodeResources _CodeSignature/CodeResources ; do \
[ -f iphone/build/$@-${DEVICE_SDK}/${APP_NAME}.app/$$f ] || \
{ echo BITCH MOAN COMPLAIN : missing $$f ; exit 1 ; } \
done
mkdir -p ${DISTRO_ROOT}/$@
[ -f ${DISTRO_ROOT}/$@/[email protected] ] || \
cp ${PROVISION_DIR}/[email protected] ${DISTRO_ROOT}/$@/[email protected]
cd iphone/build/$@-${DEVICE_SDK} ; \
rm -f ${DISTRO_ROOT}/$@/${APP_NAME}.app.zip ; \
zip -r -y ${DISTRO_ROOT}/$@/${APP_NAME}.app.zip ${APP_NAME}.app
cd ${DISTRO_ROOT}/$@ ; rm -rf ${APP_NAME}.app ; unzip ${APP_NAME}.app.zip ; \
codesign -vvvvv ${APP_NAME}.app && rm -rf ${APP_NAME}.app || \
{ rm -rf ${APP_NAME}.app ; exit 1 ; }
cd iphone/build/$@-${DEVICE_SDK} ; \
rm -rf Payload ; mkdir Payload ; \
ln -s ../${APP_NAME}.app Payload/ ; \
zip -r ${DISTRO_ROOT}/$@/${APP_NAME}.ipa Payload
My project structure is ./Makefile and ./iphone/MyProject.xcodeproj with sources in the expected place ./iphone/Classes/*.[hm]. Makefile variable explanations:
APP_NAME=whatever_your_app_is_named
DEVICE_SDK=iphoneos
DISTRO_ROOT=/some/path/you/like
PROVISION_DIR=~/Library/MobileDevice/Provisioning_Profiles
SDK_VERSION=3.1.2
I sym-linked Provisioning_Profiles to "Provisioning Profiles" for easier typing. I also hard-linked the appropriate provisioning profile in that directory as AppStore.mobileprovision or AdHoc.mobileprovision for easier updating.
The steps themselves are straight-forward: clear a build space, build the app, verify the code-signing bits are in place, prep a landing space for the distro, pull in the appropriate mobile-provision file, zip up the app, verify the signing, and zip up as an .ipa file. (Strictly speaking, the zipfile is needed only for AppStore, and the .ipa for AdHoc, but I put them both together for my own hysterical raisins. :-)
I then push the .ipa and the mobile-provision file up to a private website. My beta testers pull the .ipa down and drag-n-drop onto iTunes. Only if I add or remove a device does the mobile-provision change, thus forcing the beta testers to pull down and drag-n-drop the latest mobile-provision file.
This has worked very smoothly for me and my beta-testers on iClear (update in review).