Introduction
Xcode, the de facto integrated development environment (IDE) for iOS and OS X development, is a fantastic piece of software. It offers everything a Cocoa developer needs to go from a fragile idea to a successful application in Apple's App Store.
However, there are numerous tools and services that have become indispensable in the workflow of many Cocoa developers. In this article, I will highlight some of the tools that I use as well as some alternatives.
Source Control
In the Cocoa community, Git is arguably the most popular source code management (SCM) system. Even though Xcode's support for Git improves with every release, many Cocoa developers prefer a dedicated tool over Xcode's built-in support.
SourceTree
SourceTree is Atlassian's free Git client, available for OS X and Windows. It also supports Mercurial, but the majority of Cocoa developers choose for Git nowadays. Not only is SourceTree free, it is incredibly powerful and easy to use—even for people unfamiliar with Git.
Atlassian's Git client integrates nicely with Bitbucket as well as GitHub and FogCreek's Kiln. SourceTree even helps you with common workflows, such as Git-flow and Hg-flow. Even if you swear by the command line, SourceTree will make complex operations that much easier.
Tower
For years, Tower has been my Git client of choice. It is beautifully designed, powerful, and robust. It offer most of the features that you need on a daily basis and integrates seamlessly with Beanstalk, GitHub as well as some of your favorite editors, such as BBEdit and Coda.
The people at Fournova, the creators of Tower, have done an amazing job with Tower and they continue to amaze me with every release. Tower isn't free, but that shouldn't stop you from downloading the trial and taking it for a spin.
Kaleidoscope
Black Pixel's Kaleidoscope is your best friend when it comes to finding differences between files and folders. The concept may seem simple, but it actually isn't.
You may think that a file comparison application like Kaleidoscope isn't worth paying for, but I challenge you to give it a try and you'll be amazed. It works very, very well and I have come to rely on its intuitive user interface and powerful merging functionality.
GitHub
There are a number of platforms for hosting Git repositories, but GitHub is one of the most popular choices. It's the home of numerous open source projects, such as AFNetworking and CocoaPods.
Public repositories are free and paid plans are fairly inexpensive. With more than 5 million users and over 11 million repositories, GitHub has become a major player that many developers rely upon.
Coding
AppCode
Xcode is the de facto IDE if you're serious about Cocoa development. However, JetBrains doesn't degree with this statement and they've put their money where their mouth is by creating AppCode.
AppCode is JetBrains's answer to the complaints of many developers who've become frustrated with Xcode. It is an impressive tool to say the least and it can be used alongside Xcode. Even though it hasn't come feature par with Xcode yet, it does a better job at some of Xcode's key features, such as refactoring and code completion.
PaintCode
I know few people who enjoy writing drawing code and I'm sure the creator of PaintCode isn't fond of it either. PaintCode is a vector drawing application that generates Objective-C code on the fly.
Not only will PaintCode save you time, it will help you rely less on images to create your application's user interface. This makes it much easier to keep your application't user interface flexible, dynamic, and lightweight.
Dependency Management
CocoaPods
If you're an iOS or OS X developer and you're not using CocoaPods, then you're doing it wrong. CocoaPods started out as a small project with an ambitious goal. It has grown into the de facto dependency management solution for Cocoa development. Most popular libraries provide support for CocoaPods and even major companies, such as Facebook and Square, support CocoaPods.
CocoaPods works incredibly well, is surprisingly robust, and is integrated into JetBrains's AppCode, which I discussed earlier. CocoaPods will make your life as a Cocoa developer that much easier. Seriously, give it a try. You can thank me later.
Distribution
TestFlight
Not too long ago, distributing builds to testers was a pain in the neck—especially if those testers weren't very technical. TestFlight tackled this problem by creating a platform for over the air distribution of test builds. Distributing builds to testers has never been easier.
Although application provisioning continues to be a major hurdle for new Cocoa developers, ad hoc distribution has become a lot easier.
TestFlight also has a desktop application for OS X to make uploading a fresh build to their servers even easier. It automatically detects when you create a new archive and prompts you to upload the build to TestFlight's servers. That's what I call painless ad hoc distribution.
HockeyApp
HockeyApp is very similar to TestFlight, it helps developers distribute builds to testers. Like TestFlight, it has the ability to collect crash reports with server-side symbolication and it includes analytics to get an accurate idea of what devices and configurations your applications are tested on.
Like TestFlight, HockeyApp has a wonderful API. With the HockeyApp API, you can even fetch crash reports and update provisioning profiles.
Xcode Plugins
Alcatraz
Alcatraz is a package manager for Xcode. Say goodbye to manually copying files to some obscure directory. Installing plugins or color schemes with Alcatraz is a matter of clicking a button.
Alcatraz maintains a list of plugins, templates, and color schemes, which you can search and install with a click of a button. At the time of writing, Alcatraz isn't fully compatible with Xcode 5, but don't let that prevent you from giving it a try.
Debugging
Reveal
The goal of Reveal is simple yet impressive, it let's you inspect and manipulate your application's view hierarchy at runtime. The more I use Reveal, the more I appreciate and discover its power and capabilities.
It lets inspect your application's view hierarchy in two and three dimensions, modify the properties of individual views, and even zoom in on a subset of views to make debugging easier. Reveal isn't free, but it's worth every penny.
Charles
Charles is one of those tools that many people love once they start using it. It's a cross platform tool for monitoring network traffic. Why would this be useful for an Cocoa developer? From the moment your application needs to talk to a web service, you'll immediately see the benefit of a tool like Charles.
Instead of wondering why a request is returning a 404
, you simply inspect the request in Charles to see if you're sending the correct headers with the request. Charles supports SSL, let's you filter traffic, and can even simulate a slow network connection.
SimPholders
Most iOS developers test their applications in the iOS Simulator—especially in the early stages of development. This means that you sometimes need to browse an application's sandbox. Sure, you can open the Finder and navigate to ~/Library/Application Support/iPhone Simulator/7.0.3/Applications/56A57F3E-CF48-47F6-BAE8-B8541BCEC13B/
. Really?
SimPholders is a tiny application that lives in your menu bar. It gives you quick access to the sandboxes of the applications you've installed in the iOS Simulator. Do yourself a favor and grab a copy SimPholders. It's free.
Performance Monitoring
Crashlytics
TestFlight and HockeyApp have the ability to collect crash reports for you, but Crashlytics's sole focus is collecting and analyzing crashes—and it shows. Crashlytics is a free service and supports iOS and Android.
It not only collects and symbolicates crash reports, it inspects and analyzes crashes. The result is that it and shows you the severity of an issue, which helps you prioritize bug fixes. The Crashlytics desktop application automatically detects when a new archive is created and it automatically uploads the archive's dSYM file so it can symbolicate any incoming crash reports.
Crittercism
Crittercism goes one step further than Crashylitics by combining analytics, crash reporting, and application performance. The result is a service that allows developers to fine-tune their applications, spot critical bottlenecks, and prioritize bug fixes. It supports iOS, Android, Windows Phone, and web applications.
Conclusion
This list is by no means definitive. There are many more tools and services that make the life of an iOS developer easier and more enjoyable—or less frustrating. What tools and services do you use for iOS development?