Portfolio


Traverse: Explore Your World

Traverse iOS App Traverse iOS App

Traverse lets you collect your runs, cycles, and explorations on the world map. Tracking a new area reveals it on the map and lets you know where you still need to explore. Fully written in Swift.

Uses the following:

  • CoreGraphics for masking unexplored areas
  • MapKit for the world map
  • Strava API for syncing activities
  • CoreLocation for activity tracking
  • In-App Purchases for monetization

raywenderlich.com

raywenderlich.com, the most popular iOS tutorial site on the Internet

I write for raywenderlich.com, the most popular iOS tutorial site on the Internet.

Zen Breath

Zen Breath iOS App Zen Breath iOS App

An iOS client for a blog named Zen Habits. Written in Objective-C and published to the iOS App Store.

Uses the following:

  • Core Data to store posts
  • Cocapods for third-party dependencies
  • In-App Purchases and Google AdMob for monetization
  • Google Analytics to provide user insights


Hush Time

Hush Time macOS App Hush Time macOS App

A macOS app written in Swift. Select the apps you’d like to close, choose a duration for your focused block of time, and hit Start.

Uses the following:

  • AppleScript to close apps
  • An NSOpenPanel to select a list of apps
  • Simple reactive concepts to manage the current state


SwiftCron

An open-sourced cron expression parser library written in Swift. Cron expressions are a highly flexible means of scheduling tasks to run periodically at fixed times, dates, or intervals.

SwiftCron is 90% covered by unit tests and works anywhere Swift works, including Linux.

Uses the following:

  • Heavy use of the Apple’s date and time APIs for parsing cron expressions
  • Cocoapods, Carthage, and Swift Package Manager for installation
  • Travis CI and Codecov for automated builds and testing


Color Game

Color Game iOS App Color Game iOS App Color Game iOS App

An iOS game demonstrating the Stroop Effect written in Swift. The name of a color flashes on the screen, printed in a different color (e.g. the word “Green”, but colored “Red”). The user taps a button corresponding to the color of the word (Red). The rounds get faster with each win, so stay sharp.

Uses the following:

  • A CAShapeLayer and UIBezierPath to animate the ‘time remaining’ ring
  • Consumable In App Purchases and iAd video adverts for monetisation