需求
Split-view 应用外壳
默认选项
NavigationSplitView, .sidebar 列表,以及 inspector(isPresented:)
为何需要它
持久的侧边栏、详情面板和检查器比触控优先的推入式导航更符合常见的 Mac 应用布局。
Codex 用例
使用 Codex 构建一个 Mac 原生 SwiftUI 应用外壳,包含侧边栏、详情面板、检查器、命令和“设置”。
使用 Codex 和 Build macOS Apps 插件,将应用构想转化为桌面原生应用,保持侧边栏选择稳定,添加菜单、工具栏和键盘快捷键,并将偏好设置移至专用的偏好设置窗口,而不是主内容堆栈中。 NavigationSplitView 新的 Mac 应用构想,或需要具备持久导航、菜单、工具栏和键盘快捷键的真实桌面外壳的 iPad 优先及 Web 优先概念 Settings scene.
使用 Codex 构建一个 Mac 原生 SwiftUI 应用外壳,包含侧边栏、详情面板、检查器、命令和“设置”。
使用 Codex 和 Build macOS Apps 插件,将应用构想转化为桌面原生应用,保持侧边栏选择稳定,添加菜单、工具栏和键盘快捷键,并将偏好设置移至专用的偏好设置窗口,而不是主内容堆栈中。 NavigationSplitView 新的 Mac 应用构想,或需要具备持久导航、菜单、工具栏和键盘快捷键的真实桌面外壳的 iPad 优先及 Web 优先概念 Settings scene.
使用 Codex 和 Build macOS Apps 插件,将应用构想转化为桌面原生应用,保持侧边栏选择稳定,添加菜单、工具栏和键盘快捷键,并将偏好设置移至专用的偏好设置窗口,而不是主内容堆栈中。 NavigationSplitView 新的 Mac 应用构想,或需要具备持久导航、菜单、工具栏和键盘快捷键的真实桌面外壳的 iPad 优先及 Web 优先概念 Settings scene.
相关链接
| 技能 | 为什么使用它 |
|---|---|
| 使用 macOS SwiftUI 模式、窗口管理、AppKit 互操作以及构建/运行技能,创建侧边栏-详情-检查器布局,连接菜单和设置,并在外壳优先的循环中验证应用。 | 使用 Build macOS Apps 插件将 [描述您的应用构想] 转化为 Mac 原生 SwiftUI 应用外壳,包含侧边栏、详情面板、检查器、命令和“设置”。约束条件:- 首先选择场景模型。主窗口首选 `WindowGroup`,并为偏好设置添加专用的 `Settings` 场景。- 围绕 `NavigationSplitView` 构建主 UI,具有显式选择状态、原生 `.sidebar` 列表、详情界面,以及用于辅助元数据或控件的 `inspector(isPresented:)` 面板。- 保持侧边栏行轻量且原生:一个图标、一行标题,最多一行简短的辅助文本。除非有强烈的业务理由,否则不要将每行都包装在大型自定义卡片中。- 通过场景级别的 `commands`、`CommandMenu`、工具栏按钮和键盘快捷键暴露重要操作。不要将关键操作的唯一路径隐藏在手勢背后。- 使用 `@SceneStorage` 管理窗口范围的 UI 状态,`@AppStorage` 管理偏好设置,并使用父级拥有的显式选择绑定来协调侧边栏/详情。- 首选系统材质、语义颜色和标准侧边栏背景。仅在需要时对详情或检查器内容卡片添加自定义样式。- 仅当 SwiftUI 无法清晰地表达某个特定的桌面行为时,才使用狭窄的 AppKit 桥接。- 创建或更新 `script/build_and_run.sh`,运行最小可行构建/运行检查,并告诉我您使用的确切命令。交付物:- 场景结构和主侧边栏/详情/检查器视图- 菜单、工具栏和键盘快捷键连接- Settings 场景和偏好设置状态模型- 您添加的任何 AppKit 桥接及其必要性- 构建/运行验证步骤以及您建议的任何桌面用户体验后续跟进 |
当您希望 Codex 应用该桌面结构并保持构建/运行循环外壳优先时。其 macOS SwiftUI 模式技能非常适合场景设计、侧边栏、检查器、命令、设置以及当 SwiftUI 略显不足时针对特定 Mac 行为的小型 AppKit 桥接。

使用 构建 macOS Apps 插件 构建侧边栏、详情面板和检查器
在适合工作流的地方,优先选择 NavigationSplitView 如果应用需要不寻常的分割尺寸调整、底层窗口协调或自定义响应者链行为,请要求 Codex 保持 SwiftUI 外壳完整,并仅为该缺陷添加最小的 AppKit 桥接。
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)
}
}
}
}
在桌面层中放置命令、工具栏和快捷键
将偏好设置保留在 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。这通常比在主内容窗口中推入设置界面更符合 macOS 的使用习惯。
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 with @AppStorage 中,并通过应用菜单公开入口,而不是构建另一个推入式设置屏幕。
如果功能需要打开/保存面板、第一响应者控制或自定义 NSView,将 AppKit 作为 SwiftUI 拥有的状态模型周围的少量外围层来使用,而不是用 AppKit 重写整个窗口。
需求
默认选项
为何需要它
需求
Split-view 应用外壳
默认选项
NavigationSplitView, .sidebar 列表,以及 inspector(isPresented:)
为何需要它
持久的侧边栏、详情面板和检查器比触控优先的推入式导航更符合常见的 Mac 应用布局。
需求
桌面操作和设置
默认选项
commands, CommandMenu、键盘快捷键,以及 Settings 场景
为何需要它
菜单栏操作、快捷键和专用设置窗口使该功能感觉像一个真正的 Mac 应用,而不是拉伸到桌面的 iOS 屏幕。
需求
状态所有权
默认选项
@State, @SceneStorage, @AppStorage,以及显式的选择绑定
为何需要它
Codex 可以使侧边栏选择、检查器可见性和用户偏好设置变得可预测,而无需反射性地添加视图模型。
需求
原生逃生舱
默认选项
AppKit 通过狭窄的 NSViewRepresentable or NSWindow 桥接
为何需要它
仅将 AppKit 用于 SwiftUI 无法清晰表达的平台行为,同时将 SwiftUI 保持为场景和选择状态的唯一事实来源。
| 需求 | 默认选项 | 为何需要它 |
|---|---|---|
| Split-view 应用外壳 | NavigationSplitView , .sidebar 列表,以及 inspector(isPresented:) | 持久的侧边栏、详情面板和检查器比触控优先的推入式导航更符合常见的 Mac 应用布局。 |
| 桌面操作和设置 | commands , CommandMenu 、键盘快捷键,以及 Settings 场景 | 菜单栏操作、快捷键和专用设置窗口使该功能感觉像一个真正的 Mac 应用,而不是拉伸到桌面的 iOS 屏幕。 |
| 状态所有权 | @State , @SceneStorage , @AppStorage ,以及显式的选择绑定 | Codex 可以使侧边栏选择、检查器可见性和用户偏好设置变得可预测,而无需反射性地添加视图模型。 |
| 原生逃生舱 | AppKit 通过狭窄的 NSViewRepresentable or NSWindow 桥接 | 仅将 AppKit 用于 SwiftUI 无法清晰表达的平台行为,同时将 SwiftUI 保持为场景和选择状态的唯一事实来源。 |