Guida completa per iniziare a sviluppare applicazioni native per macOS utilizzando SwiftUI.
SwiftUI ha trasformato il modo in cui gli sviluppatori Apple costruiscono interfacce utente. Introdotto nel 2019, questo framework dichiarativo permette di creare app native per macOS, iOS, iPadOS, watchOS e tvOS con un unico codebase condiviso e una sintassi elegante.
Rispetto al predecessore AppKit, SwiftUI offre vantaggi concreti:
NSViewRepresentable.Creare una finestra con SwiftUI per macOS è sorprendentemente semplice:
import SwiftUI
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.commands {
CommandGroup(replacing: .newItem) {
Button("Nuovo documento") { createDocument() }
.keyboardShortcut("n", modifiers: .command)
}
}
}
}
struct ContentView: View {
@State private var selectedItem: String?
var body: some View {
NavigationSplitView {
SidebarView(selection: $selectedItem)
} detail: {
DetailView(item: selectedItem)
}
}
}
Il ciclo di vita dei dati in SwiftUI si basa su property wrapper:
// Stato locale al componente
@State private var count = 0
// Stato condiviso tra componenti figlio
@Binding var isVisible: Bool
// Oggetto osservabile (Swift 5.9+)
@Observable class UserSettings {
var theme: Theme = .dark
var fontSize: Double = 14
}
// Uso nella view
@Environment(UserSettings.self) var settings
SwiftUI offre componenti pensati per il desktop:
NavigationSplitView — Layout a colonne tipico delle app macOS (mail, note)Table — Tabelle native con colonne ordinabili e selezione multiplaHSplitView / VSplitView — Divisori ridimensionabili dall'utenteMenuBarExtra — App nella menu bar di macOSSettings — Finestra preferenze nativa con Form e TabViewMenuBarExtra("CodeRS", systemImage: "terminal") {
Button("Apri progetto") { openProject() }
Divider()
Button("Esci") { NSApplication.shared.terminate(nil) }
}
.menuBarExtraStyle(.menu)
Quando SwiftUI non basta, puoi usare componenti AppKit:
struct WebView: NSViewRepresentable {
let url: URL
func makeNSView(context: Context) -> WKWebView {
return WKWebView()
}
func updateNSView(_ nsView: WKWebView, context: Context) {
nsView.load(URLRequest(url: url))
}
}
@Observable per mantenere le view pulite@Environment per passare dipendenze invece di singleton#PreviewSwiftUI è ormai maturo abbastanza per costruire applicazioni macOS professionali. Con ogni versione di Xcode e macOS, il framework diventa più completo e performante. Se stai iniziando un nuovo progetto macOS nel 2024, SwiftUI è la scelta giusta.
Per approfondire, visita la documentazione ufficiale Apple o segui i tutorial su developer.apple.com.