Having written a SwiftUI based app on macOS 15.2 with Xcode 16.2 I built a version for Monterey (which required backing off some modern uses, like #Preview and others). But the SwiftUI layout, positioning and dimensions, didn't use anything new so,
I was surprised that the app did not look exactly the same on Monterey. It was not wildly different, but enough that I had to modify several to frame, padding and font parameters in order to restore my desired appearance.
I'm assuming that over the course of generations of SwiftUI, things change -- that's life, but this was a frustrating process for at least two reasons:
-
view modifiers can't be conditionally compiled so something like this, for example, isn't possible
RoundedRectangle(cornerRadius: 1) <if Monterey> .padding(.horizontal, -2.0) <else> .padding(.horizontal, -4.0) <endif> .frame(height: 4.0)
-
previewing views is a challenge. Previewing on Sequoia doesn't show what the views will look like on Monterey. I can build the app on Monterey and use the non-macro
#preview
mechanism, but in order to do that, and the above, I'm pushed to maintain two versions of my app because the following doesn't compile:#if swift(>=5.9) #Preview("Monitor") { MonitorView() } #else struct MonitorView_Previews: PreviewProvider { static var previews: some View { MonitorView() } } #endif
These are not show-stoppers but I do wonder if I'm missing some mechanism(s) to ease the pain, or if SwiftUI functional changes are documented.