In the future, I'd like to build a feature where my app has a specialized display for external screens, which would involve creating a separate window. Super easy in UIKit on iOS. Super easy in AppKit on Mac. Next to impossible with UIKit on Mac. However, someone posted a demo of how to create a "plugin" written in Objective-C, and include it only in my Mac version of the app. The objective-c bundle code #import AppKit, queries appkit and some other frameworks for screen information, creates an NSWindow with an NSViewController, and then vends its CALayer through the plugin's one method. Since CALayer is the same class in both frameworks, I can actually insert the CALayers I have from the uikit side of the app into the NSView in the NSWindow from the plugin. Of course, I have to use run-time bundle loading with objective-c runtime method calls, like performSelector:, to do that... but it works. I haven't shipped it yet. There are so many issues just getting document-based apps to work in maccatalyst, this ground-up-re-write of my app in MacCatalyst has been delayed for many months until I get those fixed.
I don't know if there's anyway to get it to work with SwiftUI; I've never tried playing with SwiftUI and CALayer together. But SwiftUI works on Mac, too, without catalyst. So you may be able to write a shared framework that relies on swiftui and create a hosting view / view controller in the plugin which vends the hosting view to the obj-c code that runs the bundle. Then you only need methods for updating your data source in both directions. Since you can't send swift structs through the obj-c protocol, maybe you could serialize it all down, kind of like xpc does for inter-process communication? I dunno. just thinking out of the box here.