iOS Icon


iOS is the operating system for Apple's mobile products.
68 Stories
All Topics


Prototype your iOS apps with Quartz Composer and qc-mobile

Apple’s Quartz Composer has enjoyed renewed enthusiasm as a prototyping tool after recent news and video tutorials on how Facebook prototyped Home using the tool.

Joris Kluivers takes QC-based prototyping for iOS one step further with qc-mobile, which makes it possible to load, display, and interact with .qtz files on iOS.

qc-mobile screenshot

It’s still early days for the project (as Joris explains in his introductory blog post), but it is functional enough to render Jay Thrash’s iMessage recreation as seen in the demo video below.

Now is a great time to get involved and make significant contributions to the project! qc-mobile is MIT licensed and hosted on GitHub.


An implementation of Facebook's ChatHeads on iOS

If you’re a fan of Facebook 6.0 with Chat Heads you’re gonna love this.

This project is an attempt to re-implement this feature and to figure out how the animations are done. I don't support this project in a way to completely implement all features of ChatHeads. It should only illustrate how parts of ChatHeads are done.

Yours truly even has a commit. Sure, it’s just a spelling change, but that’s all it takes.

Check out the source on GitHub.

ht/ @Soffes


Helios: a server side for your iOS app

Today, the always-impressive Mattt released a new project: Helios.

Helios is an open-source framework that provides essential backend services for iOS apps, from data synchronization and user accounts to push notifications, in-app purchases, and passbook integration. It allows developers to get a client-server app up-and-running in just a few minutes, and seamlessly incorporate functionality as necessary.

Getting started is easy:

$ gem install helios
$ helios new myapp
$ cd myapp; helios server
$ open http://localhost:5000/admin

Helios is broken down into useful components, too. If you check out the .gemspec, you’ll notice a few other gems that would be useful for anyone trying to build a backend service.

There’s a lot of startups that do “Backend as a Service,” such as Parse, so it’s nice to see an OSS competitor pop up.


Tumblr releases their SDK for iOS (and other official client libraries for their API)

Bryan Irace, iOS developer at Tumblr, announced in this post that Tumblr recently open-sourced their SDK for iOS as well as a few official client libraries for the Tumblr API.

We've been using this SDK in production for quite some time now and are thrilled to finally be able to share it with you.

If you’re interested in integrating with Tumblr on iOS or OS X in a way that the SDK doesn’t currently facilitate, please get in touch. I’m very interested in hearing any and all feedback on how we can make this as easy as possible.

Keep an eye on Tumblr’s org on GitHub if you’re looking to integrate with the Tumblr API.


CSS PhotoEditor for iOS 6 demos CSS filters you can use today

Last week on episode #39 of The Industry, my buddy Drew Wilson mentioned this CSS photo editor he bookmarked a few months back. It’s a test site for new CSS features in iOS6 and other modern browsers for CSS filters and input[type=“file”] that lets you edit photos using CSS filters.

Check out the site, the source, the blog post explaining the project, and the episode at around 17:20 to hear us discuss this.


KGNoise — The easiest way to draw noise in Objective-C

Today David Keegan released KGNoise. It’s hands down the simplest way to draw noise on iOS or Mac.

There’s two simple class methods to draw noise:

+ (void)drawNoiseWithOpacity:(CGFloat)opacity;
+ (void)drawNoiseWithOpacity:(CGFloat)opacity andBlendMode:(CGBlendMode)blendMode;

David even provides a UIView or NSView (depending on which platform you’re building for) subclass that wraps up this behavior nicely. Here’s the interface:

@property (strong, nonatomic) NSColor/UIColor *backgroundColor;
@property (nonatomic) CGFloat noiseOpacity;
@property (nonatomic) CGBlendMode noiseBlendMode;

Since NSView doesn’t have a backgroundColor property, he adds one for you. Super handy.

Lots of designs, including Apple’s, have been using noise lately. KGNoise makes it dead simple to accomplish this now. Definitely give it a look!


Cupertino - Mechanize the Apple Dev Center

Cupertino is a great new tool by the amazing Mattt Thompson:

Automate administrative tasks that you would normally have to do through the Apple Dev Center websites. Life’s too short to manage device identifiers by hand!

You can easily list devices like this:

$ ios devices:list

Easily add one like this:

$ ios devices:add "Sam's iPhone":abcdefg...

There’s support for the following commands:

  • devices:add
  • devices:remove
  • certificates:list [-e development|distribution]
  • certificates:add [-e development|distribution]
  • certificates:download CERTIFICATE_NAME
  • certificates:revoke CERTIFICATE_NAME
  • app_ids:list
  • app_ids:new

Definitely worth checking out if you spend any amount of time in the iOS Provisioning Portal. Thanks Mattt!


BubbleWrap - Cocoa wrappers and helpers for RubyMotion (Ruby for iOS) - Making Cocoa APIs more Ruby like, one API at a time.

BubbleWrap is “a collection of (tested) helpers and wrappers used to wrap CocoaTouch code and provide more Ruby like APIs” for RubyMotion. There is a ton of great stuff in BubbleWrap.

One of the most interesting things I’ve seen in awhile is EventMachine implemented using GCD.

If you’re doing any RubyMotion work, I think you should definitely checkout BubbleWrap!


JASidePanels - Reveal side ViewControllers similar to Facebook/Path's menu

JASidePanels is a UIViewController container designed for presenting a center panel with revealable side panels - one to the left and one to the right. The main inspiration for this project is the menuing system in Path 2.0 and Facebook’s iOS apps.

Recently, I was looking for a library for the Path and Facebook style menu. After trying several, JASidePanels was the clear winner. It’s highly customizable, supports orientation changes, and works on iPad too! Configuring is dead simple:

JASidePanelController *viewController = [[JASidePanelController alloc] init];
viewController.leftPanel = [[JALeftViewController alloc] init];
viewController.centerPanel = [[UINavigationController alloc] initWithRootViewController:[[JACenterViewController alloc] init]];
viewController.rightPanel = [[JARightViewController alloc] init];
self.window.rootViewController = viewController;

The source and a demo project is on GitHub.

JASidePanels in Float


MPFoldTransition - Easily add custom folding and page-flipping transitions to UIViews and UIViewControllers

MPFoldTransition is a set of classes to add folding-style transitions to iOS 5 projects.

This is a really amazing project. Making these fold and flip transitions is a ton of work and Mark Pospesel has made it dead simple.

You can easily transition views using different styles with one method call:

+ (void)transitionFromView:(UIView *)fromView toView:(UIView *)toView duration:(NSTimeInterval)duration style:(MPFoldStyle)style transitionAction:(MPTransitionAction)action completion:(void (^)(BOOL finished))completion;

There are versions for UIViewControllers as well.

Fold vs Unfold

Check out the source on GitHub, blog post and demo app.


SSPullToRefresh - Simple pull to refresh view for iPhone

As I continue to dive into iOS development, I’m on the lookout for time saving Cocoa projects. Sam’s SSPullToRefresh is an easy, customizable way to add pull-to-refresh views like those made popular in Loren Brichter’s original Tweetie for iPhone app. SSPullToRefresh hides all the pulling and animating logic away, leaving you to implement what you care about - fetching and refreshing your view.

- (void)viewDidLoad {
   [super viewDidLoad];
   self.pullToRefreshView = [[SSPullToRefreshView alloc] initWithScrollView:self.tableView delegate:self];

- (void)refresh {
   [self.pullToRefreshView startLoading];
   // Load data...
   [self.pullToRefreshView finishLoading];

- (void)pullToRefreshViewDidStartLoading:(SSPullToRefreshView *)view {
   [self refresh];

You can use a couple of provided content views or you can subclass and implement your own. Check out the source on GitHub or see it in action in Cheddar.


MGTileMenu - pop-up tile-based contextual menu for iOS5

MGTileMenu is an innovative context menu for iOS from Matt Gemmell. Resembling Path’s oft imitated corner menu in some respects, it appears to be more contextual than navigational, as the screencast demonstrates:

Matt’s introductory blog post provides a deep introduction on the design or you can grab the source on GitHub. The license requires attribution, or you can purchase a non-attribution license online.


Ruby Motion Samples - Write iPhone Apps In Ruby

RubyMotion was just released by Laurent Sansonetti, the creator of MacRuby. RubyMotion lets you write iOS apps in Ruby!

RubyMotion is a revolutionary toolchain for iOS. It lets you quickly develop and test native iOS applications for iPhone or iPad, all using the awesome Ruby language you know and love.

RubyMotion is a commercial product with introductory pricing of $149. We wanted to cover it on The Changelog anyway since it’s such an exciting new tool with an open source heritage.

Writing Objective-C in Ruby is really fantastic, especially for Ruby engineers new to iOS. You can use all of the Ruby features like mixins, monkey patching, etc but on Objective-C objects. So when you make a string, it’s really an NSMutableString which is a Ruby String in MacRuby.

Probably the coolest thing about RubyMotion is that it statically compiles your Ruby code so it doesn’t have to include the entire Ruby source and an interpreter. In theory, it should be just as fast as Objective-C code.

RubyMotion even has an interactive REPL. See it in action in their demo. Skip to 3:58 in if you just want to see the REPL.

There’s a ton of stuff in RubyMotion that is just fantastic like the build system, REPL, testing, etc. Read my full review on my blog. Also, there are several sample applications on GitHub.


Bwoken - iOS UIAutomation testing in CoffeeScript

Testing iOS apps is hard. Apple’s UI Automation lets you write test scripts in JavaScript and simulate user interaction, but who wants to hang out in the Instruments GUI app? Bendyworks has improved on the process, however, bringing the simplicity of Rake and the elegance of CoffeeScript to your UI Automation tests:

#import "../../../../Pods/tuneup_js/tuneup.js"

#import "helpers/TravisCI.js"

test 'Favoriting a repository', (target, app) ->
  RepositoriesScreen.tapRepositoryNamed 'CITravis by Travis-ci'
  FavoritesScreen.assertFavoriteNamed 'CITravis by Travis-ci'

test 'Unfavoriting a repository', (target, app) ->
  FavoritesScreen.assertFavoriteNamed 'CITravis by Travis-ci'
  FavoritesScreen.tapFavoriteNamed 'CITravis by Travis-ci'
  FavoritesScreen.assertNoFavoriteNamed 'CITravis by Travis-ci'

This single test can be run from the command line with:

$ RUN=iphone/favorites rake

Check out the project website, source on GitHub, or introductory video for more. Also be sure to check out their, a mobile client for Travis CI, for a real-world example.


DCIntrospect - Inspect Element for iOS views

Web developers have long enjoyed the “Inspect Element” features of Firebug and WebKit developer tools to poke around inside their pages at runtime. Patrick Richards, a mobile developer from down under, has created DCIntrospect, a library of visual debugging tools for iOS.

DCI screenshot

Once added to your project, DCIntrospect listens for shortcut keys to toggle view outlines, nudge views on screen, toggle view visibility, print view properties to the console, and more.

To use, be sure you’ve set the DEBUG environment variable. It’s also a good idea to target the simulator explicitly, even though DCIntrospect will work on the device as well.

[window makeKeyAndDisplay]

// always call after makeKeyAndDisplay.
    [[DCIntrospect sharedIntrospector] start];

Check out the source on GitHub for a full list of keybindings and instructions on how to customize.


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]

0:00 / 0:00