How to make iOS App Ad Hoc distribution


What you need to know before you start:

  1. Every device you want the app on should provide you its UDID
  1. Every device with iOS 16 and higher should enable Developer Mode

So let's start:

  1. Develop an app
  1. Decide which devices should have access to the app
  1. Retrieve their UDIDs (there are several ways, find the one that fits you and the users most)
  1. Add UDIDs to the eligible devices’ list
  1. Archive app
  1. You'll need to store your .ipa file as well as a certain .plist file somwhere. Decide where and prepare to upload files there
  1. Select "Export” and chose "Ad Hoc Distribution” there. Click "Next”
  1. Here you get to chose App Thinning and whether to include a preassembled manifest.plist file. For the sake simplicity you can set thinning to "None” but if you know what it is and how to use it – go for it. Next option is whether you want to have a generated .plist file or not. You might try this option but it requires you to know the link your app will be under in advance (so right now, even before you generated the .ipa file) and have 2 images: 57x57 and 512x512. But you don't have to do it now, just a little bit later I'll show exactly how this .plist file should look like so you can copy-paste it and use right away. Click "Next”
  1. If you checked "Include manifest” in previous step you'll need to fill some fields there. Then click "Next”
  1. In this step you just select whether you want or not to sign the app automatically. If you've ever distributed app to the App Store you should be familiar with this step. If you're not then you most probably need to check "Automatically manage signing”. Click "Next” and wait some loading
  1. Final step in which you check all the details and click "Export”. Select directory on your Mac to export the app to and you're done! At least here, in Xcode Organizer :)
  1. Once it's exported, you'll find a folder with .ipa file(s) in it. Depending on what you’ve selected earlier you might find a manifest.plist file there too. Upload the .ipa file(s) to the internet and now it's time to prepare manifest.plist
  1. If you've generated manifest earlier, you can skip this step. If you haven't – go to any text editor, create a file with a .plist extension and put this code inside. Don't forget to insert .ipa link, bundle identifier, bundle version and title in the places I marked
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">
                    <string>[insert .ipa link here]</string>
                <string>[insert bundle identifier here]</string>
                <string>[insert bundle version here]</string>
                <string>[insert app title here]</string>

If you generated this manifest in step 8, you'll have a sligtly larger file with fields for images. And if you opted-in the app thinning it will be even larger – including different app versions

  1. We're almost done. Now go ahead and upload the .ipa file as well as the manifest to the site you want it to be accessed from
  1. And the last thing: you need to give a way to actually download the app. The important part is that iOS has to recognize the manifest and find the appropriate link to an .ipa file there. Therefore we give a link to the manifest itself. Here's an HTML code you can paste to your website page. Don't forget to insert the link to the manifest file in the place I marked
<a href="itms-services://?action=download-manifest&amp;url=[insert URL to manifest.plist]">
    Download app
  1. Now publish these changes and you're good to go! Go ahead and download the app from this website right to your phone. Don't forget to turn on the Developer Mode if you're on iOS 16 and higher and remember, app will launch only on the devises which UDIDs you marked as eligible.

Happy distribution!

If you have any questions, do not hesitate to ping me: ☎️Contact