How to distribute IOS App without App store (OTA)?

3.2k Views Asked by At

We would like to publish our IOS APP in some thrid party stores or some OTA(over the air) platforms.

The main reason is being the App is only for a specific group of people. I have read about the official Apple Enterprise account way of doing this but I don't think our company is eligible to get that account.

I came across these options below, which allows us to upload our APK (for android) & IPA (for IOs) files and generate a link for users to download the App:

  1. https://www.installonair.com/
  2. https://www.diawi.com/

Has anyone been using any of these platforms to ship their apps? If yes does this still work in the latest IOS 14?

Thanks in advance

2

There are 2 best solutions below

2
Christos Koninis On

Both the diawi and installonair, work with development, ad-hoc and in-house builds. Development and ad-hoc means that you have to add beforehand the UUID of the devices that the app will be installed(also there is a small limit to the total allowed register devices). These are for distributing your app to testers. And in-house are applications from an enterprise account. This is for when you intent to distribute you app to users internal to your company. If this is your intent then your company is eligible.

Apple does not give you a way to sidestep the official App store for app distribution.

1
Leszek Szary On

Note that if you want to use OTA distribution you do not have to use services like diawi or installonair which you mentioned. Those services work however they have some limitations. For example if you use free account on diawi then your app will be available to download only for 3 days and cannot have a size larger than 75MB. Therefore if you plan to have your app available to download for a longer time without size limits and other restrictions then it might be better to host it on any https server. You can even host it on free gitlab.com account (with gitlab pages) without those limitations. You just need to create a proper html file and manifest.plist and put them on your server together with ipa file. If you plan to go this way I can recommend following simple and nice looking html which allows you to download a different app version based on the key that user needs to enter when he opens the html page:

<!DOCTYPE html>
<html>
<head>
  <meta content="width=device-width" name="viewport" />
  <title>DOWNLOAD</title>
  <style>
    body {
      text-align:center;
      font-family: Arial, Helvetica, sans-serif;
      background-color: slategrey;
      font-size: 18px;
      font-weight: bold;
      color: white;
    }
    a {
      border: 10px solid;
      color: white;
      text-align: center;
      text-decoration: none;
      display: inline-block;
      border-radius: 28px;
      width: 180px;
      height: 180px;
    }
    .container {
      position: fixed;
      top: 40%;
      left: 50%;
      margin-top: -90px;
      margin-left: -90px;
    }
    .box {
      color: white;
      text-align: center;
      text-decoration: none;
      display: inline-block;
      width: 180px;
      height: 180px;
    }
    .download-icon {
      box-sizing: border-box;
      position: relative;
      display: inline-block;
      width: 80px;
      height: 30px;
      border: 10px solid;
      border-top: 0;
      border-bottom-left-radius: 10px;
      border-bottom-right-radius: 10px;
      margin-top: 78px;
      margin-bottom: 18px;
      color: white;
    }
    .download-icon::after {
      content: "";
      display: inline-block;
      box-sizing: border-box;
      position: absolute;
      width: 40px;
      height: 40px;
      border-left: 10px solid;
      border-bottom: 10px solid;
      transform: rotate(-45deg);
      left: 10px;
      bottom: 20px;
    }
    .download-icon::before {
      content: "";
      display: inline-block;
      box-sizing: border-box;
      position: absolute;
      border-radius: 15px;
      width: 10px;
      height: 50px;
      background: white;
      left: 25px;
      bottom: 25px;
    }
    .block-icon {
      box-sizing: border-box;
      position: relative;
      display: inline-block;
      width: 80px;
      height: 80px;
      border: 10px solid;
      border-radius: 100%;
      margin-top: 58px;
      margin-bottom: 18px;
    }
    .block-icon::before {
      content: "";
      display: inline-block;
      box-sizing: border-box;
      position: absolute;
      width: 50px;
      height: 10px;
      background: white;
      border-radius: 25px;
      transform: rotate(45deg);
      top: 25px;
      left: 5px
    }
  </style>
</head>
<body>
  <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.2/rollups/sha1.js"></script>
  <script>
    function existsFile(url) {
      var http = new XMLHttpRequest();
      http.open('GET', url, false);
      http.send();
      return http.status == 200;
    }
    var key = prompt("Key:", "");
    var hash = String(CryptoJS.SHA1(key));
    var url = "https://yourserveraddress.com/apps/" + hash + "/manifest.plist";
    if (existsFile(url))
      document.write("<div class='container'><a href=itms-services://?action=download-manifest&url=", url, "><div class='download-icon'></div></br>DOWNLOAD</a></div>");
    else
      document.write("<div class='container'><div class='box'><div class='block-icon'></div></br>ERROR</div></div>");
  </script>
</body>
</html>

To make it work you just need to put ipa files and manifests files in proper folders (named as sha1 hash of your key) on your server and edit url in above html and manifests as needed.