Hacker News new | past | comments | ask | show | jobs | submit login
Xcode Through the Years (martiancraft.com)
90 points by ingve on Jan 27, 2022 | hide | past | favorite | 77 comments



It's probably fair to say that XCode was a great app 35 and even 25 years ago, an OK app 15 years ago (at that moment it was far behind Visual Studio). Now it's completely lagging behind almost everything. I suppose that working on a same codebase for 35 years is not simple and introduces nearly-unfixable bugs. The fact that XCode consist of tens of thousands of files (!) and unpacking it on an HDD takes hours, is just a small issue, comparing with others. The IDE has to be rewritten from scratch. It's unmanageable right now, and has been for years. Apple can't really support it anymore.


indeed,

it shows the same obesity as the company's shareholder value.

A big amount of money produces a big amount of things.

Conway says, the product resembles the producer.

Never expect lean things from big corps, no matter how slick the name.


I think that’s coming. The push for swift will drive it.


> tens of thousands of files

Try half a million.


...and most of this in platform SDKs, which could easily be installed separately.


Great article, very cool to read. But I can’t help but wonder if it’s time for Apple to provide its developers with a pure Swift IDE - all of my CLI apps and anything Swift server related always end up working a lot easier in CLion (which I happily pay for). I have to use Xcode for my day job and man does it seem bloated (call me old but the new GitHub code review feature is completely unusable IMHO). And storyboards? Don’t get me started.


> But I can’t help but wonder if it’s time for Apple to provide its developers with a pure Swift IDE

You mean an IDE only for Swift or only written in Swift? That last few projects I worked on that involved Swift all had some Obj-C or C++ components, so no matter what I would really like support for other languages in an IDE they offer.


I meant only for Swift but I wrote the comment while walking and on my phone, I’m sure I forgot to think about some things.


You might be happy with something like VSCode + sourcekit-lsp once that combo gets more mature.


If they do my guess is it will be in the cloud.

>And storyboards? Don’t get me started.

Does anybody use them?


Why CLion and not AppCode which seems more suited to the task ?


Only because of a JetBrains license I get through work


I'm no swift wizard but I gave it a run. I was able to build a simple app with ease, but AppCode still requires XCode to be installed on the machine since it uses the same toolchain (Example: Simulator is used).


Sounds like you’ll enjoy Swift Playgrounds.


I got the impression that Swift Playgrounds was really Xcode in the background with most of the UI hidden. It certainly didn't feel snappy to me when I last tried it.


I’m not sure how to respond to “really Xcode in the background” but it’s an app with an entirely new codebase (that Xcode now shares some code with) and a full toolchain. If you haven’t tried the latest version released recently you should give it a try, it’s much improved from what we had in the past.


Just wanted to say thanks for Xcode. Bundling it with OS X was brilliant and made it so much easier to get started writing software. I even used it for Java! I have written more LoC in Xcode than in any other tool, and though its focus has shifted away from the software I write, I still consider it fondly.


I agree. People find it normal to get an IDE for free, but when Apple released XCode for free, it was an innovation. (VB Basic/Pro, Borland, and all cost money when they started).

The only competitors were Eclipse, and VI/VIM and other lightweight editors. But, even Eclipse, initially was part of the IBM premium enterprise tools, called Websphere.

So, just like they released the iOS updates for free, and MacOS X for free, (in 2008-2009), Apple has been a true innovator in this space. Microsoft and Co were always chasing behind.


Development tools for classic MacOS cost money too, since they were commercial software like anything else. Metrowerks CodeWarrior, Lightspeed/Symantec C/C++/Pascal, even Apple’s own Macintosh Programmers Workshop.


KDevelop was released in 1999, rewritten (version 3) in 2001. XCode was released in 2003. Eclipse was around. Emacs and vim-based development environment were immensely popular.

And Visual Studio was much better than Xcode (and probably still is). Yes, it was not free, but it was worth its money. I know guy who used Visual Studio to write code for Linux.

Xcode is not even open source. Intellij is open source, Eclipse is open source, Visual Studio Code is open source.

At this point they should just write VSCode plugin to edit storyboards and language server for objective c and swift. Xcode is beyond redemption.


Is there something in particular that Visual Studio does that Xcode can’t? I’m not seeing the benefits.


Ironic shudder, as I just recalled that I paid $3000 for NeXTStep Developer in 1993.

I was making exactly zero dollars as a developer at the time. Or, I suppose, negative-three-grand, actually...

So another thing: all of the documentation (which is in need of some work). Books, web sites, Youtube channels, free tutorials... That stuff wasn't free in 1993, either.


Eclipse was free and open source from the beginning and predates Xcode. That it was derived from an even older commercial product doesn’t seem that relevant.


Eclipse was originally a rewrite of IBM VisualAge in Java.


And how is that relevant to whether it was a FOSS IDE project prior to Xcode.


Everything about it was heavily influenced from the work done on an existing platform, and it was only greenfield in that it was built in Java. It would not have had the start it did if not for the closed-source proprietary product that preceded it.


And Xcode was based on the proprietary Project Builder - so again I don't see the point in making a distinction here.


XCode wasn't free really, considering the hardware price.

Mac price ~= PC + VS Professional


Seconded!

Xcode alone almost justifies the 30% cut on apps. A single developer can do remarkable things because of Xcode + Swift + SwiftUI+ Package Manager + all the fixings for cross platform (Linux, Windows... etc).

Strong opinion: this will win all the things (building a language tightly with a development environment, old intersection of software + hardware vibes)

Relatedly: Vapor is doing great things Swift Server Side, and Tokamak is bringing SwiftUI to the web like WebObjects aimed to do... I have yet to go deep into embedded works with Swift, but I believe that CL left some goodies based on his previous experience.

Even after being 5th degree burned by Mac gatekeeper, I hold these opinions -- eventually it will be write once, run everywhere.

Seeing where it's all heading makes one as giddy as a young Woz


> Xcode alone almost justifies the 30% cut on apps

Come on, that’s ridiculous even if I take it as an exaggeration. On what grounds would it have anything to do with the revenue one creates through an app they made? It would be an equivalent of the canvas’s manufacturer Mona Lisa is painted on wanting recognition for their work.


> Come on, that’s ridiculous even if I take it as an exaggeration.

> It would be an equivalent of the canvas’s manufacturer Mona Lisa is painted on wanting recognition for their work.

Come on, that’s ridiculous even if I take it as an exaggeration.

Are we really trying to equate the millions of man hours it takes to get an M1 and A1_ into production, then fine tune the assembly calls for Swift, then the UI frameworks, QA, testing, planning, etc., till the point an app can be downloaded from the App Store by anyone on earth,

... to a canvas?

-------

In my mind, it is a buy in to the Apple ecosystem present and future. Yes my models look different without the 30% or 15% cut, but I have written apps in almost all languages now, and my time from idea to MVP, that can scale leveraging iCloud Sync, etc, is 1/10th that of anything else I've tried with Swift/Xcode/AppStore.

Additionally, developers get to ride in on Apple's market segment. They are doing a lot of heavy lifting to create a customer persona that we can follow if we learn a bit about the cohort... which is another separate value beyond a technical one (think FB level attributes baked into just targeting AppStore)...

Finally, I believe the current pricing encourages all of us to hold our apps to a higher standard, and I appreciate that. Things of intangible value (game coins) have high price elasticity because they directly derive little value... so producers of this good want to lower the cost because it affects their ability to profit. Apple has instead said, 'actually, no, we know the nature of what we sell, the good and the bad. Intangibles can be powerful tools or they can be soul sucking mind-holes. If your product is so price elastic, it doesn't hold the value we are trying to promote on AppStore.'

Honestly Apple shouldn't have anti-trust issues... its current messaging presently doesn't realize its value and strength, which gives it trouble.

Last bit: this is written in haste, so please don't take any of this personally or curtly... it's meant in respect.


Still costs $99 to publish to App Store.


