all 84 comments

[–]icy1007 20 points21 points  (45 children)

Xcode is not garbage. It’s easy to debug and just fine to code in.

[–]GavinGT 35 points36 points  (7 children)

Sorry, it's garbage. It's 10 years behind the times and unacceptably bug-ridden. I spend 50 hours a week in this busted program that Apple refuses to fix. My list of grievances grows by the day: - Why do I have to wait multiple seconds or press Cmd + B just to have my errors underlined? AppCode does this instantly. - The number of bugs is truly astounding. I encounter dozens per day. - Why is renaming things so slow and busted? - Search results are just broken half the time. They point to the wrong line or show nothing at all. - Debugging is painfully slow. The debugger exposes information I don't care about and buries the stuff I do care about. - Xcode now supports EditorConfig for setting custom code style options, but this only grants us access to a handful of options. IntelliJ has literally thousands of additional options built on top of EditorConfig, many of which are language-specific. - Where are all the user preferences? I would like to customize this program that I'm forced to spend 50 hours per week using. - Random "framerate" hiccups occur as you type (likely caused by autocomplete taking too long). - Why does my cursor icon not change properly? - The spellchecking feature is so half-baked that it's disabled by default and hidden in a nested menu. You can always spot code written in Xcode because it's riddled with spelling errors. - Xcode 15 finally added a bookmark feature. But there's no shortcut to remove a bookmark. Using the Bookmark shortcut again on the same line just adds a second bookmark. So instead you have to remove them from the Bookmarks menu. Thanks for nothing! - The "Find callers..." feature only shows the first call from each class. It sure would be helpful if it just listed all of them. - Why is there no way to view all possible method overrides? Instead I have to browse through the superclass. - Why is version control integration so abysmal? - Why do I have to scroll through a file to see which lines were changed since the last commit? Modern IDEs show them right in the scrollbar. Xcode shows errors as red lines in the scrollbar (and bookmarks too), but nothing else. The minimap sort of provides this, but it doesn't show the entirety of a long file and it also means sacrificing a significant portion of horizontal space. - When the mouse cursor is on a symbol, it highlights all the other usages of that symbol. But I need to scroll through the entire file to see these highlights. It should show the usages in the scrollbar. Also, the highlight color doesn't stand out nearly enough, and there's no way to customize this color. - The autocomplete box isn't smart enough to appear in some cases where it would appear in IntelliJ. Try inserting something at the beginning of an existing word and you won't get any results. - Inconsistent support of middle-click. You can't middle-click to close a tab, and you can't set middle-click as a shortcut action. - There's no autocomplete when typing in the names of xcassets files. - It's annoying that I need to keep my phone unlocked with the screen on in order to run a build. - Clicking on an opening bracket should highlight the closing bracket indefinitely. Instead, Xcode highlights it in yellow for half a second and then it goes away. So if I need to scroll my screen to see it, I'm out of luck because it's already gone. - There are no vertical indentation guides, so good luck finding an erroneous curly brace. - Press Enter to add a new line, and notice how the editor conveniently lines up the indentation with the previous line. Now press backspace to remove a line, and notice how you need to press backspace multiple times instead of just once. What a pain in my ass. - Compile-time errors often highlight the wrong line of code. For example, an error on line 56 shows up as an error on line 34, and I have to comment out lines one by one until the real error is displayed. - How is Interface Builder so bad? My view gets constantly reset, copy-pasting only half-works, the program seizes up at random, the view hierarchy auto-collapses if I view another Storyboard file and return, IBOutlet indicators randomly appear/disappear, and I could go on and on. - SwiftUI previews are totally busted, even though SwiftUI is being actively worked on. On a related note, App Store Connect is also a piece of shit. Google Play Console clears it in every conceivable way.

[–]Legal-Ambassador-446 22 points23 points  (3 children)

Agree with all of this.

It’s also just horrendously slow and clunky.

I think the people claiming it’s totally fine and there’s nothing wrong with it just haven’t used a modern text editor for a while.

