I was talking to @apontious recently about an episode of his podcast, EdgeCases and his thoughts on trying out AppCode aka @jetcidr. He didn’t really like AppCode very much but it provoked me to consider trying it for 30 days to see how I feel about it vs Xcode.
Since the dawn of my Xcode time, which started about 3 years ago, I thought that it was a suitable IDE for development. Suitable - yes; Great - absolutely not. Like many things in life, one learns to live with Xcode’s many quirks such as its inability to easily refactor code or find usages of properties and methods, the far too periodic, lengthy appearance of the beach ball while attempting a trivial task, and best of all, crashes at inopportune times. You learn to say to yourself over and over that as a developer, this is the pain you must endure to build neat things.
When Jetbrains announced their preview version of AppCode, I tried out a 0.x version briefly. At the time, I didn’t feel like it was ready for primetime for me to use as my primary dev tool but I kept an eye on it being familiar with their track record.
The last IDE that I used just prior to Xcode was IntelliJ IDEA made by JetBrains. I had used IntelliJ on a PC & Mac for about 5 years for both Java and Groovy/Grails development. I forgave it not being a native app on the Mac in exchange for how much easier it made my dev life. Want to find usages of a method named ‘foo’ in my project? It’s a snap with the ‘Find Usages’ option, providing me with accurate results. How about if I wanted to override a method from base class? Just use the ‘Code -> Override Methods’ option. What if I wanted the Project Navigator to be in sync and show me where a file I’m modifying is within project folder hierarchy? Not a problem - choose ‘AutoScroll From Source’.
Most the features I mentioned are not arcane tasks for most developers and by no means are they revolutionary by today’s standards. But I chose to give them up and work with Xcode because that was my only option to do iOS development. I recognize many people are very productive using Vi, Emacs, Textmate, or insert a favorite text editor but I am not one of them.
The other factor that led to reconsider AppCode is that during my working hours, I periodically use with the other flavors of IDEs made by JetBrains. My mobile teammates who have to work with Java are split between Eclipse and IntelliJ IDEA, while many of my Ruby/Rails teammates rely on RubyMine. I’ve never found Eclipse to be my cup of tea so when I need to peruse through the other codebases, I stick to IntelliJ and RubyMine. While using them, I often miss some of their nifty features that Xcode lacks.
Hour 1 of using AppCode in earnest was jarring and involved a lot of customizing. First thing I did was to change the keymap style to Xcode (Preferences->Keymap). Next thing on the list was to customize the color scheme to my liking. Then over time, I’d tweak one little thing here and there. By the end of the day, things felt smoother.
After only having tried Appcode for 5 days, I’m going to say that the remaining 25 days will probably be similar and hope that my employer will buy me a license for it.
Here are my not-so comprehensive list of pros & cons so far.
- Open up a class, file or symbol in the project by specifying regex patterns such as “Abs*Detail*Co”. I found Xcode to be terrible at this and have needed it countless times when working in a large codebase.
- Incredibly easy to find usages of specific methods/properties vs Find by Text, the only way to search for anything in a project Xcode
- True “smart completion in code” - AppCode will find images and other assets in your project and offer up suggestions for things like [UIImage imageNamed:]”
- Lots and lots of options to customize code appearance to your heart’s content. I missed the ability to apply a specific code style for the entire project that was available to me in IntelliJ.
- Debug console is much nicer to view variables and watch specific ones
- Code folding, especially for useful things like @synthesize blocks (although Xcode 4+ with iOS6 no longer requires this, I have old code that still use it).
- Being able to say ‘Override Method’ and be given a pop-up with a list of all methods of your super class to choose from. I love this instead of having to open up the super classes .h file.
- In-place renaming of variables renaming actually works instead of getting a modal-style dialog.
- Highlights unused methods/ivars/properties (although AppCode can report false positives for methods that dynamically invoked at runtime). Nonetheless, I still find it helpful to quickly see these so I can check to DRY out the codebase)
- The ability to float some windows e.g. the debug console, variables and expresssion windows to wherever you want on your screen instead of just to the bottom of your main IDE app window is nice.
- AppCode always tells you the current line & column number while Xcode never had a ‘current column’ display of any kind. However, Xcode does have the visual end of line vertical guide line to help.
- Actual git integration especially given that Xcode’s git support is laughable.
- Hasn’t crashed yet
- CocoaLumberjack logging won’t work because of a bug in AppCode so I feel like I’m debugging blind. Our project has lots of levels of logging and I take advantage of that. Sadly most of these statements do not get printed out to the console while using AppCode. I don’t want to switch out to another logging tool right now nor do I want to litter the code base with NSLog. I’m hoping they address this sooner than later.
- Can’t find the “Page Guide at Column” equivalent offered in Xcode. This feature is very helpful to me and I can’t find it anywhere in the settings so far.
- Still have to go to Xcode to alter build settings, change xib files or anything project related. So that means running AppCode and Xcode side by side most of the time.
- Unused methods/properties/ivar highlight gives you false positives if there’s run-time use of said elements (as mentioned in the Pro side)
- Still have to switch over to Xcode to view full documentation - I’m not sure if there’s an AppCode shortcut to launch this.
- Weird to have a separate windows for Console and LLDB - I kind of like having the two together and being able to ‘po variable’ right into the console window.
- I haven’t tried using Instruments or sign the app to take to the App Store but I am certain that you cannot do the latter with AppCode. I’m willing to be okay with this because of the infrequency of the task.
- AppCode has some of the terrible interface affordances borrowed from Windows and Eclipse (or it the other way?). This takes getting used to but in a sense, much of the pros make this aspect tolerable. That said, if Xcode ever improved to be on par, I would switch back over.
All in all, I find that it’s much easier to navigate through a large or unfamiliar codebase with AppCode as is the case with all of the IDEs made by JetBrains.