Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I've worked with Xcode for ~2 years of professional work spread across ~10 years of other work, and honestly, I don't fully get the criticism.

It's not great, but for an IDE (not a text-editor with plugins), I've always found it miles better than the Intellij suite. I preferred Visual Studio when I was working on Windows, but that's a much bigger project, so perhaps not a fully fair comparison.

Xcode from ~2021 onwards, with Swift package support, has been a significant improvement too. Now you can avoid much of the IDE configuration and just work with source code more, something I prefer. There was also a period of a few years where it crashed all the time (Swift 1-4?) but those days seem to be long gone now.

The source control integration has always sucked and I steer clear, but I was always doing the same in Intellij/etc or Visual Studio anyway.

Perhaps today VSCode is sufficiently IDE-like with enough packages, and perhaps it's fast enough, but I still feel like there's a difference, and even though I can do Swift in it I prefer to use Xcode. Changing Xcode's shortcuts to something more reasonable made a huge usability difference too.

I'm interested to hear what you think is so terrible about Xcode. Perhaps I'm missing something!



To me the thing is that there is usually a major problem of some sort with Xcode and it can take up to a year to resolve (when they release the next major version). For example in Xcode 14.1 there was a bug that would make it crash when trying to open a project. It would crash over and over and over until it finally opened. That was finally fixed in 14.3. 15 was great then with 15.3 a bug was introduced where any time you change branches the package cache became invalidated and you had to close Xcode and reopen it. Of course it’s still not fixed in 15.4. 16 might be solid but I can guarantee some extremely annoying bug will be introduced in a point update and won’t be fixed until the next major. It has been this way since I started using Xcode 9.

I’d rather deal with a slow and cumbersome IDE than one that moves things around with every major update and introduces major bugs that don’t get addressed in in a timely manner because the IDE updates are tied to iOS releases for some god forsaken reason.

I was a fan of AppCode until JetBrains dropped it.


Having worked with it since it was still known as Project Builder I think it’s fine too. The only part that’s really bad is the XIB/storyboard editor, which was actually pretty good when it was its own independent program (Interface Builder) but has been awful ever since it got merged into Xcode. That’s easy enough to avoid though, with UIKit being pleasant and practical to write in pure code, as I’ve been doing for the past several years.

Beyond that, there are some things that can make SourceKit (provider of syntax coloration, autocomplete, etc) grumpy, but those are almost all code smells that should be avoided anyway like pyramids of doom built of closures or way-too-long optional chains.


The GUI building was always pretty bad, true. I managed to skip most of that and either did UIKit mostly via code, or more recently SwiftUI (which is mostly pretty good) and server-side stuff.

I think SourceKit was the source of many crashes a few years ago, more recently it seems to have transitioned to fewer crashes and more cases where it just gets "grumpy" as you said, and in the last few years I've even found most of those cases have ceased.


Yeah things have been pretty smooth in recent years, especially after being able to drop CocoaPods in favor of Swift Package Manager. On average I find myself “fighting” the IntelliJ-based Android Studio more frequently than I do Xcode.


Xcode's UI is miles better than the IntelliJ suite, or any other IDE I've used, but functionally it's a decade behind them, especially with Swift. Its autocomplete is extremely basic, its debugger barely works with Swift, and its refactoring system is very limited. It doesn't really support plugins, so the community can no longer patch these holes.

It scales poorly, shitting itself every time you open files larger than a megabyte (DB dumps as JSON hang it).

Xcode 15.3/15.4 shipped a really stupid bug where, when it detects certain changes to the file system, it just deletes the Package.resolved file, breaking your build. So you have to close the project just to do a git pull.

Speaking of closing, its overall launch and opening performance is very poor. Opening old style storyboards can hang the UI for multiple seconds. It abuses the main queue like none other.

Its UI can't handle large scale testing. It even added support for repeated tests in the UI, but viewing the results of thousands of test runs hangs the UI. When I do my manual test repetitions in the millions, I can wait literal minutes for the UI to render the result list. And I have to do those million test runs manually because the support they added for repeating tests in the UI run much more slowly its magnitudes slower.

Its syntax highlighting, like much of its tooling, breaks constantly, and yet is extremely inflexible. It has no customizable formatting capability, nor a Swift formatter or linter built in. It can't format on save, nor does it have any configuration available there.

Did I mention it has no real extensibility? Years ago there was a thriving third party plugin ecosystem, with a plugin manager called Alcatraz. It could manage plugins, snippets, editor themes, and project blueprints, all from within Xcode. Apple killed it by locking down the plugin API it used and replaced it with APIs that are a tenth as capable, barely work, and haven't been touched since.

So what's so terrible about Xcode? It's a death by a thousand paper cuts (and the occasional missing finger).


The plugin system was literally an internship project, and in that context putting together a working proof of concept for out-of-process plugins which can perform simple tasks is a great success. They just never bothering scheduling anyone to work on making the other 90% of a useful plugin API, which makes me wonder if they even realized that they shipped a basic prototype as a headline feature.


>Xcode 15.3/15.4 shipped a really stupid bug where, when it detects certain changes to the file system, it just deletes the Package.resolved file, breaking your build. So you have to close the project just to do a git pull.

Oh, so that's why my builds have broken from time to time and have required me to use File → Packages → Resolve Package Versions to fix it.


The broken debugger and language server issues strongly suggest type inference problems in your project. Load a core dump into lldb manually without Xcode to verify.

You can fix this by fewer chained calls to high-order functions or explicitly declaring returned variable types. Whatever it takes to reduce the search space to resolve your types.


> Xcode's UI is miles better than the IntelliJ suite, or any other IDE I've used, but functionally it's a decade behind them

Their live preview when you're building a swiftui, apart from that I'm not sure what's better in their UI. Managing windows is clunkier, the rest is very standard ide stuff?


It's not that Xcode's UI is great, it's just that the others are so bad. Xcode usually stays away from the unlabeled button mess that IntelliJ IDEs have become and is overall more Mac native. Of course, some of that is that it's lacking the features that drive complexity in other IDEs, so it's entirely possible it would be worse if it was more full featured.


Currently working on both SwiftUI and Jetpack Compose. For me, Compose is way ahead and it’s such a joy to work on it.

Also, opening Xcode on my M2 will take an average of 10-15 seconds, what’s up with that.


One really embarrassing problem of Xcode is cold start time. It takes around 15..20 seconds on my M1 MBP for Xcode to start into a project. Followup starts are faster (about 3..5 seconds), but come on, on such a machine it should start instantly, and it's a really bad look when a "bloated Electron app" like VSCode starts in a second.

The next problem is that some important areas seem to be abandondend. For instance the debugger variable view panel is so extremely bare bones compared to a "proper" IDE to be hardly usable, and nothing has been done about in at least a decade.

Next we have that weird 'scheme model' for setting build target options. No idea how any software engineer could come up with such an awkward and unintuitive system when there have been plenty of examples around how to do it better when Xcode was created.


  > there have been plenty of examples around how to do it better when Xcode was created.
any good examples?


The obvious ones would be Visual Studio and Eclipse.


Android Studio


Android Studio was released about a decade after Xcode though.


Yet still faster than Xcode and more stable.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: