Tools of the Trade: iOS Development

Tools amplify your talent. The better your tools, and the better you know how to use them, the more productive you can be.

— The Pragmatic Programmer (Paperback, Kindle)


Introduction

I use a lot of tools for iOS development. Whenever I spend too much time performing a task, I look for a tool to improve my workflow.

Over the past few years, I’ve gone through a bunch of great (and some not-so-great!) tools. This list is comprised of the ones I would highly recommend.


General Tools

  • HomeBrew - A fantastic package manager for OS X. Several of the tools found below (including git and xctool) can be installed with a single command using HomeBrew, along with a ton of others.

Source Control

  • Git - A distributed revision control and source code management system. Git is fast, easy to use, and there are plenty of great websites out there to host your projects. For those just getting started with git, check out the free book.

  • GitHub - The best website for sharing git repositories.

  • BitBucket - An alternative to GitHub with unlimited free private repositories.

  • GitHub for Mac - A beautifully designed git client. It can’t replace all of the functionality you get from the command line, but for doing simple things (like viewing diffs) it makes all the difference.

GitHub for Mac

  • SourceTree - A free git and Mercurial client. If you’re hosting your project using BitBucket (and don’t prefer using the command line), or just want a GUI that covers most of the features of git, this is your best bet!

Source Tree

  • Kaleidoscope ($) - A file comparison app that lets you quickly compare files, images, or folders in a beautiful user interface. It’s a bit expensive, so if you’re just looking to compare file diffs I would recommend one of the Github or SourceTree apps.

Kaleidoscope


Command Line Tools

  • CocoaPods - A dependency manager for Objective-C projects. CocoaPods lets you easily integrate third-party libraries into your app. Personally, I use CocoaPods for every project I work on.

  • Alcatraz - A package manager for Xcode that lets you install plugins, templates, and color schemes without the need to manually copy over files. Just updated for Xcode 5!

  • Git Flow Extensions - A collection of git extensions that help with the Git Flow branching model. Read more about Git Flow here!

  • Nomad - Great set of command-line tools that help iOS development. Here’s a rundown of the tools and their description from the official website:

    • Cupertino - Automate administrative tasks that you would normally have to do through the Apple Dev Center website. Life’s too short to manage device identifiers by hand!
    • Houston - Send push notifications from the command line. Simply provide your credentials, construct your message, and 3…2…1… blastoff.
    • Dubai - Generate Passbook .pkpass files with ease. Rapidly iterate on the design and content of your passes, or generate one-offs on the fly.
    • Venice - Secure your In-App-Purchases by verifying App Store purchase receipts, and retrieving the information associated with receipt data.
    • Shenzhen - Create development builds and then distribute their .ipa files over TestFlight, HockeyApp, Amazon S3, or FTP. Get new builds out to testers and enterprises in seconds.

Update 3/3/2014: Alcatraz was just updated to support Xcode 5!


An Improved Xcode

  • CocoaLumberjack - A powerful and flexible logging framework for Mac OS X and iOS. CocoaLumberjack lets you specify different log levels for Debug and Release builds so only the appropriate information is logged at runtime. It can be installed with CocoaPods.

  • Xcode Colors - An Xcode plugin that adds color-coding to your app’s debug output. Combined with CocoaLumberjack, Xcode Colors makes debugging a lot easier.

Xcode Without Colors Xcode With Colors

  • ColorSense - An Xcode plugin that makes working with UIColor and NSColor a lot easier. When the cursor is over an instance of UIColor, the color will appear on the screen. Tapping the color opens a color picker. Simple, clean, and extremely useful!

Xcode ColorSense Plugin

  • CocoaPods Xcode Plugin - An Xcode plugin that lets you manage your CocoaPod dependencies directly from Xcode.

Xcode ColorSense Plugin

  • Dash ($) - A tool for browsing API documentation. It’s blazing fast and integrates with a lot of different apps, including: Xcode, Alfred, Textmate, and Sublime text. Best of all, you can download docsets for offline viewing!

  • Dash Xcode plugin - An Xcode plugin that adds Dash support. With this installed, ⌥-clicking a symbol in Xcode opens the corresponding documentation in Dash.

  • Xcode Snippets - This seems like an obvious one, but a good set of Xcode snippets can cut down development time a lot. Creating them is as simple as drag-and-drop, and there are some great examples out there.


Lightweight Editors

  • Textmate - A highly customizable editor for Mac OS X that every developer I know uses on a daily basis. I use Textmate when I want to make a quick change and don’t want to wait for Xcode to load.

    Update: Textmate is now open source and available on GitHub! (Thanks for the tip, /r/ProgrammingThomas).

Textmate

  • Sublime Text ($) - Another lightweight, highly customizable editor for Mac OS X that’s extremely popular.

Sublime Text


Unit Testing

  • Kiwi - A TDD/BDD testing platform for iOS. Kiwi makes unit tests easier to read, similar to RSpec, a testing tool for Ruby.

  • Specta - A light-weight TDD/BDD framework for Objective-C and Cocoa that, like Kiwi, has RSpec-like syntax. Often times, Specta is combined with the matcher framework Expecta.

  • Cedar - The testing framework both Kiwi and Specta are based on. Also uses RSpec-style syntax.

Kiwi, Specta, Expecta, and Cedar can all be added to your project with CocoaPods.


Continuous Integration

  • xctool - A great tool developed by Facebook that lets you build and test your app through the command line. Not only is it easier to use than the Apple-provided xcodebuild tool, its output can be fed into CI software, making it extremely flexible.

  • Jenkins - An open-source continuous integration server that can easily be configured for iOS projects. With the Xcode plugin, you can use Jenkins to test, sign, build, and distribute your app. The human-friendly, ANSI-colored output is also a nice perk.

  • Xcode bots - Bots automate the process of building, analyzing, testing, and archiving your app. Using a copy of Mac OS X server and Apple’s instructions, it’s simple to configure a continuous integration server.

    To promote Bots, Apple gave a free copy of Mac OS X server to all iOS developers on October 24th, 2013.


Distribution

  • Nomad Shenzhen + FTP - A CLI tool that makes it incredibly simple to build and upload your app to a FTP server (as well as the two services below).

  • TestFlight - A service that provides painless ad hoc app distribution by taking many of the steps out of the distribution process. Create a team, upload a build, and invite testers!

  • HockeyApp ($) - A similar service to TestFlight but also incorporates crash reports and user feedback.


Crash Reports

  • Crashlytics - The 800 pound gorilla for crash reporting software. Huge companies like Walmart, Paypal, and Square use it.

    I use Crashlytics in all of my software, despite the fact that the desktop user interface is buggy and the website is hard to navigate. Please, please let me know if you have a better alternative!

Other Tools

  • Charles ($) - A tool for viewing all of the HTTP and SSL/HTTPS traffic between your machine and the Internet. This is extremely useful for testing apps that interact with a server backend.

  • Base ($) - A Mac OS X app for creating, designing, editing, and browsing SQLite 3 database files.

  • Transmit ($) - An FTP client for Mac OS X with a beautiful user interface and useful features.

  • Mou - A Markdown editor I find extremely useful for writing README, CHANGELOG, and other Markdown files normally included in a repository.


Conclusion

I have experience working with all of these tools and would highly recommend them to anyone!