Xcode is trash and I’m very sad that JetBrains discounted AppCode. It made things bearable even if I still had to use Xcode for certain tasks.
My biggest complaint with Xcode is speed. It’s feels incredibly laggy to me. Auto-complete is slow and error reporting is insanely slow. I hope you like typing code and then 5-30 seconds later the IDE shows an error (normally a bad one).
I’ve never had a good experience writing code in Xcode. Often I’ll just open the files in IDEA to have sane hotkeys, my plugins, multiple cursors, and the list goes on and on and on.
The shittiness of XCode and just app development in general for iOS, combined the mess that is Android development, is why I just gave up on native app development. I'm now entirely focused on web development and won't invest any time or effort in keeping up with native app development.
It's sad how the concept of native app leads to walled gardens, instead of the web being promoted and improved to be the primary way to deliver apps. And the web need serious and continual efforts to modernize its of development and use experience, but it is far superior model than native apps IMHO.
Since America just won't do it, the EU should force Apple and Google to allow the experience of using mobile web apps to be on par with that of native apps. At the very least, allow a one click way to add a web app to the home screen easily.
I love the web, I write cross platform mobile apps using web tech (same code as the website) that work 90%+ as well on web vs "native" (sometimes more, sometimes less depending on which features I need). The issue is even less-so with web capabilities (though I absolutely wish more was available) but with customers/client's expectations. I can spend all day telling someone "This website here does everything an app would" and they simply will not care until they see it in the App/Play Store.
I've seen this happen over 10+ external companies that I've worked with. I'll provide a website with the "app" that they can play with and literally 99% of the time they won't even look at it until it's in app form. Same codebase, same UI, same features, it's insane but I've seen it happen enough times to expect it. I think it's partly a prestige thing but whatever the cause, I don't see myself getting away from dealing with Xcode/Android Studio/App Store Connect/Google Play Console. At least Android Studio is built on IntelliJ... and that's about the only nice thing I can say about it (other than thank god it's not eclipse based anymore).
> I'm now entirely focused on web development and won't invest any time or effort in keeping up with native app development.
I can't agree with this more. After having numerous problems with native android development before, I decided to give flutter a go recently for a mobile app idea I've been wanting to do.
After getting byzantine and seemingly unsolvable errors from flutter doctor and gradle for the 3rd time after completely reinstalling it every time, I just gave up and started making an app in tauri instead.
And Android Studio is even worse (that is weird, the bare IDE is the same as others, but the android apis and tooling overshadow it). And the use of Gradle multiplied it by 1000.
The reason AppCode died is that Apple platform engineers on the whole are very happy with Xcode. Source: I worked as an Apple platforms engineer for a decade across many teams and the person who complained about Xcode the most was always me, and overall I also think it was usually pretty good, arguably great. That is until they added Swift, which always had performance and stability issues (many of the complaints in this thread are fair for Swift support in Xcode). It still worked quite well for me for the C family of languages though (I haven't used Xcode seriously in a couple of years now).
If your going to give your opinion on Xcode, it's a good idea to give a count for years that you've worked in the program. For an IDE I personally wouldn't bother with anyone's opinion that hasn't put at least 1000 hours in the program, and a lot of the comments in this thread sound like people who just opened the program for a one-off task and formed their opinion based on that.
My colleagues for years have been people who live in Xcode, eight hours a day, five days a week, and I've never heard opinions like this thread expressed by them (except for the Swift support).
Ok well you asked. I've been using Xcode for 15 years now professionally. I have two CS degrees and one of my apps was featured on the Mac App Store front page. So, basically, I know wtf I'm talking about.
I detest Xcode.
The latest horrible thing it has done to me is decide to ignore various important Build Settings, throwing them under User-Defined. Doesn't say way. Just pure magic bullshit.
It crashes occasionally, but that doesn't bother me that much. You just laugh at how bad it is and restart it.
Sometimes you'll get some code-signing errors and you just reboot. I kid you not. You reboot and they go away.
Xcode's connection to Xcode Cloud is pretty flakey too. Quite often it will fail to log in. You just restart Xcode and it goes away.
Xcode will display errors that are out of date all the time. I've gotten so good at knowing which errors are just BS that I'm kinda proud of myself.
Previews are useless. They could be so great but as soon as you break one, the debugging experience is so bad, you just give up. Sometimes your project will fail to build with them and the reasons are so opaque you just give up.
The xcodeproj file format is merge hell. It's so telling that tools like Xcodegen exist.
The new LLM-based code completion thing is mostly just amusing. Definitely not ready for prime time.
There's clearly no CI on the template projects because if you archive the Audio Unit one, the swift compiler crashes currently. Wheee!
Nobody uses the git integration on Xcode AFAICT. It runs faster if you just turn it off.
The GPU debugger is quite a crashy mess, though it has gotten better. Still you will not be able to debug your shaders and you'll have no idea why. The GPU debugger doesn't work if you put any MSL code inside a Swift package too. I used to have an icky work around for that, then just gave up on modularizing my project to the extent I would like to.
I experienced the issue mentioned in the article: couldn't add local packages by dragging them in. But somewhere along the line it went away. Don't know why, and I don't have the time to dig into it.
I really should compile a proper list. I'm sure I can think of more, especially if I go through the list of bugs I've filed over the years.
Anyway, now you've heard this opinion expressed by an experienced person. Consider it a data point.
Great list, way different than most of the comments on this thread. I don't see a single one I disagree with. I'd ask though, which IDE do you think is better than Xcode and in what way? My only argument I'd have against this list is it's kind of par for the course for an app of Xcode's age and complexity, e.g., you'd for sure get a similar list from Premiere or After Effects users, or any of the long-standing 3D packages (although, for a counterpoint, Logic Pro and Final Cut Pro users seem way happier, so it's at least theoretically possible to make complex, long-standing applications without these issues).
Before iOS, I was coding animation software on Linux using vim/scons for five years. So no real IDE. But not a fair comparison because we had a build team keeping everything nice. I also ported one of my apps to Windows and Visual Studio never drove me crazy. But I haven't worked with it to nearly the same depth as I have with Xcode.
So I concede that perhaps all IDEs are dreadful. I still hate Xcode.
I know pro users of Logic and Ableton and they never express such a level of displeasure. FWIW, having used Logic, Ableton, FCP, all non-professionally, those apps seem like a dream compared to Xcode.
I think it's likely that if Xcode weren't free, there would be serious competition and iOS development would be better for it. Or perhaps if Xcode were modularized so 3rd parties could use parts of it (Instruments, GPU debugger, memory graph debugger), lowering their development cost so they can compete with free.
I tried AppCode and while it seemed nice (refactoring was good in particular), I kept returning to Xcode to use the GPU debugger IIRC.
So, amusingly, I'm the inverse of your impression: the IDEs I've tried superficially I've generally enjoyed. The one I've used deeply I detest.
Thanks for sharing this! For Visual Studio, I always think of this video https://www.youtube.com/watch?v=wCllU4YkxBk that pretty much just leaves the JetBrains IDEs, which are obviously well loved. I've never had a good first impression with them, so I haven't bothered to get deeper into them, but I also don't have the experience to form a fair opinion (although when I read about what folks like about JetBrains, it doesn't resonate with me, usually it's about refactoring tools, which I don't care about).
Reporting in with my experience with JetBrains IDEs - they are generally OK, but the quality has gone massively down over the last couple of years (some worse than others, Rider has been okay, though new features often just don't work at all). Quoting my own comment with some memorable new issues in WebStorm from last year, written a couple of months ago (with links to the issue tracker)[0]:
- The autocomplete popup sometimes froze the IDE completely (and killing the process caused minutes of data loss), open for close to a year
- Since two months ago, the Typescript language server fails to start in Vue projects (due to a broken update by the Vue team). A fixed version of WebStorm was released yesterday, in the meantime you were apparently expected to search for the error message, stumble upon the YouTrack page, and apply a workaround
- Performance is abysmal in a larger React MUI project, think 10-15 seconds for feedback on code changes, sometimes errors just stick around for a good minute or more
- In some situations WebStorm makes autocomplete suggestions that aren't allowed - think effectively a type T with keys K | L, where Omit<T, K> leads to only suggesting K properties, while removing the Omit makes it suggest both K and L properties
- After updating from 2024.1.X to 2024.2.Y, the window had no buttons for minimizing/maximizing anymore. Now, this was partially caused by my environment, but after I found a workaround it was closed as "Third Party Problem". Still feels like a regression to me, since my environment did not change.
I've mostly stopped updating the IDE, as almost every version brings new regressions in basic editor features. This morning I updated and tried to copy some text. WebStorm showed me a "Copying..." dialogue for more than 30 seconds.
Performance is really abysmal with C++ development and it's the biggest reason for avoiding Xcode for me. Actions such as completion and contextual jumping just keeps lagging on a M3 Pro even if everything should be indexed. VS Code with the usual C++ plugin and CLion have no problems with the same codebase.
I like the integration with different sanitizers in Xcode, some of the visualizations are pretty neat. Instruments is quite good as well.
Perhaps JetBrains should reconsider AppCode, since Xcode only got this crappy recently. Apparently they didn't get the market share they had hoped for.
It gets exponentially more crappy every time, which creates an impression that it only got crappy recently. I remember it doing this since 2010. The usual counter is to stay on the same version until either of you is literally dead.
Although I didn’t find AppCode more useful for my simple tasks. If anything, it felt android-ish in ux, if you know what I mean.
I've always felt like it was slow and annoying to use personally. At least coming from the IntelliJ world, maybe if you were only in Xcode it was pretty decent until recently.
Xcode is a really hard one to replace because at the end of the day you pretty much have to use it at least a little bit so some developers will probably choose to use it just so they don't have to use two editors. I'm not aware of many/any other languages/platforms that are that locked down (at least in mainstream programming)
Yes, there are tons of stuff you can do on Windows without Visual Studio, but then you aren't doing all the scenarios a Windows developer might care about.
There is also that little bit only available in a mix of Windows SDK and VS plugins.
It's remarkably unintutive for tasks that should be even trivial (like splitting an editor pane). Getting acclimated in a basic fashion takes far longer than it should given my experience with every other modern IDE.
I am not an iOS/macOS developer, but I resonated strongly with this post because it captures how I feel the general experience of upgrading Apple OSes has been over the past few years: With each update, I find myself asking, what is going to be broken that used to simply "just work"?
I'm not talking about controversial new design directions like the iOS photos app redesign, I mean broken behavior. I can't recall everything off the top of my head, but just a few examples that come to mind:
- The new macOS has a system info pop-up every time any application is using your screen. It tells you how many times the application has accessed your audio or video over the last month, and tells you that you can manage this in settings. You cannot turn this notification off, and it is repeatedly triggered every few seconds by applications such as Zoom. This popup sometimes (but not always) steals application focus, which means if I am screensharing a code editor, keystrokes will inexplicably stop being sent to it.
- In a recent version of iOS, I could no longer tap on the calendar event time-selection wheel while creating an event to manually type the time instead of spinning to select it. As soon as I started typing numbers, the UI would disappear and only a partial time would be entered. In the most recent version of iOS this has been fixed, but for a while the entire workflow of how I create calendar events was broken.
- I used to be able to ask Siri to create an alarm for X minutes from now, but an update or two back Siri started creating timers instead.
- For a few prior iOS versions, I would reduce volume or brightness in the iOS control center, only to have the sliders pop back up from time to time on their own.
The general feeling of using iOS and macOS lately is that I can no longer rely on things continuing to behave the way they used to. Although macOS is a far better operating system experience than Windows, and far more polished than Linux on the desktop, it just feels like the reliable usability of Apple operating systems is slowly ebbing away.
Maybe this is a sign that I'm turning into a curmudgeonly old graybeard in my middle age.
I am not sure if my mind is playing tricks on me or sometimes with some apps the focus doesn't work right. Like desktop Whatsapp looks to be in focus, but when I try typing nothing happens, than I need to click on it or restart it before I can type into the message box, but one time I managed to rename a folder on my desktop (and only realized this much later). One of the downsides of the macos windowing system allowing active apps without any windows shown. I'm scared I will delete something important or do damage if I can't be sure my mental model maps correctly to what's happening on the computer.
How’s this any different from saying “2 monitors is a security issue, what if you’re typing a password but Discord on monitor 2 was in focus”?
Typically when I’m typing my password into an input on any platform, I’m looking at the password input, and if it loses focus, I’m going to notice.
On most OSs these days (including macOS), native password inputs are rendered by an elevated privilege secure process, and focus stealing behavior is disabled while the password input is on-screen.
Same, I have a Mac but every week I check the progress of linux support for the Snapdragon X1E!
I am running Sonoma (and iOS 17) with no plan to update. I don't want AI built into the OS. Very happy with ollama and our own code.
In fact what I would like the most is to strip the OS to the bare minimum: Remove Photos and whatnot from the OS (hey it's an app, I should be able to install it from the AppStore if I want) and the hundreds of daemons that run to do who knows what.
I tell myself I'm a minority here... but everyday I stumble upon all types of users who want the same.
I think both operating systems are incredibly complicated compared to years past and their development model is straining in some ways with the relentless pace of development and integration with online services.
You see it if you run the betas. Even something as seemingly simple as the keyboard needs integration with a dozen or more other modules. I’m experiencing a lot of bugs with the emoji keyboard in the iOS beta - no surprise… it’s hooked into 2-3 different custom emoji schemes, AI generation, etc.
Xcode is the reason i've never written true native mac apps. Ever.
I program hobby stuff in lots of environments and languages depending on how i'm feeling. I have no trouble starting up Rider, PyCharm, Visual Studio, VSCode, whatever, and writing C#+Maui/Avalonia, Rust, Svelte+Tauri, Python+QT, etc.
Whatever will work best for what i'm trying to do, or seems fun at the time.
That's for regular coding, too. I have lots of PLC environments i work with for embedded stuff (Siemens, etc).
I've learned lots of environments, and while they all have their issues, etc, they are all fairly usable pretty quickly, and stay that way.
Meanwhile, every time i have ever sat down and tried to use XCode (a bunch of times over the past 10+ years), it is so annoying that i give up in a day or two and just go use something else.
It's gotten progressively worse - it felt much easier to try 10 years ago than it does now.
It is hard to describe how strange it feels to try to use it.
I guess i'll go with "it often feels like it was created for use by some alien race specializing in industrial automation".
It's not quite right, but i think it transfers some of the feeling.
I honestly can't imagine how anyone uses it on a regular basis.
Exactly, I swore off the whole native app development a long time ago, to preserve my sanity. Android development is also a mess.
Meanwhile, there's still no really good way to development cross-platform desktop apps too. I'll just stick to the web, thank you.
In my view the web is a special thing, and I really hope the industry does not neglect it and cause it to die. JS is getting better, but HTML is is serious need of a revamp to support rich UI apps.
One of the reasons I stopped iOS development was because of how clunky, slow, opaque and buggy Xcode is. I’m amazed people have the patience to work with it especially when coupled with Swift being so picky with terrible error messages and Apple’s awful developer docs.
The thing that shocked me about doing Swift app development was despite all of the syntactic requirements for types and null-checking, the program would crash with runtime errors as if I were still using C.
It's been a while, but I remember splitting time between XCode and VScCode for iOS projects made it bearable. Apple docs aren't perfect but I found Swift to be enjoyable enough as long as you don't accidentally run afoul of type checker bugs.
I’ve been (very) casually dabbling with iOS and Mac development on and off since about 2011, and the one constant has been that Xcode is incredibly janky.
My first time was for a university project that I almost missed the deadline for because my app just refused to build one day, regardless of clearing all the caches etc. I eventually fixed that by starting a new project and copying all the files over.
Various versions would crash with alarming frequency. For years it was missing common text editing features like multiple cursors. Find and replace _still_ sucks, to this day.
Since Swift came along, which I love as a language, type and error checking has become incredibly slow. A type error somewhere in a file often completely breaks the ability to Opt+click any other types to read the very documentation you need to fix the error. Clicking related types often opens a “not found” page in the documentation explorer.
I’m doing Advent of Code in Swift this year and even for that—a couple dozen unconnected source files no more than 200 lines long each—I’ve had it refuse to rename files, breakpoints randomly stop working, Instruments refuse to let me edit configurations.
Surely Apple’s own developers dogfood this all day every day and run into the exact same problems?
> A type error somewhere in a file often completely breaks the ability to Opt+click any other types to read the very documentation you need to fix the error. Clicking related types often opens a “not found” page in the documentation explorer.
This is MADDENING. I’ve had to comment out hundreds of lines of code across multiple files to get rid of error messages that were blocking Opt+click documentation from opening. This feels 100% inexcusable.
(And if you do any SwiftUI development, get ready for a lot of “The compiler is unable to type-check this expression in reasonable time” caused by a bog-standard parameter type mismatch. This is more excusable though, since SwiftUI seems to do unspeakably complicated things with generics and existentials so I could see things getting tangled up sometimes)
> My first time was for a university project that I almost missed the deadline for because my app just refused to build one day, regardless of clearing all the caches etc. I eventually fixed that by starting a new project and copying all the files over.
I had the exact same experience, and it was also a uni project :)
Typing in Xcode also reminds me of VBA, where you'd only get the syntax highlighting for the line after completing it. Xcode regularly flashes it on-off for the entire file when typing. Quite an annoyance.
The worst thing is that Apple assumes everyone will use Xcode's GUI, and a lot of functionality is de-facto only available through Xcode.
It doesn't seem like a standalone SDK with an IDE layered on top, quite the opposite, the CLI build tools feel like a headless Xcode runner.
Building and code signing without Xcode is nearly impossible. The non-Xcode tooling is a disorganised half-deprecated bunch of ad-hoc commands, and they're mostly undocumented.
The most common end-user operating systems are Android and Windows, neither of those require a special GUI to create an app. You don't even need to buy specific hardware to write programs for those.
Try to create native Android apps without Android Studio, or Windows native apps without Visual Studio tooling, by native meaning using the platform GUIs, SDKs, APIs and blessed tier 1 programming languages.
Not trying to fit somethig that requires lots of yak shaving, and workarounds, to make it work without the vendors tooling.
Native APIs from the platform, not stuff that abstracts the platform.
How about using the vendor tooling? Here for example is the guide to running and building C# desktop Apps on MacOS: https://dotnet.microsoft.com/en-us/learn/maui/first-app-tuto...
This is one of the blessed tier 1 languages, GUI made by the platform vendor, and using a collection of open-source cross platform SDKs from the platform vendor.
Debugging on Windows if your customers are on Windows is probably more convenient, but people aren't using XCode for convenience, it's literally the only option to build any app.
Also, what's with this moving of goal posts:
> by native meaning
To ship non-native Apps on iOS you still need XCode.
> the platform GUIs
You can't publish a CLI on iOS, and for non-platform GUIs you still need XCode.
On all other mainstream platforms you can write a posix-compliant C program, and cross-platform it from almost any OS to almost any other OS. Android makes is a bit difficult to run CLI apps, but otherwise iOS is the one big exception to this, right? Don't you agree that iOS is a little bit different in that regard to other platforms?
The only way to get around it is to pay someone else to run XCode for you. Or
No, but it is on Windows? But you don't need Visual Studio or even Windows to write a desktop GUI application, and you can then run "natively" on Windows. "Native" is what Microsoft call it.
No, I'm not going to. I didn't claim all Windows APIs can be debugged or easily used without Visual Studio. I didn't claim all of Android features can be debugged without Android Studio.
Pornel made this claim:
> Building and code signing without Xcode is nearly impossible. [...]
Not for specific APIs, for all APIs. Just building code in general, and getting it signed (for e.g. iOS) requires XCode. To which you said:
> A trait common to all platforms, with exception of UNIX ecosystem, and even then commercial UNIXes aren't as free choice as BSD/Linux clones.
Why are you trying to limit this to specific APIs? Yes, there are some tasks you can only do in VS. But not to write any program working on Windows. Same for Android.
Indeed, but there's AvaloniaUI for this luckily. You could say it isn't blessed but works everywhere. There are case studies where rewriting WPF applications in Avalonia was solving memory and performance issues.
I do most of my coding with Jetbrains IDEs, but I have to edit a configuration file from time to time and for that I use vi. I know just a few percent of what vi can do, I use it as a command line "notepad". I feel safe running it under "sudo" or elevated with UAC and if I have to log into a strange Linux machine where I can't (package manager database corrupted -- that's why I'm there) or don't want to install software (it's not my machine) I can count on vi being there, my only beef is that I have to :syntax off because it's unusual to find a terminal where the dark blue shade can be read against a black background.
(I installed emacs for old times sake on two Linux machines and remembered why I switched to vi. ^S for search was already a weird choice for the command line because of the XON-XOFF conflict, but ^S for save rolls off you fingers if you use GUI programs on Windows. I'm sure you can change it, but the continuation characters emacs uses interferes with cut-and-paste.)
I love the dickens out of the Mac hardware and even quite a few things even about the software. But Xcode for me is something homebrew and other language package managers need as a dependency for some packages, and that's all. Having tried again recently to use Xcode, it's still a joke of an IDE with an unfunny punchline.
Just as a note, you can almost always get by with `xcode-select --install`[0] which installs the Xcode Command Line Tools, which is what `brew` et al. need.
`brew` added this as a step in its install script[1], too.
So, unless you are planning to do development in Xcode or want access to the device simulators for testing, there isn’t really much reason to actually install the Xcode application.
I've tried many times to get into macOS/iOS programming, and Xcode is always the thing that has stopped me. It's a shame, because I really would like to build native apps...
Xcode is the only IDE that I can crash by moving to a different branch. Rebasing with Xcode open thus is not stable. I can also crash it by trying to change a git SwiftPM dependency to a local one.
Also, debugging over IP is cool. Until you work on a VPN. And you set that one cool flag that ensures there are no leaks. Which means the debugger traffic can no longer leak into your IDE. I have never seen a tool this janky, and I've been using lots of FOSS before.
> An editor they can’t ruin: viewing a test file in Emacs
Bold of you to think that Apple can't classify text editors, file access, and lisp interpreters as security risks and ban them from the platform. Apple makes their money from iPhone sales, they only suffer Mac users to exist because they happen to create iOS apps.
XCode has always been such a disaster. I've been doing iOS dev on and off for over a decade and while the developer experience was not good at first, somehow it got consistently worse every year.
Even know I have no idea what some unlabeled icons are supposed to mean and have to stumble and guess where critical tools are, discovery is just terrible. Friends who don't have to use it normally react "and people live like this?" when first seeing the kind of things you have to do in a regular daily workflow.
I also decided very quickly to just use two editors way back then - Appcode first and then hilariously even Jetbrains gave up. Nowadays with fastlane I can luckily keep my XCode interactions to a minimum.
I'm going to make a bold claim here: Xcode and Swift Packages are actually pretty good! In my opinion what usually the real problem is, and this is a personal opinion based on a decade of working as an engineer and engineering manager on iOS projects, is that ... developers do not invest enough time to understand their tools.
I'll say it again: developers do not invest enough time to understand their tools.
It is always Xcode is crappy, complicated, broken, magical, dark magic, not documented. But here is the thing - I have dealt with a very large amount of issues like described in this post. Things around project structure, build logic, code signing, etc. And yes in the rare case it really did not work. But in 99% of the cases the developer who couldn't figure it out was just "trying random things until it worked" without actually understanding the tools. It is easier to shake the tree and see what falls out randomly than to take a step back and invest time in understanding a build system and then do the right thing.
SHould it be easier? Yeah maybe. Is Xcode complicated, year sure. But it is part of your job as an engineer to understand the tools and the things they do. So invest time in it.
I understand why some people use IDEs but I can't even imagine using them myself.
The first thing is that you give up control and become a prisoner to the whims of the tool developers, who think "simplicity and elegance" is a four letter word. Needless complexity and severe bloat rules the day. 90% of features you won't ever use. A build configuration and process you, and everyone else, cannot fathom. Editor defaults that seem to be carefully designed to be unlike every other editor ever written. Arbitrary constraints on pretty much everything. Platform and language specifics throughout.
I personally use Sublime Text because it's relatively simple, fast and programmable. It lets me build my process around the command line which is the only possible option for me.
I guess most people live in Java, Python or JavaScript ghettos, but I make wide use of open source on multiple platforms, which means I have to use C/C++, Objective C/C++, Rust, Java, Python, Cython and Go (I draw the line at JavaScript, never ever) and support web, Linux, Android, macOS, iOS, and winOS.
Even if you're not in my position, the platforms and languages you use very likely will change over time and maybe I'm old but it's nice when your development environment feels like your favorite old jeans or sneakers, not whatever the latest fashion in IDE corsets some team with apparently unlimited funding but very limited attention span has though up.
> most people live in Java, Python or JavaScript ghettos
Ghetto is a very strong word. But fine.
By the way, as I see it Python and JS folks are least known to be in IDE lock-ins. In fact non Android Java also to some extent is IDE agnostic. (I assume you were trying to make the counter point here? Anyway I took that.
Having said that..
> I draw the line at JavaScript, never ever
..oh yes, could not have agreed more! :)
Anyway, the thing is - people often have to use languages like Java (Kotlin) and ObjC (Swift) for a very specific use case and that is for Android and iOS and there is no easy way to not use the IDEs. God knows every Android developer has fantasised of the day when they can use the IDE of their choice and still every tooling around the setup works flawlessly. But then that's fantasy. Yes, people do use it if they want but that needs so much work that most people won't even think of going for it (and most people are those for whom development is a skill that earns money and is not a source of passion and joy if not source of resentment).
> very likely will change over time
No you are not very old and they do change. But that change is not at all difficult to catch up to. What I am trying to say is the IDEs, which suck (a lot of them, if not all), do life make easy in many ways and for teams/group actually have use-cases where one setups (with some changes or none) works for most and that is their use case. A lot of those setups are top-down. Coming right from Apples and Googles and JetBrains.
Writing Kotlin/Java and ObjC/Swift in your favourite editor is bliss but writing it for iOS/Android is nightmare and then dealing with tooling around that if it's not THE IDE is a bigger nightmare.
I am in my late 30s and I have learned that it is no big deal. Do I hate some of it aspects of and dislike further some of them? Fuck yeah. Are those deal breakers? Naah, far from it. It's okay. It works and gets the job done.
I am pretty sure that projects Package.json is incorrect. The demo app should be listed in the package targets as an executableTarget. In the Sources folder there should be a sub folder for Demo and for Library.
Now when you ask swift package to generate the Xcode project (it should not be in the repo) it will properly organize it all.
I never felt real comfortable with Xcode. Working on a medium sized c++ project now, and mostly using emacs. Xcode only for the debugger, which I much prefer in a GUI. CMake sets up the project, so low pain there. If on Windows, I would do the same but with Visual Studio. Usually I close the project when not debugging so I don't have 2 language servers running at once.
I've been super impressed by Android Studio overall - it works way better than any other platform-specific fork of a popular editor I've used (looking at you, Arduino). XCode is a waste of my time - it's slow, buggy, and the errors are useless if they decide to ever show up.
With all the "ai text editor" startups we've seen, someone just needs to find a way to hack the XCode build & emulator functionality into a useable editor, and they'll have thousands of paying users in a week.
And Xcode build failures usually tell you what's actually wrong, not some obscure Java/Gradle error you need to Google for 5 minutes to find the right stackoverflow post telling you which setting to change so it will build.
I used JetBrains AppCode until they killed it off. It was slower than Xcode, but felt way better to use than Xcode's text editor. Too bad they discontinued it, it probably wouldn't even be as slow on the M chips.
XCode is so bad - Makes me not want to build iOS apps. If Apple swallowed some of their pride and just focused on providing a great developer experience via extensions for the editors people already use like VS Code and Vim IMO every developer would be thankful
It's a walled garden. They think they are making you a big favour of even allowing you inside of their garden / prison. Take it or leave it. Or support Open Source instead.
Xcode is so slow and painful that I primarily use Cursor now to pseudo-lint, format, and generally edit. Switching over to Xcode just for the things that have to be done in Xcode.
There is something wrong with the IDE if an LLM has better response times.
Oh give me a break, Apple makes Logic Pro, Final Cut Pro, Apple Notes, Apple Calendar, Contacts all of those apps I'd consider competitive for best in their category.
I make $500k / year working with Xcode. Yeah, it sucks, but reading these threads makes me feel some sick gratitude for that. I think I probably have more job security and market power than I'd have if iOS dev wasn't so horribly painful sometimes.
Radar is where the reports die. I'd be amazed if Apple engineers didn't know about the thousands of things broken in Xcode. I can crash it in minutes just adding/removing controls and constraints. It shows there's minimal testing and even crash reports are ignored.
I have a 2 years old trivially reproducible "whole system crashes" feedback submission which doesn't get fixed.
It's confusing because I have to assume there's a sizeable amount of people using Xcode internally to develop Apple's own apps. I guess their voices aren't heard from the people dictating corporate priority.
Apple has a culture of ignoring bugs and just working on features.
The software program org decides what is going to happen for the next release, and engineers are assigned, and no resources are left to fix any existing bugs. The idea is for there to be “zero bugs” by the time a release is done, but this really means “any remaining bugs are punted to the N+1 release”. But when the N+1 release comes around, the cycle repeats and the program org picks the next thing to do, and everyone forgets about all the bugs that were punted. Repeat forever.
Engineers would kill for a “zero new features, let’s just fix bugs” release, but such a release would basically mean the program org has nothing to do, and the program org is in charge, so it never happens. They’ll mutter things like “we can’t go on stage and just not announce any features”, which isn’t wrong per se, but the first step to fixing a problem is to admit you have one, and that will never happen.
The whole thing is set up to produce worse software over time. It’s really really sad.
Trust me! I know. I know so hard. But that’s still the kind of thing they say. Everyone just up and forgot about snow leopard, or maybe they just see it as a failure if they had to do a snow leopard release (at least the program org would. The engineers would be throwing a party.)
> They’ll mutter things like “we can’t go on stage and just not announce any features”, which isn’t wrong per se
It is actually wrong. Mac OS X wasn't on an annual schedule until after Steve Jobs died. For a time, the schedule was more or less every two years, so there were some WWDCs when Jobs had little or nothing new to announce about it.
XCode is beyond broken, it doesn't need any feedback, anybody who uses it for more than 10 minutes can see it's awful. We know it, Apple knows it, everybody knows it.
This software isn't in an "it would be cool to improve this" stage but something like "can it still be saved?" stage.
Xcode is trash and I’m very sad that JetBrains discounted AppCode. It made things bearable even if I still had to use Xcode for certain tasks.
My biggest complaint with Xcode is speed. It’s feels incredibly laggy to me. Auto-complete is slow and error reporting is insanely slow. I hope you like typing code and then 5-30 seconds later the IDE shows an error (normally a bad one).
I’ve never had a good experience writing code in Xcode. Often I’ll just open the files in IDEA to have sane hotkeys, my plugins, multiple cursors, and the list goes on and on and on.
The shittiness of XCode and just app development in general for iOS, combined the mess that is Android development, is why I just gave up on native app development. I'm now entirely focused on web development and won't invest any time or effort in keeping up with native app development.
It's sad how the concept of native app leads to walled gardens, instead of the web being promoted and improved to be the primary way to deliver apps. And the web need serious and continual efforts to modernize its of development and use experience, but it is far superior model than native apps IMHO.
Since America just won't do it, the EU should force Apple and Google to allow the experience of using mobile web apps to be on par with that of native apps. At the very least, allow a one click way to add a web app to the home screen easily.
I love the web, I write cross platform mobile apps using web tech (same code as the website) that work 90%+ as well on web vs "native" (sometimes more, sometimes less depending on which features I need). The issue is even less-so with web capabilities (though I absolutely wish more was available) but with customers/client's expectations. I can spend all day telling someone "This website here does everything an app would" and they simply will not care until they see it in the App/Play Store.
I've seen this happen over 10+ external companies that I've worked with. I'll provide a website with the "app" that they can play with and literally 99% of the time they won't even look at it until it's in app form. Same codebase, same UI, same features, it's insane but I've seen it happen enough times to expect it. I think it's partly a prestige thing but whatever the cause, I don't see myself getting away from dealing with Xcode/Android Studio/App Store Connect/Google Play Console. At least Android Studio is built on IntelliJ... and that's about the only nice thing I can say about it (other than thank god it's not eclipse based anymore).
Are you saying these people never use websites for rich functionality, except for accessing brochure-style content?
> I'm now entirely focused on web development and won't invest any time or effort in keeping up with native app development.
I can't agree with this more. After having numerous problems with native android development before, I decided to give flutter a go recently for a mobile app idea I've been wanting to do.
After getting byzantine and seemingly unsolvable errors from flutter doctor and gradle for the 3rd time after completely reinstalling it every time, I just gave up and started making an app in tauri instead.
And Android Studio is even worse (that is weird, the bare IDE is the same as others, but the android apis and tooling overshadow it). And the use of Gradle multiplied it by 1000.
> Often I’ll just open the files in IDEA to have sane hotkeys, my plugins, multiple cursors, and the list goes on and on and on.
"Sane hotkeys" and "my plugins" are subjective (and suggest that you probably don't use Xcode as your primary editor). And Xcode has had multiple cursors since Xcode 10 in 2018 https://mjtsai.com/blog/2018/04/29/multiple-cursors-in-xcode...
The reason AppCode died is that Apple platform engineers on the whole are very happy with Xcode. Source: I worked as an Apple platforms engineer for a decade across many teams and the person who complained about Xcode the most was always me, and overall I also think it was usually pretty good, arguably great. That is until they added Swift, which always had performance and stability issues (many of the complaints in this thread are fair for Swift support in Xcode). It still worked quite well for me for the C family of languages though (I haven't used Xcode seriously in a couple of years now).
If your going to give your opinion on Xcode, it's a good idea to give a count for years that you've worked in the program. For an IDE I personally wouldn't bother with anyone's opinion that hasn't put at least 1000 hours in the program, and a lot of the comments in this thread sound like people who just opened the program for a one-off task and formed their opinion based on that.
My colleagues for years have been people who live in Xcode, eight hours a day, five days a week, and I've never heard opinions like this thread expressed by them (except for the Swift support).
Ok well you asked. I've been using Xcode for 15 years now professionally. I have two CS degrees and one of my apps was featured on the Mac App Store front page. So, basically, I know wtf I'm talking about.
I detest Xcode.
The latest horrible thing it has done to me is decide to ignore various important Build Settings, throwing them under User-Defined. Doesn't say way. Just pure magic bullshit.
It crashes occasionally, but that doesn't bother me that much. You just laugh at how bad it is and restart it.
Sometimes you'll get some code-signing errors and you just reboot. I kid you not. You reboot and they go away.
Xcode's connection to Xcode Cloud is pretty flakey too. Quite often it will fail to log in. You just restart Xcode and it goes away.
Xcode will display errors that are out of date all the time. I've gotten so good at knowing which errors are just BS that I'm kinda proud of myself.
Previews are useless. They could be so great but as soon as you break one, the debugging experience is so bad, you just give up. Sometimes your project will fail to build with them and the reasons are so opaque you just give up.
The xcodeproj file format is merge hell. It's so telling that tools like Xcodegen exist.
The new LLM-based code completion thing is mostly just amusing. Definitely not ready for prime time.
There's clearly no CI on the template projects because if you archive the Audio Unit one, the swift compiler crashes currently. Wheee!
Nobody uses the git integration on Xcode AFAICT. It runs faster if you just turn it off.
The GPU debugger is quite a crashy mess, though it has gotten better. Still you will not be able to debug your shaders and you'll have no idea why. The GPU debugger doesn't work if you put any MSL code inside a Swift package too. I used to have an icky work around for that, then just gave up on modularizing my project to the extent I would like to.
I experienced the issue mentioned in the article: couldn't add local packages by dragging them in. But somewhere along the line it went away. Don't know why, and I don't have the time to dig into it.
I really should compile a proper list. I'm sure I can think of more, especially if I go through the list of bugs I've filed over the years.
Anyway, now you've heard this opinion expressed by an experienced person. Consider it a data point.
Great list, way different than most of the comments on this thread. I don't see a single one I disagree with. I'd ask though, which IDE do you think is better than Xcode and in what way? My only argument I'd have against this list is it's kind of par for the course for an app of Xcode's age and complexity, e.g., you'd for sure get a similar list from Premiere or After Effects users, or any of the long-standing 3D packages (although, for a counterpoint, Logic Pro and Final Cut Pro users seem way happier, so it's at least theoretically possible to make complex, long-standing applications without these issues).
Before iOS, I was coding animation software on Linux using vim/scons for five years. So no real IDE. But not a fair comparison because we had a build team keeping everything nice. I also ported one of my apps to Windows and Visual Studio never drove me crazy. But I haven't worked with it to nearly the same depth as I have with Xcode.
So I concede that perhaps all IDEs are dreadful. I still hate Xcode.
I know pro users of Logic and Ableton and they never express such a level of displeasure. FWIW, having used Logic, Ableton, FCP, all non-professionally, those apps seem like a dream compared to Xcode.
I think it's likely that if Xcode weren't free, there would be serious competition and iOS development would be better for it. Or perhaps if Xcode were modularized so 3rd parties could use parts of it (Instruments, GPU debugger, memory graph debugger), lowering their development cost so they can compete with free.
I tried AppCode and while it seemed nice (refactoring was good in particular), I kept returning to Xcode to use the GPU debugger IIRC.
So, amusingly, I'm the inverse of your impression: the IDEs I've tried superficially I've generally enjoyed. The one I've used deeply I detest.
Thanks for sharing this! For Visual Studio, I always think of this video https://www.youtube.com/watch?v=wCllU4YkxBk that pretty much just leaves the JetBrains IDEs, which are obviously well loved. I've never had a good first impression with them, so I haven't bothered to get deeper into them, but I also don't have the experience to form a fair opinion (although when I read about what folks like about JetBrains, it doesn't resonate with me, usually it's about refactoring tools, which I don't care about).
Reporting in with my experience with JetBrains IDEs - they are generally OK, but the quality has gone massively down over the last couple of years (some worse than others, Rider has been okay, though new features often just don't work at all). Quoting my own comment with some memorable new issues in WebStorm from last year, written a couple of months ago (with links to the issue tracker)[0]:
- The autocomplete popup sometimes froze the IDE completely (and killing the process caused minutes of data loss), open for close to a year
- Since two months ago, the Typescript language server fails to start in Vue projects (due to a broken update by the Vue team). A fixed version of WebStorm was released yesterday, in the meantime you were apparently expected to search for the error message, stumble upon the YouTrack page, and apply a workaround
- Performance is abysmal in a larger React MUI project, think 10-15 seconds for feedback on code changes, sometimes errors just stick around for a good minute or more
- In some situations WebStorm makes autocomplete suggestions that aren't allowed - think effectively a type T with keys K | L, where Omit<T, K> leads to only suggesting K properties, while removing the Omit makes it suggest both K and L properties
- After updating from 2024.1.X to 2024.2.Y, the window had no buttons for minimizing/maximizing anymore. Now, this was partially caused by my environment, but after I found a workaround it was closed as "Third Party Problem". Still feels like a regression to me, since my environment did not change.
I've mostly stopped updating the IDE, as almost every version brings new regressions in basic editor features. This morning I updated and tried to copy some text. WebStorm showed me a "Copying..." dialogue for more than 30 seconds.
[0] https://news.ycombinator.com/item?id=41939833
PSA: Turning off the "Enable Source Control" feature has always been a must for me to get decent performance out of Xcode.
Thanks for the tip, I'll need to try it out.
Performance is really abysmal with C++ development and it's the biggest reason for avoiding Xcode for me. Actions such as completion and contextual jumping just keeps lagging on a M3 Pro even if everything should be indexed. VS Code with the usual C++ plugin and CLion have no problems with the same codebase.
I like the integration with different sanitizers in Xcode, some of the visualizations are pretty neat. Instruments is quite good as well.
Interesting, I would/have never managed git from within Xcode so I'll be turning that off for sure.
Perhaps JetBrains should reconsider AppCode, since Xcode only got this crappy recently. Apparently they didn't get the market share they had hoped for.
https://blog.jetbrains.com/appcode/2022/12/appcode-2022-3-re...
Xcode only got this crappy recently
It gets exponentially more crappy every time, which creates an impression that it only got crappy recently. I remember it doing this since 2010. The usual counter is to stay on the same version until either of you is literally dead.
Although I didn’t find AppCode more useful for my simple tasks. If anything, it felt android-ish in ux, if you know what I mean.
> It gets exponentially more crappy every time
On which ratio scale (https://en.wikipedia.org/wiki/Level_of_measurement#Ratio_sca... ) do you define/measure "crappiness" so that you can say that "crappiness" grows exponentially? ;-)
> since Xcode only got this crappy recently
I've always felt like it was slow and annoying to use personally. At least coming from the IntelliJ world, maybe if you were only in Xcode it was pretty decent until recently.
Same. Coming from Visual Studio, XCode always felt just kinda bad.
They seem to be putting all of their eggs in the Kotlin multi-platform basket.
Might also be why they discontinued it so those devs with iOS expertise could focus on that.
Kotlin which is a beautiful language unfortunately is killed by Gradle which is even worse than Xcode
Officially they never got enough sales out of it, that is why.
So XCode isn't bad enough that developers would consider paying for better alternatives.
Xcode is a really hard one to replace because at the end of the day you pretty much have to use it at least a little bit so some developers will probably choose to use it just so they don't have to use two editors. I'm not aware of many/any other languages/platforms that are that locked down (at least in mainstream programming)
Windows and game consoles.
Yes, there are tons of stuff you can do on Windows without Visual Studio, but then you aren't doing all the scenarios a Windows developer might care about.
There is also that little bit only available in a mix of Windows SDK and VS plugins.
It's remarkably unintutive for tasks that should be even trivial (like splitting an editor pane). Getting acclimated in a basic fashion takes far longer than it should given my experience with every other modern IDE.
Are you using source-based dependencies? Have you tried Carthage instead?
I remember reading a positive xcode review on the app store that was something to the effect of: "so much better than the next one!"
I am not an iOS/macOS developer, but I resonated strongly with this post because it captures how I feel the general experience of upgrading Apple OSes has been over the past few years: With each update, I find myself asking, what is going to be broken that used to simply "just work"?
I'm not talking about controversial new design directions like the iOS photos app redesign, I mean broken behavior. I can't recall everything off the top of my head, but just a few examples that come to mind:
- The new macOS has a system info pop-up every time any application is using your screen. It tells you how many times the application has accessed your audio or video over the last month, and tells you that you can manage this in settings. You cannot turn this notification off, and it is repeatedly triggered every few seconds by applications such as Zoom. This popup sometimes (but not always) steals application focus, which means if I am screensharing a code editor, keystrokes will inexplicably stop being sent to it.
- In a recent version of iOS, I could no longer tap on the calendar event time-selection wheel while creating an event to manually type the time instead of spinning to select it. As soon as I started typing numbers, the UI would disappear and only a partial time would be entered. In the most recent version of iOS this has been fixed, but for a while the entire workflow of how I create calendar events was broken.
- I used to be able to ask Siri to create an alarm for X minutes from now, but an update or two back Siri started creating timers instead.
- For a few prior iOS versions, I would reduce volume or brightness in the iOS control center, only to have the sliders pop back up from time to time on their own.
The general feeling of using iOS and macOS lately is that I can no longer rely on things continuing to behave the way they used to. Although macOS is a far better operating system experience than Windows, and far more polished than Linux on the desktop, it just feels like the reliable usability of Apple operating systems is slowly ebbing away.
Maybe this is a sign that I'm turning into a curmudgeonly old graybeard in my middle age.
I am not sure if my mind is playing tricks on me or sometimes with some apps the focus doesn't work right. Like desktop Whatsapp looks to be in focus, but when I try typing nothing happens, than I need to click on it or restart it before I can type into the message box, but one time I managed to rename a folder on my desktop (and only realized this much later). One of the downsides of the macos windowing system allowing active apps without any windows shown. I'm scared I will delete something important or do damage if I can't be sure my mental model maps correctly to what's happening on the computer.
> macos windowing system allowing active apps without any windows shown.
This seems like a security issue. What if you're typing a password quickly and hit Enter but it turns out that focus was in Discord or something?
How’s this any different from saying “2 monitors is a security issue, what if you’re typing a password but Discord on monitor 2 was in focus”?
Typically when I’m typing my password into an input on any platform, I’m looking at the password input, and if it loses focus, I’m going to notice.
On most OSs these days (including macOS), native password inputs are rendered by an elevated privilege secure process, and focus stealing behavior is disabled while the password input is on-screen.
Same, I have a Mac but every week I check the progress of linux support for the Snapdragon X1E!
I am running Sonoma (and iOS 17) with no plan to update. I don't want AI built into the OS. Very happy with ollama and our own code.
In fact what I would like the most is to strip the OS to the bare minimum: Remove Photos and whatnot from the OS (hey it's an app, I should be able to install it from the AppStore if I want) and the hundreds of daemons that run to do who knows what.
I tell myself I'm a minority here... but everyday I stumble upon all types of users who want the same.
I think both operating systems are incredibly complicated compared to years past and their development model is straining in some ways with the relentless pace of development and integration with online services.
You see it if you run the betas. Even something as seemingly simple as the keyboard needs integration with a dozen or more other modules. I’m experiencing a lot of bugs with the emoji keyboard in the iOS beta - no surprise… it’s hooked into 2-3 different custom emoji schemes, AI generation, etc.
Xcode is the reason i've never written true native mac apps. Ever.
I program hobby stuff in lots of environments and languages depending on how i'm feeling. I have no trouble starting up Rider, PyCharm, Visual Studio, VSCode, whatever, and writing C#+Maui/Avalonia, Rust, Svelte+Tauri, Python+QT, etc.
Whatever will work best for what i'm trying to do, or seems fun at the time.
That's for regular coding, too. I have lots of PLC environments i work with for embedded stuff (Siemens, etc).
I've learned lots of environments, and while they all have their issues, etc, they are all fairly usable pretty quickly, and stay that way.
Meanwhile, every time i have ever sat down and tried to use XCode (a bunch of times over the past 10+ years), it is so annoying that i give up in a day or two and just go use something else.
It's gotten progressively worse - it felt much easier to try 10 years ago than it does now.
It is hard to describe how strange it feels to try to use it. I guess i'll go with "it often feels like it was created for use by some alien race specializing in industrial automation".
It's not quite right, but i think it transfers some of the feeling.
I honestly can't imagine how anyone uses it on a regular basis.
Exactly, I swore off the whole native app development a long time ago, to preserve my sanity. Android development is also a mess.
Meanwhile, there's still no really good way to development cross-platform desktop apps too. I'll just stick to the web, thank you.
In my view the web is a special thing, and I really hope the industry does not neglect it and cause it to die. JS is getting better, but HTML is is serious need of a revamp to support rich UI apps.
One of the reasons I stopped iOS development was because of how clunky, slow, opaque and buggy Xcode is. I’m amazed people have the patience to work with it especially when coupled with Swift being so picky with terrible error messages and Apple’s awful developer docs.
The thing that shocked me about doing Swift app development was despite all of the syntactic requirements for types and null-checking, the program would crash with runtime errors as if I were still using C.
It's been a while, but I remember splitting time between XCode and VScCode for iOS projects made it bearable. Apple docs aren't perfect but I found Swift to be enjoyable enough as long as you don't accidentally run afoul of type checker bugs.
I’ve been (very) casually dabbling with iOS and Mac development on and off since about 2011, and the one constant has been that Xcode is incredibly janky.
My first time was for a university project that I almost missed the deadline for because my app just refused to build one day, regardless of clearing all the caches etc. I eventually fixed that by starting a new project and copying all the files over.
Various versions would crash with alarming frequency. For years it was missing common text editing features like multiple cursors. Find and replace _still_ sucks, to this day.
Since Swift came along, which I love as a language, type and error checking has become incredibly slow. A type error somewhere in a file often completely breaks the ability to Opt+click any other types to read the very documentation you need to fix the error. Clicking related types often opens a “not found” page in the documentation explorer.
I’m doing Advent of Code in Swift this year and even for that—a couple dozen unconnected source files no more than 200 lines long each—I’ve had it refuse to rename files, breakpoints randomly stop working, Instruments refuse to let me edit configurations.
Surely Apple’s own developers dogfood this all day every day and run into the exact same problems?
> A type error somewhere in a file often completely breaks the ability to Opt+click any other types to read the very documentation you need to fix the error. Clicking related types often opens a “not found” page in the documentation explorer.
This is MADDENING. I’ve had to comment out hundreds of lines of code across multiple files to get rid of error messages that were blocking Opt+click documentation from opening. This feels 100% inexcusable.
(And if you do any SwiftUI development, get ready for a lot of “The compiler is unable to type-check this expression in reasonable time” caused by a bog-standard parameter type mismatch. This is more excusable though, since SwiftUI seems to do unspeakably complicated things with generics and existentials so I could see things getting tangled up sometimes)
> My first time was for a university project that I almost missed the deadline for because my app just refused to build one day, regardless of clearing all the caches etc. I eventually fixed that by starting a new project and copying all the files over.
I had the exact same experience, and it was also a uni project :)
Typing in Xcode also reminds me of VBA, where you'd only get the syntax highlighting for the line after completing it. Xcode regularly flashes it on-off for the entire file when typing. Quite an annoyance.
The worst thing is that Apple assumes everyone will use Xcode's GUI, and a lot of functionality is de-facto only available through Xcode.
It doesn't seem like a standalone SDK with an IDE layered on top, quite the opposite, the CLI build tools feel like a headless Xcode runner.
Building and code signing without Xcode is nearly impossible. The non-Xcode tooling is a disorganised half-deprecated bunch of ad-hoc commands, and they're mostly undocumented.
A trait common to all platforms, with exception of UNIX ecosystem, and even then commercial UNIXes aren't as free choice as BSD/Linux clones.
The most common end-user operating systems are Android and Windows, neither of those require a special GUI to create an app. You don't even need to buy specific hardware to write programs for those.
Try to create native Android apps without Android Studio, or Windows native apps without Visual Studio tooling, by native meaning using the platform GUIs, SDKs, APIs and blessed tier 1 programming languages.
Not trying to fit somethig that requires lots of yak shaving, and workarounds, to make it work without the vendors tooling.
Native APIs from the platform, not stuff that abstracts the platform.
How about using the vendor tooling? Here for example is the guide to running and building C# desktop Apps on MacOS: https://dotnet.microsoft.com/en-us/learn/maui/first-app-tuto... This is one of the blessed tier 1 languages, GUI made by the platform vendor, and using a collection of open-source cross platform SDKs from the platform vendor. Debugging on Windows if your customers are on Windows is probably more convenient, but people aren't using XCode for convenience, it's literally the only option to build any app.
Also, what's with this moving of goal posts:
> by native meaning
To ship non-native Apps on iOS you still need XCode.
> the platform GUIs
You can't publish a CLI on iOS, and for non-platform GUIs you still need XCode. On all other mainstream platforms you can write a posix-compliant C program, and cross-platform it from almost any OS to almost any other OS. Android makes is a bit difficult to run CLI apps, but otherwise iOS is the one big exception to this, right? Don't you agree that iOS is a little bit different in that regard to other platforms?
The only way to get around it is to pay someone else to run XCode for you. Or
C# isn't a blessed tier 1 language on macOS.
MAUI doesn't even use macOS UI APIs directly, rather the Catalyst framework to emulate iOS APIs on macOS.
> C# isn't a blessed tier 1 language on macOS.
No, but it is on Windows? But you don't need Visual Studio or even Windows to write a desktop GUI application, and you can then run "natively" on Windows. "Native" is what Microsoft call it.
Try to do Windows Formw, WPF, WinUI without Visual Studio, no, Rider doesn't support 100% of the ecosystem.
No, I'm not going to. I didn't claim all Windows APIs can be debugged or easily used without Visual Studio. I didn't claim all of Android features can be debugged without Android Studio.
Pornel made this claim:
> Building and code signing without Xcode is nearly impossible. [...]
Not for specific APIs, for all APIs. Just building code in general, and getting it signed (for e.g. iOS) requires XCode. To which you said:
> A trait common to all platforms, with exception of UNIX ecosystem, and even then commercial UNIXes aren't as free choice as BSD/Linux clones.
Why are you trying to limit this to specific APIs? Yes, there are some tasks you can only do in VS. But not to write any program working on Windows. Same for Android.
Indeed, but there's AvaloniaUI for this luckily. You could say it isn't blessed but works everywhere. There are case studies where rewriting WPF applications in Avalonia was solving memory and performance issues.
Yeah, and is a great project, yet it is a layer on top of the actual Windows APIs.
The point was about the OS vendor tooling, not third parties.
I think it's normal to have a backup editor.
I do most of my coding with Jetbrains IDEs, but I have to edit a configuration file from time to time and for that I use vi. I know just a few percent of what vi can do, I use it as a command line "notepad". I feel safe running it under "sudo" or elevated with UAC and if I have to log into a strange Linux machine where I can't (package manager database corrupted -- that's why I'm there) or don't want to install software (it's not my machine) I can count on vi being there, my only beef is that I have to :syntax off because it's unusual to find a terminal where the dark blue shade can be read against a black background.
(I installed emacs for old times sake on two Linux machines and remembered why I switched to vi. ^S for search was already a weird choice for the command line because of the XON-XOFF conflict, but ^S for save rolls off you fingers if you use GUI programs on Windows. I'm sure you can change it, but the continuation characters emacs uses interferes with cut-and-paste.)
I love the dickens out of the Mac hardware and even quite a few things even about the software. But Xcode for me is something homebrew and other language package managers need as a dependency for some packages, and that's all. Having tried again recently to use Xcode, it's still a joke of an IDE with an unfunny punchline.
Just as a note, you can almost always get by with `xcode-select --install`[0] which installs the Xcode Command Line Tools, which is what `brew` et al. need.
`brew` added this as a step in its install script[1], too.
So, unless you are planning to do development in Xcode or want access to the device simulators for testing, there isn’t really much reason to actually install the Xcode application.
[0]: https://apple.stackexchange.com/questions/107307/how-can-i-i... [1]: https://github.com/Homebrew/install/blob/ee0036121331ff32d72...
I've tried many times to get into macOS/iOS programming, and Xcode is always the thing that has stopped me. It's a shame, because I really would like to build native apps...
Xcode is the only IDE that I can crash by moving to a different branch. Rebasing with Xcode open thus is not stable. I can also crash it by trying to change a git SwiftPM dependency to a local one. Also, debugging over IP is cool. Until you work on a VPN. And you set that one cool flag that ensures there are no leaks. Which means the debugger traffic can no longer leak into your IDE. I have never seen a tool this janky, and I've been using lots of FOSS before.
> An editor they can’t ruin: viewing a test file in Emacs
Bold of you to think that Apple can't classify text editors, file access, and lisp interpreters as security risks and ban them from the platform. Apple makes their money from iPhone sales, they only suffer Mac users to exist because they happen to create iOS apps.
And we're back to the roots of Project Builder, XCode's predecessor.
Or, to be honest, early XCode versions, where a lot of editing was done in more stable/capable editors.
And project builder produced understandable build files rather than opaque not very good XML.
They were Makefiles albeit complex ones.
So PB was more like CMake :(
Christian, have a look at how IceCubes [0] has their packages setup. We were having the same issues and copying their setup worked for us.
[0] https://github.com/Dimillian/IceCubesApp/
XCode has always been such a disaster. I've been doing iOS dev on and off for over a decade and while the developer experience was not good at first, somehow it got consistently worse every year.
Even know I have no idea what some unlabeled icons are supposed to mean and have to stumble and guess where critical tools are, discovery is just terrible. Friends who don't have to use it normally react "and people live like this?" when first seeing the kind of things you have to do in a regular daily workflow.
I also decided very quickly to just use two editors way back then - Appcode first and then hilariously even Jetbrains gave up. Nowadays with fastlane I can luckily keep my XCode interactions to a minimum.
I'm going to make a bold claim here: Xcode and Swift Packages are actually pretty good! In my opinion what usually the real problem is, and this is a personal opinion based on a decade of working as an engineer and engineering manager on iOS projects, is that ... developers do not invest enough time to understand their tools.
I'll say it again: developers do not invest enough time to understand their tools.
It is always Xcode is crappy, complicated, broken, magical, dark magic, not documented. But here is the thing - I have dealt with a very large amount of issues like described in this post. Things around project structure, build logic, code signing, etc. And yes in the rare case it really did not work. But in 99% of the cases the developer who couldn't figure it out was just "trying random things until it worked" without actually understanding the tools. It is easier to shake the tree and see what falls out randomly than to take a step back and invest time in understanding a build system and then do the right thing.
SHould it be easier? Yeah maybe. Is Xcode complicated, year sure. But it is part of your job as an engineer to understand the tools and the things they do. So invest time in it.
I understand why some people use IDEs but I can't even imagine using them myself.
The first thing is that you give up control and become a prisoner to the whims of the tool developers, who think "simplicity and elegance" is a four letter word. Needless complexity and severe bloat rules the day. 90% of features you won't ever use. A build configuration and process you, and everyone else, cannot fathom. Editor defaults that seem to be carefully designed to be unlike every other editor ever written. Arbitrary constraints on pretty much everything. Platform and language specifics throughout.
I personally use Sublime Text because it's relatively simple, fast and programmable. It lets me build my process around the command line which is the only possible option for me.
I guess most people live in Java, Python or JavaScript ghettos, but I make wide use of open source on multiple platforms, which means I have to use C/C++, Objective C/C++, Rust, Java, Python, Cython and Go (I draw the line at JavaScript, never ever) and support web, Linux, Android, macOS, iOS, and winOS.
Even if you're not in my position, the platforms and languages you use very likely will change over time and maybe I'm old but it's nice when your development environment feels like your favorite old jeans or sneakers, not whatever the latest fashion in IDE corsets some team with apparently unlimited funding but very limited attention span has though up.
I’ve found it impossible to write Objective C on a non-Xcode editor without losing my sanity; I don’t know how you do that.
IntelliJ covers all those languages. I don't use 90% of the features but the other 10% are huge productivity increases.
> most people live in Java, Python or JavaScript ghettos
Ghetto is a very strong word. But fine.
By the way, as I see it Python and JS folks are least known to be in IDE lock-ins. In fact non Android Java also to some extent is IDE agnostic. (I assume you were trying to make the counter point here? Anyway I took that.
Having said that..
> I draw the line at JavaScript, never ever
..oh yes, could not have agreed more! :)
Anyway, the thing is - people often have to use languages like Java (Kotlin) and ObjC (Swift) for a very specific use case and that is for Android and iOS and there is no easy way to not use the IDEs. God knows every Android developer has fantasised of the day when they can use the IDE of their choice and still every tooling around the setup works flawlessly. But then that's fantasy. Yes, people do use it if they want but that needs so much work that most people won't even think of going for it (and most people are those for whom development is a skill that earns money and is not a source of passion and joy if not source of resentment).
> very likely will change over time
No you are not very old and they do change. But that change is not at all difficult to catch up to. What I am trying to say is the IDEs, which suck (a lot of them, if not all), do life make easy in many ways and for teams/group actually have use-cases where one setups (with some changes or none) works for most and that is their use case. A lot of those setups are top-down. Coming right from Apples and Googles and JetBrains.
Writing Kotlin/Java and ObjC/Swift in your favourite editor is bliss but writing it for iOS/Android is nightmare and then dealing with tooling around that if it's not THE IDE is a bigger nightmare.
I am in my late 30s and I have learned that it is no big deal. Do I hate some of it aspects of and dislike further some of them? Fuck yeah. Are those deal breakers? Naah, far from it. It's okay. It works and gets the job done.
Xcode feels like using a chainsaw to give someone a haircut.
https://m.youtube.com/watch?v=HAv8CUpRDbA
I am pretty sure that projects Package.json is incorrect. The demo app should be listed in the package targets as an executableTarget. In the Sources folder there should be a sub folder for Demo and for Library.
Now when you ask swift package to generate the Xcode project (it should not be in the repo) it will properly organize it all.
I never felt real comfortable with Xcode. Working on a medium sized c++ project now, and mostly using emacs. Xcode only for the debugger, which I much prefer in a GUI. CMake sets up the project, so low pain there. If on Windows, I would do the same but with Visual Studio. Usually I close the project when not debugging so I don't have 2 language servers running at once.
As I commented already on the article I’m almost positive this article is straight up wrong.
I understand bashing Xcode is cool, but please be accurate when doing so!
I use both Xcode and Android Studio as my day job, I enjoy coding more on the latter.
Even a simple git switch will break Xcode's project build, it's insane.
I've been super impressed by Android Studio overall - it works way better than any other platform-specific fork of a popular editor I've used (looking at you, Arduino). XCode is a waste of my time - it's slow, buggy, and the errors are useless if they decide to ever show up.
With all the "ai text editor" startups we've seen, someone just needs to find a way to hack the XCode build & emulator functionality into a useable editor, and they'll have thousands of paying users in a week.
Ah, but you’d have to use Xcode to build the editor… are you volunteering?
At least XCode doesn't hang the machine indexing files, or requires 16 GB to be barely usable.
And Xcode build failures usually tell you what's actually wrong, not some obscure Java/Gradle error you need to Google for 5 minutes to find the right stackoverflow post telling you which setting to change so it will build.
I used JetBrains AppCode until they killed it off. It was slower than Xcode, but felt way better to use than Xcode's text editor. Too bad they discontinued it, it probably wouldn't even be as slow on the M chips.
XCode is so bad - Makes me not want to build iOS apps. If Apple swallowed some of their pride and just focused on providing a great developer experience via extensions for the editors people already use like VS Code and Vim IMO every developer would be thankful
It's a walled garden. They think they are making you a big favour of even allowing you inside of their garden / prison. Take it or leave it. Or support Open Source instead.
Xcode is so slow and painful that I primarily use Cursor now to pseudo-lint, format, and generally edit. Switching over to Xcode just for the things that have to be done in Xcode.
There is something wrong with the IDE if an LLM has better response times.
Separately, Cursor Composer is awesome.
apple makes terrible software, full stop. it just gets worse
Oh give me a break, Apple makes Logic Pro, Final Cut Pro, Apple Notes, Apple Calendar, Contacts all of those apps I'd consider competitive for best in their category.
I like Xcode!
Why deal with Xcode at all, then, if there is some LSP and a CLI build will work?
You definitely can get away with this but certain things like capabilities and signing necessitate using Xcode afaik.
You can manage that outside of Xcode using something like Fastlane but it's way easier in Xcode (well, kind of...).
I make $500k / year working with Xcode. Yeah, it sucks, but reading these threads makes me feel some sick gratitude for that. I think I probably have more job security and market power than I'd have if iOS dev wasn't so horribly painful sometimes.
Could have spent the time filing a feedback request/radar instead of writing a blog post.
Radar is where the reports die. I'd be amazed if Apple engineers didn't know about the thousands of things broken in Xcode. I can crash it in minutes just adding/removing controls and constraints. It shows there's minimal testing and even crash reports are ignored.
I have a 2 years old trivially reproducible "whole system crashes" feedback submission which doesn't get fixed.
It's confusing because I have to assume there's a sizeable amount of people using Xcode internally to develop Apple's own apps. I guess their voices aren't heard from the people dictating corporate priority.
Apple awaits a new CEO.
Apple has a culture of ignoring bugs and just working on features.
The software program org decides what is going to happen for the next release, and engineers are assigned, and no resources are left to fix any existing bugs. The idea is for there to be “zero bugs” by the time a release is done, but this really means “any remaining bugs are punted to the N+1 release”. But when the N+1 release comes around, the cycle repeats and the program org picks the next thing to do, and everyone forgets about all the bugs that were punted. Repeat forever.
Engineers would kill for a “zero new features, let’s just fix bugs” release, but such a release would basically mean the program org has nothing to do, and the program org is in charge, so it never happens. They’ll mutter things like “we can’t go on stage and just not announce any features”, which isn’t wrong per se, but the first step to fixing a problem is to admit you have one, and that will never happen.
The whole thing is set up to produce worse software over time. It’s really really sad.
> “we can’t go on stage and just not announce any features”, which isn’t wrong per se
But they literally already did exactly that!
http://ismh.s3.amazonaws.com/snow-leopard-0-new-features.jpg
Trust me! I know. I know so hard. But that’s still the kind of thing they say. Everyone just up and forgot about snow leopard, or maybe they just see it as a failure if they had to do a snow leopard release (at least the program org would. The engineers would be throwing a party.)
> They’ll mutter things like “we can’t go on stage and just not announce any features”, which isn’t wrong per se
It is actually wrong. Mac OS X wasn't on an annual schedule until after Steve Jobs died. For a time, the schedule was more or less every two years, so there were some WWDCs when Jobs had little or nothing new to announce about it.
Yeah, I don’t file bug reports anymore. I just write in the ticket “this is probably an Apple bug with XCode. Workaround:” and then go on with my life
That’s a good joke. Radars appear to be largely ignored.
XCode is beyond broken, it doesn't need any feedback, anybody who uses it for more than 10 minutes can see it's awful. We know it, Apple knows it, everybody knows it.
This software isn't in an "it would be cool to improve this" stage but something like "can it still be saved?" stage.