Engineering

17 July, 2019

Distributing Custom B2B iOS Apps privately

Recently one of our clients came up with the requirement of delivering their iOS apps only to a specific organization without making it public and allowing the end users to install the apps on their private phones. We’ve started researching on how to make the apps available.

Daniel Almeida

Software Engineer

Distributing Custom B2B iOS Apps privately - Coletiv Blog

Recently one of our clients came up with the requirement of delivering their iOS apps only to a specific organization without making it public and allowing the end users to install the apps on their private phones. We’ve started researching on how to make the apps available.

The Enterprise Program seemed to be the best solution. Taking a look on Enterprise Program descriptions, Apple specifically says:

Distribute proprietary, in-house iOS, watchOS, and tvOS apps within your organization. Securely host and deploy apps to your employees’ devices.

In this case the client’s organization must distribute to a third organization, and this is not allowed by the Apple Enterprise Program guidelines/rules.

We contacted Apple to get some clarifications on how to distribute the app and their answer was: Custom Apps. They also advised that the app must be installed only on devices belonging to users from the Business Account organization.

The Custom Apps home page is pretty explicit on what’s the purpose of this service:

Businesses that you identify in App Store Connect will see your app and be able to purchase it in the Apps and Books section of Apple Business Manager. You can offer custom apps for free or at any price tier you choose. Identify the businesses who can download your app and set a release date in App Store Connect. They will be able to find your app on Apple Business Manager once it’s published.

We decided to test this way of delivering iOS apps, but all the information regarding this is a bit confusing and disperse along the internet. After a successful delivery we decided to explain all the process in the following tutorial.

1. Set up Apple Business Manager account (target organization)

In order to distribute the app to the end users organization, the organization itself needs an account on Apple Business Manager. To enroll an organization Apple requires the D-U-N-S number, after the form is submitted Apple will approve the application. Some useful links with help can be found here and here.

The DEP Customer ID from the end users organization must be saved for the next steps, the number is behind the red square on the next image:

Apple Business Account: Settings Apple Business Account: Settings

Also enable Custom Apps by pressing the enable button under the DEP ID number.

2. Upload the app to App Store Connect (developer)

You need the app ready to App Store Connect. Create the certificates needed and the app entry. Then upload it. Here’s some help on how to do that.

Important: Do not submit your app to review yet!

3. Set private distribution (developer)

Steps to set private distribution:

  • On App Store Connect select the app

  • Go to Pricing and Availability section

  • Choose the Available privately as a custom app for business under Distribution for Business and Education

  • Select DEP ID type, add the ID saved on 1. and the Organization Name. This step gives app access to a specified organization

  • Set the desired price as it is mandatory

  • Save the changes

4. Submit to review (developer)

Yes, the app needs to be reviewed before it can be available to the end user’s organization. Usually, from our experience, this reviews are quicker than the public ones. 🙏

5. Purchase the app (target organization)

Access business.apple.com and go to Custom Apps Content, then the shared app must appear. Note that once it is published from the App Store Connect the app usually take some time to be available at Custom Apps.

Then, you can either purchase Managed License Types or Redemption Codes.

  • Managed Licenses can be used in an MDM platform to distribute the app to the organization devices.

  • Redemption Codes are codes that can be redeemed by the end users within the App Store app itself.

To solve our initial problem we choose the Redemption Codes option, here’s how it can be done:

  • Go to Custom Apps section and select the desired app

  • Then, buy a license of type Redemption Codes. Note that each code can only be used once, you will need one for each user of the app.

Apple Business Account: Purchase licenses Apple Business Account: Purchase licenses

After you purchase the Redemption Code press the Download button to download a .xls with the codes and direct links to install the app from the App Store.

Apple Business Account: Redemption Codes Apple Business Account: Redemption Codes

You can either open the links on an iPhone or redeem the codes from the App Store app itself, using the option Redeem Gift Card or Code. Then the app is installed and it will be always available on Purchased items.

App Store on iPhone: Redeem Code App Store on iPhone: Redeem Code

Final thoughts

This definitely serves as a solution to our initial problem, but we think there are a few things that can be improved on Custom Apps:

  • The usability of the website. It can become frustrating to interact after a little while;

  • Account sessions handling. When a user is logged in on App Store Connect and Business at the same time the session is lost;

  • Create a view for the list of codes instead of using only the .xls to show the codes/links.

iOS

Software Development

B2B

Distribution

App Store

App Development

Join our newsletter

Be part of our community and stay up to date with the latest blog posts.

Subscribe

Join our newsletter

Be part of our community and stay up to date with the latest blog posts.

Subscribe

You might also like...

Go back to blogNext
How to support a list of uploads as input with Absinthe GraphQL

Engineering

26 July, 2022

How to support a list of uploads as input with Absinthe GraphQL

As you might guess, in our day-to-day, we write GraphQL queries and mutations for Phoenix applications using Absinthe to be able to create, read, update and delete records.

Nuno Marinho

Software Engineer

Flutter Navigator 2.0 Made Easy with Auto Router - Coletiv Blog

Engineering

04 January, 2022

Flutter Navigator 2.0 Made Easy with Auto Router

If you are a Flutter developer you might have heard about or even tried the “new” way of navigating with Navigator 2.0, which might be one of the most controversial APIs I have seen.

António Valente

Software Engineer

Enabling PostgreSQL cron jobs on AWS RDS - Coletiv Blog

Engineering

04 November, 2021

Enabling PostgreSQL cron jobs on AWS RDS

A database cron job is a process for scheduling a procedure or command on your database to automate repetitive tasks. By default, cron jobs are disabled on PostgreSQL instances. Here is how you can enable them on Amazon Web Services (AWS) RDS console.

Nuno Marinho

Software Engineer

Go back to blogNext