Some valid points, but the compiler isn't Xcode and Swift isn't able to check the expression. Imho in these cases it's the developers lack of insight into how SwiftUI works, but otoh Apple often doesn't help with obtaining the insight..
They will also silently stop supporting some piece of library you rely on, leave it broken in some way or another, and just leave you on your own.
However, it has its good sides. The profiling tools are great for example. And I would rather work on 10 difficult problems with Xcode than on 1 with Visual Studio..
Thank you for sharing this, now I feel less dumb.
Recently I had the pain of publishing my app (Flutter/Dart) on the apple Appstore, admittedly, my first experience using a mac in the last 30 years so I don't speak mac at all, but like, I know computers right?... famous last words.
I thought I was "holding it wrong"... like really badly wrong! and all I was trying to do was clone my repo and compile it for the store, that's it. took me nights and nights to get over each subsequent hurdle and false peak and missing import and then at the end, oh please upgrade and start again.
Thank goodness I only need it for that 1 step and I can do everything else on computers and software that is normal for me. As a first time app maker, I've had a super experience with Flutter in VScode.
Apple has always been famously anti-developer. They write terrible documentation, too. You're supposed to suck up to them to get access to their precious users.
Everything in this article is a reason to stay away from everything proprietary about Apple development. If there is some software that can't be delivered with open web technology or an existing game engine, I'd like to know what it is.
FWIW, I've been developing on the mac for about twenty years now, and I think they're at worst in the middle of developer experiences. I prefer it to working with eg GTK and JS/HTML/CSS (though, CSS does have its sweet spots). The worst part is that they can be agonizingly slow to fix very obvious bugs. The documentation could certainly be much worse, and there are so many eyes on their tools now it's in many ways much easier now to be productive than it used to be. The debugging and profiling is excellent.
I've never trued developing for windows so I could easily imagine it's better across the board.
It also helps if you don't need to go through their app stores, which is a hell of its own.
He or she forgot all the gems about the xcode garbage randomly losing contact with ios devices and the random thrashing you use to attempt to reconnect. It's particularly galling since all my ios devices aren't even used: they're test devices only. So they're completely stock and solely run my app.
The sad thing is that Apple seemed more inviting to developers before they got high on the App Store cut.
Every boxed Mac OS X came with a second disc containing the SDK (Xcode has always been an unstable cow, tho). They used to publish tech notes that explained how the OS works, rather than WWDC videos with high-level overviews that feel more like advertisements.
Back then they've at least made attempts to use some open standards, and allowed 3rd parties to fill gaps in the OS, instead of acting like a Smaug of APIs.
Yes, but this doesn't mean we should put up with it. After this comes into effect in 2027 or so, you won't be able to install an app on your Google-certified phone without Google knowing, just like on iOS. What happened to user control?
Apple doesn’t care. Look at how bad iTunes or iCloud or whatever is. Especially on windows. Their software is terrible. They focus mostly on what makes money. And the support is non existent. All you can do is shout in the forums but some Apple apologist will respond rudely or with some unhelpful generic tips that do nothing.
I couldn't agree more - the not caring part. But then you should try to do an app in the Android code/build/test/publish ecosystem. As someone who had/has to use both os/dev ecosystems for work, I often wondered which one is worse, and what bothered me is that I couldn't conclude.
So in this great duopoly, these two tech giants constantly compete to become more and more hostile and pathetic to both the users and the developers.
> Apple apologist will respond rudely or with some unhelpful generic tips
Aha. The "you are holding it wrong", "this is how the Lord intended it to behave", "buy a new .." … fruit company fan base phenomena.
Apple's majority of buyers aren't their users or consumers; they are Apple fans and supporters. If Apple had consumers like Android, Linux, or Windows, either they would have fixed their act or been in the ground by now.
Personal view on the Xcode issue is this part of your comment:
> lock people into your ecosystem
There's no real alternative to Xcode, if you're going to develop for Apple, you pretty much just have to take the dive, buy Apple hardware, and use Xcode. You don't really know what you're getting into before you get there, and by then you've got sunk cost and just have to trudge through. Somebody a while back had a comment that kind of epitomized it (paraphrased from bad memory): "I thought I was their target customer. I'm not. I'm not sure who their target customer is. Who is this even written for?"
> (...) I think its left a little bit of taint on my soul. It is unfathomably bad. Apple keep bolting stuff on to it. It's slow, broken in numerous ways, depends on file formats that aren't used anywhere outside of Apple and completely undocumented. It is such a painful tool to use.
Maybe as an Xcode user you have a better perspective, yet Android was actually better personally than most of the development ecosystems from my own perspective. Actually managed to at least publish three apps. Never went anywhere, yet that's a different issue.
Had a comment on another thread's Switch 2 development complaints, re. the few I have tried - Nintendo, Steam, and Google.
Nintendo - The process itself is opaque, confusing, and difficult to determine your status or progress, even large companies have difficulty.
Steam - Signing up and putting launch title info was difficult, yet Wayyyyy easier and clearer to navigate. Tools are kind of a mess, and figuring out everything you need is a challenge. (comments on the SDK are at least funny sometimes)
// This is really, really bad. We're sorry. But it's been this way for
// a long time now and it's scary to change it, as there may be others that
// depend on it.
// Recommended amount
// Quite a bit
// Practically everything
// Wall of text, detailed packet contents breakdown, etc
/* Prefer user version of the interface. But if it isn't found, then use gameserver one. Yes, this is a completely terrible hack */
// This totally sucks, but this information can't be gleaned any
// other way
// (200 lines later) actually no way to do this yet.
// um, yeah, clipping is enabled (?)
// (500 lines later) ???? is clipping ever turned off ??
// hush for now, less spew
Google Play - Dramatically easier to sign up. Much clearer steps, progress, and timeline for release. Inclusions to actually release, much clearer. Actually managed to release three products.
Nintendo "How do I even sign up?" Steam "Great, signed up, how do I release something?" Google "Easy sign-up, somewhat easy release of products, eventually got three out the door. Your products have been removed for (mumble mumble legalese)"
A while back I listlened to a podcast where Ted Bendixson talked about what a nightmare trying to build for IOS outside XCode was (he did a write up about it here https://tedbendixson.substack.com/p/the-horror-of-making-you...). At the time I assumed it was malicious on Apple's part, "we want you working in our ecosystem and if you won't we are going to make it absolutely miserable". After reading this maybe it really was just incompetence.
Swift is actually a really good language let down by its official IDE. Slow build times, laggy autocomplete, random crashes etc. I can’t remember Xcode ever being great to use.
> Slow build times, laggy autocomplete, random crashes etc.
I bet these issues are caused by Swift though, because C, C++ and ObjC don't have those problems in Xcode (it's still far from perfect, but it's not slow or crashing).
Thing is, I have stopped expecting Xcode to be any good.
Actual native macOS/iOS development got beaten senseless when the App Store made it clear that "unsustainably low" was the expected price point for third party developers; and that Apple were treating the store more or less as a market research exercise and good ideas absolutely would be stolen.
So it's an internal tool, really. And we're I-guess-lucky that they document it and release it for the proles.
Honestly, the second to last paragraph reminded me a lot of my experience with eclipse back in 2011 to 2014. I think it was called the eclipse dance back than. A random order of clearing the cache, rebuilding, disabling/enabling plugins, creating a new workspace and restarting the ide would solve most problems. It is one of the reasons I developed a disdain for eclipse. I later even switched jobs mostly to get away from it.
I love my mac and I hate everything Microsoft, but just as Xcode may be the worst piece of software coming out of Apple, Visual Studio (no, not VSCode) may be the greatest piece of software coming out of Microsoft.
It is an amazing piece of engineering. It's not perfect, it has it's share of bugs and quirks, but still, it's a wonder to behold :D
Visual Studio used to be as bad as modern Xcode, if not worse. Having used VS2022 a bunch for the last handful of years, I’m pleasantly surprised. Apple could take a page out of Microsoft’s book here.
this is very disappointing considering that the spiritual ancestor ProjectBuilder/InterfaceBuilder from NeXT was considered amazing and ahead of its time. Apparently after NeXT joined Apple, ProjectBuilder was rewritten from scratch. maybe that's where the problems started...
Could some Xcode uers explain to me why AppCode (IntelliJ IDE) did not take off as an Xcode replacement? I recently had to do some iOS work, knew that Xcode sucks, wanted to try AppCode, only to learn that it was discontinued because of lack of interest.
My problem with AppCode was that the syntax of Swift was still undergoing rapid development, and AppCode lagged too far behind. So AppCode wouldn't understand parts of my code unless I avoided the latest (often very valuable) additions to the language.
When it did understand my code, it was much better than Xcode for navigating and refactoring.
Also, AppCode couldn't edit or even display XIBs so I often had to keep Xcode running alongside it anyway to edit XIBs and make connections between XIB and code, and that was a hassle.
I'm only guessing and I'm not an xcode user but my general observation is that Apple users have a culture of using whatever Apple gives them, whereas in the Windows world the culture is to go out and look for your favorite third party option.
AppCode was unfortunately extremely limited.
Lagged behind Swift versions.
No editor for Storyboards/XIBs back when they were ubiquitous, and no preview for SwiftUI.
Debugging app extensions or anything that isn't the standard "iOS app" was generally flaky or outright not supported.
There is a lot of interest as IntelliJ is a good IDE, but AppCode just wasn't reaching the bare minimum required to have me not use or worry about Xcode.
App code was a really great IDE, Especially if you were developing server-side Swift. I wish JetBrains would've open sourced the plugins so it could carry on
XCode evidently cannot keep pace with the rapid development of Swift. Instead of fully embracing community development, Apple maintains a proprietary (dated and divergent) fork of the Swift toolchain in Xcode. For example, check how different compiler diagnostics and suggestions are when using Xcode vs SourceKit LSP. Apple is, once again in its time-honored fashion, wasting collective effort because of its siloed, secrecy-laden development model.
Once it took Vivado 40 minutes just to add one small Verilog file to a project. Not to compile it. Just to add it to the list of project source files, for which it scanned the file for definitions. Each time I edited the file, Vivado stalled for another 40 minutes. Same file compiled and ran all its simulation tests in Verilator (an open source tool) in a couple of seconds.
For my compiles, Vivado routinely took hours for sparse designs and over 24 hours for dense (but still conceptually small) ones. This made iteration impossible on the timescales my last FPGA project required, so I had to stop using Xilinx.
I accept that dense P&R compiles may take a long time, as it's algorithmically complex. But Vivado's occasional extremely slow and janky process for minor things left my wondering if the full P&R compile time was more due to similar bad coding issues on their side, not any real need to take that long.
I was going to defend Xcode and say it's not that bad... but then I read the article and realised that I have just become so accustomed to these problems that I don't consciously realise the daily hellfire that I experience.
Even when you think you're immune to it, Stockholm syndrome is real.
A similar article I wrote on the 'Dark Side' of Apple Development, brings up many additional issues:
You can also have code completion with old CLion+Theos+Objective C, or with VSCode+SPM+xtool toolchains btw. It's not a great experience either but at least it did not force me to deal with macOS to start with.
That first error isn’t an Xcode issue. It’s a Swift compiler issue. And you can’t blame your IDE for your bad instincts—at some point those ritualistic fixes stopped being necessary and I haven’t had to do them for more than half a decade. You really should be digging into your code using breakpoints and logging to find the root cause.
I do think Xcode has very rough edges but if we’re criticizing it, we have to criticize the right points.
Dunno. Not sure you can so easily slice off Swift as "outside of XCode", since it isn't used by anything else and is basically required for any Apple development, and only Apple development.
59 comments
[ 3.7 ms ] story [ 83.7 ms ] threadThey will also silently stop supporting some piece of library you rely on, leave it broken in some way or another, and just leave you on your own.
However, it has its good sides. The profiling tools are great for example. And I would rather work on 10 difficult problems with Xcode than on 1 with Visual Studio..
I thought I was "holding it wrong"... like really badly wrong! and all I was trying to do was clone my repo and compile it for the store, that's it. took me nights and nights to get over each subsequent hurdle and false peak and missing import and then at the end, oh please upgrade and start again.
Thank goodness I only need it for that 1 step and I can do everything else on computers and software that is normal for me. As a first time app maker, I've had a super experience with Flutter in VScode.
Everything in this article is a reason to stay away from everything proprietary about Apple development. If there is some software that can't be delivered with open web technology or an existing game engine, I'd like to know what it is.
I've never trued developing for windows so I could easily imagine it's better across the board.
It also helps if you don't need to go through their app stores, which is a hell of its own.
Now Google has decided to make theirs even worse than Apple at least when it comes to publishing in the play store.
Every boxed Mac OS X came with a second disc containing the SDK (Xcode has always been an unstable cow, tho). They used to publish tech notes that explained how the OS works, rather than WWDC videos with high-level overviews that feel more like advertisements.
Back then they've at least made attempts to use some open standards, and allowed 3rd parties to fill gaps in the OS, instead of acting like a Smaug of APIs.
So in this great duopoly, these two tech giants constantly compete to become more and more hostile and pathetic to both the users and the developers.
> Apple apologist will respond rudely or with some unhelpful generic tips
Aha. The "you are holding it wrong", "this is how the Lord intended it to behave", "buy a new .." … fruit company fan base phenomena.
Apple's majority of buyers aren't their users or consumers; they are Apple fans and supporters. If Apple had consumers like Android, Linux, or Windows, either they would have fixed their act or been in the ground by now.
> lock people into your ecosystem
There's no real alternative to Xcode, if you're going to develop for Apple, you pretty much just have to take the dive, buy Apple hardware, and use Xcode. You don't really know what you're getting into before you get there, and by then you've got sunk cost and just have to trudge through. Somebody a while back had a comment that kind of epitomized it (paraphrased from bad memory): "I thought I was their target customer. I'm not. I'm not sure who their target customer is. Who is this even written for?"
_mlxl had a pretty funny one from 4 years ago also: https://news.ycombinator.com/item?id=26932848
Maybe as an Xcode user you have a better perspective, yet Android was actually better personally than most of the development ecosystems from my own perspective. Actually managed to at least publish three apps. Never went anywhere, yet that's a different issue.Had a comment on another thread's Switch 2 development complaints, re. the few I have tried - Nintendo, Steam, and Google.
Nintendo - The process itself is opaque, confusing, and difficult to determine your status or progress, even large companies have difficulty.
Steam - Signing up and putting launch title info was difficult, yet Wayyyyy easier and clearer to navigate. Tools are kind of a mess, and figuring out everything you need is a challenge. (comments on the SDK are at least funny sometimes)
Google Play - Dramatically easier to sign up. Much clearer steps, progress, and timeline for release. Inclusions to actually release, much clearer. Actually managed to release three products.I bet these issues are caused by Swift though, because C, C++ and ObjC don't have those problems in Xcode (it's still far from perfect, but it's not slow or crashing).
Actual native macOS/iOS development got beaten senseless when the App Store made it clear that "unsustainably low" was the expected price point for third party developers; and that Apple were treating the store more or less as a market research exercise and good ideas absolutely would be stolen.
So it's an internal tool, really. And we're I-guess-lucky that they document it and release it for the proles.
https://law.gmnz.xyz/single-dot-crash/
It is an amazing piece of engineering. It's not perfect, it has it's share of bugs and quirks, but still, it's a wonder to behold :D
When it did understand my code, it was much better than Xcode for navigating and refactoring.
Also, AppCode couldn't edit or even display XIBs so I often had to keep Xcode running alongside it anyway to edit XIBs and make connections between XIB and code, and that was a hassle.
There is a lot of interest as IntelliJ is a good IDE, but AppCode just wasn't reaching the bare minimum required to have me not use or worry about Xcode.
Once it took Vivado 40 minutes just to add one small Verilog file to a project. Not to compile it. Just to add it to the list of project source files, for which it scanned the file for definitions. Each time I edited the file, Vivado stalled for another 40 minutes. Same file compiled and ran all its simulation tests in Verilator (an open source tool) in a couple of seconds.
For my compiles, Vivado routinely took hours for sparse designs and over 24 hours for dense (but still conceptually small) ones. This made iteration impossible on the timescales my last FPGA project required, so I had to stop using Xilinx.
I accept that dense P&R compiles may take a long time, as it's algorithmically complex. But Vivado's occasional extremely slow and janky process for minor things left my wondering if the full P&R compile time was more due to similar bad coding issues on their side, not any real need to take that long.
Even when you think you're immune to it, Stockholm syndrome is real.
A similar article I wrote on the 'Dark Side' of Apple Development, brings up many additional issues:
https://www.magiclasso.co/insights/apple-development/
The compile command was basically:
I think everything developers do in apple's ecosystem is needlessly complicated.I do think Xcode has very rough edges but if we’re criticizing it, we have to criticize the right points.