Xcode Treasures
The book’s working title was No Regrets Xcode, and at one point, I toyed with proposing Xcode for People Who Hate Xcode as a title. But a full-throated defense of Xcode is an essay or a blog, not a programming book. Instead, I hope to prove by example — many, many examples — that Xcode is better than you think it is.
[…]
So, yes, Xcode is flawed. But is it fundamentally flawed? Is there some core concept — its multi-paned single window UI, its scriptable build system, the nature of app bundles and code signing — that makes it impossible for Xcode to ever be good? I don’t believe anyone is making this argument. The closest you get to this is storyboard haters who build their UIs in code.
All these years later, I still miss Xcode 3’s multi-window interface. I’ve gotten used to living without it, though. The Xcode 4 rewrite introduced a lot of breakage and problems, but I would say that all the major ones have been fixed (probably since 7.x or so). Mainly, Xcode 9 is plagued by a variety of minor but annoying issues. One would not expect them to be fundamental flaws, yet they have persisted for a long time.
Yes, I’m one of those people who doesn’t use storyboards and eventually came around to disliking nibs. But for me this is mostly about abstraction and modularity in creating interfaces, and making testing, version control, and localization easier. I would blame less than half of it on Xcode. Yes, it has some interface issues, but—aside from the breakage of older files—it seems to do a decent job at solving a really hard problem.
So, I’m making the case that it’s time to take a fresh look at Xcode. Acknowledge the bugs, sure. Hope that they get better. But beyond that, look at how nice the code editor is (and how you can customize it to suit your own tastes). Look at how the build system is smart about resolving dependencies, how you can set up your own build properties on a per-configuration basis or even run arbitrary scripts during the build, or run the whole thing from the command line and let Jenkins handle your CI. Think about how app slicing and on-demand resources make things better for your users by making smarter use of their limited on-device storage, and how Xcode gives you a UI for managing these assets visually. Behold the wonderfully clever power of LLDB to give you powerful breakpoint capabilities, and tools like Instruments, Main Thread Checker, Address Sanitizer and more.
Previously: Working Without a Nib.
Update (2018-04-28): See also: Mark Hughes.
2 Comments RSS · Twitter
The second quote is very true, but none of this features rely or benefit in any way from the single window UI, which is still the main grip I have again Xcode.
I too miss the multi-window UI, and even if "behaviors" provide some way to emulate aspects of the old UI, it remain very buggy.
The tendency to go from multi-window user interfaces to single-window user interfaces with custom in-app window management has been affecting a lot of Mac apps for a long time, and it's a bad trend. It's difficult to blame app developers, though. The Mac's window management has become so outdated and inadequate for modern screen sizes that custom app-specific window managers are often the only reasonable option.