9 ms·
Ask HN: Xcode users – how do you make it more usable?
I’ve come from JS in VSCode (with loads of extensions) to Swift in Xcode.
In XCTest, I miss the red and green diffs between expected output and actual output.
In Xcode itself, I miss the ability to perform code refactoring easily (extracting code to new files etc - more than just extracting to new functions).
I also miss linting / prettier.
What tools and plugins for Xcode do you all use to make developing Swift in Xcode faster and easier? General Xcode hints and tips welcome.
- pgt 4y agoI improved Xcode usability by ceasing to make iOS apps.
- nchase 4y agoI don't spend very much time in Xcode. I try to use the command-line tools instead. xcodebuild and xcrun are solid. check out xcpretty[^1] to improve the output of xcodebuild. Here's a blog post that someone wrote about using xctest from the terminal with xcpretty to make the output nice: https://mokacoding.com/blog/running-tests-from-the-terminal/ https://mokacoding.com/blog/running-tests-from-the-terminal/ [^1]: https://github.com/xcpretty/xcpretty https://github.com/xcpretty/xcpretty
- throwaway1777 4y agoYou get used to it. I don’t find myself missing any of those functions.
- zkirill 4y ago1. Have a dedicated Apple machine for Xcode. Don't put anything else on it. 2. Reformat (clean install) machine every 1-2 months. 3. Upgrade machine every 1-2 years. * Regularly export and back up your Xcode developer profiles and certificates. * If you're thinking about doing something fancy, don't. It will come back to haunt you in ways you cannot even imagine. Source: 10+ years of iOS development.
- laumars 4y agoMan that sounds depressing. I didn’t even reformat macOS 8&9 and Windows 9x that frequently, and I consider them the dark times for operating systems.
- pivo 4y agoI’ve been developing on a Mac with XCode for years and never done this. It’s just not necessary.
- smoldesu 4y ago> 2. Reformat (clean install) machine every 1-2 months. This drove me crazy when I developed on Mac. It must be a combination of Homebrew issues and MacOS idiosyncracies, because there's no escaping the feeling of a "dirty" machine. A few good months of MacOS dev work can make a formidable machine feel like a decades-old UNIX environment. If you do general-purpose development on MacOS, I beg you: please use Nix. The dev experience is head-and-shoulders above Homebrew or MacPorts, and the package selection is immense. Learn Flakes, and your cross-platform dev experience will feel downright magical.
- dlyons 4y agoNix makes my dev life on MacOS so much more manageable. The "dirty" feeling has, for the most part, gone away. I'm also able to easily share common config between other machines I use. Here's my Nix setup for my M1 Macbook using nix-darwin, if it helps anyone: https://github.com/dustinlyons/nixos-config https://github.com/dustinlyons/nixos-config
- kitsunesoba 4y agoIt’s been a long time since I’ve played with Nix, do you still need to maintain a nixfile or whatever? Maybe I just wasn’t “holding it right” but I recall not being able to just pop open a terminal window and do “X install Y” like with traditional package managers which was a turnoff.
- smoldesu 4y agoI've got something very similar! https://github.com/toasterrepairman/boostrap/tree/main/nix https://github.com/toasterrepairman/boostrap/tree/main/nix It's also interesting to hear comments from the Nix detractors here. There's ample room to criticize the language and even the design philosophy behind the package manager, but it's a shame that most people never give it a "proper shot". Maybe that's the fault of Nix maintainers though.
- oneplane 4y agoLots of people can't "give it a shot" because it is so different from everything else. That's also why it has no foothold in any corporate environment. Even the amount of small businesses that use Nix for development is so small it's insignificant (but is exists). The main issue (I think) is that it boils down to "a worse shell script" shaped in a LISP kind of wrapper. Plenty of people know about LISP too but will simply not even look at it because it is too different. Even if you take away the functional paradigm it just doesn't look like anything that can map to an existing knowledge base. This is also why C-esque languages (and I'm talking about the non-edge-cases here) are so prevalent and successful; they don't have to be 'the best' or even 'good', they just have to be easy to map to existing knowledge to be useful. And Nix doesn't do that.
- dagmx 4y agoWhy on earth are you clean installing so often? Are you polluting your main environment with a bunch of homebrew libraries per chance?
- tcldr 4y agoReally? Xcode has its issues but it isn't Charles Manson... Just a cleanup of ~/Developer/Xcode/DerivedData every once in a while seems to keep it ticking over for me. There was a time when the cache of simulators from every Xcode would build up and eat all you disk space just appearing under the amorphous grey 'System Data' categorisation under the 'About this Mac...' storage tab, but think they might have finally sorted that out. I do still need to relaunch Xcode every few hours as it struggles with 100s of files open and suddenly I get a keyboard lag or copy paste refusing to work. I'd definitely like to see something more lightweight for actual code editing, maybe de-coupling the SDK, and providing a decent LSP client that can be used with any language... but I don't see that happening anytime soon.
- generalpf 4y agoUnder Preferences > Locations you can make DerivedData relative to each project and I recommend you do that so different apps you work on don’t force you to wipe all the artifacts from all apps when you clean it manually. As for removing old simulators after you remove an old Xcode, run $ xcrun simctl delete unavailable
- kitsunesoba 4y agoBeen doing iOS dev professionally for 7 years, and have been tinkering with Mac development since OS X 10.1 or so. I haven’t found any of this to be necessary. I only reformat every 2-3 major releases at most and sometimes go most of the lifetime of a machine without reformatting, and I have various backend and cross platform desktop dev stuff set up on the same machines. Have rarely if ever had issues with Xcode acting up… Is there something we’re doing differently to get such dramatically different outcomes?
- thought_alarm 4y agoThis is great advice for people who don't know how computers work.
- jmull 4y agoLOL, I just deleted my sibling reply... you put it so much better than I could.
- jdmoreira 4y agoSorry. Equally 10+ years of daily iOS development. Is Xcode annoying at times? Sure. Do I like deleting the DerivedData folder once in a while? No. But I really can't relate much to what you wrote except maybe upgrading your machine often.
- deleted 4y ago[deleted]
- hyperjeff 4y ago20+ years of Xcode. This advice is ludicrous. Something traumatic must’ve happened 10 years ago to produce this policy. I only ever reboot for system updates and run zillions of things happily along with Xcode and many other full dev environments at the same time.
- diebeforei485 4y agoDevCleaner (free app on Mac App Store) deletes old simulators and DerivedData etc.
- ofrzeta 4y agoThat sounds like the Apple way for sure. Don't forget to zap the PRAM ;-)
- OrderlyTiamat 4y agoThis has to be satire right? There is no way apple development actually requires an amount of restrictions and effort like this?
- rewgs 4y ago> 2. Reformat (clean install) machine every 1-2 months. What are you even talking about? This is modern macOS, not Windows XP.
- KMnO4 4y agoCheck out AppCode by JetBrains. It reduces the need to use Xcode by 90%. https://www.jetbrains.com/objc/ https://www.jetbrains.com/objc/
- princevegeta89 4y agoBy switching to AppCode. In my experience Xcode sucked
- Cloudef 4y agoUse xcodebuild and forget xcode
- stoeckley 4y agofor me, main thing is turning on the (now native) vim emulation which is decent though missing some things (dot operator please!), and learning the keyboard shortcuts for the various UI panes for "prettier" all I've ever needed is just auto indentation of a block, which works fine other than that, I just submit to what Xcode is and live with it
- Arcanum-XIII 4y agoI developed in ObjC till 2016, so my opinion are dated but: - Xcode is an acquired taste. A bit slow and crash prone, but most of my issues came from the frameworks. Completion and linting were good enough and the integration with dtrace was enough to help me move faster than my colleagues. I even did use Xib :D - I tried multiple time app code: it’s not good either. In fact, I don’t like most of the jet rains product, but they’re easier to set up than the competition so…. - but now I’m back to nvim or emacs. I don’t develop as my job anymore, so my tooling seems pretty barebone to what seems to be the trend :) I nearly make do with the Processing/Arduino IDE and they’re both horrible.
- KerrAvon 4y agoXcode stability has markedly improved since 2016, FWIW.
- kitsunesoba 4y agoFor me the biggest factors for making Xcode “happy” are: - Writing clean/idiomatic Swift. This might sound silly but a lot of SourceKit instability is tied to things that are code smells, like deeply nesting closures and ridiculously long optional chains. Writing “Objective-C in Swift” where you’re trying your best to ignore types will also make SourceKit grumpy. - Avoiding huge frameworks. Small focused single purpose libraries are fine, but gangly monster types can cause problems (and with UIKit available, likely unnecessary). - Avoiding storyboards. For several years I’ve been going code-only on iOS, with XIBs being used only on macOS because there they’re more natural. Storyboards are more trouble than they’re worth on either platform. - Using SwiftUI only for small, focused components. It still needs some time in the oven to be able to compete with code-only UIKit for speed/stability. With those Xcode is quite snappy and reliable, allowing me to work all day with no issue.
- soylentgraham 4y agoYeah, nobody should be using UIbuilder and storyboards any more. swiftui is so much better, faster, usable, extensible. But wow, the hoops you jump through to use it with c++ - via obj-c (And iirc can't use .mm files either). Im sure I wasn't helping things by exposing that to javascript too :)
- bouk 4y agoRemove the print key binding and bind quick open to cmd+P
- happytoexplain 4y agoWhy haven't I thought of this. I frequently accidentally hit the print shortcut, and the quick open shortcut is ridiculously inconvenient for such a common navigation action.
- Kwpolska 4y agoWhy the heck is Cmd+P the key binding for Print, in Xcode, in 2022? Has anyone ever printed anything from Xcode?
- ProfMeowsworth 4y agoSwiftlint[1] is nice and can be integrated into Xcode’s warning panel. For auto-formatting, you can press CTRL-i on any selection to auto-format. [1] https://github.com/realm/SwiftLint https://github.com/realm/SwiftLint
- a9ex 4y ago1) Here are some tips & tricks for refactoring: https://developer.apple.com/documentation/xcode/finding-and-refactoring-code https://developer.apple.com/documentation/xcode/finding-and-... The “rename in project” and “rename in scope” functions are quite neat. 2) Check out SwiftLint: https://github.com/realm/SwiftLint https://github.com/realm/SwiftLint I have not used it in a while, but it comes with good defaults and is highly customizable to your own preferred Swift style.
- deleted 4y ago[deleted]
- jasmes 4y agoI’d just switch to JetBrains AppCode, but I’m very partial to their IDEs.
- tcldr 4y agoXcode definitely has it's issues but I think they're moving to a system where Swift, and the Swift Package Manger specifically, can provide a bunch of this kind of functionality. Take a look at this 'Meet Swift Package Plugins' talk from WWDC 22 which goes into detail: https://developer.apple.com/videos/play/wwdc2022/110359/ https://developer.apple.com/videos/play/wwdc2022/110359/ What's nice about this is that it's not restricted to Xcode, it can be integrated with your CIDI, too.
- lizardactivist 4y agoYou don't. You ignore it and use AppCode instead.
- soylentgraham 4y agoYou do, just learn xcode instead of learning appcode. Get used to instruments, debugger, etc
- danpalmer 4y agoLots of people mentioning AppCode as a replacement, but damn JetBrains apps suck if you're used to macOS. Basic things like windows misbehaving, poor multi-monitor support (yes, really), and being unusably slow for almost every aspect of the user interface. I could go on, but if you hate Xcode I think you'll find AppCode to be just a different set of crap. If you like using a Mac you'll positively hate AppCode. I personally have little problem with Xcode now. My recommendations would be: don't use the built-in source control integration, it mostly sucks. Get an M1/M2 Mac, the speed boost is great. Use a lighter weight editor (not IDE) for editing data files, large text files (>5k lines) and for anything that's not Swift/Obj-C/UI work. And lastly, stay up to date. Xcode has crashed much less for me on 12/13/14 than it did on ~9/10/11.
- danpalmer 4y agoMore nuanced ideas... I set up my keyboard shortcuts to be as close to VSCode as I could so that Xcode and VSCode were very similar to write code in. I learnt the shortcuts for the UI - toggling panels and things, that was quite beneficial. Another approach is to find the bits that are _great_ and that you don't get with other platforms. The debugging, particularly UI debugging with the visual hierarchy is great. When you have a good set of schemes set up for different purposes, potentially tied in to scripting in the build process, you can get quite a flexible system for running apps under different environments.
- Larrikin 4y agoI've never used Jet Brains products on anything besides MacOS for close to a decade and have been doing professional Android development with Android studio for almost that long. I don't agree with any of your complaints and find it hard to believe they were ever true unless you used their products an extremely long time ago before they got popular. I had to use XCode in grad school for a single iOS class and ended up switching to app code for any parts of the assignments I could. At work the developer that switches back and forth between iOS dev and Android dev and he has a similar work flow of doing as much as possible in AppCode until forced to use XCode.
- danpalmer 4y ago
- jdmoreira 4y agoI have one single tip. Don't use storyboards / nibs. Write all you view code by hand. Stackviews and your own layer of helper functions are you friend. I can write UI faster in code than would ever be possible in nib tooling. To say nothing of managing conflicts in those files. You won't look back!
- Jemm 4y agoVM on pc with lots of ram. Works fine for me.
- rewgs 4y agoHow are you running a macOS VM on Windows? I’ve tried basically every combination of hypervisor and macOS version since Mojave and I can hardly ever get them to install right, let alone run even kind of well.
- oneplane 4y agoI think your main pain point stems from the difference in ecosystems. This is not even a good/bad thing, just a "things are done a bit different" thing. If you take a look at the functionality that you are after, perhaps moving out outside of the scope of the editor may help you far more than trying to re-compose the editor to be more like something that it isn't. I personally don't have much of an issue switching between them, I mostly prefer Sublime Text over everything but it doesn't have the features I need for everything so I just use whatever tools the project needs the most. For iOS and macOS the whole workflow split in two parts: a common CI part where all the external tools run, and the in-editor part where you mostly just write the features you want. This applies to AppCode too, but we also do that for C# code where it really doesn't matter if you do it in Rider or Visual Studio on Mac, Visual Studio on Windows or Visual Studio Code anywhere. In the end, the pre-commit and CI tasks will do the common workflow anyway. While I understand that people enjoy digging deep into the features of a single specific IDE to do everything, in reality this is probably not the 'best of all worlds', unless you are working solo.
- manmal 4y agoOne thing I‘ve really come to appreciate (applies to all code editors) is to actively use keyboard shortcuts for moving selected lines up/down, and for deleting the current line. Vim users will be used to this anyway, but for the rest of us it’s a great way to code faster. The other thing (since Xcode‘s clipboard feature is IMO clunky) is to use a clipboard manager with the history set to a decent size. I use Paste (happens to come with SetApp) and never once lost a copied snippet - it‘s rock solid. I’ve developed a habit of just copying whole files in case I want to revert to that state (or partially) later.
- pixel_tracing 4y agoEverything you mentioned is possible and going from Xcode => VSCode I have the same experience