Evan Doll : iOS Tools at Flipboard

Evan Doll of Flipboard fame explained the tools they use in Flipboard development in a 2014 NSConference talk. What I like about Evan and his talk is his honesty and straight forward approach. There is no hipster framework name dropping, cat pictures, or other side shows – just an honest look into the tools and techniques they’ve used to build a very successful iOS product.

Here are my notes from the talk – which you can find here – iOS Tools at Flipboard


Evan Doll – Prior to Flipboard worked for Apple doing video / photo software. Also iOS system apps / UIKit. Stanford course instructor generic for benicar.


  • Automation – avoid crap work.
  • Squash bugs – add hooks to improve debugging.
  • Tools – Give yourself superpowers

Automation – avoid crap work

  • Jenkins for automation.
  • Pretty generic discussion of build automation (build / tag / upload to HockeyApp).
  • Run clang static analyzer.
  • Automatic beta distribution.
  • Provisioning : black magic and swearing involved.
  • Spolsky : can you make a build for testing purposes in 1 step?
  • Stamp app icon with version – easy to identify.
  • Multiple bundle IDs for different versions of apps. Allows multiple installed builds per device.
  • App Code – unused code detection, additional warnings that clang will not catch.
  • Hockeyapp
  • In-app debugging – tools to expose app internals for debugging – turned on in debug builds via flags.
  • Cocoa Lumberjack

Squash bugs – add hooks to improve debugging

  • View hierarchy debugging.
  • Gesture based tools / issue reporting. Double pressing the up/down volume button press to trigger the debug UI. Similar to Google’s “shake to report bug”.
  • JIRA – “the least bad of the bug trackers out there”.
  • Global keyboard shortcut handler. Flipboard hooked up a global event listener to globally listen for keyboard events to trigger actions. They use this for debugging in the simulator. Subclass UIApplication, override sendEvent to extract GSEventRef, posts NSNotification. Example : Cmd-L to send logs, etc.

Internal feature switches

  • Feature switches (debug only) to customize / streamline the debug experience. i.e., skip the login screen.
  • Feature switches for UI – toggle between UI modes to determine which UI is better.
  • International testing – override the default language via a defaults config value.
  • Pseudo-localization – writing your own “language” to verify your views are handing variable string lengths and strings you’ve forgot to localize.
  • WebTranslateIt – shared localized strings between iOS / Android.

Tools – Give yourself superpowers

  • Push as much app logic can server side to workaround bugs. For example, a JSON dictionary to configure the device at runtime.
  • Changing help files / strings / etc.
  • Add generic hooks into the app to allow you to update the app w/o deploying an app store update.

Communication tools

  • Pivotal tracker
  • Github pull requests (in-progress code)
  • HipChat
  • Dropbox
  • Google Hangouts
  • GitX + email

Comments are closed, but trackbacks and pingbacks are open.