New “When In Use” Location Tracking in iOS 8

Posted by on Sep 12, 2014 in code, iOS | No Comments

If your app tracks the user’s location, you may notice when you run it in iOS8, the location tracking alert asks for permission to “access your location even when you are not using the app“. If your app only accesses the user’s location when the app is running, you can present a less scary message […]

Improving Push Notification Opt-in Rates

Posted by on Aug 22, 2014 in Design | No Comments

Shannon Levis and Alli Brian, Why People Are Turning Off Push: If you are in an industry that suffers from low push opt-in rates, can you overcome this inherent user bias? There is a preconceived notion that these kinds of apps only send self-promotional push notifications, and users have a hard time seeing their value […]

Story-Centered Design

Posted by on May 14, 2013 in Design | No Comments

We like to get functional prototypes to stakeholders as early as possible in the development process. Prototypes help frame the discussion by putting features in context, helping teams make better design decisions and uncovering edge cases. In this excellent piece on story-centered design, Braden Kowitz describes an approach that moves that kind of discussion back […]

Frame geometry macros to improve your UIKit code

I find myself doing more and more dynamic UI layout in iOS apps these days. When elements of a UI need to resize to fit their contents, or move to accommodate other elements, the layout code can get complex and verbose. We’ve developed a set of Objective-C UIKit macros that help make this code more […]

Objective-C Blocks Cheat Sheet

Posted by on Dec 6, 2012 in iOS, iPad, iPhone, Mac OS X | 6 Comments

Blocks are an incredibly powerful addition to Objective-C, introduced in iOS 4. However, their syntax can be maddeningly difficult to remember. Matt Gallagher has an excellent post that breaks down the syntax to help you understand it. If you haven’t read this article, go do it now. Even after working with blocks for a while, […]

Block initialization for testability and reuse

Block initialization for testability and reuse

Since Apple introduced block support in iOS 4, more and more APIs are moving from delegation to block callbacks. While block callbacks can be declared inline, in most cases you should initialize your block callback in a method that returns the block. This keeps the code that calls an external API succinct, allows you to […]

Toward a better “Rate this app”

Toward a better “Rate this app”

If you’ve had an iPhone for any length of time, you’ve certainly had the experience of opening an app and facing a desperate plea for app store ratings. “Your reviews help other people find this app”, we’re told. And it’s true–app reviews and ratings are an important part of the app store ranking algorithm. Unfortunately, […]

Initializing UIViewControllers

Initializing UIViewControllers

Most code samples that Apple provides for initializing a view controller look something like this: ‚Ä®MyController *myController = [[MyController alloc] initWithNibName:@"MyView" bundle:nil]; This always felt like a strange pattern to me. And as Ole Begemann recently pointed out, it’s poor encapsulation. Why does the caller specify which .xib file some other controller should use? Isn’t […]

Announcing Team Stream HD

Announcing Team Stream HD

We’re excited to announce Team Stream HD, the latest product of our collaboration with Bleacher Report. Redesigned from the ground up for the iPad, Team Stream HD is a great way to follow your favorite sports teams and immerse yourself in the content.