As a strongly leaning iOS developer, something like the "Xcode for Android" was something that was holding me back from committing more to experimenting on the platform. The fact that Instruments, Interface Builder, etc are integrated well alongside the editor is huge and I think Google is wise to invest here.
XCode was terrible around 2009, but it has come on a long way since. I'm not using it much these days, but when I need to it does amaze me how easy it actually it is to use. I normally depend on vim keybindings, but I find that the autocomplete in XCode is so good that I actually don't seem to mind reaching for the cursor keys for navigation (much).
Just to check - you're not a time traveller, and you're talking about the current XCode, not some future version which isn't a rude joke compared to any decent IDE around (AppCode, Visual Studio, even Eclipse)?
Edit: sorry if I came up like a complete tool, but every time when someone say that XCode is a good IDE small part of me dies :)
It's the first IDE that I've used that doesn't dedicate the entirety of its chrome to 100 different buttons. The developer workflow is nice (Open Files Quickly, Go to Line, Symbol navigation, pragma marks, breadcrumb bar, continuous build cycle, CI integration with OS X server, etc). I can get Vim bindings with Xvim, (this is not an Xcode feature by default but it's worth mentioning because it's the best Vim emulation plugin I've used apart from IntelliJ's). It has Interface Builder, Instruments, etc all integrated and super easy to work with. Most of all, Xcode's simplicity. I started iOS and Mac dev with 0 experience working with Xcode and I didn't need any, since it's so easy to use.
Yes, it's a good IDE. Is it a perfect one? Of course not, there are still hundreds of issues like Xcode complaining that a certificate already exists when I try to code-sign my app but Xcode doesn't use it, first few releases of new versions of Xcode are always crash happy, and Xcode's build settings are the ugliest part of Xcode.
Different people prefer different things I suppose. Maybe people became so used to Eclipse and Netbeans ugly UI and incomprehensible buttons everywhere that Xcode doesn't seem as feature full to them.
> It's the first IDE that I've used that doesn't dedicate the entirety of its chrome to 100 different buttons.
Maybe this is everyone's problem with it?
I've spent about 6 hours a day in Xcode since 4.4, so it may be a bit of Stockholm Syndrome, but I feel very comfortable. In the last year, I've had to do some work in IntelliJ/WebStorm/RubyMine (all the JetBrains IDEs!), and while they're definitely nice, I would say they're harder to use, less predictable, and have wayyyyyy too many buttons. Also you can tell they're not quite native (as someone who cares about aesthetics, even in IDEs).
Xcode forces you to figure out the shortcut keys. I like it that way. And I spend more time hitting tab and enter than I do actual typing, and that's all we really want from an IDE anyway, right?
Yes. Every time I look at a default Visual Studio setup, I get mental fatigue just from trying to figure out all the buttons, toolbars, and options that I'll never ever need to use. It's completely gross and bloated — the Microsoft Word of IDEs.
Xcode, on the other hand, is so nice and Appley and clean. It's a shame it runs so slow and crashes at the slightest breeze. Still, I'd rather use an Xcode that I have to force quit every 30 minutes than a stable Visual Studio any day.
You do know that you can move/remove and customise all of those buttons and toolsbars and options and whatnot? I have never seen that as an excuse.
I only have half a line of buttons under the main toolbar. The number of windows I have docked varies from 1-2 while programming to about 5-6 while debugging (with the watch list, call stack etc. all easily viewable).
I would reckon that most programmers spend at least some amount of time customising their development environment; I mean it's what you spend most of your day using. What is important is what features and development-helpers your IDE supports (you don't have to use all features) and how configurable the environment is (while not being overly slow and buggy), in my opinion.
My excuse is that I'm getting older and I just don't want to deal with the fiddling anymore. It gives me nothing but stress. All my IDEs and text editors have the default config (modulo a few settings), and I'm OK with that. I don't use emacs or vim.
I got the impression before that the only people who really like Xcode are those that have never used any other IDE. Are you one of the exceptions?
> incomprehensible buttons everywhere that Xcode doesn't seem as feature full to them
My issues with Xcode isn't the lack of buttons, it's the lack of functionality. I started with Borland IDE's for Pascal and Java, then Jetbrains IDEs for Java, JS/HTML, and now Obj C, and through those, the tool became an extension of my person. I've been using Xcode now since 2009 and I find that it still gets in the way instead of helping me translate thought into code. It's gotten better in letting me know what I might need, but still falls short of actually letting me have it.
I used Borland Codegear and C++ Builder before that for a number of years, then moved to Visual Studio, spent significant time in Eclipse developing Android apps, and also spent a large amount of time in KDevelop and Code::blocks under Linux.
Xcode took some getting used to when I first came across it ("Where are all the buttons? How come the big PLAY button at the top runs the app but doesn't CONTINUE like it does in VS? Why are there no floating windows? How come the project and target options are a big list of stuff instead of tabbed pages? (The filter helps!) Why does it crash if I have a large header with many #defines in it? How do I easily switch between Release and Debug targets? Why is there no built-in TODO/FIXME filter?").... but having used it for a few years and having seen the updates to it and daily using it, I really really enjoy using it now. The debug overview of memory use and CPU/Network use and deep Instruments integration ("where am I leaking?!?! Let's just take a look!"), as well as the splitting usage by thread during runtime is really helpful and there isn't much going on screenwise, so I just have to look at code. The recent version is better than the previous one because it has a logical call graph shown for each thread instead of a popup irritating menu like the previous one (click click click click misclick arrgggh)
The navigation bar at the top is also strangely useful, with back and forward buttons! I never thought I'd miss that but I do if I go elsewhere.
A trip back to VS (admittedly an old version, thanks work) makes for unpleasant experiences (argh building is sooooo slow, where are parallel builds???).
The 'callers/callees' list is really helpful when inside a function to see where things are getting called from; admittedly no refactor support for C++ is disappointing but I don't really use refactoring much.
EDIT: One thing I really really really miss from Visual Studio is the Ctrl-Shift-Space shortcut for showing function parameters. You get them as a hint first time in Xcode and it might shove them into the text where you can tab between parameters but with overloaded functions it typically chooses the wrong function. With VS the popup hint dynamically changes as you're typing to show the right overload, and I miss it.
I'm using AppCode for code editing and debugging, and XCode for practically everything else (project settings, designer, etc). These are features I'm using every single day:
* Buttons and toolbars - I don't use any. I have more or less consistent shortcuts between AppCode and XCode, and for less used features I'm using Cmd+Shift+A shortcut. It's an equivalent Cmd+Shift+P in Sublime and more powerful feature search than standard Cmd+? (which search only inside menus).
* Code navigation - put cursor on function, variable, property, whatever, press Alt+F7. You'll get a split panel, on the left are all places where function/variable/property is used (and you can filter it by read or write access), on the right is the preview panel, so you can see the code without changing cursor position in your main editor.
* Code navigation - Cmd + Ctrl + J to easily jump between function definition and declaration
* Refactoring - rename: yes, XCode have Rename, but AppCode rename is much more streamlined: put cursor on method/property name, press Ctrl+Cmd+E, change the name in place, as I'm typing every occurrence of the method/property name changes. I press Enter and the change is done, without modal dialog to review change. And rename works on protocols, too.
* Refactoring - Change Signature: in case I need to reorder function parameters. Put cursor on method name, Cmd+F6, reorder/rename parameters. And AppCode is smart enough to try to preserve natural flow of words - if the function is called saveContent:toFile, when I reorder params it will become saveToFile:content:
* Refactoring - easy promotion from ivar to property. And vice versa.
* Local history - I try to commit as often as possible, but I like an ability to see what I changed on the file in last couple of hours (with diff). And that option saved my ass couple of times.
* AppCode marks methods/properties that aren't used. I like to delete code. Less code is better. Very useful after refactoring.
* Better editor - I can split my editor horizontally/vertically however times I wish.
* Better editor - Shift + Ctrl + 1 - 9 will toggle quick bookmark. Ctrl + Alt + 1 - 9 will jump on the bookmark.
* Better editor - Cmd + Alt + UpArrow will expand selection. First sub-word (up to first "hump" in camel case) will be selected, then the whole word, then the next word, then the whole line... Cmd + Alt + DownArrow will go the other way.
* Better editor - Shift + Alt + Up/Down Arrow (or Shift + Alt + Click) will make multiple cursors, just like Sublime. Handy for changing lots of similar text lines.
* Better editor - select couple lines of code, Alt + Cmd + T will bring "Surround With..." popup. Press the mnemonic on the right to surround text with if, if/else, while, respondsToSelector, #ifdef,@try/@catch, etc, etc, etc. Time saver.
* Better editor - type SomeVeryLongClassNameIReallyHateToTypeTwice* var = alloc, press Tab, and AppCode will change "alloc" with [[SomeVeryLongClassNameIReallyHateToTypeTwice alloc] init]. Time saver.
* Better editor - Cmd+N will bring "Generate" popup where you can choose "Override method" or "Implement method", among other things. When the list of methods to implement/override is shown, you just type to narrow the selection. It's way faster to implement mandatory or optional delegate methods that way than to XCode-like start typing return value, then tableView: (for example) and picking the right method from the list.
Etc, etc - there's many more small things that good IDE ( * ) does to make programming more enjoyable. This list is just from top of my head.
-----
( * ) AppCode is just "good". For "very good" see Visual Studio + Resharper.
I've used a number of IDEs. My favourite would certainly be IntelliJ, but Xcode would probably be second, certainly above Eclipse and Visual Studio (though the last version of VS I used seriously was 2003, at which point it was clinky and awful; things may have changed).
I'm actually a version behind, I haven't got round to updating to the latest yet.
What is it about XCode that you think is bad?
Everyone uses their tools in different ways. I use Visual Studio in my day job, but I prefer to use Emacs for most of my side dev these days. Given that perhaps I don't use everything an IDE has to offer.
Comparing Visual Studio with XCode, the following features are what I use to most.
Autocomplete - XCode wins here. Say I have two variables - clientService and clientMapper. In XCode I can type cl<tab> and it will complete the client part of the variable for me, I then only have to choose between Service and Mapper. Visual Studio doesn't. Pressing <tab> will choose the entire current selected item.
Quick open - XCode wins. Cmd + Shift + O (I think) start typing the file name, hit enter and there you are. Visual Studio (without Resharper) forces you to search through the Solution Explorer, which is slow and searches for methods as well as files.
Syntax/Error/Warning Highlighting. Both IDEs do this just fine.
Debugging - Cant think of anything to differentiate these IDE's. It used to be a real pain to inspect variables in XCode, but that was more GCCs fault rather than XCode. Since moving to LLVM, I haven't had any problems.
Refactoring - I probably don't use these tools as much as I could. But the basics are covered. Extract method, rename variables etc.. can be handled fine by both. I don't use anything else.
Vim keybindings. There is vsVim for Visual Studio and now I see there is XVim for XCode.
Disclaimer: i left C++ behind 8 years ago, so if you're using Visual Studio as a C++ IDE, I trust your opinion. I used Visual Studio as C# IDE for 7 years, and...
* Autocomplete - the XCode way to do autocomplete drives me crazy. Why XCode hides what I'm typing with it's guess? Regarding Visual Studio autocomplete: you start typing variable. The autocomplete narrows your choice. You press up arrow/down arrow, enter/tab, you're there. And the choice is always relevant, instead of "I'll put just everything I can think of" XCode autocomplete
* Quick open - which Visual Studio version you're using? In VS 2013 you can press Ctrl+, and get essentially the same functionality as XCode. Type file name, symbol name, enter, the file is open.
* Syntax/Error/Warning - Visual Studio gives you extra help if something isn't quite right. You typed "Regex" and there's red squiggly line? Place the cursor there and press Ctrl+. What's that? An option to include System.Text.RegularExpressions namespace automatically? Or you typed parameter name that doesn't exists? XCode will curse you, Visual Studio will offer (via Ctrl+.) to make the method for you, and it will infer return value and type of parameters from your code. That's great way to start writing class from scratch, and I miss it in XCode.
* Debugging - again, I can't argue about C++ debugger, but C# debugger is actually much more powerful than XCode debugger. You can inspect variable values in tooltips, there's powerful visualizers, there's an option to pin tooltips with values so they're always visible (even when the program stops, so you can see the last value while fixing the error) and last and not least - very, very powerful Immediate window, sort of REPL for C#. I hope LLDB will have something similar for Swift.
And there's much more that Visual Studio provides. Code Lenses (only in Ultimate version, but still). Code Peek - XCode sorta have something similar in Assistant Editor, but not quite. Find References. Call Hierarchy. And that's just the basic Visual Studio (now free) functionality. With Resharper it's completely different beast.
I never knew about that Ctrl+,. Thanks for pointing it out. I don't think it is as powerful as XCodes, XCode does more fuzzy matching. I think (don't have mac open to check) in XCode if I have a file called ClientsController and I type ClientC it will bring up ClientsController. In VS it seems I have to know I want the plural ClientsController..
You are spot on with your other points though re debugging and syntax fixing. VS is better than XCode in many ways, but I would say not so much that XCode should be despised as satans spawn.
I wouldn't say Xcode is perfect by any means, however I think Apple has a deep appreciation for workflows and simplicity. Whether it's about the end-user consumers or the developers themselves any sort of friction inhibits delight, engagement, etc.
In what way? I use VS every day alongside Xcode and it's like pulling teeth (but with easy remote debugging, admittedly). I am using an old VSC++ version (2010) but has it significantly improved since then?
xCode today is and extremely sophisticated IDE. I think there's no other software more complex than it that is so well designed to maintain simplicity, ease of use and speed. It was ultra slow years before, but nowadays every time I develop for Android I'd kill for having an xCode like realtime autocomplete and documentation. XCode it's extremely solid and you feel it every time you use it. Android Studio is build on Java, then it's slow and the UI is nowhere near as polished as Xcode. If I were Google I'd start coding my own IDE from zero ASAP.
Your comment tells me you haven't used Android Studio at all, and are making up attributes based on what you assume something written in Java must be.
I use Jetbrains IDEs and Xcode every day. Whenever I have to write any significant amount of code, I switch from Xcode to Appcode.
> I'd kill for having an xCode like realtime autocomplete and documentation
From my experience, this is true for Jetbrains IDEs, and not for Xcode, particularly for autocomplete. Xcode autocomplete is a pain, and sometimes gets in the way instead of being actually helpful.
I am sorry to disappoint you. I wrote a huge app in Java and in Kotlin. Months of develoments. xCode still years ahead of AS in every sense. Inheriting another company IDE is philosophically wrong, but that's the way Android and Google work. Maybe I love details too much.
So, given that IntelliJ IDEA has been in development for 14 years and XCode for 11, when would you expect Google to release a high-quality IDE if they started from scratch today?
This is a subjective issue, of course. Personally I find autocomplete and navigation in Xcode still sorely lacking compared to IDEs in the Intellij family, to the point where I happily pay for AppCode to do most of my iOS work (basically any serious coding, although I return to Xcode for UI work). I will concede the AppCode can be sluggish at times, though, which is my major gripe. Conversely I find Xcode more buggy: every other version seems to be plagued with crashing bugs.
As for the idea that Google should start from scratch: that would just put them back a decade. I'm very glad they decided to build on an existing great platform instead.
Java/Swing is slow is a myth due to badly written applications. Jetbrains does it right. My main machine is a little 11" MacBook and I use AppCode/IntelliJ all day long without performance issues. I use XCode for Interface Builder as the code crafting abilities of the editor are primitive in comparison.
I do agree that everything integrates nicely, and it's great to just jump in as a newbie, but I miss solid refactoring, code navigation, smart template and multiple cursors the most when I occasionally use it. I can see the evidence when I start on an existing codebase - typo's, misnamed methods that have evolved to something else etc. Things that AppCode does trivially, and with full trust are things that XCode users seem to balk at as one never knows if the build will break. Maybe things have improved over time (I've used AppCode for 2+ years now), but the evidence in existing code tells me otherwise.
XCode is fine for what it is, and its strength is the tool integrations. For everything else like actually editing and refactoring code it is worlds behind something like Intellij/Android Studio.
If Google does anything, they need to build/buy a simulator (Genymotion for example) instead of the emulator.
> xCode-like realtime autocomplete and documentation
XCode's autocomplete is a joke compared to Android Studio's -- a strongly typed & non-dynamic language does wonders for how efficiently & accurately an IDE can fill in your dots for you.
I am sorry but AS autocomplete takes seconds to appear on my rMBP. xCode flies. I write methods and I see the docs on the right. I can cntrl+click and see the full docs. Let's not talk about the Quality of the Apple docs compared to android's, or debugging and instruments tools.
seconds is far too long... That you're even trying to argue that autocomplete is more powerful in XCode than AS shows you haven't used AS for more than maybe a minute. I've used both side by side for years (well, Eclipse and IntelliJ before AS), and it's honestly not even close. XCode takes longer and consistently suggests functions not available on my object, or classes I never use. XCode is great at plenty of things, but autocomplete is its #1 weakness.
> I can cntrl+click and see the full docs
And in AS I can Cmd+Click and see the source..
> debugging
debugging live running apps w/o having to launch from the IDE is awesome. And I don't think there's a single debugging feature that XCode has that AS doesn't. Seeing as Obj-C is a dynamic language, the console REPL is pretty nice, but that's a language feature more than an IDE feature.
Developers, developers, developers!