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.
- Automation – avoid crap work.
- Squash bugs – add hooks to improve debugging.
- Tools – Give yourself superpowers
- 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.
- In-app debugging – tools to expose app internals for debugging – turned on in debug builds via flags.
- Cocoa Lumberjack
- 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.
- 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.
- 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.
- Pivotal tracker
- Github pull requests (in-progress code)
- Google Hangouts
- GitX + email