Spaceman Labs Archive

26 Jun 2014

Repartee

Introducing the party-planning app we built Spaceman Labs to make. A tour of the cool tech under the hood — from Foursquare venue lookup to time zone awareness to a photo stream that sizes shots by interestingness.

20 Nov 2013

Blocks: A Retain Ménage à Trois

NSNotificationCenter’s block API isn’t harmful — you just need to understand how self gets captured. A response to the ‘considered harmful’ crowd, with practical advice on block retain cycles and memory management.

15 Nov 2013

UICollectionView’s backgroundView property is horribly broken

Setting backgroundView more than once? It just stacks them. Forever. A Reveal-assisted deep dive into why the old view never gets removed, plus the simple workaround to fix it.

11 Nov 2013

Custom View Controller Transitions in Landscape

iOS 7’s custom transitions are great — until you rotate the device. A breakdown of the landscape bugs, the hacky workarounds that don’t quite hold up, and why we went back to view controller containment.

8 Oct 2013

Bookshelf View Controller Transition For iOS 7

An open-source iBooks-style 3D bookshelf transition, built on iOS 7’s new VC transition API. Includes easy setup, customizable options for depth and perspective, and a link to the GitHub repo.

13 Sep 2013

Compares

Announcing Compares, our side-by-side photo sharing app. Built from scratch with a custom backend, onion-skinning camera, and a social layer for sharing before-and-after shots.

12 Sep 2013

How To Support Old iOS SDK’s in Xcode 5

Xcode 5 dropped the iOS 6 SDK, but you can just copy it back in. Here’s where the SDKs live and how to grab them if you already nuked your old Xcode.

2 Jul 2013

SMSquashView

Bringing cartoon-style squash and stretch to iOS views, automatically. The layer tracks its own velocity and distorts along the direction of travel — no configuration needed, volume stays constant.

22 Mar 2013

WWDC Blast

We built a free SMS alert for WWDC ticket sales in four days flat. Powered by Heroku, Twilio, and sheer urgency — from concept on Monday to launch on Friday.

4 Mar 2013

Spatter and Spark

Shipping a kids’ storybook app with rich animation and a custom framework under the hood. Built on top of our Goodnight Safari codebase, with artist-driven XML animation specs and a parent-facing progress dashboard.

30 Jan 2013

SMPageControl, Meet UIAccessibility

Adding VoiceOver support to our UIPageControl replacement — and naming pages too. With per-page names and full accessibility parity, SMPageControl finally earns its 1.0 and lands on CocoaPods.

5 Nov 2012

Mistakes Were Made: Audio and ARC

ARC silently kills your AVAudioPlayer mid-playback. Here’s why and how to fix it. Spoiler: make it an ivar, and maybe file a radar while you’re at it.

15 Oct 2012

SMPageControl: UIPageControl’s Fancy One-Upping Cousin

A drop-in UIPageControl replacement with custom dots, images, and per-page indicators. Swap class names, tweak diameters and margins, or go full Dribbble with per-page custom indicator images.

27 Aug 2012

Premature Completion: An Embarrassing Problem

Core Animation runs your completion block early if it doesn’t find any animations. Rude. Includes a sample project to poke at the behavior yourself and avoid hours of confused debugging.

16 Mar 2012

SMShadowedLayer

A CALayer subclass that fakes realistic lighting and shadows during Core Animation. Uses Lambert illumination math and a custom animatable property to keep shading correct mid-transform, specular highlights included.

11 Jan 2012

Goodnight Safari

We shipped a kids’ interactive storybook and learned a ton doing it. Custom animation frameworks, texture atlases, audio — the whole nine yards of getting out of our comfort zone.

9 Jan 2012

Sim Deploy

A drag-and-drop tool for getting simulator builds to non-developers. It even supports a custom URL scheme so distributing a new build is as simple as sending someone a link.

12 Dec 2011

Cancel dispatch_after

A simple wrapper to cancel delayed blocks, because GCD won’t let you. Includes the open-source code on GitHub and a look under the hood at the block-juggling trick that makes it work.

18 Oct 2011

Xcode Archives – What a Buncha Jerks

Why your Xcode archive won’t validate and the one build setting that fixes it. If your static libraries are sneaking into the archive, ‘Skip Install = YES’ is the magic toggle you need.

5 Oct 2011

Mistakes Were Made: Integral Bounds

Non-integral CALayer bounds don’t just look blurry — they actually chop off pixels. A forensic look at CATextLayer backing stores, with screenshots and sample code to prove it.