• Stars
    star
    1,815
  • Rank 25,580 (Top 0.6 %)
  • Language
    Objective-C
  • License
    MIT License
  • Created over 11 years ago
  • Updated almost 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Routable, an in-app native URL router, for iOS

Routable Build Status FOSSA Status

Routable is an in-app native URL router, for iOS. Also available for Android.

Usage

Set up your app's router and URLs (usually done in application:didFinishLaunchingWithOptions:):

[[Routable sharedRouter] map:@"users/:id" toController:[UserController class]];
// Requires an instance of UINavigationController to open UIViewControllers
[[Routable sharedRouter] setNavigationController:aNavigationController];

Implement initWithRouterParams: in your UIViewController subclass:

@implementation UserController

// params will be non-nil
- (id)initWithRouterParams:(NSDictionary *)params {
  if ((self = [self initWithNibName:nil bundle:nil])) {
    self.userId = [params objectForKey:@"id"];
  }
  return self;
}

Then, anywhere else in your app, open a URL:

NSString *aUrl = @"users/4";
[[Routable sharedRouter] open:aUrl];

If you wish to do custom allocation of a controller, you can use +allocWithRouterParams:

[[Routable sharedRouter] map:@"users/:id" toController:[StoryboardController class]];

@implementation StoryboardController

+ (id)allocWithRouterParams:(NSDictionary *)params {
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
    StoryboardController *instance = [storyboard instantiateViewControllerWithIdentifier:@"sbController"];
    instance.userId = [params objectForKey:@"id"];

    return instance;
}

Set ignoresExceptions to YES to NOT throw exceptions (suggested for a Release/Distribution version)

[[Routable sharedRouter] setIgnoresExceptions:YES];

Installation

CocoaPods

pod 'Routable', '~> 0.1.1'
#import <Routable/Routable.h>

If you're not able to use CocoaPods, please install Routable as a git submodule and add the files to your Xcode project.

Features

Anonymous Callbacks

You can invoke anonymous callbacks with Routable:

[[Routable sharedRouter] map:@"invalidate/:id" toCallback:^(NSDictionary *params) {
  [Cache invalidate: [params objectForKey:@"id"]]];
}];

[[Routable sharedRouter] open:@"invalidate/5h1b2bs"];

Presentation Options

You can configure if and how a UIViewController is presented modally with UPRouterOptions:

UPRouterOptions *options = [[UPRouterOptions modal] withPresentationStyle: UIModalPresentationFormSheet];
[self.router map:@"info" toController:[InfoController class]
                          withOptions:options];

UPRouterOptions has the following DSL setters:

  • modal
  • withPresentationStyle:
  • withTransitionStyle:
  • forDefaultParams:

Open External URLs

Sometimes you want to open a URL outside of your app, like a YouTube URL or open a web URL in the browser. You can use Routable to do that:

[[Routable sharedRouter] openExternal:@"http://www.youtube.com/watch?v=oHg5SJYRHA0"];

Multiple Routers

If you need to use multiple routers, simply create new instances of Router:

UPRouter *adminRouter = [Routable newRouter];
[adminRouter map:@"profile" toController: [AdminProfile class]];

UPRouter *userRouter = [Routable newRouter];
[userRouter map:@"profile" toController: [UserProfile class]];

Contact

