JetBrains AppCode: an Objective-C IDE That Makes a Difference
jetbrains.com
jetbrains.com
I wish so much that they would create a Visual Studio replacement. I'm primarily a Ruby/PHP developer and use their PhpStorm and RubyMine products constantly, but whenever I am stuck doing something in .net and have to open up Visual Studio, I just get a gross vibe from the entire experience... And this is with Resharper installed as well!
I see Visual Studio get a lot of support on HN, so maybe I am just weird, but I've never enjoyed using Visual Studio as a whole.
Me neither. I switched from Visual Studio (C#) to Emacs (Common Lisp) -- and a short stint on the AllegroCL IDE -- and I do not miss Visual Studio one bit. It always struck me as odd to see Visual Studio getting praised here. I can only assume it fares better than Netbeans or Eclipse?
It feels like the Internet Explorer of IDE's to me. I am not sure whether or not my distaste is justified since I am well aware that it is a powerful IDE, I just hate how bloated it all feels. That and its incredibly annoying that once I wish to uninstall it, I end up having to uninstall about 20 other programs too. Very obnoxious.
This probably doesn't sound like a rousing endorsement, but I've yet to find anything that's as good for reading and writing C, C++ or C# code.
(People using Visual Studio for anything else should definitely consider shopping around, though as general-purpose text editors go it is far from the worst possible.)
Try the ReSharper VS addon from JetBrains -- it makes navigation much much better. VS code navigation really is primitive in comparison.
VS is one of those interfaces that is easy to grow into, out of the box it's pretty functional and eventually you learn all of it's features as you go. Resharper really makes VS a much better product. Intellisense practically codes for you and has just enough of the documentation that you don't need to dig into MSDN that often.
XCode especially anything before XCode 4 is pretty abysmal, I really enjoy JetBrains other products (except for their RoR IDE). I was really surprised at how horrible XCode is given Apple's penchant for UX (too bad Jobs didnt code). Looking forward to using AppCode, I'll be really happy if there is usable code completion.
They built my favorite Java IDE, IntelliJ.
For 100% iOS development I doubt many people will switch. The integration between Xcode, Interface Builder and the various Apple frameworks is something that will be hard if not impossible to implement in another IDE.
Maybe JetBrains should build their own OS! (just kidding)
I'm all for options, and $50 to $150 usd is not prohibitive for an IDE, but since Xcode is free and directly from Apple, there must be some really good features for me to switch IDEs.
Once you use a refactoring tool to rename a class and have it renamed everywhere in your project, you get a taste for what XCode is missing. There are several refactorings like this that shave a lot of time out of some of the more annoying tasks. Code generation allows you to define a method or property once and have it added to both .h and .m files, as well as have properties synthesized. If you want to add an argument to the method signature, that is done in one step, too. The SVN integration in IntelliJ IDEA was superb. I have had issues using SVN in XCode where the interface refuses to load history, and the interface for managing conflicts just isn't there (try having 2 devs change the project file). These are just a few things off the top of my head.
For the most part, they're both comparable. Both have powerful refactoring and code-generation abilities.
For core Java development, there's no need to leave Eclipse. IntelliJ might provide some nice features, but overall it doesn't warrant purchasing a license.
When combined with web development, other languages, or non-core development, is where it easily pays off to switch to IntelliJ.
We were doing some Grails work, and Eclipe's support (via STS) was shady at best. We put off trying IntelliJ since it meant learning a new environment, new shortcuts, etc, but after about a day of playing with it, we were sold, and never looked back.
Disclaimer: I'm on the JetBrains "Academy" which means they sponsor some of my speaking and stuff.
The most common refactorings, like rename method/variable/field or change signature are all easily done through the UI. Example: rename (anything) is Shift-F6, <type new name>, enter. I do this all the time.
All code is open source on Github as referenced in the articles.
If you're getting started today, it's pretty damn seamless. Most people find this stuff harder/more painful than the actual coding, so it's a big win for iOS developers.
I looked into AppCode a bit earlier when it was still rough. Getting tight integration is the key for me. Refactorings would be nice (XCode has Rename already), but really what I want are snippets, or something to take some of the drudge code away.
For instance, to add a property I have to add 4 lines of code in 4 different places. This should be one action (which can be overrided later).
Also, code navigation. This was terrible in XCode 3, better in 4, but nowhere near ReSharper or IntelliJ.
The ideal, for me, would be the same as ReSharper: a plugin that adds functionality, but that won't happen with Xcode any time soon.
How about if you don't need the #import for a class, but, instead for something else (say, it #imports a bunch of other classes for you instead, like UIKit.h)?
---
My dictionary says this for perverse:
- Showing a deliberate and obstinate desire to behave in a way that is unreasonable or unacceptable, often in spite of the consequences.
- Contrary to the accepted or expected standard or practice.
When the iPhone came out, it didn't have cut and paste or any third-party apps. When OS X came out, it didn't even have DVD playback or CD burning and it was agonizingly slow. All of those decisions were far more "perverse" than leveraging an existing codebase to bring a new product to market. OS X as it exists today is the product of countless iterations on the promising-but-lousy OS X 10.0. To miss that fact is quite literally to miss what made OS X so great.
AppCode is clearly never going to be iterated in to a good Mac app without a rewrite.
Java applications don't support a lot of deeper OS X features that make the platform so consistent. I have custom keybindings set up via the DefaultKeyBinding.dict mechanism that work pervasively throughout the OS, except in applications like AppCode that seem to think that their ease of coding trumps my consistency of platform and configuration. I think that kind of assumption is utterly broken and user-hostile, and it has nothing at all to do with "prettiness".
Anyway, like I told frou_dh, I do understand the benefits Cocoa offers. I've been a Mac user since 1985, Cocoa programmer since 2001, got the gold badge on Stack Overflow — believe me, I get it. But I also understand the benefits offered by JetBrains' existing IDE codebase. Engineering always involves tradeoffs. JetBrains' tradeoff may not align with your preference here, but the simple fact is, they now have a highly capable IDE shipping for OS X. Cocoa doesn't have anything particularly helpful to IDEs that would offset the cost of rewriting, so if they had gone with a total rewrite in Objective-C, it seems most likely that they would either not have anything shipping or they would have a pretty but half-baked product (or both).
It's true that not using Cocoa does hurt the product. But there are a lot of ways Cocoa apps can be broken and user-hostile too. The initial release of Xcode 4 was so broken that a lot of people downgraded after trying it for a week. It's still worse than Xcode 3 in terms of stability and responsiveness on average hardware. TextMate has always been Cocoa, but early releases were missing a lot of standard features because so much of the UI was custom code (as the standard Cocoa controls did not offer the functionality TextMate wanted).
So yeah, if AppCode were Cocoa, it wouldn't have all the UI problems it does now. It would have different problems. My point is just that which set of problems you'd rather have is a matter of personal preference. If you disagree with JetBrains' choice, then this is not the app for you, and that's OK.
Instead of whining about pixel perfection, try taking a look at the things it does and the audience it targets. You probably don't code enough to actually have an opinion that matters much anyway.