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.

IIS 0x80070020 when starting a website

As a developer, I run IIS on my PC so that I can test my websites using ForwardHQ. Sometimes, however, I will have an issue starting a particular website and IIS will throw up this dialog.image

“The process cannot access the file because it is being used by another process”. Totally cryptic and totally useless.

Most of the time, I can get around this by doing one simple thing:

Kill Skype.


When I return to IIS and try to start my website, it starts without issue.

Worth a try next time you run into this issue.

Import SaaS invoices into FreeAgent

One of the major pains when dealing with SaaS providers, is importing their invoices.

We all know the drill:

  • You log into your SaaS application
  • You find their invoice section.
  • You create a new bill in FreeAgent and copy/paste your way through the details and being sure to account for the various currencies!
  • You download the PDF form of the invoice and attach to the bill.
  • You then explain a banking transaction with this new bill.
  • Repeat over and over again for the various SaaS providers that take your money Smile

There is no standard way of getting these invoices and each provider has their own way of presenting the bills.

Painful is an understatement!.

Thankfully, Free Agent offers a very powerful (and easy to understand API) that enables developers to create applications that can interact with your account. As both a developer and a FreeAgent user, i decided to try and solve this woe.

My first idea was create an online service that could simply connect to each of my SaaS proviers. scrape the HTML and download new invoices each month. Whilst this is possible, it would mean having my service credentials sitting up on a server. Not good.

My second idea was to have a local windows service that did something similar. This approach started well until I hit Github. I use Two Factor Authentication, which I recommend, which makes automation impossible. The price of safety I suppose.

Having resigned myself to the “manual” approach, I explored the idea of using a Chome extension. This meant not having to worry about the credentials as I simply log into the providers the normal way. I also don’t have to worry about cloud security since none of my data leaves Chrome except when sent to FreeAgent (over HTTPS of course).

The idea is simple. When you visit a supported website, the extension injects an import button into the appropriate parts of the page. CLicking the button opens a dialog, prepopulated as best as possible.  You can then set the contact and category and optionally select the bank transaction you want to explain. Here is a GIF showing the flow on a dummy provider I created.


This works *really* well, but it’s not 100%. Not all SaaS providers give all the information on the screen (I’ve tried parsing the PDF, but it’s too brittle and I don’t like my data going out of Chrome). Companies like Microsoft also redirect you all over the place when trying to open the invoice PDF, so sometimes you have to take actions like opening a PDF so the security cookies are set.

That said, overall, it’s made a massive difference to my accounting workflow. I can visit four or five providers in the space of 15 minutes and import 15 invoices. The rate of error is much lower since the extension is handling it for me.

At this moment in time, the extension supports:

  • Github
  • Office 365
  • Microsoft Azure
  • Taxamo
  • Hover (without PDF invoices it’s a bit disgusting so I’m looking at taking a screenshot)
  • Google Adwords
  • Forward

I want to add some memory into the extension, so it will preselect the contact and category for particular sites and I’ve a lot of JavaScript to clean up.

I think this could benefit other FreeAgent users and I’d ultimately like to release it and charge a monthly subscription. This would help me support providers beyond those I use myself.

If this workflow of invoice importing sounds familiar and is something you dread, I’d love if you could get in touch. I really like a few beta testers that could try this extension out and see if it’s a help or a hinderance. Please leave a comment or drop me an email – tomas@coldbear.co.uk

Git.exe crashing on Windows 10 Insider Build 14251

Yesterday, I upgraded my desktop to the latest Windows Insider build, 14251. I’ve successfully installed and worked on the previous Fast Ring insider builds over the past few months and I haven’t had any issues.

Unfortunately, this build was the exception. My first clue was Github for Windows telling me there was something wrong with my repository. It was unable to sync. I removed and cloned the repository again, but the error persisted. Running ‘git pull’ and ‘git push’ from the Powershell didn’t seem to do anything, which was odd. So I installed git.exe directly and the installer reported an error. Running git.exe just resulted in a “git has stopped working” message.

I decided not to waste any time on debugging this and I rolled back to the previous build, without issue. Thankfully I was back up and working within an hour.

