For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主导航
Codex

Codex use case

构建 Mac 应用框架

使用 Codex 构建 Mac 原生 SwiftUI 应用框架,包含边栏、详情面板、检查器、命令和设置。

Difficulty 高级
Time horizon 1 小时

使用 Codex 和 Build macOS Apps 插件,将应用构想转化为桌面原生的 NavigationSplitView 应用,保持边栏选中状态稳定,添加菜单、工具栏和键盘快捷键,并将偏好设置移至专用的 Settings 场景中。

最适合

  • 全新的 Mac 应用构想,或优先面向 iPad 或 Web、但需要具备持久导航、菜单、工具栏和键盘快捷键的真正桌面应用框架的构想
  • 编辑器、资料库、管理或审查工具,其中边栏选中项决定详情面板的内容,而检查器则提供辅助元数据或操作
  • 需要将设置放在专用偏好设置窗口中,而不是在主内容堆栈中再推入一个屏幕的 Mac 应用

Contents

    ← 全部使用场景

    构建 Mac 应用框架

    使用 Codex 构建 Mac 原生 SwiftUI 应用框架,包含边栏、详情面板、检查器、命令和设置。

    使用 Codex 和 Build macOS Apps 插件,将应用构想转化为桌面原生的 NavigationSplitView 应用,保持边栏选中状态稳定,添加菜单、工具栏和键盘快捷键,并将偏好设置移至专用的 Settings 场景中。

    高级
    1 小时

    使用 Codex 和 Build macOS Apps 插件,将应用构想转化为桌面原生的 NavigationSplitView 应用,保持边栏选中状态稳定,添加菜单、工具栏和键盘快捷键,并将偏好设置移至专用的 Settings 场景中。

    高级
    1 小时

    最适合

    • 全新的 Mac 应用构想,或优先面向 iPad 或 Web、但需要具备持久导航、菜单、工具栏和键盘快捷键的真正桌面应用框架的构想
    • 编辑器、资料库、管理或审查工具,其中边栏选中项决定详情面板的内容,而检查器则提供辅助元数据或操作
    • 需要将设置放在专用偏好设置窗口中,而不是在主内容堆栈中再推入一个屏幕的 Mac 应用

    技能与插件

    • 使用 macOS SwiftUI 模式、窗口管理、AppKit 互操作和构建/运行技能,创建由边栏、详情面板和检查器组成的布局,接入菜单和设置,并在以 Shell 为先的迭代流程中验证应用。
    Skill Why use it
    Build macOS Apps 使用 macOS SwiftUI 模式、窗口管理、AppKit 互操作和构建/运行技能,创建由边栏、详情面板和检查器组成的布局,接入菜单和设置,并在以 Shell 为先的迭代流程中验证应用。

    入门提示

    使用 Build macOS Apps 插件,将 [describe your app idea] 打造为 Mac 原生 SwiftUI 应用框架,包含边栏、详情面板、检查器、命令和设置。 约束: - 先选择场景模型。主窗口优先使用 `WindowGroup`,并为偏好设置添加专用 `Settings` 场景。 - 以 `NavigationSplitView` 为基础构建主界面,使用显式选择状态、原生 `.sidebar` 列表、详情界面,以及用于辅助元数据或控件的 `inspector(isPresented:)` 面板。 - 边栏行应保持轻量并采用原生样式:一个图标、一行标题,最多再加一行简短的次要文本。除非有充分的产品理由,否则不要用大型自定义卡片包裹每一行。 - 通过场景级 `commands`、`CommandMenu`、工具栏按钮和键盘快捷键提供重要操作。不要把关键操作的唯一入口隐藏在手势之后。 - 使用 `@SceneStorage` 存储窗口级界面状态,使用 `@AppStorage` 存储偏好设置,并使用由父视图持有的显式选择绑定来协调 sidebar/detail。 - 优先使用系统材质、语义颜色和标准边栏背景。仅在需要时为详情或检查器中的内容卡片添加自定义样式。 - 仅使用精简的 AppKit 桥接,而且仅限于 SwiftUI 无法简洁表达某项特定桌面端行为的情况。 - 创建或更新 `script/build_and_run.sh`,执行最精简且有效的 build/run 检查,并告诉我您使用的确切命令。 交付内容: - 场景结构和主要 sidebar/detail/inspector 视图 - 菜单、工具栏和键盘快捷键的接入 - 设置场景和偏好设置状态模型 - 您添加的任何 AppKit 桥接及其必要原因 - build/run 验证步骤,以及您建议的任何桌面端用户体验后续改进
    使用 Build macOS Apps 插件,将 [describe your app idea] 打造为 Mac 原生 SwiftUI 应用框架,包含边栏、详情面板、检查器、命令和设置。 约束: - 先选择场景模型。主窗口优先使用 `WindowGroup`,并为偏好设置添加专用 `Settings` 场景。 - 以 `NavigationSplitView` 为基础构建主界面,使用显式选择状态、原生 `.sidebar` 列表、详情界面,以及用于辅助元数据或控件的 `inspector(isPresented:)` 面板。 - 边栏行应保持轻量并采用原生样式:一个图标、一行标题,最多再加一行简短的次要文本。除非有充分的产品理由,否则不要用大型自定义卡片包裹每一行。 - 通过场景级 `commands`、`CommandMenu`、工具栏按钮和键盘快捷键提供重要操作。不要把关键操作的唯一入口隐藏在手势之后。 - 使用 `@SceneStorage` 存储窗口级界面状态,使用 `@AppStorage` 存储偏好设置,并使用由父视图持有的显式选择绑定来协调 sidebar/detail。 - 优先使用系统材质、语义颜色和标准边栏背景。仅在需要时为详情或检查器中的内容卡片添加自定义样式。 - 仅使用精简的 AppKit 桥接,而且仅限于 SwiftUI 无法简洁表达某项特定桌面端行为的情况。 - 创建或更新 `script/build_and_run.sh`,执行最精简且有效的 build/run 检查,并告诉我您使用的确切命令。 交付内容: - 场景结构和主要 sidebar/detail/inspector 视图 - 菜单、工具栏和键盘快捷键的接入 - 设置场景和偏好设置状态模型 - 您添加的任何 AppKit 桥接及其必要原因 - build/run 验证步骤,以及您建议的任何桌面端用户体验后续改进

    从 Mac 场景模型开始

    此用例可将应用构想转化为真正为桌面端打造的 Mac 应用框架,而不是把触控优先的界面堆栈拉伸到桌面端。先让 Codex 选择场景模型,再围绕稳定的边栏选中状态、详情界面以及用于辅助控件或元数据的检查器设计主窗口。

    一个 Mac 原生边栏和详情应用框架,边栏中有一个选中项,详情面板中显示其内容

    如果您希望 Codex 应用这种桌面结构,并让构建/运行循环以 Shell 为先,请使用 Build macOS Apps 插件。其中的 macOS SwiftUI 模式技能非常适合用于场景设计、边栏、检查器、命令和设置;如果仅有某项 Mac 特有行为无法由 SwiftUI 简洁实现,也适合添加少量 AppKit 桥接。

    构建边栏、详情面板和检查器

    如果功能需要持久导航和稳定的选中项,请优先使用 NavigationSplitView。边栏中的行应保持原生、轻量,边栏应采用系统背景;自定义卡片或密集元数据只应放在详情面板或检查器中。

    struct LibraryRootView: View {
      @SceneStorage("LibraryRootView.selection") private var selection: Item.ID?
      @SceneStorage("LibraryRootView.showInspector") private var showInspector = true
    
      var body: some View {
        NavigationSplitView {
          List(selection: $selection) {
            ForEach(items) { item in
              Label(item.title, systemImage: item.systemImage)
                .tag(item.id)
            }
          }
          .listStyle(.sidebar)
          .navigationTitle("Library")
        } detail: {
          ItemDetailView(selection: selection)
            .inspector(isPresented: $showInspector) {
              ItemInspectorView(selection: selection)
            }
        }
      }
    }

    如果应用需要非常规的分栏尺寸、底层窗口协调或自定义响应者链行为,请让 Codex 保持 SwiftUI 应用框架不变,只针对这一处缺口添加所需的最小 AppKit 桥接。

    将命令、工具栏和快捷键放在桌面层

    Mac 用户应能通过菜单栏、工具栏和键盘快捷键找到重要操作。让 Codex 围绕同一组应用操作接入场景级 commands、上下文相关的菜单项和工具栏按钮,这样桌面端用户就不必费力寻找仅支持手势的控件。

    @main
    struct LibraryApp: App {
      var body: some Scene {
        WindowGroup {
          LibraryRootView()
        }
        .commands {
          CommandMenu("Library") {
            Button("New Item") {
              // Create a new item.
            }
            .keyboardShortcut("n")
    
            Button("Toggle Inspector") {
              // Route this command to the focused window or selected item state.
            }
            .keyboardShortcut("i", modifiers: [.command, .option])
          }
        }
    
        Settings {
          LibrarySettingsView()
        }
      }
    }

    如果命令应作用于当前显示的详情项,请使用 FocusedValue、场景状态或显式选择状态。如果某个快捷键会在多处注册,请让 Codex 统一其所有权,使应用只有一条清晰的命令执行路径。

    将偏好设置放在 Settings

    对于应用偏好设置,请使用专用 Settings 场景,并通过 @AppStorage 持久保存需要长期保留的用户选择。这通常比在主内容窗口中推入设置屏幕更符合 Mac 应用习惯。

    struct LibrarySettingsView: View {
      @AppStorage("showItemMetadata") private var showItemMetadata = true
    
      var body: some View {
        TabView {
          Form {
            Toggle("Show Item Metadata", isOn: $showItemMetadata)
          }
          .tabItem { Label("General", systemImage: "gearshape") }
        }
        .frame(width: 460, height: 260)
        .scenePadding()
      }
    }

    先在提示中描述应用构想,再验证应用框架

    要充分利用本页,您的提示应明确应用构想、主要内容对象和核心操作,然后让 Codex 先围绕该工作流构建桌面应用框架。让智能体执行一项简单的构建/运行检查,并总结场景结构、命令接入、状态所有权,以及它必须通过 AppKit 桥接处理的任何边缘情况。

    实用技巧

    保持边栏采用原生样式

    边栏中的每一行仅使用一个图标、一行标题,次要文本最多一行且应简短。将信息更丰富的卡片、计数器和元数据移到详情面板或检查器中,以便快速浏览源列表。

    不要将设置隐藏在主内容堆栈中

    如果某项用户偏好影响整个应用,请让 Codex 将该控件放在 Settings 中,使用 @AppStorage 持久保存,并通过应用菜单提供入口,而不是再构建一个通过导航推入的设置屏幕。

    仅用 AppKit 弥补少量桌面端能力缺口

    如果该功能需要打开或保存面板、第一响应者控制或自定义 NSView,请仅在由 SwiftUI 持有的状态模型外围添加一小层 AppKit 边界,而不要用 AppKit 重写整个窗口。

    Tech stack

    Need

    分栏视图应用框架

    Default options

    NavigationSplitView.sidebar 列表和 inspector(isPresented:)

    Why it's needed

    持久边栏、详情面板和检查器比触控优先的推入式导航更符合常见的 Mac 应用布局。

    Need

    桌面端操作和设置

    Default options

    commandsCommandMenu、键盘快捷键和专用 Settings 场景

    Why it's needed

    菜单栏操作、快捷键和专用设置窗口让该功能拥有真正 Mac 应用的体验,而不是像被拉伸到桌面端的 iOS 屏幕。

    Need

    状态所有权

    Default options

    @State@SceneStorage@AppStorage 和显式选择绑定

    Why it's needed

    Codex 无需下意识地添加视图模型,也能使边栏选中状态、检查器可见性和用户偏好设置保持可预测。

    Need

    原生能力补充方案

    Default options

    通过小范围的 NSViewRepresentableNSWindow 桥接使用 AppKit

    Why it's needed

    仅在 SwiftUI 无法简洁表达平台行为时使用 AppKit,同时让 SwiftUI 继续作为场景和选择状态的单一事实来源。

    Need Default options Why it's needed
    分栏视图应用框架 NavigationSplitView .sidebar 列表和 inspector(isPresented:) 持久边栏、详情面板和检查器比触控优先的推入式导航更符合常见的 Mac 应用布局。
    桌面端操作和设置 commands CommandMenu 、键盘快捷键和专用 Settings 场景 菜单栏操作、快捷键和专用设置窗口让该功能拥有真正 Mac 应用的体验,而不是像被拉伸到桌面端的 iOS 屏幕。
    状态所有权 @State @SceneStorage @AppStorage 和显式选择绑定 Codex 无需下意识地添加视图模型,也能使边栏选中状态、检查器可见性和用户偏好设置保持可预测。
    原生能力补充方案 通过小范围的 NSViewRepresentable NSWindow 桥接使用 AppKit 仅在 SwiftUI 无法简洁表达平台行为时使用 AppKit,同时让 SwiftUI 继续作为场景和选择状态的单一事实来源。

    相关使用场景