It's worse than that. It's $99 per year you want to keep it in the store. Stop paying the tax and it's taken down, even if it was free software to begin with.


Developers boasting 300—500k total comps who are greedy to spend 100 bucks a year on their tools is freaking insane to me, man.

How much does gas cost for truck drivers?


In my country I made less then 25k a year with two masters degrees in STEM fields when I started. If you're a starting independent developer, you probably make less.

It's also not 'spending 100 dollars on their tools', it's spending $100 yearly to upload your app to the app store. You have to spend money on tools on top of that.

Truck drivers get their gas costs reimbursed. If they wouldn't, I'm sure that would complain about gas prices as well.


> Truck drivers get their gas costs reimbursed.

Only if they’re working for a boss. If you’re a starting independent truck driver, you pay for your own gas.

I would think iOS developers are in the same boat.


This is irrelevant. You are publishing an app to a global market where pricing is the same everywhere.


Just like one can submit software expenses on IRS declaration, same deal.


> Developers boasting 300—500k total comps

In what world do you live in, exactly? Plenty of FANG engineers don't get paid a fraction of that. If you dare gaze away from your belly button and, say, outside the US borders, there are plenty of developers who barely earn 20k pre-tax.


Do you really believe the entire world works at Facebook or Google? US salaries are the exception, not the rule.


Thanks from a happy user of some of those early lines of code you wrote. ;)


I still think the Project Builder / Interface Builder combo was better than an integrated Xcode. Xcode has always felt slow and laggy compared to its predecessor. Plus, a lot of Xcode was just worse at doing interfaces.


Agree. To this day I open all xibs in a new window.


From my perspective it's so funny that the author considers paid SDKs to be a showstopper. Yeah, right, absolutely no way around it.

Here in Russia paying for software is kind of a novel idea even today. Back in the mid-00s, literally no one even considered that as a possibility. You could go to a store and buy a pre-cracked version of Visual C++ on CD for 60 roubles (~2$ at the time). I still have mine somewhere.

And macs were so expensive no one could afford one. My first contact with OS X was through installing hackintosh on the PC I had at the time.


It's still friction. Maybe this was different in Russia, but due to propaganda (term used neutrally) further west people actually feel guilty about "stealing" software, are concerned about malware and lack resources for information.

Internet piracy is of course a thing, but I'm not sure physical pirated media was ever this available here.


Honestly, to me it feels like it's often more friction to pay.

If you want to pay, you have to register for an account, provide your card info, get the key, activate, etc. If it's a subscription, it gets even worse.

If you don't want to pay, you download the torrent and install the thing. Maybe you follow the (often simple) included instructions to crack it, if any. And that's really it. It just works forever. I remember that story how then-CEO of VKontakte paid for photoshop (back when you could pay for it just once), couldn't figure out how to download and activate it, and just torrented it because it's this much easier.

They closed those CD stores when Russia joined the cartel^W WTO. But by that time, high-speed internet was getting ever more available, and so naturally people just switched to downloads.

And another thing about Russian mentality: we REALLY don't like asking for help it seems. When you've bought something, you're on your own if you have any problems. Maybe ask for help on forums or something, but official support channels? Nah. Like, I'm well aware that Apple provides tech support, but whenever I have any problems with Apple products, the thought of contacting that tech support doesn't ever cross my mind. In many people's minds, me included, your relationship with the manufacturer or seller of the thing you're buying ends the moment the transaction completes. It's probably vastly different in the west.


In the US here... and I think that the notion of asking for help after a purchase is not evenly distributed here.

I am used to figuring things out, but I did ten years of corporate tech, I got paid to provide that support for the employees of my employer. It was my responsibility to get their things working. So I got used to calling for vendor support, usually a support contract, and just got used to working the problem with whatever help we needed, within budget limits. This was in the 20th century.

But my extended family, they wouldn't dream of such things. They figure if you call for help, it's just going to be more people trying to get money out of you, like everyone is trying to fool everybody else. They just buy the cheapest thing they can get, then if it doesn't work they either take it back to the store for refund or they give it up as a bad job.

