RaceRunner is a run-tracking iPhone app focused on racing. Spectators can track the progress of runners during races. Spectators can start and stop timing of runs. Spectators can send messages to runners which are read aloud by the runner's phone. The app can stop timing a run automatically after a certain distance, which is useful for the time trials that runners conduct in preparation for races. The app can track shoe mileage and warn the user when mileage limits are exceeded.
I released RaceRunner to the App Store on April 21, 2016. Since then, a Chinese open-source-app website, iOSCodeHub, featured RaceRunner!
Notwithstanding my previous, positive experience with the pay-up-front business model, I decided to try freemium with RaceRunner. The app is therefore free to download but two features, broadcasting of runs to spectators and use of an animated horse to represent the runner, are available via in-app purchases.
The full source code for RaceRunner is here on GitHub for two reasons. First, open source seems appropriate in light of RaceRunner's open-source heritage. Second, I wish to advance the state of the art in run-tracking apps.
If you would like to build RaceRunner for yourself, follow these four easy steps:
- Clone the repo.
- Type
pod install
from the root of RaceRunner in Terminal. - Add API keys for Google Maps, Dark Sky, and PubNub to
Config.swift
. - Modify
UIView+Bezier.swift
, which is in the COBezierTableView CocoaPod, as shown below.
public struct BezierPoints {
static var p1 = CGPoint(x: -128, y: 0)
static var p2 = CGPoint(x: 260, y: 374)
static var p3 = CGPoint(x: -250, y: 168)
static var p4 = CGPoint(x: 5, y: 480)
}
Colors of the route indicate altitude changes.
Colors of the route indicate pace changes.
App looks great in landscape mode.
User can unlock animated-horse IAP.