Spaceman Labs Archive
26 Jun 2014
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
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
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
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
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
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
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
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
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.