I’m a software developer based in London and Sevenoaks, UK, where I’m currently creating iOS apps with Swift. I have over 30 years experience in the industry in many different roles and with a range of technologies.

Contact me for availability for iOS app development projects and contracts

Recent App Store Projects



Inspiration for Writers

Writerly is an iOS app designed to help users improve their creative writing through a series of tried-and-tested techniques, tools and exercises. It includes the ability to create random characters, moods, scenarios, locations, writing prompts, etc.

I developed the app in cooperation with an award-winning creative writing tutor and author.

In-app purchases allow the user to add functionality related to specific creative writing concepts, such as character development. However, the app has been designed to provide real benefits to the user without cost. The free app isn’t merely a vehicle for in-app purchases.

Technically, the main features of the app are:

  • Developed in Swift (currently Swift 5)
  • A UISplitViewController allows selection of topic in the left (master) pane, with the a page of content shown in the right (detail) pane
  • Content is broken into modules, topics, sub-topics and pages, with the entire structure of the app’s content defined as a dictionary in a .plist file, allowing for easy changes and additions
  • Navigation between pages uses a UISwipeGestureRecognizer to support swipe-left to advance to the next topic and swipe-right to go to the previous topic
  • Many exercises are timed and notifications are used to alert the user when their time is up
  • To enable easy changes and additions, text content is defined through HTML/Javascript and hosted in a WKWebView
  • Two-way message interop between the iOS core of the app and Javascript uses WebKit’s ability to evaluate JavaScript statements and handle messages from Javascript (WKScriptMessageHandler)
  • In-app purchases are made and restored using StoreKit and receipts validated using OpenSSL
  • The app keeps track of completed exercises and syncs app state via NSUbiquitousKeyValueStore iCloud key-value storage
  • Analytics are handled via Fabric Crashlytics and Fabric Answers (recently transitioned to Google Firebase)


When you really need a ride home

Retreev was developed in reponse to a simple, but common problem: how to quickly and easily request a ride home from a parent or friend and let them know exactly where you are!

The app displays a map showing the user their current location and postal address. Tapping a contact zooms the map to show the location of both the user and the contact (sounds easy, but this was tricky!), as well as the distance between them. Tapping the “retreev” button generates an SMS message that includes a predefined (editable) message, the user’s current location address and an annotated map showing the location and distance.

Technically, the main features of the app are:

  • Developed in Swift (currently Swift 5)
  • Uses the Contacts framework to import user-selected contact details
  • Uses CoreLocation to Geocode (get lat/long from an address) and Reverse Geocode (get address from lat/long)
  • Creates a custom bitmap graphics context to capture a map snapshot and annotate it with address info, etc.
  • Supports sharing with WhatsApp, email, etc.
  • Uses the MessageUI framework to send SMS messages

Recent GitHub Projects



Programmatic UICollectionView with a Diffable Data Source consuming REST API.

Sign in with Apple

How to use the new Sign in with Apple service in a UIKit and iOS 13 app.

Speech Dictation and Transcription Demo

An iOS speech recognition demo that transcribes live speech.

Dark Mode. Updating an existing App Store app

Preparing for iOS 13 Dark Mode.

iOS 13 Modal Styles Demo

Exploring the differences between presentViewController and pushViewController with new iOS 13 modal presentation styles.

Context Menu Demo

How to display a context menu in iOS 13.

Image API Alamofire

Alamofire Pixabay Image API Demo with Swift Package Manager.

SwiftUI and Combine Notifications

Using SwiftUI and Combine extensions to NotificationCenter.

SwiftUI Hosting UIKit Views

How to use UIKit UIView and UIViewController in SwiftUI.

Hosting SwiftUI Views in UIKit

Using UIHostingController to display a SwiftUI View in a UIKit app.

SwiftUI State

Using state and binding to create a UI that responds to user input to modify internal state.

SwiftUI Navigation Bar

How to select either large navigation bar (the default) or a small, inline bar.

SwiftUI List

Creating an editable list with SwiftUI with support for navigation.

SwiftUI Image API

Using SwiftUI to consume REST API with image data.

SwiftUI Alert

Using SwiftUI to display alerts, actionsheets and popovers.

Hangman Game

Simple, non-graphical Hangman game.

Siri Shortcuts. Show Random Color Demo

Demo of Siri shortcuts for iOS 12 using Intents.

Siri Shortcuts. PicSearch

Demo of Siri shortcuts for iOS 12 using NSUserActivity.

Pixabay Image API Demo

App that requests image data using the Pixabay API.

Calendar Demo

Demo for getting events from iOS calendars.