I know what you mean. Would love to just have AppKit/UIKit with some platform integrations (e.g. correct widget themes) on other platforms. Closest that exists to that is GNUStep, but it’s stuck on an old version of Objective-C (no Swift) and targets something like OS X 10.6 with API compatibility.
Outside of the that the next closest I’ve tinkered with is GTK, but since version 3 it kinda gave up on looking right running under anything but GTK/Qt-based desktops. It’s easy to make idiomatic bindings for which is nice though.
Disagree regarding frameworks, though. The newer snapshot-based APIs for NSTableView, NSOutlineView, and NSCollectionView (added in 2020 as part of macOS 11) are a massive improvement over the old index-based ones for example, and there’s been numerous polish and quality of life improvements scattered throughout.
Also disagree about Swift if only for the large number of things it comes with out of the box that’d require a third party dependency with Objective-C, but so many more errors being caught at compile time, no need to maintain header files, and no awkward split between C and Obj-C for basic types are nice too. I still enjoy Obj-C for some types of projects but as project complexity increases so too does my preference towards Swift.
Oh I didn't realize they were still adding APIs to AppKit. That's cool.
Yea I mean the ObjC vs Swift thing.... a matter of preference. I trust Steve Jobs more than I trust Tim Cook. I hate the feature creep in Swift. I hate Swift optionals. ObjC compiles faster than Swift. The ObjC ABI/runtime is superior to the Swift ABI/runtime (which allows for cool stuff like https://cycript.org). I like the dynamic typing a lot. Managing headers is a non-issue for me, I just consolidate everything into one monolithic header file.
I've worked in pretty big ObjC codebases (1M+ lines) so I know most of the tricks to deal with complexity. For Swift, max I've dealt with is 100k lines and it was crippled with tech debt. Frankly, the other engineers on the team were terrible, so maybe that's why. They abused the shit out of RxSwift and refused to use the `!` force-unwrap optional feature
Outside of the that the next closest I’ve tinkered with is GTK, but since version 3 it kinda gave up on looking right running under anything but GTK/Qt-based desktops. It’s easy to make idiomatic bindings for which is nice though.