Firefox is coming to iOS #

Mozilla recently announced that they’re finally bringing Firefox to iOS. They’ll have to use iOS’s built-in rendering engine like everybody else, which begs the question: What makes this Firefox?

Time will tell whether they’re too late to the game or not. In the meantime, the source code is freely available (and under heavy development). From the README:

This is a work in progress on some early ideas. Don’t get too attached to this code. Tomorrow everything will be different.

Could be a fun project to track, especially if you’re interested in Swift.

Meet Overshare: A soup-to-nuts sharing library for iOS #

Overshare looks like a great solution to the common need of iOS apps to share their content with 3rd parties. It boasts:

  • Beautiful share sheets with pixel-perfect, full-color icons in a simple layout.
  • Built-in integration with iOS Twitter and Facebook accounts.
  • Built-in integration with popular third-party services like App.net, Instapaper, and more.

And much more.

#98: AFNetworking, Helios, and mobile & iOS development with Mattt Thompson

Adam Stacoviak, Andrew Thorp and Kenneth Reitz talk with Mattt Thompson, Mobile Lead at Heroku, about his many contributions to open source. You can tune-in LIVE on Tuesday’s at 5pm CST. AFNetworking/AFNetworking AFNetworking – a delightful networking framework for iOS and OSX mattt (Mattt Thompson) Mattt Thompson (mattt) on Twitter Helios helios-framework/helios Postgres.app, an easier […]

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.

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!

Episode 0.8.2 – Ruby Motion, MacRuby and more with Laurent Sansonetti

Wynn and Sam caught up with Laurent Sansonetti to talk about MacRuby, RubyMotion, and more. Items mentioned in the show: Bully is Sam’s Pusher client for Objective-C. Get some Cheddar, Sam’s TODO app (soon in the App Store). Laurent Sansonetti, creator of RubyMotion (and MacRuby) MacRuby is an implementation of Ruby 1.9 on top of […]

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.

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'
  BuildsScreen.addToFavorites(app)
  BuildsScreen.back()
  RepositoriesScreen.tapFavorites()
  FavoritesScreen.assertFavoriteNamed 'CITravis by Travis-ci'
  FavoritesScreen.tapAll()

test 'Unfavoriting a repository', (target, app) ->
  RepositoriesScreen.tapFavorites()
  FavoritesScreen.assertFavoriteNamed 'CITravis by Travis-ci'
  FavoritesScreen.tapFavoriteNamed 'CITravis by Travis-ci'
  BuildsScreen.removeFromFavorites(app)
  BuildsScreen.back()
  FavoritesScreen.assertNoFavoriteNamed 'CITravis by Travis-ci'
  FavoritesScreen.tapAll()

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 TravisCI.app, 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.
#if TARGET_IPHONE_SIMULATOR
    [[DCIntrospect sharedIntrospector] start];
#endif

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:@"https://gdata.youtube.com/feeds/api/standardfeeds/top_rated?alt=json?time=this_week"];
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);
    }
    else
    {
        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.