Beeline is a very small library that aims to provide a lean, automatic implementation of the classic iOS router pattern. It extends UIViewController to retain a Router object that serves as the source of truth for controlling navigation flows for all of the view controller's children. When a child view controller wishes to transition to a new screen, it can call show() on itself and this request is passed up the view controller chain to the routing view controller.
Instructions
A very basic custom implementation looks as the following. First, we create a Swift enum conforming to Route where we can define the types of destinations with which we want to move:
enum AppRoute: Route {
case viewController(number: Int)
}Thanks to Swift associated enums, we can also include any custom parameters the new destination may need.
We then also make a new class which subclasses Router, which serves as our single point of truth for controlling the app flow based off the destinations we defined above:
public class AppRouter: Router {
override func show(_ route: Route,
from sourceViewController: UIViewController?) -> Bool {
// Optionally, filter out routes we don't support
guard let appRoute = route as? AppRoute else { return false }
// Check the requested enum, and perform the transition
switch appRoute {
case .viewController(let number):
let newViewController = ViewController(number: number)
sourceViewController?
.navigationController?
.pushViewController(newViewController, animated: true)
}
return true
}
}
Using Objective-C associated objects, we can assign this router to any parent view controller that contains all of the view controllers that might want to perform these transitions:
let navigationController = UINavigationController(rootViewController: ViewController())
navigationController.router = AppRouter()Finally, without any further modification to any of the child view controllers, they can start a transition by simply calling show() with the desired destination:
class ViewController: UIViewController {
func moveToNewViewController() {
show(AppRoute.viewController(number: 2))
}
} And that's the entire library!
Requirements
- Swift 5
- UIKit-compatible platforms (iOS, tvOS, Mac Catalyst)
Installation
Beeline is a very small framework, with all of its code contained in Router.swift. You can install it in the following ways:
Manual Installation
Drag the Beeline/Router.swift file into your Xcode project.
CocoaPods
pod 'Beeline'
SPM
I'll be adding this when I get the chance!
Carthage
No plans to support Carthage at the moment, but please consider filing a PR if you would like it!
Credits
Beeline was built as a component of iComics 2 by Tim Oliver
License
Beeline is available under the MIT License. Please check the LICENSE file for more information.

Formed in 2009, the Archive Team (not to be confused with the archive.org Archive-It Team) is a rogue archivist collective dedicated to saving copies of rapidly dying or deleted websites for the sake of history and digital heritage. The group is 100% composed of volunteers and interested parties, and has expanded into a large amount of related projects for saving online and digital history.

