The Changelog

Open Source moves fast. Keep up.

MBRequest – Easier API wrappers in iOS and OSX #

A good API wrapper should handle network transport, payload serialization/deserialization, and authentication, abstracting these details away in order to let the developer deal with the business domain of the API. Projects like Faraday, Requests, and others have made creating higher level wrappers much easier.

MBRequest from Mobiata does the same for iOS and OSX:

NSURL *url = [NSURL URLWithString:@""];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];
MBJSONRequest *jsonRequest = [[[MBJSONRequest alloc] init] autorelease];
[jsonRequest performJSONRequest:urlRequest completionHandler:^(id responseJSON, NSError *error) {
    if (error != nil)
        NSLog(@"Error requesting top-rated videos: %@", error);
        NSArray *videos = [[responseJSON objectForKey:@"feed"] objectForKey:@"entry"];
        for (NSDictionary *videoInfo in videos)
            NSString *title = [[videoInfo objectForKey:@"title"] objectForKey:@"$t"];
            NSString *author = [[[[videoInfo objectForKey:@"author"] objectAtIndex:0] objectForKey:@"name"] objectForKey:@"$t"];
            NSLog(@"'%@' by %@", title, author);

Check out the examples folder in the project source for implementation ideas.

JTGestureBasedTableView – Buttonless interface for iOS like that found in Clear #

A great effort by mobile developer James Tang to recreate that innovative UI pattern found in Clear:


The README provides sample code to set up your UITableView and enable gesture recognition:

#import "JTTableViewGestureRecognizer.h"

@interface ViewController () <JTTableViewGestureAddingRowDelegate, JTTableViewGestureEditingRowDelegate>
@property (nonatomic, strong) NSMutableArray *rows;
@property (nonatomic, strong) JTTableViewGestureRecognizer *tableViewRecognizer;

@implementation ViewController
@synthesize tableViewRecognizer;

- (void)viewDidload {

    // In our examples, we setup self.rows as datasource
    self.rows = ...;

    // Setup your tableView.delegate and tableView.datasource,
    // then enable gesture recognition in one line.
    self.tableViewRecognizer = [self.tableView enableGestureTableViewWithDelegate:self];

If you haven’t seen the Clear interface, be sure and check out the video demo:

Sample source on GitHub.

iOS-boilerplate: A base boilerplate template for iOS #

iOS Boilerplate is a base template for iOS apps inspired by HTML5 boilerplate.

iOS Boilerplate is tested on iPhone / iPod Touch devices with iOS 4.0 or greater. In a future it might support universal applications (iPhone + iPad)

As of this posting, iOS Boilerplate is just an XCode project and is planned to be released as a true XCode template in the near future.

Check out the source on GitHub and the project’s homepage for more details.

scrollability: Native scrolling for the mobile web #

Perhaps even more than advanced features like GPS, camera access, contacts, and
App stores, the lack of viewport-aware position:fixed is what drives
many apps to be developed as a native experience.

Joe Hewitt who brought us
Firebug and the Facebook iPhone app has
released Scrollability, a
single script with no external dependencies that allows developers to
achieve near-native feeling scrolling, just by adding a few CSS classes
to their markup. In just a few hours of its release, the project has over 250 watchers on GitHub.

Joe includes a simple demo for iOS devices that demonstrates super smooth scrolling as well as fixed header and footer elements.


[Source on GitHub]

Node.js on your (jailbroken) iPhone #

Nathan “Too Tall” Rajlich has gotten
Node.js to run his jailbroken iPhone 4. If you’ve got SSH access on a
jailbroken phone, simply extract the .deb package:

dpkg -i node-v0.4.5-ios-arm-1.deb

Now you can see if Node is running:

$ node
> require('os').cpus()
[ { model: 'N90AP',
    speed: 0,
     { user: 9209240,
       nice: 0,
       sys: 6997410,
       idle: 255377220,
       irq: 0 } } ]

Nate has created node-iOS to
play with iOS-specific functionality with Node bindings:

var iOS = require('iOS');

// Quick vibrate, like when you receive text message

if (iOS.compass.available) { // true if the iDevice has a digital
  iOS.compass.on('heading', function(heading) {
    console.log(heading.magneticHeading); // Degrees relative to
magnetic north

Of course if you want to play with Node on mobile without
jailbreaking your phone, Node.js powers the JavaScript services in

[Source on GitHub] [Blog post]

UIDickBar: Annoying Twitter style #dickbar for your iOS apps #

Ever wanted to add an obtrusive Dickbar to your iOS apps?


Wait no more, for Ching-Lan HUANG 黃青嵐 AKA @digdog has packaged up this UI tragedy for you to use in less than ten lines of Objective-C:

UIDickBar *dickBar = [[UIDickBar alloc] initWithDickTitle:@"#DickBar" dickBadge:@"Stupid" actionBlock:^{
    // Anything you want to do after UIDickBar tapped
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@""]];
[dickBar showInView:self.view];
[dickBar release];

[Source on GitHub] [Blog post]

Titanium Modules: Starter pack for extending Appcelerator Titanium #

If you caught Episode 0.0.8 with Marshall Culpepper, then you already know that Appcelerator Titanium Mobile is a great way for JavaScript developers to write native mobile applications for iOS and Android without needing to learn Objective-C or Java.

However, if you do speak Objective-C or Java you might not know you can extend Titanium and provide JavaScript hooks for your own code that you might want to share with other projects (and even other folks) via custom modules. You can even build extensions in JavaScript as well. The Ti+Plus Modules Starter Pack is a bundle of sample projects demonstrating how to extend Titanium. The source code for these projects augment the iOS module development and Android module development guides on the Titanium documentation site.

Be sure to check out the sample source for Flurry, Paint, and this one from AdMob:

#import "TiAdmobModule.h"
#import "TiBase.h"
#import "TiHost.h"
#import "TiUtils.h"

@implementation TiAdmobModule

// this is generated for your module, please do not change it
  return @"0d005e93-9980-4739-9e41-fd1129c8ff32";

// this is generated for your module, please do not change it
  return @"ti.admob";

#pragma mark Lifecycle

  // this method is called when the module is first loaded
  // you *must* call the superclass
  [super startup];

  NSLog(@"[INFO] AdMob module loaded",self);

  // this method is called when the module is being unloaded
  // typically this is during shutdown. make sure you don't do too
  // much processing here or the app will be quit forceably

  // you *must* call the superclass
  [super shutdown:sender];

If you’d like to get started with Titanium Mobile, I’ll be joining Kevin and Marshall at Red Dirt Ruby Conf and doing a special Zero-to-App training session to get you up and running with Titanium. We’ll even throw in a little CoffeeScript.

X-Callback-URL: URL specification for iOS interapp communication #

URLs are one of those things about the web that we often take for granted. As developers, we can request resources and send users to other destinations just by knowing a location on the Internet.

The mobile landscape is a bit different. While most mobile applications speak Web, consuming REST-ful APIs and other web resources, quite often they’re little silos of vertical, site or brand-specific functionality. Did you know that for iOS developers Apple makes it possible to register your own URL scheme, as in this Gowalla example:

The list of known iOS applications supporting OpenURL is growing daily.

Beyond application launching

As handy as these custom iOS URL schemes are in launching other applications, mobile developer Greg Pierce wants to the community to extend the idea of custom URL schemes and adopt a standard for inter-app communication. X-Callback-URL is a draft specification for one-way and two-way communication between mobile apps on iOS and looks like this:

[scheme]://[host]/[version]/[action]?[x-callback parameters]&[action parameters]

Let’s look at a real world example from Greg’s popular Terminology, a language reference app for iPhone and iPad:

  • scheme: The app’s custom URL scheme, terminology in the above example
  • host: Callback URLs are identified by a host value of x-callback-url
  • version: The X-Callback-URL spec version, currently 1.0
  • action: The action to perform in the target app. In this case, Terminology will perform a lookup action.
  • x-callback parameters: Optional. Not used in this example
  • action parameters: The parameters to pass to the executing action, “a good deal” in this example

This approach provides a robust way to not only launch an app, but also request that the app handle an action, which may or may not have a UI associated with it.

Two-way communication

The real power of X-Callback-URLs lies in two-way inter-app communication. By using the x-callback parameters in the spec, we can ask the target app to call us back on our own URLs, even handling success and error scenarios. Sort of like custom HTTP headers, these callback parameters are identified with an x- namespace:

  • x-source : The friendly name of the source app calling the action. If the action in the target app requires user interface elements, it may be necessary to identify to the user the app requesting the action.
  • x-success : If the action in the target method is intended to return a result to the source app, the x-callback parameter should be included and provide a URL to open to return to the source app. On completion of the action, the target app will open this URL, possibly with additional parameters tacked on to return a result to the source app. If x-success is not provided, it is assumed that the user will stay in the target app on successful completion of the action.
  • x-error : URL to open if the requested action generates an error in the target app. This URL will be open with at least the parameters “errorCode=code&errorMessage=message. If x-error is not present, and a error occurs, it is assumed the target app will report the failure to the user and remain in the target app.

Here’s how you’d build a URL to allow your users to select some text in your app, choose a replacement in Terminology, and have to return back to your app.


Greg has a great screencast that demonstrates the process end-to-end:

Be sure and check out the full documentation for all of Terminology’s callbacks on Greg’s site as well as implemenation examples on GitHub. If you decide to implement X-Callback-URL in your application, please add it to the directory so the community knows how to integrate with you.

[Source on GitHub] [Home page] [@xcallbackurl on Twitter] [Discuss on HackerNews]

treesaver: HTML5, JavaScript library for creating magazine style layouts for iPad and web #

A new breed of mobile devices led by the Apple iPad are changing the way we think about web layout. Applications like Flipboard and Feedly have led the charge in a resurgence of magazine-style layouts both on the web and on the tablet.

Treesaver from Filipe Fortes is a new JavaScript framework for creating magazine-style layouts using standards-compliant HTML and CSS. Weighing in at just 25KB, Treesaver’s feature set is impressive providing support for grid and column layouts, custom UI’s, repeating content, cover pages, figures and illustrations, and analytics.

Demo 1 Demo 2

The Treesaver wiki has a nice walkthrough to get you started and the project ships with an HTML boilerplate for both your content:

<!doctype html>
<html class="no-js no-treesaver">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,height=device-height,initial-scale=1,minimum-scale=1,maximum-scale=1">
    <title>Sample Treesaver Page</title>
    <link rel="stylesheet" href="style.css">
    <link rel="resources" href="resources.html">
    <script src="treesaver-0.9.0.js"></script>

      <p>This markup is an example of a page using Treesaver for layout. It is not very exciting right now.</p>

and your resources:

<!doctype html>
    <div class="chrome">
      <div class="viewer"></div>

    <div class="grid">
      <div class="column"></div>

    <div class="loading">

    <div class="error">

Be sure and check out the impressive demos, especially on the iPad. With this first public release, Filipe admits the project still needs a lot of work. But the GitHub repo has a deep wiki and is very active. If you’re interested in contributing, you can help knock out the growing list of bugs and features.

iPad screenshot

[Source on GitHub] [Homepage]

jQuery Mobile Alpha 3 released #

Hot on the heels of the jQuery 1.5 release, jQuery Mobile Alpha 3 is out.

A massive update of nearly 500 commits and over 150 bug fixes, Alpha 3 sports a totally refactored Ajax navigation that in our initial tests is much zippier (at least on the iPhone 4).

Check out the official announcement and updated demo or grab the code.


[Source on GitHub] [Announcement] [Demo]

nib2objc: Convert iPhone NIB files into Objective-C code #

Interface Builder is one of the coolest things about Cocoa development. Being able to draw your interfaces visually can save you tons of otherwise tedious code to create layouts and set visual styles for your user interface elements.

Adrian Kosmaczewski, iPhone and iPad developer and creator of Device DNA and several other apps in the App Store turned us on to nib2objc, which is a brilliant name because it takes NIB (or XIB) files from Interface Builder and converts them to Objective-C.

To run from the command line, simply run nib2objc, passing the path to your NIB file:

nib2objc yourfile.xib > code.m

The output is a rather nice looking set of UIKit objects and property assignments to match values from your NIB:

// ...
UIView *view6 = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 460.0)];
view6.frame = CGRectMake(0.0, 0.0, 320.0, 460.0);
view6.alpha = 1.000;
view6.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
view6.backgroundColor = [UIColor colorWithWhite:0.750 alpha:1.000];
view6.clearsContextBeforeDrawing = NO;
// ...

UIButton *button9 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
button9.frame = CGRectMake(167.0, 65.0, 72.0, 37.0);
button9.adjustsImageWhenDisabled = YES;
button9.adjustsImageWhenHighlighted = YES;
button9.alpha = 1.000;
button9.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin;
button9.clearsContextBeforeDrawing = NO;
button9.clipsToBounds = NO;
button9.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
// ...
[button9 setTitleShadowColor:[UIColor colorWithWhite:0.000 alpha:1.000] forState:UIControlStateSelected];

// ...
[view6 addSubview:button9];
// ...

Bonus #1

As an added bonus, nib2objc includes a GUI to browse NIB files and even peer into their generated Objective-C code, complete with Fragaria-based syntax highlighting.


Check the project home page for more details, not to mention the most minimalistic Redmine theme we’ve seen.

Bonus #2

But wait, there’s more. We also stumbled across Adrian’s other project Bluwoki, a Bluetooth peer-to-peer walkie-talkie for iPhone and iPod Touch. Since my daughters get their Dad’s old hand-me-down iPhones, I may have to install this for them to have some fun around the house. Bluwoki is also open source, grab the code on GitHub.


[Source on GitHub] [Home page]

applitude: Elegant DSL to create iPhone apps in Eclipse #

While language purists might balk at the growing popularity of projects that compile to Objective-C, the verbosity of the Cocoa framework has many developers looking for a faster way to create iPhone apps. Let’s face it, the vast majority of apps in the App Store follow a familiar pattern of making a network request, showing an activity indicator, parsing a JSON response, handling errors, loading a UITableView, and handling navigation to the next bit of data.


Applitude is based on Applause, a nifty Domain Specific Language from Heiko Behrens and Peter Friese based on Xtext for creating iOS apps. Ralf Ebert has pared down Applause to have an iPhone focus to create Applitude. Here’s a sample:

application Demo {

tabview Tabs {
  tab {
    title: "Inventors"
    view: Inventors()

type String mapsTo "NSString"

entity Inventor {
  String name
  String imageUrl
  Invention[] inventions

entity Invention {
  String name

contentprovider AllInventors returns Inventor[] fetches JSON from
  "" selects ""

tableview Inventors {
  Inventor[] inventors = AllInventors()

  title: "Inventors"

  section {
    cell Default for inventor in inventors {
      image: inventor.imageUrl
      action: InventorDetail(inventor)

tableview InventorDetail(Inventor inventor) {
  style: Grouped

  section {
    cell Value2 {
      text: "Name"

  section {
    title: "Inventions"
    cell Default for invention in inventor.inventions {

This example creates a simple demo app based on some JSON:

    "name" : "Thomas Edison",
    "imageUrl" : "",
    "inventions" : [
      { "name" : "Light bulb" },
      { "name" : "Motion picture" },
      { "name" : "Phonograph" }
    "name" : "Alexander Graham Bell",
    "imageUrl" : "",
    "inventions" : [
      { "name" : "Telephone" }
    "name" : "Nikola Tesla",
    "imageUrl" : "",
    "inventions" : [
      { "name" : "Tesla coil" },
      { "name" : "Alternating current" }

Applitude bundles popular open source iOS frameworks including TouchJSON, TouchXML, and ASIHTTPRequest. Visit the project home page for advanced usage, requirements, and installation instructions

[Comment on Hacker News]

[Source on GitHub] [Web site]

betabuilder: Ruby gem makes iOS ad-hoc builds suck less #

Behind most every App Store download, there is a painful trail of ad hoc beta builds as developers send beta bits to users to gather feedback and fix bugs. Luke Redpath, UK Rubyist and iOS developer, aims to ease that pain for iOS developers with BetaBuilder, a Ruby gem that bundles up a collection of rake tasks to make it easier to deploy your iOS apps.

BetaBuilder supports distributing your apps own your own server or using To get started, first install the gem:

gem install betabuilder

Next, require BetaBuilder in your Rakefile:

require 'rubygems'
require 'betabuilder'

… and configure your app: do |config|
  # your Xcode target name = "MyGreatApp"

  # the Xcode configuration profile
  config.configuration = "Adhoc" 

  config.deploy_using(:web) do |web|
    web.deploy_to = ""
    web.remote_host = ""
    web.remote_directory = "/remote/path/to/deployment/directory"

Now we can see all of our tasks with rake -T:

rake beta:archive   # Build and archive the app
rake beta:build     # Build the beta release of the app
rake beta:deploy    # Deploy the beta using your chosen deployment strategy
rake beta:package   # Package the beta release as an IPA file
rake beta:prepare   # Prepare your app for deployment
rake beta:redeploy  # Deploy the last build

If you want to use TestFlight instead of hosting your builds yourself, simply swap out the deploy config with:

config.deploy_using(:testflight) do |tf|
  tf.api_token  = "YOUR_API_TOKEN"
  tf.team_token = "YOUR_TEAM_TOKEN"

Nifty. Need additional deploy strategies? Go ahead and fork the project and share it with the community.


Thanks, Luke, for pointing out some prior art from Hunter who lent the name to the project.

[Source on GitHub]

tweetanium: JavaScript-powered native Twitter client for iPad, iPhone, Android, Windows, Mac, and Linux #

The folks over at Appcelerator have been busy, recently releasing version 1.5 of their Titanium Mobile platform that enables developers to create native iOS and Android applications using JavaScript.

In the spirit of showing versus telling, they’ve released Tweetanium, a Twitter client and cross-platform showcase of the Titanium platform.

Tweetanium screenshot

Tweetanium is an excellent example of how to build real-world applications with Titanium and demonstrates JavaScript best practices, including the module pattern, API integration with Twitter, as well as advanced CSS3 techniques.

If you missed it, be sure and catch Episode 0.0.8 in which Marshall Culpepper gives us the scoop on the Titanium architecture.

Tweetanium Desktop from Appcelerator Video Channel on Vimeo.

[Source on GitHub]

Canabalt: Engine behind popular iOS game now open source #


In a blog post announcing their part in raising over $25,000 for charity, Semi Secret Software has released the source to Flixel iOS, the game engine behind their popular iOS title Canabalt.


A port of Flixel, the Action Script Flash game framework, Flixel iOS handles texture atlas generation, particle rendering, collisions, and animated sprites.


#import "Smoke.h"
#import <SemiSecret/SemiSecretTexture.h>

static NSString * ImgSmoke = @"smoke.png";

@interface Smoke ()
- (id) initWithGLData:(SmokeGLData *)glData texture:(SemiSecretTexture *)texture;
- (void) setupVertices;
- (void) setupTexCoords;


If your app does Twitter, check out their previously released Twitter xAuth project. Need more? Go ahead and fork the project and improve upon it.

Game over

[Source on GitHub] [Blog post]

WatchWednesday for 20101103

Our weekly list of projects you might have missed on GitHub: RestKit RestKit is a nice high-level library for consuming REST resources in Objective C. It runs on OS X and iOS and provides three major features: Network transport including GET, POST, PUT, and DELETE Object mapping between JSON responses and local domain types, in […]

Episode 0.3.9 – Scripty2, Zepto.js, Vapor.js, and more with Thomas Fuchs

Wynn caught up with Thomas Fuchs to talk about, Scripty2, Zepto.js and the future of Prototype. Items mentioned in the show: The Magic Roundabout is crazy Wynn got his UK badge on Gowalla JavaScript effects framework built on top of Prototype Prototype – JavaScript Framework that aims to ease development of dynamic web […]

Deutsche Telekom releases Unify, metaframework for mobile built on HTML5, JavaScript, and Sass #

At 2010, Deutsche Telekom took the wraps off of their Unify Project which aims to provide a unified API for building cross-platform mobile and desktop applications.

Unify looks to be a metaframework of sorts, wrapping other popular frameworks:

  • qooxdoo is a comprehensive and innovative framework for creating rich internet applications (RIAs) using object-oriented JavaScript
  • PhoneGap provides a native wrapper for web apps, providing interfaces for device features not supported with browser-based apps alone.
  • Sass is a superset of CSS3 syntax and provides programmatic features for CSS such as variables, mixins, and selector nesting, covered way back in Episode 0.0.1
  • Adobe AIR provides a cross-platform runtime for desktop applications.

Unify currently supports iOS, Android, and WebOS devices and plans to support BlackBerry OS 6.0 soon.


The Unify API provides a single progamming model to features such as IO, storage, cache, geolocation, and even UI.

Here’s the ScrollView class as an example:
  • Scrolling could be enabled/disabled separately for each axis.
  • Indicator style is changable through an API call (per instance)
  • Flips back when scrolling out of allowed ranges.
  • Smooth animations for deleleration and flip back
  • Page based scrolling where the content is auto-splitted into pages which are used for snapping into

Keep an eye on the Unify Roadmap for updates and real-world implementations.

[Source on GitHub] [Homepage]

jsconsole: JavaScript console now on the iPhone, iPad #


JSConsole from Remy Sharp is a great way to play with JavaScript in the browser, especially during live coding sessions.

Just like Firebug or the WebKit JavaScript consoles, simply type an expression and JSConsole will evaluate it:

> -4

JSConsole also serves up permalinks for each command: You can even load external JavaScript libraries with a single command:

:load jquery

Remy has now ported the console to mobile devices using PhoneGap, complete with Websockets support.

Screenshot of jsconsole on iPhone

[JSConsole on GitHub][JSConsole for iOS on GitHub]

zepto.js: Minimalist JavaScript framework for mobile WebKit with jQuery-like chaining #

It may seem strange that the author of Prototype-based would embark on creating a new jQuery-esque JavaScript library for mobile devices, but that’s exactly what Thomas Fuchs has done with zepto.js.

One reason JavaScript frameworks have become popular is because they abstract browser differences and let the developer focus on the work at hand, not on how it’s done. Since zepto.js targets only Webkit browsers, a lot of the cruft found in other frameworks can be eliminated. Modern JavaScript features such as forEach can be assumed so the framework is leaner, critical for building mobile apps.

zepto.js is under heavy development (growing by 2x since we first spotted it yesterday), but looks to deliver on its goal of being a “~2k library that handles most basic dredge work for you in a nice API so you can concentrate on getting stuff done.”


zepto.js uses the familiar $ function and includes the usual suspects:

get(): return array of all elements found
get(0): return first element found
html('new html'): set the contents of the element(s)
css('css properties'): set styles of the element(s)
append, prepend: like html, but append or prepend to element contents

Ajax support

Methods you’d expect for Ajax-fied GETs and POSTs are there as well:

$.get(url, callback)
$.post(url, callback)
$.getJSON(url, callback)

Installing and using

Thomas recommends not linking to zepto.js directly in your document <head>, rather copy and paste the contents of zepto.min.js directly into a <script> tag.

Thomas knows a thing or two about mobile optimization. Be sure and catch his thoughts in how he optimized Every Time Zone for mobile devices.

[Source on GitHub]

OmniGroup Frameworks: Objective-C frameworks for Mac OSX and iOS apps #

The Omni Group, makers of wildly popular Mac and iOS products such as OmniFocus and OmniGraffle, want to share some of their code with you.

The OmniGroup Frameworks are a set of Objective-C code libraries for both Mac and iOS that peform a wide range of common tasks.

  • OmniFoundation includes a set of low-level objects like OFStringScanner for scanning Unicode strings, OFRegularExpression for Regex, and OFMessageQueue & OFQueueProcessor for multithreaded operations.
  • OmniDataObjects resemble CoreData light, built on top of SQLite for Mac and iOS.
  • OmniAppKit provides types like OAOSAScript for enabling AppleScript in your app, OAPreferences for multi-pane preferences windows, and OAFindPanel for find-and-replace tasks.
  • OmniInspector is the inspector seen at work in OmniGraffle, OmniFocus, OmniOutliner and OmniPlan
  • OmniNetworking provides higher-level types to work with TCP, UDP and Multicast networking.

[Source on GitHub] [Framework forums]

slablet: Stylish CSS layout for iPad and more #

If you like Sencha Touch, the HTML5 mobile framework we recently covered in Episode 0.3.0, but long for a more declarative, markup-driven approach, then keep an eye on Slablet from Fellowship Technologies.


Slablet, as defined by Urban Dictionary:

(n.) – a slang word for a computer tablet such as the iPad or other branded tablet devices

Unlike Sencha’s JavaScript-centric approach, Slablet opts for a more unobtrusive implementation. Content is created in HTML, styled with CSS, and driven by jQuery. The project uses iScroll to provide overflow:scroll in its fixed height elements.

Fellowship has provided a few nice looking demos.


If you’re wanting to start developing split-pane interfaces for the iPad, give Slablet a look.

[Source on GitHub]

facebook-ios-sdk: Drop Facebook into your iOS application #

Facebook loves iOS developers. First, they gave us Three20, a nice iOS app framework extracted from their popular native app. Now they’ve released the Facebook iOS SDK which lets you easily add authorization, API calls, and Facebook dialogs to your iOS apps.


To authorize a user using OAuth2 you can simply create the Facebook client and call authorize

facebook = [[Facebook alloc] init];
[facebook authorize:apiKey permissions:permissions delegate:self];

Making API calls

Now you can do things like getting info for the authenticating user:

[facebook requestWithGraphPath:@"me" andDelegate:self];

or get that users’s friends

[facebook requestWithGraphPath:@"me/friends" andDelegate:self];

[Source on GitHub]

Continuous Deployment made simple. Codeship runs your tests & continuously deploys your code. Try it now for free!