This experience will temper me in the future and I might just drop back to the Slow Ring Smile

79p for an app? You must be joking! What a rip-off!!

After many months of simply “not getting around to it”, I finally submitted an update for my MakeMeAPass app. After I completed the submission, I decided to take a look at the reviews.

The app is sitting with a 3 star average, which isn’t bad. What surprised me was the fact that this average came from 5 star and 1 star reviews.

The 5 star reviews were positive, basically conveyed the sentiments of “good start, more to do”. Which is true. Very true.

The 1 star reviews were, as you can imagine, very negative. I came to conclusion that the negativity comes from people feeling cheated. They seem to think that 79p should get them an all-singing, all-dancing app, that’s updated every day for the rest of time.

I should have been a little clearer in the app’s description and indicated that it only supported one vendor, but, in my defence, I thought that was clear from the  screenshot I provided. Lesson learned.

Here are some of the 1star reviews, presented with a response, should the author come across them:

“0.79 for just one app. No further development. Dev’s like this are starting to give the App Store a bad name. To the dev, what is stopping you providing the ability to add all store cards & loyalty cards?”Apps take a *long* time to create and 79p represents a bargain, believe it or not.   Development was stalled for personal reasons, so please don’t criticize me for not providing updates when you’ve paid less than a cup of coffee. Please try to understand the effort that goes into something and remember that Apple take 30%, so I see 49p from each download. 49p!!  I’m one person, not a large company. I hold down a day job and tried to help people get the most out of Passbook with a simple app. I charge money to pay the hosting costs for the website.

“It says that it costs £0.79 but it took £3.16 out of my credit and the pass doesn’t work at all I WANT A REFUND!!!”Nothing to do with me. I set the price at 79p, but Apple charge you. If you want a refund, please contact them directly.

A truly awful app. Only one vendor supported and even that did not work A complete waste of money It wouldn’t let me put no stars !! – A bit harsh, but if it didn’t work, I can understand the frustration. An email would have been helpful to tell me what was wrong.

“£0.79 for one pass is a rip off!” – What gave you the impression there was more than one pass supported at launch? Why is 79p a rip-off for one pass? It took me weeks to understand the Passbook mechanism, write all the code and publish an app. For 79p, it’s actually a bargain.

“I want my money back. £0.79 just for one pass?!?!?”Same answer as above.

Apple have completely skewed people’s perceptions of software and how much it should cost. MakeMeAPass took about me about 12 hours from start to finish. I won’t mention all the work that went into the original website and the months of work that went into building PassVerse. I’ll also skip over the 15 years of experience I have in building software.

I don’t mind people feeling they aren’t getting value for money. That’s fine. It’s very personal. What I don’t like is this attitude that people have towards apps. They don’t magically come into existence. They take time, energy and perseverance to create. So the next time you’re about to rate an app with 1 star, please think about the human behind it. Get in touch with that person. Communicate your feelings towards their app. Give them a chance to respond.

And if you must slap the developer with a 1star review because you think 79p was a rip-off, please don’t do it from your £500 smartphone, whilst you’re sipping a £3 latte from Starbucks.

Apple Pay with iPhone 5 and Apple Watch

Now that Apple Pay is live in the UK, I thought it was time to try it out. Initially I thought Apple Pay was limited to the iPhone 6 and that I’d be left out in the cold (until they release a new 4″ version of the iPhone), but I was informed it works with the Apple Watch on its own.

This isn’t the most obvious thing and the option to set it up isn’t the most obvious either! I’ve taken a few screenshots to show you how far I got. Which, sadly, wasn’t very far.

I’m running iOS 9, beta 3 and Watch OS 2, beta 2.

First, open the Watch app on your iPhone.


Navigate to the Wallet app (or Passbook in iOS 8)


You should now see an option to Add Credit or Debit Card. When I clicked it, I simply got an error. Probably due to the fact I’m running beta software.

IMG_3250If you get it working, please let me know. I’m tempted to switch bank just to avail of this platform. Barclays, it seems, are pushing their own bPay technology. I suspect they’ll keep that for a few months and then support Apple Pay anyway.