In the code below I want to use .windowResizability only if #available(macOS 13.0, *) == true or @ available(macOS 13.0, *) cause it doesn’t available under macOS 13. I can not find the solution by myself.
//
// Test_HowAviableApp.swift
// Test HowAviable
//
// Created by Sebastien REMY on 03/11/2022.
//
import SwiftUI
import UniformTypeIdentifiers
@main
struct Test_HowAviableApp: App {
var body: some Scene {
DocumentGroup(newDocument: MyDocument()) { file in
MyView(document: file.$document)
}
// @available(macOS 13.0, *) // <- DOESN'T WORK!
//.windowResizability(.contentSize) // Only for macOs 13+
}
}
struct MyDocument: FileDocument, Codable {
static var readableContentTypes = [UTType(exportedAs:"com.test.test")]
var test = "test"
init() {
}
init(configuration: ReadConfiguration) throws {
if let data = configuration.file.regularFileContents {
self = try JSONDecoder().decode(MyDocument.self, from: data)
}
}
func fileWrapper(configuration: WriteConfiguration) throws -> FileWrapper {
let data = try JSONEncoder().encode(self)
return FileWrapper(regularFileWithContents: data)
}
}
struct MyView: View {
@Binding var document: MyDocument
var body: some View {
Text("Hello")
}
}
3
Answers
Just wrap it with if statement
In the case of a single expression only you can remove
return
:Try this:
.windowResizability
is only available on macOS, so you need to conditionally apply this modifier based on the platform..windowResizability
only supports macOS 13.0+, so in macOS implementation, an API Availability Check is needed.Based on that, here is what I did to add this conditional capability.
Window
Scene is only available on macOS 13.0+ , which is very similar to your question.Hope this can help you.