finds.dev← search

// the find

joeldev/JLRoutes

★ 5,709 · Objective-C · BSD-3-Clause · updated Feb 2023

URL routing library for iOS with a simple block-based API

URL routing library for iOS/macOS that maps URL patterns to handler blocks, primarily for deep linking. Pattern matching supports named parameters, wildcards, and optional path segments. Targets Objective-C iOS apps that need to dispatch incoming URLs — custom schemes or universal links — to the right in-app destination.

The scheme namespacing is well-thought-out: you can register the same route under multiple schemes with different handlers, plus opt into global fallback per-scheme rather than it being all-or-nothing. Optional route segments expand into every combination at registration time rather than at match time, which keeps matching simple. The `JLRRouteDefinition` subclass hook for custom parsing is a genuine escape hatch — you can change matching logic without forking the library. Handler block chaining (returning NO to continue matching) avoids the usual 'first match wins and you're stuck' trap.

Last commit was February 2023 and the library targets Objective-C — Swift deep linking is now dominated by UIApplicationDelegate alternatives, UIScene, and structured concurrency, none of which this library acknowledges. The global mutable route table (`[JLRoutes globalRoutes]`) is a singleton with no thread-safety documentation; registering routes from async contexts in modern Swift apps is a footgun. No Swift Package Manager support for actual Swift consumers (Package.swift is present but the library is pure ObjC, so you get bridging header friction). The block-based NSDictionary API means all parameter types come back as `id` — you're doing string casting everywhere with no type safety.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →