SettingsAccess 项目使用教程

SettingsAccess 项目使用教程

SettingsAccess Better SwiftUI Settings Scene Access on macOS 项目地址: https://gitcode.com/gh_mirrors/se/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:

  1. 在 Xcode 中,选择菜单:File → Swift Packages → Add Package Dependency
  2. 输入以下 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 设置场景,从而提升应用的用户体验。

SettingsAccess Better SwiftUI Settings Scene Access on macOS 项目地址: https://gitcode.com/gh_mirrors/se/SettingsAccess

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋溪普Gale

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值