February, 2018 – Graham Miln

Creating the Signpost Application and Subscriptions

Miln Signpost is the strangest macOS application I have written. Strange because it provides something I find magical and because it seems unlikely to find a waiting audience.

I explain what Signpost does on miln.eu/signpost but the short answer is:

Signpost provides local domain names without a DNS server
For many, probably most, this description is cryptic and too technical to be useful. Explaining what Signpost does is a problem I have not found a good solution to. I can not justify making the time to market this oddball product; for now it will sit quietly waiting to delight those who stumble upon it.

Miln Signpost – mDNS for macOS
Miln Signpost – mDNS for macOS

Signpost was written as an experiment. I wanted to know what writing a modern Mac application would entail. How much legacy code could I avoid? What new techniques or frameworks have appeared since I last started a brand new Mac application.

Typically I develop Mac applications with a view to supporting as many versions of macOS as possible. The larger the number of supported versions, the larger the audience.

Signpost supports only the latest version of the Mac operating system, macOS 10.13.

I discovered there have been very few major changes I needed to care about. The recent macOS versions have been reasonably stable for core application frameworks. I could add support for older versions of macOS without too much additional work but the true cost will be in testing and maintaining that test environment.

There have been improvements that I have appreciated: the shift away from paths and file specs to using URLs almost everywhere, a better table view model, and code blocks in-place of callback function pointers were all welcome.

Not every change is an improvement. I morn for CoreFoundation’s hundreds of deprecated functions. Many other Core* frameworks are also littered with deprecated pragmas. Pragmas too often without hint of a replacement. In these situations a knowledge of the underpinning unix layer continues to be valuable. Over the years, I have often had to drop down a layer of abstraction. It seems Apple is lessening its desire to hide those lower layers.


Signpost was also an experiment in in-app purchases and subscriptions.

For this application, I wanted to offer a subscription for payment. One time purchases of software do not provide enough stable income to cover the costs of niche products. Subscriptions, even inexpensive annual ones, might be more sustainable. I wanted to use Signpost to see what would be involved in a new payment model.

For Signpost to support subscriptions, I needed to create a surprising amount of subscription specific functionality. Functionality like an in-app store, legal confirmation dialogs, and a server side receipt handling system.

Miln Signpost - supported by subscriptions
Miln Signpost - supported by subscriptions

I had presumed Apple, who accept and manage the subscriptions, would handle most of this but they do not. Every application needs to replicate the same functionality over and over. Remember Apple own the customer and the transaction. If you pay for Signpost, you are not paying me. You are paying Apple.

So now, thanks to Signpost, I have a good chunk of the infrastructure to handle subscriptions with – or without – the Mac App Store.

Will subscriptions help? It is difficult to believe they will for Signpost. But maybe for future products. After all, I have been through the process once and I have learnt what is entailed.

You can get Signpost now from the miln.eu.