TestMDM 2.0 is now live!

It’s been two years since the release of TestMDM 1.0. Today, I unleash version 2.0 onto the world!

Whilst the aim and core functionality of TestMDM hasn’t changed, I’ve completely overhauled the UI, both from a visual perspective and a usability persepective.


TestMDM 1 used the popular Bootstrap CSS framework and relied on KnockoutJS for interactivity in the UI.

With version 2.0, I decided to use the opportunity to learn ReactJS. This provides what’s called a Single Page Application approach. When you open the dashboard, you should notice that opening a device is very fast and smooth. The UI is completely self contained and doesn’t reply on ASP.Net to generate it each time.

I’ve also opened for the CSS framework called Semantic-UI. Bootstrap is great, but I fancied a change and I like the clean lines and components offered by Semantic-UI.


The biggest change to TestMDM is the way you interact with it. In version 1.0, the focus was around commands. Creating them, sending them, waiting for them to be acknowledged. This was an effort to keep the app aligned with the actualy behaviour of the MDM protocol that underpins iOS.

Whilst it worked well and nobody complained, it always seemed a little repedative. For example, when you are testing configuration, you had to constantly select PList files and queue them, in spite of the fact you probably only made a tiny change to the configuration itself.

In version 2.0, I decidd to move the focus back to the devices and apps, which is what you actually work, rather than commands.

Devices are easier to add now, you only need to scan a QR code or send an SMS. This should make the process a whole lot easier


Once the device has been added, you’ll see a dashboard.


The Device dashboard now shows some detail. You can see what apps are installed, delete the device or clear any pending commands (I’m going to get rid of this soon!).

This will be the place where you can also install configuration profiles and potentially alter other bits and pieces, depending on what you, the user, wants.

When you install an app, you’ll see a clear indication of what’s actually happening






This, I hope, will clear up any confusion about what’s going on and should the installation fail, you’ll get feedback pretty quickly. I should point out that this progress bar isn’t finished and does report some odd stuff, but I’m working on improving this.

When you select an app, you’ll now be taken to a dedicated app page, giving you a single place to manage configuration and feedback.


This let’s you tinker with the configuration directly, without needing to edit a file and resubmit.


In my own testing, this has been the biggest time saver of all.

Another benefit of having a the application broken out like this is the fact you can now bookmark pages for devices and even apps. This will it easy to get back to where you were and carry on testing.

What’s Next?

This is just the initial release, so some features are missing. I’ve turned off the VPP part, since I want to rework it in the same fashion, making it easier to understand (and hiding some of the complexity).

I’m also building an internal admin page for myself, which will let me respond to user issues with more speed.

With this tool proving pretty useful, I’ve got some ideas for exposing an external API and potentially creating an OS X Client so that builds of your IPA can be automatically passed to TestMDM for processing. Think of how TestFlight used to monitor for builds. I’ve never written an OS X app before, so that would be interesting, if nothing else.

All in all, I hope you like this update. Please keep the feedback coming.

Thanks for your support and custom!

TestMDM 2.0

As TestMDM has just had its second birthday (I can’t believe it either), I wanted to start sharing some of the changes I’ve made in version 2.0.

The core of the product remains the same with a few improvements to the code. The biggest change is that TestMDM will now wait for commands to be acknowledged (about 30 seconds), which should reduce the frustration of waiting for that spinner to finally do something!

The UI now uses SemanticUI instead of Bootstrap. The other major change is that part of the app is now written in ReactJS, so it should perform a little faster once you’ve opened the dashboard.

Here is a run through of the various screens.


I’ve not done much to this screen, just removed the clutter.


Adding Devices

I’ve flipped this process on its head. In version 1, you had to visit TestMDM from your mobile to install the profile. In 2.0, you can simple scan a QR code from a device or use an SMS. This should make the process easier.

Device Details

I’ve removed the whole “Commands” thing. As I’ve been using TestMDM for my own app testing, I found I usually use one device and focus on one app. I don’t hop between mutliple devices frequently, so it made sense to have a view per device.


This device screen will let you see what Managed Apps are installed and gives you options to remove the device and clear any pending commands (sorry this took so long!)

Installing Apps

This hasn’t fundamentally changed, but you will now be guided through the process. You still select the IPA (and configuration if desired).


Once you click install, you’ll now see the app’s progress.


This, I hope, will make it much clearer as to what’s actually happening. If the process fails, it will also give you more information as to what went wrong.

Once the app is installed, it will appear under the Device screen.


The UI needs a little work Smile

App Details

It’s now possible to open an App and view its details.


This screen will act as your one-stop-shop for configuration and feedback. Rather than opening the Command and selecting the device etc, you can just type, copy&paste or load existing configuration files. This will save time since you can amend the configuration directly and click “Send”

I’ve got some to clean up this UI a little since it’s not obvious where the text areas are and such.

Go and check it out!