Clay Allsopp (http://clayallsopp.com)

License

Routable for iOS is available under the MIT license. See the LICENSE file for more info.

FOSSA Status

More Repositories

1

react.backbone

Plugin for React to make Backbone migration easier
JavaScript
840
star
2

formotion

Making iOS Forms insanely great with RubyMotion
Ruby
609
star
3

routable-android

Routable, an in-app native URL router, for Android
Java
474
star
4

graphqlhub

The GraphQLHub Server
JavaScript
402
star
5

ShotBlocker

Detecting iOS screenshots ala Snapchat and Facebook Poke
Objective-C
257
star
6

rubymotion-tutorial

RubyMotion-Tutorial
Ruby
211
star
7

Walt

Fast, frictionless iOS animations
Ruby
144
star
8

HybridKit-iOS

HybridKit for iOS
Objective-C
126
star
9

remote_model

JSON API <-> NSObject via RubyMotion
Ruby
97
star
10

geomotion

Better iOS Geometry with RubyMotion
Ruby
90
star
11

Routable

A RubyMotion UIViewController -> URL router
Ruby
86
star
12

graphql-intro

JavaScript
86
star
13

react-vr

Write VR web apps with React JS
JavaScript
83
star
14

motion-toolbox.com

The Motion-Toolbox website
CSS
79
star
15

relay-101

Relay 101
JavaScript
48
star
16

HybridKit-JS

HybridKit for JavaScript
JavaScript
45
star
17

motion-screenshots

Automatic screenshots for your RubyMotion apps
Ruby
41
star
18

twittermotion

RubyMotion wrapper for the iOS Twitter API
Ruby
40
star
19

readme-score

Giving a score to README.md's everywhere
Ruby
40
star
20

motion-smarticons

Automatically generate icon labels for RubyMotion apps
Ruby
39
star
21

maglev

Faster, smoother iOS development
Ruby
36
star
22

motion-require

Dependency management for RubyMotion, using a pseudo `require`
Ruby
34
star
23

motion-env

Sync ENV variables between Rakefile and RubyMotion
Ruby
31
star
24

applebot

Automating iTunes Connect and the iOS Developer Center
JavaScript
31
star
25

react-native-remote-component

Load React Native components over the network
Objective-C
27
star
26

VolumeCamera

iPhone app where camera is triggered by volume buttons
Objective-C
26
star
27

urlp

A command-line URL parser, written in Rust
Rust
22
star
28

CLAFluxDispatcher

A port of Facebook's Flux Dispatcher to Objective-C
Objective-C
22
star
29

mixing-objc-ruby

Mixing Objective-C and Ruby with RubyMotion
Objective-C
20
star
30

typescript-1.8-tutorial

Migrating a JavaScript app to TypeScript 1.8
JavaScript
20
star
31

motion-colorize

Add some color to your RubyMotion output
Ruby
17
star
32

motion-screenspecs

Test your RubyMotion app using screenshot comparison
Ruby
17
star
33

graphql-unions-interfaces

JavaScript
13
star
34

appleload

CLI & Ruby Library to control Apple's Application Loader app
Ruby
12
star
35

motion-weakattr

weak_attr for WeakRefs in RubyMotion
Ruby
10
star
36

appleslice

Easily parse Apple & iTunes Connect emails
Ruby
7
star
37

motion-http

Cross-platform HTTP library for RubyMotion
7
star
38

BrocabularyTutorial

The source to the Android App From Scratch tutorials
Java
7
star
39

relay-102

Relay with Mutations! Powered by GraphQLHub
JavaScript
6
star
40

plottable-examples

HTML
5
star
41

afmotion-rocket

AFMotion extensions for Rocket
Ruby
5
star
42

CYStoreExample

Magically easy in-app purchases on iOS.
Objective-C
4
star
43

MotionCorePlot

Ruby
3
star
44

graphql-directives

JavaScript
3
star
45

motion-tips

Motion Tips blog dump.
Ruby
3
star
46

gumroad-ruby

Ruby binding for Gumroad API
Ruby
3
star
47

smashing-rubymotion

Source code to Smashing's RubyMotion example
Ruby
3
star
48

droidproj

Manage Android projects with a Droidfile
Ruby
2
star
49

readme-score-api

The API for readme-score
Go
2
star
50

FormotionTest

Tests
Ruby
2
star
51

WebActivity

Drop-in Activity to browse the web
Java
1
star
52

new-news

TypeScript
1
star
53

botlib

The shared library for AppleBot and PlayBot
Ruby
1
star
54

clayallsopp.github.com

1
star