Human above all, with pathos, weaknesses and grumpy at times. Speak for myself; think out loud. Direct, seemingly hard faced. Urged to fix things. Am fortunate.
qnoid

Moving the needle

Approximately 3’ minutes reading time

For the past few months, I have been working on Windmill 3.0 which enables Windmill on the Mac to publish your iOS app.

Effectively, every time you make a code change, Windmill will also publish your app so that you can install it on your iPhone.

This feature requires a subscription and a Windmill account.

I wanted to make this as streamlined and integrated as possible.

Here are the requirements.

  • There shouldn’t be a strong ordering between creating an account and purchasing a subscription.
  • A subscription enables publishing and listing of apps.
  • As long as a subscription is active, publishing and listing of apps must be enabled.
  • Access to publish and list apps must be protected by an access token.
  • The access token must have the same security requirements as any. Being cryptographically secure, have an expiry date, able to revoke it, not reused across clients.
  • The number of steps required to create an account, subscribe and gain access to publish and list apps should be kept at a minimum.
  • A user should be involved as little as possible and only where and when required.
  • No user passwords!
  • Anonymous.

And an important limitation.

  • Windmill on the Mac is not sandboxed1 therefore it cannot use StoreKit to purchase or restore a subscription.

I won’t go into the technical details in this post.

For now I’ll just say you need to have done a ton of background reading, gained a great deal of knowledge and experience using both Apple’s platforms and SDKs, as well as

at a high level,

at the low level,

Suffice to say that it takes a well coordinated software engineering dance that I had to choreograph every turn across the App Store, mobile, server and the desktop.

I almost cried seeing it work for the first time.

What I have to show you is what it looks like to the end user.

Here is Windmill on the iPhone. I have just added an SKPayment into the SKPaymentQueue and about to approve the purchase.

The listed app you see is because I have already been a subscriber in the past and already have one app published.

Nothing “special”. One thing to keep in mind. At this point the user may or may have not signed in to their iCloud account. Assuming that they have, here is what happens next.

Windmill on the Mac is notified that a valid subscription exists. Based on this “claim”, it acquires an access token and starts publishing2.

That’s it! There is nothing more before or after. Seriously. When the user first opens the app, here is what they see.

There is no step to create an account. Just a nudge to log in and turn iCloud Drive on.

Here is what the account screen shows for a subscribed user.

I am very proud of this.

Write code. Blow minds.

  1. As of right now I don’t even know if it is possible, what it would take or whether it makes sense. As an indie developer I simply can’t afford it in both time and resources. 

  2. There is one more precondition based on the specification of Windmill. The “export” stage must have been successful. If the “export” stage hasn’t run yet, Windmill will effectively wait before it starts publishing.