Version 2 is live at https://testmdm.azurewebsites.net if you want to try it today. There are a few kinks and bugs, but it should be compatible with your existing devices etc. You should be able to switch back and forth between the two versions.

Configuration Profile support with TestMDM

I got an email from a prospective user of TestMDM regarding the Single App lock feature. After some reading I learned that whilst this feature only works on Supervised devices, it should be configurable with an MDM.

The App Lock is performed by installing a configuration profile on the device. TestMDM hasn’t supported the ability to install any old configuration profile, so I’ve corrected this.InstallProvisioningProfileYou can now choose a device and upload a PList file containing your configuration profile.

I’m uploading the new build to Azure as I type, so it should be ready to use shortly.

Bundle Selection within TestMDM

A few recent TestMDM customers have had issues with their IPAs due to the fact they have multiple bundles within them. These are extensions to support Today Widgets or the new Apple Watch. Up to now, I’ve gotten lucky, as the Plist.info files within the IPA seem to fall out in the right order, but a new customer reported issues.

To rectify this, I’ve added a new Bundle Selection step to the Install App command. When you choose this command, you will see the normal “Install App” dialog.


Once you have selected an IPA, it gets uploaded and processed. You’ll then see a new drop down appear.InstallCommandDialogWithBundleidSelectorThis will list the various bundles contained within the IPA you’ve uploaded. Select the one that corresponds to your app and you should be good to go.

At only £39.99 for an entire month, TestMDM offers a useful way to test your enterprise apps without the hassle of setting up your own MDM.

Visit http://www.testmdmapp.com to find out more!


TestMDM now supports VPP

After a very kind request from a user, I decided to add basic VPP support to TestMDM.

As of 2 minutes ago, you can now:

  • Add your VPP token.
  • Register new user accounts within your VPP account.
  • Assign licenses to these accounts
  • Install apps from the VPP using the MDM functionality

Adding your VPP token

To get your VPP token, you must first visit https://vpp.itunes.apple.com/ You can then signup your organisation for VPP using a new or existing Apple ID. Once you’ve signed up, open the Account Summary page and download the token.


Back in TestMDM, open your Account Details page and paste the token into the big text box called VPP Token. Then click Save. You’re good to go.


Register New Accounts

Under the VPP section, you will now see a list of user accounts and licenses belonging to your VPP account. If it’s an account you’ve used in the past, you will likely see a lot of information here. I expect I’ll need to clean this up a lot, but for now I’m assuming it’s a new VPP account.

Hit the Register User button. All you need here is an email address to represent the user account. This doesn’t have to be an Apple ID. Imagine this account as an employee of your organisation. In my case, I’d use tomas@coldbear.co.uk as this is my organisation email address. Once you’ve registered the user account, you’ll be presented with a link to invite this user to be part of your VPP. When you open the link, you’ll be prompted to sign into iTunes and you then associate tomas@coldbear.co.uk with an Apple ID (in my case, this is a completely different address).

This does make sense, since people’s Apple ID typically isn’t their work email address.

Assign a License

Once you’ve registered a user account, you can then assign a license to them. A license represents one installation of an app. You purchase them via the Apple VPP page where you registered earlier. You select the app and purchase a certain quantity of licenses.

When purchasing, be sure to select Managed Distribution as the Distribution Type. This is the only mode TestMDM supports at this time. As best I can tell, you get a license for each installation allowed e.g. buy 10 apps and you get 10 licenses.


I’ve purchased two copies of Roomr to illustrate the point.


On the VPP page, you’ll see two licenses listed.


I can then assign one of these licenses to the user account I created.

Install app from VPP

With an app now assigned to a user account, it’s possible to install it directly from the App Store using the MDM functionality. To simplify, there is an install option beside each assigned license.


Clicking it will bring up the familiar “Install An App” dialog, with a small change. There is now a field for an AdamId (an iTunes Store Id for an App). Just choose the device and hit submit. You must be targeting a device that is signed into iTunes using the AppleID you associated with the VPP Account you created in step two. It’s confusing I know, but that’s the way it works!


Once you hit submit, you should receive a notification on the device asking you to confirm installation. If the iTunes Account doesn’t have permission for this app, you’ll see a “CouldNotVerifyAppId” response on the Commands screen.

Next Steps

Once the app has been installed, you can perform the usual configuration.

It’s also possible to Unassign a license. This removes the license from the User Account and subsequently the iTunes Account. You might even get a notification from the iTunes Store once it has taken effect.


The VPP functionality is only available to Unlimited users of TestMDM.

Multiple Device Support with TestMDM

This has been a long time coming, but I finally added multiple devices support to TestMDM

MultipleDeviceSupportWhen you issue a command, you’ll now get the option to select the device you want the command to go to. This makes it easier to test your app on multiple devices.

I’ve also removed the Pay-As-You-Go option and replaced it with a single, 30 day unlimited access license. I’d like be able to spend more time working on TestMDM and I can only do that if I can generate some money.