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.
Topic:
UI Frameworks
SubTopic:
SwiftUI