I will come to Russia some time, buy a cheap laptop and take it home and use it for a week, then bring it back to the store for a refund because it doesn't work. How will that conversation go?

We could put the video up on the YouTube. :-)


> I will come to Russia some time, buy a cheap laptop and take it home and use it for a week, then bring it back to the store for a refund because it doesn't work. How will that conversation go?

Consumer protection laws aren't as strong in Russia as they are in the US and Europe. But generally electronics come with 1 year warranty from the manufacturer. So if it's legit not working, they'll probably replace it with another that is working.

Returns are complicated. IIRC stores are required to take a return if the item is in a condition in which it can be sold again (sealed box, or all tags intact in case of clothing). But anything further than that is their own concession and thus varies. Some places like Ikea have a policy of "return within one year from purchase showing the receipt and your internal passport (ID), you get a refund, no questions asked". Some don't. Some electronics stores would let you test the thing in the store before you take it home, some would say "you have N days to test it at home, bring it back if it doesn't work".

I also know a guy who bought a phone to test an app he was making, then tried to return it. Wasn't a painless process, but he did succeed in the end.


Ok, wow, actually that sounds like life in the world I live in.

Returns will erase retail margin (profit) pretty quickly. Big companies like IKEA can deal with that, I suppose, but it does take work.

I managed to get to Russia, in 1990. I didn't shop at Ikea.


It was still USSR in 1990 (and I wasn't born yet). They've allowed private businesses in the late 80s, but the country was still very much in the process of transitioning away from full socialism. It took many more years for international companies to establish presence and for local ones to form through privatization.

There was no Ikea, but the first McDonalds opened in Moscow in 1990 and many minds were blown.

So yes, these extended return policies are one of the things retailers use to compete.


Makes me remember a phrase from "Revolution OS" about free software: "That sounds too much like communism to work in Russia".


I'm wondering if I'm doing something wrong with Xcode. Every time there's a new update I have to go through a rigmarole to get back my customised keyboard shortcuts. I don't have loads of them, and they're normally standard in other editors (control-w for select word, control-shift-K for delete current line, super-shift-d for duplicate current line etc). But every time there's a new update for Xcode they get borked for me. In the old days the customisation file was kept outside the .app in application support or something, but then at some point they moved it inside so any "update" overwrites the changes I've made (there are actually no updates, only full downloads of a ~10GB application for the smallest change).

It's very bizarre and contrary to the ethos of macOS applications that's existed for decades I believe.


I had to give up on Xcode. I found it so damn buggy and weird I just couldn't use it. Just yesterday I tried opening a json file and it attempted to open in Xcode... Xcode just froze, never opened the file.


Xcode is one of those products that suggest Apple has simply stopped caring about quality. It sort of works if you're lucky, but realistically it's questionably usable. And Apple just doesn't seem to care.

It's not like the company can't afford to throw some resources at it. But it... doesn't. And the process for extras like AU plugin development - not central, but a significant mini-economy in the ecosystem - used to be so much simpler than it is now.

That aside, historically my favourite accessory was Quartz Composer. It ended up being a dead end, but personally I had a blast experimenting with it and building generative animations.


It feels to me like its stuck in a hell of bad incentives. Apple seems addicted to having shiny new features to announce every year at WWDC.

A decade ago Apple would release a new, pre-release version of xcode at each WWDC with new features. The new version would be unstable, but it would become stable over the next few months with subsequent point releases.

At some point the stability work seemed to never quite get there. And now it seems like Apple is in a cycle of adding new features, launching them before they're ready, and not getting stability back to baseline before the next WWDC comes around. And next year's WWDC needs new features to be announced. XCode is now in a never ending "preview" state, where none of the features added in the last few years (since Swift) work properly. And someone at apple is acting as if what everyone wants is yet more features. (Or, more likely, the manager will only be promoted if they manage to release new stuff).

From the outside it seems like XCode is slowly drowning.

A few years ago Apple announced Snow Leopard. There was no headline feature. Apple just spent the whole year making everything more stable and faster. When they announced this it was met with thunderous applause. Snow Leopard turned out to be the best release of macos ever.

XCode desperately needs to do the same thing.


I have used it a little for modifying an app. Besides the signing/certificate stuff being super annoying and having to clear a cache (on the first build ... ????) I was actually surprised how nice it is in some places. It has issues, it is glitchy, but at least the UX concepts are kind of sound and it mostly works. This is in stark contrast to visual studio, which in my experience has no UX concept and is super glitchy and almost never works.

The only higher quality IDEs I can think of (and maybe this is sad) are the IntelliJ family and (maybe) VSCode.


Xcode saves keybindings in ~/Library/Developer/Xcode/UserData/KeyBindings I have neither experienced arbitrary resets across updates, nor have I had issues moving my custom .idekeybindings from that folder to new clean installs and finding my shortcuts intact. Maybe the update issue occurs when using the default bindings set and a change of functionality intersects with your customizations? Might be helpful to create an alternate set and go from there. Then, when updates roll in, it should be easy to track down new conflicts in Xcode's preferences via the Conflicts filter. Not sure what else might be causing it, sorry, but thought I'd point you to the folder anyway.


My experience with Xcode is that almost every time it got updated, an ios app project compilation (react-native app) broke in some way. Very frustrating!


>react-native app

Found your problem.


Hah! I kind of agree. But that's out my control. You work with what you have.


That's the way all IDEs were back in the 90s.


It's always been incredible to me that Interface Builder dates back to NextStep, like that's all the way back to 1988! While I don't on the regular use IB, I've always appreciated how easy it is to hook things up and move ahead with a prototype.


Actually, Interface Builder predates NeXTSTEP. Like all revolutionary tools, IB was originally in Lisp. It ran on the Mac.


This article makes a number of odd claims about Project Builder. I'm not sure what passes for an "IDE" nowadays, but Project Builder did not have an editor at all: I'd think that'd be a defining feature of an IDE. The editor distributed with NeXTSTEP was the completely separate Edit.app (later known as TextEdit.app on OS X). Project Builder was just (1) a GUI wrapper for make (2) a project file manager, and (3) a GUI wrapper for gdb. That's it. Project Builder was neither connected to Objective C, nor to Interface Builder, nor to Edit.app. And while Interface Builder was revolutionary, Project Builder was prosaic and far from first of its kind. Here's NeXT's own documentation on PB:

http://www.nextcomputers.org/NeXTfiles/Docs/NeXTStep/3.3/nd/...

XCode was a massive improvement over ProjectBuilder, not the least of which because it had an integrated editor. It was an actual IDE.


Project Builder in the early years of Mac OS X certainly had an integrated editor.


Yes, but this was a far cry from ProjectBuilder in NeXTSTEP. See for example

https://www.oreilly.com/library/view/mac-os-x/0596003706/ch1...

I imagine what happened was: when Apple acquired NeXT, Apple's dev teams built an entirely new application, initially still called ProjectBuilder, as part of the Carbon development effort. This is what eventually became XCode. Or perhaps NeXT had this in their pocket but had not released it yet (this seems much less likely).

But this had little to do with Project Builder on NeXTSTEP 3.x and 4.x.


I primarily use Visual Studio and VSCode for development professionally. I have been playing around with Xcode a lot for some personal projects on my Mac.

In many ways it’s pretty good, but there’s some omissions and other behaviors that I find simply astonishing.

Why can’t I view two code windows side-by-side? Why can’t I dock the controls library so it’s always visible? Why does the documentation view always have to be on top of everything else? Why can I zoom the Interface Builder when building iOS applications but not Mac applications? Why do things just kind of stop working and require restarting every couple of hours?

In many ways Xcode just seems to lack a lot of the polish and capability Visual Studio has.

I tried playing with Visual Studio and Xamarin on my Mac to see if it could accelerate development by allowing me to leverage my familiarity with C# and found it to be so cumbersome (change to Xcode and mess around with IB, switch to VS, switch back to Xcode…ugh) that I just ditched that flow completely and went all in with Swift/SwiftUI/Obj-C instead.


> Why can’t I view two code windows side-by-side?

You can: in general, pressing option will open a new code editor (the exact behavior is configurable in Preferences > Navigation > "Optional Navigation"). For example, option-click a file in the Project Navigator to open it in the "next" editor; this will open a second editor if only one is open.

In exchange, I'd genuinely like to know how to open more than one solution at a time in Visual Studio for Mac. I know about the checkbox in the Options panel of the Open dialog, but if you don't remember to turn that off every time it closes your existing solution. Also, it's documented that holding the Control key when choosing from Recent Solutions has this effect, but that has never worked for me.


Not solutions to your problems, but perhaps some background you might find interesting:

> Why can’t I dock the controls library so it’s always visible?

This actually used to be how it was before. It got changed into an overlay panel a couple years ago.

> Why can I zoom the Interface Builder when building iOS applications but not Mac applications?

It’s an implementation detail of how it works under-the-hood. iOS interface is rendered in what’s essentially a simulator and screenshotted, so you can zoom the result freely. For macOS the controls you are seeing are real Mac controls, which do not render at arbitrary magnifications.


I mostly agree but

> Why can’t I view two code windows side-by-side?

This works just fine. You can have unlimited horizontal panes each having the same or a different file. Or, you can open a second Xcode window of the same project (e.g. right click a file and open in new window) hide the UI and you have multiple editor windows for the same project (something VSCode can only do in a limited fashion)


It’d be nice to track the hard drive space it uses through the years too. Oof.


I'm outing myself as actually, mostly, liking Xcode (as a "mostly C/C++ cross-platform coder", haven't dabbled much with the interface builder side of things).

But some things really need to be fixed:

- Downloads are getting way too big, and most of this is all the platform SDKs. Those SDKs should be removed from the initial download and instead installed when actually needed or with an integrated "package manager". As it is now, I'm just using 3 (iPhoneOS, iPhoneOSSimulator and MacOSX) of the 7 installed SDKs, the other 4 SDKs (2x AppletTVOS and 2x WatchOS) are just dead weight.

- Don't know how it's in Swift, but starting for the first time into the debugger takes 5..10 seconds, even on my new 14"MBP, and even for trivial programs. This used to be instant a couple of years ago, but then got worse over time.

- The debugger's variable view panel is way too bare bones, and doesn't seem to have been improved much in the last two decades.

- "Schemes"... 'nuff said.

- Something needs to be done about the extension/plugin ecosystem (e.g. there is none, just a handful of extensions in the app store), look at Visual Studio Code for inspiration.

Also, I'm not sure what the "new build system" is about, but from my point of view it didn't really improve anything over the old build system. Maybe the resources should instead have been spent on something that actually benefits users.

Plenty of good stuff too:

- The clang static analyzer integration with the 'arrow visualization' is brilliant.

- AFAIK it was the first IDE to integrate ASAN, TSAN and UBSAN easy enough to use "for the rest of us".

- Probably also the first IDE with realtime memory usage visualization, Visual Studio only got this in VS2015 if I remember right.

- The Metal debugger.


I just recently started programming with Swift. As a user of many JetBrains products, I'm curious to know if many Mac/iOS programmers use AppCode. Is that a viable IDE for iOS programming?


AppCode's great for what it does, but you still use Xcode a lot for things AppCode doesn't do. You can probably reduce the Xcode dependency by replacing parts of its functionality with stuff like XcodeGen if this bothers you. I almost always have both open at once. IME very few iOS devs use it, but I'm just saying that because I've never worked with one.


Yeah I'm interested in giving it a shot because I am so used to all the keyboard and navigation shortcuts that work across all the JetBrains IDEs. I use DataGrip, PyCharm, and Android Studio daily already and throwing Xcode into the mix really throws me off.


I don't know how many. But I use it. It's slower than Xcode. But I use it for most of my iOS (and macOS) programming work.


Nice overview, but the precursor from Project Builder is missing.

https://paulhammant.com/2013/03/28/interface-builders-altern...




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

Search: