On AppCode

For the past few months I’ve been trying out AppCode as an alternative to Xcode for iOS development. It’s, of course, not a perfect alternative but to give a hint of how it went I did end up purchasing a license and continue to use it daily.

First some history: I had been using Sublime Text 2 exclusively for web development and really preferred separate, specialized tools working together to perform a task. JavaScript has a lot of these tools (for better or for worse, especially for those trying to learn and confused by choice) that lend themselves to using a text editor instead of an IDE. I usually used ST2 full screen with Solarized Dark on my MacBook Air or Solarized Light on an external display (to help combat the glare).

Once I began using Xcode I changed the colour scheme and spent some time watching WWDC videos and reading on how to make the most of its different shortcuts and commands. Xcode has a very polished UI and can be really welcoming to new users. I found that didn’t last long however, as I quickly felt limited by the help it was providing. I can’t claim to have exhausted my energy learning the ins and outs of Xcode, but I didn’t give up right away either. Doing some searching for alternatives didn’t surface much (there are no worthwhile ways to use ST2 for Obj-C development) with the exception of AppCode.

My first reaction was one of horror. Here I am installing a Java-based IDE with a polluted UI to try to develop for a very polished platform and I wasn’t sure how far I would get. Thankfully I gave it a chance, and here’s some notes I took along the way:

Why I’m sticking with AppCode

  • The refactoring is incredible. Every time I change a method signature I save at least five minutes of tedious work pretending to be a human find-replace machine. And it provides smart defaults (NULL, nil, NO, etc.) for arguments passed to that new signature. This is the kind of thing that a big, heavy IDE should provide.

  • It’s possible to write an entire method with new properties and then iterate through all the errors (“these are missing!”) and with one shortcut (option + return) create those new properties in the interface, privately if you’d like, and declare the method in the public interface as well. It’s a relief to be able to focus on the functional parts of code instead of the formalities. AppCode can also generate all of an enumerable’s cases in a switch statement.

  • It will autosuggest image filenames when needed. Even if they aren’t added to the project yet!

  • It has better tabs. (This shouldn’t have to be a benefit to one IDE over another, but here we are.)

  • The UI is customizable enough to hide most of the ugly Java IDE-ness. AppCode 2.0 EAP (Early Access Program) has a Darcula theme that looks great, although I still use Solarized Light in the editor on a big screen.

  • Integration with Dash. Install this plugin and documentation is a quick command + shift + d away, or if you’re running AppCode EAP you can enable Dash support with the built-in external documentation shortcut shift + F1.

  • AppCode will highlight and list any TODO comments for you.

Some changes I made

These are mostly to bring it closer to ST2:

  • Map command + t to navigate > file structure. I use this all of the time, and control + up arrow or down arrow also navigates the structure one element at a time.

  • Disable “allow placement of caret after end of line”. This is the strangest preference I’ve come across.

  • “Ensure blank line after EOF on save”

  • “Surround selection on typing quote or brace”

  • Map command + shift + \ and command + shift + - to create vertical and horizontal splits

  • Shorten the autocomplete delay to 100ms

  • Map command + shift + p to “Find action” (like ST2’s anything menu)

What it could do better

After trying out AppCode for a bit I was invited to provide some feedback to JetBrains, and they were very receptive. There were already some open issues for some of my suggestions: customize property attribute order for code generation, drag and drop reordering of code in the structure panel and smarter code organization with pragma marks. These are some other preferences I’d like:

  • I miss ST2’s centred columns, especially on a big screen. I feel like I’m always looking left.

  • I also prefer ST2’s ability to have empty tab splits, instead of closing it with the last tab.

So after a few months of using AppCode, Xcode is really only Interface Builder to me now (and I wish it was better at that, too). I still need to use it for managing project settings and adding resources as well, but using both apps hasn’t confused my workflow at all.

I don’t think everyone will want to use AppCode, especially given the typically high design standards of the target audience, but I’d really encourage anyone who strains with Xcode to try it out for the full 30-day trial. It’s saved me countless hours and lets me focus on higher-level decisions while developing. I’d also really love to see Apple bring some of these features across to Xcode. There’s no reason that this functionality couldn’t be implemented, and after Xcode 4 brought such a change in its interface it would be an appropriate tick-tock cycle to add back some features.