SettingsAccess 项目使用教程
1. 项目介绍
SettingsAccess 是一个用于在 macOS 上更好地访问 SwiftUI 设置场景的开源项目。它解决了在 macOS 14 Sonoma 及更早版本中,无法通过编程方式打开 SwiftUI 设置场景的问题。SettingsAccess 提供了一个名为 openSettingsLegacy()
的环境方法,可以在视图层次结构中的任何地方调用,以编程方式打开设置场景。此外,它还提供了一个 SettingsLink
的初始化器,允许在打开设置场景之前或之后执行任意代码。
该项目支持 macOS 11 Big Sur 及更高版本,并且不使用任何私有 API,因此可以安全地用于 Mac App Store。
2. 项目快速启动
2.1 安装
使用 Swift Package Manager (SPM) 安装 SettingsAccess:
- 在 Xcode 中,选择菜单:
File → Swift Packages → Add Package Dependency
。 - 输入以下 URL:
https://github.com/orchetect/SettingsAccess
。
在 Swift Package 中,将其添加到 Package.swift
的依赖项中:
dependencies: [
.package(url: "https://github.com/orchetect/SettingsAccess", from: "2.0.0")
]
2.2 使用
2.2.1 导入库
在需要使用 SettingsAccess 的文件中导入库:
import SettingsAccess
2.2.2 打开设置程序化
在主应用结构中,将 openSettingsAccess
视图修饰符附加到需要访问 openSettingsLegacy
方法的基视图:
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.openSettingsAccess()
}
Settings {
SettingsView()
}
}
}
在任何需要的子视图中,添加环境方法声明,然后可以通过调用此方法来程序化地打开设置场景:
struct ContentView: View {
@Environment(\.openSettingsLegacy) private var openSettingsLegacy
var body: some View {
Button("Open Settings") {
try? openSettingsLegacy()
}
}
}
2.2.3 在 MenuBarExtra 中使用
如果使用菜单式的 MenuBarExtra,不要将 openSettingsAccess()
附加到菜单内容。由于 SwiftUI 的限制,openSettingsLegacy()
不能在那里使用。相反,使用自定义的 SettingsLink
初始化器来添加一个设置菜单项,该菜单项能够在打开设置场景之前和/或之后运行代码:
@main
struct MyApp: App {
var body: some Scene {
MenuBarExtra {
AppMenuView() // 不要附加 openSettingsAccess()
}
Settings {
SettingsView()
}
}
}
struct AppMenuView: View {
var body: some View {
SettingsLink {
Text("Settings")
} preAction: {
// 在设置打开之前运行的代码
} postAction: {
// 在设置打开之后运行的代码
}
Button("Quit") {
NSApp.terminate(nil)
}
}
}
3. 应用案例和最佳实践
3.1 窗口式 MenuBarExtra
假设你正在构建一个窗口式的 MenuBarExtra,并希望有一个按钮可以激活应用、打开设置,然后关闭窗口。使用 SettingsAccess 可以轻松实现这一功能:
struct MenuBarWindow: View {
@Environment(\.openSettingsLegacy) private var openSettingsLegacy
var body: some View {
VStack {
Button("Open Settings and Close Window") {
try? openSettingsLegacy()
NSApp.keyWindow?.close()
}
}
.openSettingsAccess()
}
}
3.2 自定义设置链接
在某些情况下,你可能希望在打开设置之前或之后执行一些自定义操作。使用 SettingsAccess 提供的 SettingsLink
初始化器可以轻松实现:
struct CustomSettingsLink: View {
var body: some View {
SettingsLink {
Text("Custom Settings")
} preAction: {
print("Settings will open")
} postAction: {
print("Settings has opened")
}
}
}
4. 典型生态项目
SettingsAccess 是一个专注于 macOS 上的 SwiftUI 设置场景访问的库。它与以下项目和工具配合使用效果最佳:
- SwiftUI: 作为 SwiftUI 的一部分,SettingsAccess 提供了对 SwiftUI 设置场景的增强访问。
- Xcode: 需要 Xcode 15.0 或更高版本来构建项目。
- macOS: 支持 macOS 11.0 及更高版本。
通过使用 SettingsAccess,开发者可以更灵活地控制和访问 macOS 上的 SwiftUI 设置场景,从而提升应用的用户体验。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考