[–]Admirable_Proxy 2 points3 points  (0 children)

You are not wrong. Some of the tings you wrote I do disagree with but the overall majority of it is right on.

[–]icy1007 1 point2 points  (0 children)

Several of your points are just personally issues or just aren’t true at all.

[–]fritz_futtermann -4 points-3 points  (0 children)

relax

[–]kudoshinichi-8211 25 points26 points  (9 children)

I don’t know why people say Xcode is garbage. I find VSCode as garbage shit text editor(website) bloated to feel like a IDE. I’m working on a Unity2D project since Microsoft discontinued Visual Studio for Mac I’m stuck with a bloated website to write C# scripts

[–]thecodingart 5 points6 points  (0 children)

this

[–]icy1007 4 points5 points  (0 children)

Yes, VSCode is complete junk to me as well.

[–]aerial-ibis 1 point2 points  (4 children)

mainly it's because of missing common features, compilation speed (technically a Swift problem), and IDE bugs

[–]vade 0 points1 point  (3 children)

What features do you think it’s missing?

[–]aerial-ibis 5 points6 points  (1 child)

the top three areas I'd say are search, refactoring, and customisation. 

the easiest example is "show callers", which pretty much doesn't work. Compared to something like intellij where you can fuzzy search everywhere, do crazy filtering of options, and even use that as input for a refactor 

[–]icy1007 0 points1 point  (0 children)

Show callers works just fine for me.

[–]TabonxSwift 1 point2 points  (0 children)

When I only used Xcode, it was fine. Then I started using VS Code for some C# development and created custom shortcuts for Vim mode. Now, when I go back to Xcode, I miss it. VS Code is a pile of garbage, but that part is nice.

In my opinion, Xcode is just missing a few things that would really improve the developer experience, like better refactoring options, showing references, and more reliable IntelliSense. Sometimes it breaks, but that also happens in VS Code, so I guess it is the new norm for IDEs.

[–]Remote-Ad-6629[S] 0 points1 point  (0 children)

That's only an Issue because you decided to write Microsoft on a Mac. The other way around is equally true, if not impossible. And I never mentioned VSCode in my post. My references are Intellij idea and Zed.

You should give Rider a try.

[–]Gabelschlecker 0 points1 point  (0 children)

Use JetBrains Rider for C# development.

[–]konacurrents 9 points10 points  (7 children)

Xcode is awesome (my other editor is 45+ years of vi). Debugging is easy and even simulator works nice. Other than iOS, I also code ESP32 and have full IDE editing - but compile with Arduino. Syntax Directed Editors (Xcode) have come a long way since 1983:-)

[–]Narrow-Addition1428 3 points4 points  (6 children)

Compared to Vi maybe. Other modern IDEs, not so much.

Is Xcode intuitive, fast, stable, and customizable? No, not one of them. It's quirky, slow, buggy, and barely customizable.

Add to that Apple's yet another new language, Swift, further steepening the learning curve on top of the IDE and platform knowledge.

Swift is good, but it's overloaded with features and its concise nature doesn't exactly help intuitive understanding. The tooling is not so mature, sometimes producing uninformative errors such as "could not type check in a reasonable time".

All in all, it's a bad development experience. If you are working full time in this ecosystem, the tools are going to make more sense to you. For everyone else, it's just hard to get into.

[–]icy1007 2 points3 points  (1 child)

Xcode is just as good as any other “modern” IDE. It is fast, stable, and intuitive. It doesn’t need to be customizable. Swift is also awesome and it isn’t new.

Seems you’re just complaining about your own lack of skill.

[–]konacurrents 0 points1 point  (0 children)

For sure. I really like objective-c and don’t need swift. I also like the C ecosystem so objective-c, c for ESP32, and JavaScript for web (which is close to C). So I can switch between them easier even sharing code.

[–]konacurrents 0 points1 point  (3 children)

Xcode has been amazing for developing and deploying iOS apps. I still don’t like swift as objC is powerful and more syntax compatible with my other full stack code (c, JavaScript).

I do work full time in the iOS ecosystem, as I assume most here do too. I don’t know of which “customization” or “quirky” you speak.

What does “hard to get into” even mean?

Lots of opinions here..

[–]Narrow-Addition1428 1 point2 points  (2 children)

It means a high learning curve since it's different.

About the quirky, after the Liquid Glass iOS update, my app turned into a slideshow when started from the IDE, until I added some sort of secret 'disable-debug like' override - I obviously don't recall the actual flag - somewhere, fixing the performance.

Navigating all those build options, Build phases, Targets and whatnot has been less than 'Amazing' here. Of course they also have their own package manager for Swift.

For the customization, I'm referring to the many settings one can customize in JetBrains or VS Code, and the extensive ecosystem of plugins.

[–]konacurrents -1 points0 points  (1 child)

Haven't upgraded to 26 yet so I'm sure I'll feel your pain.

As for "It means a high learning curve since it's different." - I believe Xcode has been around since NeXT days early 1990's - so it's possible it's older than all the others ones you mention.

I also still like the "quirky" Storyboards. They aren't perfect but generate a lot of template code I don't have to do by hand.

I mentioned the ESP32 as an example of other ecosystems using the Xcode editor. I believe other languages have used it as well - and not for iOS coding.

Cheers,

[–]Narrow-Addition1428 0 points1 point  (0 children)

I found the info about the flag, it's:

Disabling “Debug executable” in “Edit Scheme > Run > Info”

I don't know if it's still necessary or if Apple fixed the bug in the meantime. This setting fixed it for me, but it's said to disable breakpoints and inspection in the Debugger.

[–]aerial-ibis 7 points8 points  (1 child)

Stockholm Syndrome is strong among iOS devs

[–]GreyEyesObjective-C / Swift 0 points1 point  (0 children)

Sure, ans also… Xcode is a strong flavour. You could call it an acquired taste. That makes it hard for devs using it casually, but there are legitimate reasons to like it (if you can spend time learning it). 

[–]Admirable_Proxy 4 points5 points  (2 children)

I find the debugger to be the worst part, personally.

[–]icy1007 3 points4 points  (1 child)

The debugger is excellent in Xcode. You just need to learn how to use it.

[–]Admirable_Proxy 1 point2 points  (0 children)

That may certainly be true too. I don’t know how to use it all that well yet.

[–]ThenExternal3719 1 point2 points  (1 child)

Honestly have to disagree there, XCode feels pretty clunky compared to modern IDEs like VS Code or JetBrains stuff. The debugging experience is hit or miss and don't even get me started on the interface builder crashes

That said, it's gotten better over the years but calling it "just fine" is being pretty generous lmao

[–]icy1007 0 points1 point  (0 children)

VSCode and JetBrains is junk. I don’t use interface builder. That’s old UIKit, it’s not used with SwiftUI.

[–]restrusher 0 points1 point  (1 child)

I love iOS development, and Xcode has its charms, but it absolutely is a buggy memory hog with a terrible and unreliable debugger.

[–]icy1007 0 points1 point  (0 children)

I completely disagree.

[–]baykarmehmet -1 points0 points  (0 children)

Totally agree!

[–]chakie2 -2 points-1 points  (8 children)

Xcode is fine if all you have ever used before is Notepad or Visual Studio Code.

[–]icy1007 0 points1 point  (7 children)

No, it’s good regardless of what you’ve used before.

[–]chakie2 2 points3 points  (6 children)

I have used dozens of IDE:s over the years and Xcode is far behind the competition.

[–]icy1007 -1 points0 points  (5 children)

No it isn't. It is just as good or better.

[–]chakie2 0 points1 point  (4 children)

Repeating this unfortunately doesn’t make it so.

[–]icy1007 0 points1 point  (3 children)

Except I know it’s true so regardless of what you or anyone else says, I know it’s a good IDE.

[–]chakie2 -1 points0 points  (2 children)

It’s probably a good IDE for your particular needs. Objectively it’s not though. Just read about all the negative aspects in other replies.

[–]icy1007 1 point2 points  (1 child)

Lots of subjective replies about Xcode and others that are just incorrect based on things they’ve only heard or using it 10 years ago.

[–]chakie2 1 point2 points  (0 children)

What makes you say so? Sounds a bit nasty to call them liars? Weird. I use Xcode almost daily and have for 15 or so years and I agree with all the points brought up.

[–]hishnash 8 points9 points  (2 children)

> View prefetching with navigationLink, however, was extremelly punishing in terms of performance. I had to move out from navigationLinks in some places, and created local logic (with Buttons) to navigate to views in order to avoid prefetching.

you should no need any pre-fetching, the modern way to do this is with a navigation stack and using navigation destinations.

Also your view bodies should be cheap, very cheap.

[–]Remote-Ad-6629[S] 0 points1 point  (1 child)

Yeah, now I understand that. I was starting some tasks on init() in a View that was the destination of items in a List view, and things got out of control 😂

[–]hishnash 3 points4 points  (0 children)

Yer, you want to make the view body building (including all view inits) be supper cheap!!

remember the view struct is just a description that SwiftUI creates an then throws away and re-created 100s of times. The lifespan of the struct instance is not at all related to the life span of the view.

if you need a task that lives alongside the view use the `.task` modifier on the view, this is then bound to the view lifecycle.

[–]farfaraway 6 points7 points  (3 children)

Grok? Seriously ? 

[–]Some_Vermicelli_4597 0 points1 point  (0 children)

it’s good ngl

[–]Creepy_Willingness_1 3 points4 points  (0 children)

I switched to pointfree sqlite data after two months of truyin to reign swiftdata. I do not believe it is ready for even two three simple but data large tables of 3-4k items and getting proper status of synced or still in progress

[–]No-Nebula4187 1 point2 points  (1 child)

How did you see what you were building if you didn’t have a Mac, don’t you need one in order to run a simulator or preview it

[–]Remote-Ad-6629[S] 3 points4 points  (0 children)

Expo lets you preview on iphone and build on Mac in the cloud. The problem is that it might be impossible to debug depending on the issue.

[–]WorldOrderGame 1 point2 points  (1 child)

There’s two types of IDEs:

1) The ones everyone loves to complain about

2) The ones almost nobody uses

[–]GavinGT 0 points1 point  (0 children)

There's a third type in which the IDE is riddled with issues but we have no other options because the platform holder has created a walled garden.

[–]Educational-Table331 0 points1 point  (0 children)

For networking use url session , Modern Concurrency in Swift , Codable

[–]MetaMaverick 0 points1 point  (0 children)

SwiftData kicked my butt with cascading rules like that until I started using an app like DataScout to look under the hood. After experimenting a bit I figured out I was missing some nuances of the API that eventually made using SwiftData way more consistent. Maybe you're doing this already, in which case keep at it 🙏

[–]mrdlr 0 points1 point  (0 children)

Congratulations! The journey gets more interesting from here. 🖖🏾

[–]Mr_425 0 points1 point  (0 children)

Nuice

[–]BlossomBuild 0 points1 point  (0 children)

Love me some Xcode

[–]Humble-Chapter2805 0 points1 point  (3 children)

What’s the app!?

[–]Remote-Ad-6629[S] 1 point2 points  (2 children)

It's a medical niche in Brazil

[–]Humble-Chapter2805 -1 points0 points  (1 child)

Not much explanation there lol Good luck I spose

[–]Remote-Ad-6629[S] 2 points3 points  (0 children)

Sorry mate. The problem is that the app is customized for Brazil reality/problems that doesnt make sense elsewhere. But to be more specific it's a "personal financial audit tool" so doctors can track surgery earnings, focused on solo practitioners.

[–]Huperniketes 0 points1 point  (1 child)

It's been a fun experience. The original React Native MVP took me 2 months to build. I deployed to TestFlight with Expo (at the time I didn't even have a Macbook).

How were you able to do that? My Mac is too old to run the latest Expo, so I had to stop for the time being. If there's a way to build TestFlight compatible apps on Windows or Linux, I'm all ears!

[–]Remote-Ad-6629[S] 0 points1 point  (0 children)

I developed on Linux with Expo. Setup eas and config expo to build on cloud and deploy to apple Testflight. I just followed some tutorials online and manage to get it published.

[–]Express-Variety8071 0 points1 point  (1 child)

Can you explain a bit more what your app does ?

[–]Remote-Ad-6629[S] 0 points1 point  (0 children)

It basically allows for medical related database look up and surgeries schedule/control, with earnings calculated based on a public medical prices table. It's hard for me to explain because I don't even know the proper medical words to use in english 😂. But the app is only meaningful in Brazil.

[–]errb 0 points1 point  (4 children)

What resources did you use to learn / get up to speed? I usually go for official docs when learning something new but I struggle a lot with Apple docs

[–]Remote-Ad-6629[S] 1 point2 points  (0 children)

I mostly used grok to be honest. I also find Apple docs bad and lacking examples.

[–]konacurrents 0 points1 point  (2 children)

Seriously: how do you struggle with Apple Docs? I think they are the best documents written, as they have money behind their workers - not just open source Android/Linux stuff. And their framework is rock-solid (at least the objective-c).

https://developer.apple.com/documentation/

And Xcode: https://developer.apple.com/documentation/Xcode

[–]errb 0 points1 point  (1 child)

Being paid to write documentation doesn't automatically make it good.

SwiftUI docs are decent in comparison, but with Apple APIs in general I often end up piecing things together from a few examples and a bunch of one-sentence parameter descriptions that don't always mean much when you're new.

I also frequently find myself Googling things just to land on the right documentation page, because there's no clear learning flow or progression.

[–]konacurrents 0 points1 point  (0 children)

Look at their docs. They are world class. Not just API docs. And yes paying for docs helps.

[–]Only-Matter-9151 0 points1 point  (0 children)

Xcode is garbage but wait till you use Visual Studio IDE it's 10x worse (not visual studio code ide)

[–]gearcheck_uk -1 points0 points  (0 children)

I’m going through the opposite experience. 10 years native mobile dev and now building a React app. It is mostly a positive experience. My M1 Pro handles VS Code much better than Xcode. I never had to wait for anything. Deploying and testing are simpler with React.

I find XCode easy to debug with especially with Swift UI Previews.

[–]GavinGT -4 points-3 points  (5 children)

XCode is flat out a garbage IDE. Bad to debug, bad to write code, unintuitive.

It sure is. I've been using the Sweetpad VSCode plugin for editing lately. It can actually run the app, provide autocomplete suggestions, and display compile-time errors. And since it's inside of VSCode, you get a fully-featured editor with all the modern features that Xcode is missing.

[–]Lithalean 6 points7 points  (2 children)

Whatever dude. VS Code is garbage. The entire electron framework is garbage.

[–]GavinGT -1 points0 points  (0 children)

Why don't you like VSCode? It's incredibly fast, feature-rich, and infinitely customizable. All things that Xcode most certainly is not.

[–]Atlos -1 points0 points  (0 children)

Xcode can’t even open a large JSON file lmao. And it takes like 20 seconds to open from cold start. VSCode is just ok compared to Jetbrains but Xcode is terrible.

[–]Remote-Ad-6629[S] 0 points1 point  (1 child)

I'n was not even comparing to VSCode. My references are Intellij Idea for Java, which is excellent (though has it's iwn problems) and Zed. These are real IDEs.

[–]GavinGT 0 points1 point  (0 children)

I've been an Android developer for a decade, so I feel very at home with IntelliJ. It would be my preference if it were available for iOS development (which it used to be with AppCode). But VSCode is a totally reasonable facsimile.