按传统的 AppKit 开发来说,给 macOS 添加常见的「Preferences」设置面板需要颇多步骤,包括添加 MenuItem,新建 Window,你需要在代码和 Storyboard 之间来回穿梭。

在换用 SwiftUI 开发之后才发现,给 macOS App 添加设置面板是如此简单,总共分 2 步:

1. 编写一个 SettingView

如同正常的开发 View 一般,创建一个给 Setting 使用的 View 即可,这里我添加了 TabView 来做分类处理:

struct SettingView: View {
    var body: some View {
        TabView {
            Text("General")
                .tabItem {
                    Label("General", systemImage: "gear")
                }
            Text("User")
                .tabItem {
                    Label("User", systemImage: "person")
                }
        }
        .frame(width: 400, height: 200)
    }
}

2. 在 @main 中添加一个 Settings

@main
struct SOSApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        
#if os(macOS)
        Settings {
            SettingView()               
        }
#endif
    }
}

此处添加 #if os(macOS) 系统判断是因为我的 APP 同时支持 iOS 和 macOS,不加区分的话 iOS Target 无法通过编译。

至此工作完结,Build 后就能看到你的 APP 已经添加了「偏好设置」菜单项,苹果甚至已经帮你把菜单名做好本地化,并且配置上默认快捷键了。
CleanShot 2022-04-17 at 14.02.05@2x

点击查看设置面板: