Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I mean ok, the old one was already a bit overloaded and unwieldy, so a redesign was probably overdue and Ill give them the benefit of the doubt here but WTF is with the 1-2 second delay when switching between the menus in there? Are they doing web requests upon opening every settings page or what? This is real amateur hour.


They appear to be launching each settings screen as a separate app and retaining it until Settings is quit. How many resources this requires, or how much this contributes to the lag, I don't know, but...

Open Activity Monitor, and type in System Settings into the search. Then open the Settings app and press the down arrow key through all of the menus. You'll notice that each one of them appears as their own line item in Activity Monitor until you quit Settings, and if you keep going up and down through the menus, it'll (probably) get slower and slower; it seems like there's a memory leak or something going on there, and my hunch is that each old settings menu was thinly wrapped in a SwiftUI view and gets launched as soon as you click its nav item.


That’s not too different than the old app, but instead of .app bundles, the UIs and stuff were bundled in .prefPane bundles.


They're not .app bundles, they're .appex (extension!) bundles from /System/Library/ExtensionKit/.


Yea some other commenter mentioned that they most likely re-wrote the whole thing Swift.

So is Swift just too crappy for this kind of UI, that accesses low level system stuff? or are the devs just incompetent? Who knows…


SwiftUI is not swift. It's about framework not language. But even that doesn't matter

I think Apple has decent QA for low level stuff (remember how they quietly converted every iphone to APFS and back just to test that it will work later) but bad QA for final GUI.

Most of cocoa/objc stuff was written long ago and back when QA was better. If this was cocoa and objective c today it would be equally buggy.


> SwiftUI is not swift. It's about framework not language.

True, imo.

> But even that doesn't matter > Most of cocoa/objc stuff was written long ago and back when QA was better. If this was cocoa and objective c today it would be equally buggy.

I don't think I agree about this entirely. Although you can write unperformant code in any language and framework, SwiftUI is a different world of heavy abstraction. Writing a list view in AppKit using the documentation available allows for and encourages much more deliberate implementation in such a way that it'll be an almost night and day difference compared to the likely NavigationSplitView they're using in Settings. It's an inverse relationship with performance that SwiftUI takes; efficiency of piecing together the high level details first, and little to no control or clarity on how you'd optimize for performance.

My hunch is that with Settings, they're using a NavigationView or NavigationSplitView and not letting each view be recreated on selection, so they're sticking around in memory. However, if they were recreating each pane on selection, it seems like the render of the view waits for some kind of I/O, maybe reading their .plist or interacting directly with a system level CLI, which is why there's a delay before the UI renders.

Another possibility is a combo of both, they're retaining the views in memory AND triggering I/O immediately on selection, so the reads and threads accumulate quickly without being released


Are they doing web requests upon opening every settings page or what?

At least some of them are actually web pages:

https://blog.jim-nielsen.com/2022/inspecting-web-views-in-ma...


Hmm, and using React even! No wonder it’s slow and bloated.


You gotta wonder if this has been a reaction to a shrinking Cocoa/ObjC and SwiftUI talent pool


Could be that nowadays a lot of UI code will probably converge on web-first stuff like React, since it has a larger talent pool, as you said, and is inherently cross platform. Microsoft's newer apps like Teams are also built in React.


I use an iPhone 13 mini, and I experience no delays within the settings app.


I was talking about the settings app in macOS.


Oh, I see. There is a slight delay (closer to 1 second or less) switching menus inside of Settings on my M3 Air.


There is no reason for the delay to be more than 100ms. The 1 sec delay must be due to some extremely inefficient lazy init or a bunch of io happening when you switch between screens


We’re (largely) not running OSes from spinning metal anymore, so even if there were some I/O that needs to happen (there shouldn’t be), a second would be an indication that the app was doing it badly. A modern SSD will read multiple gigabytes in a second, if the reads are sequential and you don’t wait for each one to complete before starting another. Unfortunately, we as a species have not figured out the programming tools necessary to make that natural.




Consider applying for YC's Fall 2026 batch! Applications are open till July 27.

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

Search: