explaingit

joeldev/jlroutes

5,711Objective-CAudience · developerComplexity · 2/5Setup · easy

TLDR

JLRoutes is an iOS and macOS library that handles incoming URLs by matching them to patterns you define, extracting variable parts automatically, ideal for implementing deep links that open specific app screens.

Mindmap

mindmap
  root((JLRoutes))
    What it does
      URL pattern matching
      Deep link handling
      Variable extraction
    Key features
      Scheme namespacing
      Wildcard segments
      Optional components
    Installation
      CocoaPods
      Carthage
    Audience
      iOS developers
      macOS developers
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Add deep link support to an iOS app so tapping a link opens a specific screen with the right user or content ID.

USE CASE 2

Organize URL routing by scheme to handle multiple custom URL types registered by the same app.

USE CASE 3

Use wildcard and optional path components to match flexible URL patterns without writing manual parsing code.

Tech stack

Objective-CiOSmacOSCocoaPodsCarthage

Getting it running

Difficulty · easy Time to first run · 30min

In plain English

JLRoutes is a library for iOS and macOS apps that makes it straightforward to handle incoming URLs and decide what to do with them. This is especially useful for deep linking, where tapping a link in another app or a web page opens your own app and navigates directly to a specific screen. Without a routing library, developers have to write repetitive code that inspects every incoming URL character by character. JLRoutes lets them declare patterns instead. The core idea is that you register a URL pattern like /user/view/:userID and attach a block of code to it. The colon before userID marks it as a variable placeholder. When a URL matching that pattern arrives, JLRoutes extracts the variable parts and hands them to your block in a dictionary, so your code receives something like {"userID": "joeldev"} and can act on it directly. Query string parameters from the URL are also included in that dictionary automatically. The library supports organizing routes by scheme. A scheme in this context is the prefix before the colon in a URL, like myapp in myapp://user/view/joeldev. You can define separate sets of routes for different schemes, which is useful when an app registers multiple custom URL types. You can also allow a scheme's routes to fall back to the global set if no specific match is found. Other features documented in the README include wildcard route segments that match any number of path components, optional path components surrounded by parentheses, and verbose logging to help trace which routes are being matched during development. Handler blocks return a true or false value: returning false tells JLRoutes the block did not handle this URL, causing it to keep searching for the next matching pattern. Installation is through CocoaPods or Carthage, the two most common iOS dependency managers. The library requires iOS 8.0 or later, or macOS 10.10 or later.

Copy-paste prompts

Prompt 1
I'm building an iOS app with JLRoutes. Show me how to register a route for /user/view/:userID and open a user profile screen when that URL arrives.
Prompt 2
Using JLRoutes, how do I set up separate route sets for two different URL schemes and fall back to global routes when no scheme-specific match is found?
Prompt 3
In my iOS app using JLRoutes, how do I enable verbose logging to debug which route pattern is being matched for an incoming URL?
Prompt 4
Show me how to use optional path components in JLRoutes so that /product and /product/featured both match the same handler block.
Open on GitHub → Explain another repo

← joeldev on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.