Xcode is the standard IDE for iOS/OS X development and is free from Apple. But, even the newest Version have some serious bugs and missing features that makes your live a little bit harder that it could be. AppCode from Jetbrains fixes a lot of these things and give you a lot better development experience than Xcode alone.
AppCode is an IDE for Objective-C developers building native Cocoa apps for MacOS X or iOS who strive for higher coding productivity and better code quality.
AppCode do not replace Xcode in all areas. Storyboard Editing, Project Administration und Compiler Settings are still managed by Xcode. But Code Editing, Refactoring and Debugging can be replaced by AppCode. This makes your live a lot easier because the famous Jetbrains Code Navigation, Refactoring and Templating Support.
AppCode supports at the moment Objective-C, CSS, HTML, Javascript and XML. All Projecttypes from Xcode are supported and you have your own templates to create projects, classes, protocols and so on.
It fully supports running and debugging your iOS App in the simulator or on the device and starts the interface builder if you want to open a storyboard,xib file or Core Data Model.
Feature i really like in AppCode
Navigating through the code can be a pain with Xcode. With AppCode you can navigate easily from Interface to Implementation or just jump from the method implementation directly to the header. This works with Xcode too, but here it is just better integrated.
Working with Properties and Methods
I very often use the feature to create a Method or Properties from my Header Files in my Implementation. Bye, bye typing in every new Method from the Header and the need to remember which Methods i need to Implement. The same thing with my Properties. Just create the Property in the Header and press Alt-Enter to get a nice Popup that asks you @synthesize the property, with or without instance variables, create getters and setters or make it @dynamic. Simply nice and safe you a lot of keystrokes.
When you need to overwrite or synthesize a Property just hit Ctrl-Enter and select if you want to synthesize a Property, overwrite a local one from a parent class. It fills in everything you need in your Header and Implementation files.
Creating shared instance, overwriting Methods or implementing one works the same way and is a breeze.
LiveTemplates
Need to have some Code Templates directly in your IDE ? ApPCode make it easy to use and define Templates for every language and shows you only the Template that is defined for it.
When you select code you can only select a Template for Surround a code snippet. For example to insert a @try/@catch/@finally block, if you forgotten it.
Inspections
Code Inspections in AppCode analyses your code for known problems and reports this to you. This happens for classes, Data Flow analysis, Declaration order, General (including Key-Value-Coding), Methods,…
This helps you to find bugs before you compile or debug your code.
Intentions
AppCode, like all Jetbrains IDE’s tries to be a little smarter and have code intentions. It shows you code snippets and makes a advice how you can change/improve the code if you want. Sounds abstract, but it’s a nice advice for free. For example it detects multiple if and suggests you to merge them into one or if you write a String like @"The number is %d". AppCode now shows you a little light bulb and suggest to put it this way [[NSString alloc] initWithFormat: @"The number is %d"].
At the moment there are 25 of this intentions for Objective-C and many more for CSS, HTML, Javascript and XML. I hope the next version will come with a lot more of this intentions for Objective-C, because you cannot add new one for now.
Refactoring
To make it short: AppCode comes with a bunch of refactorings. Variables, Constant, Parameter, Property, Instance Variable, Define, Typedef and Methods. This should help you in the most situations.
AppCode integrates nicely with Git, Mercurial, CVS (if, you REALLY need it anymore), Subversion, Perforce and Team Foundation Server. I really like the Git and Mercurial Integration that’s the same in IntelliJ. You can create different Changesets directly in the IDE, Shelf your changes or analyse the commits that are made in the meantime. Feature like checks for Changed on server conflicts informs you about conflicting changes.
Additionally AppCode scans you commit messages for, predefined or custom, Issue Tracker Tags and links your comments automatically to the issue tracker installation.
Tasks Tracker Integration
AppCode integrate with Task Trackern to show you open tasks and defines a workspace for a tasks. With this you can switch between different between different tasks and ApPCode opens and closes all files for you. For me this cleans up my messy workspace, when i switch between too many tickets or get interuppeted when i work on a ticket. Then i shelf my changes, switch to the new ticket and shelf the code back.
At the moment it supports: JIRA, YouTrack, PivotalTracker, GitHub, LightHouse, Redmine, Trac and Bitbucket(with the BitBucket Plugin).
Plugins, adding missing languages and features
As mentioned in the Task Tracker Integration their are Plugins you can install. With the Bitbucket integration you get complete integration and since the new version even the issue tracker is integrated.
Additionally there are Plugins for coffescript, NodeJS, Heroku Integration, NUnitJS, Markdown (nice to write Mardown Readme’s), …
Extendind the IDE is nice, when you need to work on the client and server side and do not want to leave the IDE. Or when you create the WebSite for your next killer application.
Indexing of Subprojects
One thing i do not want to miss anymore is that AppCode simply indexes all subprojects. No need to copy Header files in the project just to get Xcode make code completion. Add the project, configure the Compiler Settings in Xcode and start developing. If Xcode changes your project AppCode reloads it automatically.
The best at the end: The Debugger
I’m still wondering what Apple makes with his Debugger. I’m getting crazy that i cannot see inside to many objects. With AppCode you can directly look into the instance trees, conditional breakpoints or evaluating code snippets.
There are many more features you should explore and give it a try.
You can find the Documentation for AppCode here.