Need
分割ビューのアプリシェル
Default options
NavigationSplitView、.sidebar リスト、inspector(isPresented:)
Why it's needed
永続的なサイドバー、詳細ペイン、インスペクタは、タッチ操作優先のプッシュナビゲーションよりも一般的な Mac アプリのレイアウトに適しています。
.md to the page URL.
Codex use case
Codex を使って、サイドバー、詳細ペイン、インスペクタ、コマンド、設定を備えた Mac ネイティブの SwiftUI アプリシェルを構築します。
Codex と Build macOS Apps プラグインを使って、アプリのアイデアをデスクトップネイティブの NavigationSplitView アプリに仕立て、サイドバーの選択状態を安定して維持し、メニュー、ツールバー、キーボードショートカットを追加して、環境設定を専用の Settings シーンに移します。
Codex を使って、サイドバー、詳細ペイン、インスペクタ、コマンド、設定を備えた Mac ネイティブの SwiftUI アプリシェルを構築します。
Codex と Build macOS Apps プラグインを使って、アプリのアイデアをデスクトップネイティブの NavigationSplitView アプリに仕立て、サイドバーの選択状態を安定して維持し、メニュー、ツールバー、キーボードショートカットを追加して、環境設定を専用の Settings シーンに移します。
Codex と Build macOS Apps プラグインを使って、アプリのアイデアをデスクトップネイティブの NavigationSplitView アプリに仕立て、サイドバーの選択状態を安定して維持し、メニュー、ツールバー、キーボードショートカットを追加して、環境設定を専用の Settings シーンに移します。
| Skill | Why use it |
|---|---|
| Build macOS Apps | macOS SwiftUI パターン、ウィンドウ管理、AppKit 相互運用、ビルド/実行スキルを使って、サイドバー・詳細・インスペクタのレイアウトを作成し、メニューと設定を連携させ、シェルを起点とするループでアプリを検証します。 |
このユースケースでは、タッチ操作優先のスタックをそのまま引き延ばすのではなく、デスクトップ向けに設計されたと感じられる Mac アプリシェルへアプリのアイデアを発展させます。まず Codex にシーンモデルを選ばせ、次に、安定したサイドバー選択、詳細表示領域、補助的なコントロールやメタデータ用のインスペクタを中心にメインウィンドウを設計するよう依頼します。

Codex にこのデスクトップ構造を適用させ、ビルド/実行ループをシェル起点で進めたい場合は、Build macOS Apps プラグイン を使用します。同プラグインの macOS SwiftUI パターンスキルは、シーン設計、サイドバー、インスペクタ、コマンド、設定のほか、SwiftUI だけでは Mac 固有の動作を実現しきれない場合の小規模な 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)
}
}
}
}
アプリで分割ビューの特殊なサイズ調整、低レベルのウィンドウ連携、レスポンダーチェーンの独自動作が必要な場合は、SwiftUI シェルをそのまま維持し、その不足を補うために必要な最小限の AppKit ブリッジだけを追加するよう Codex に依頼します。
Mac ユーザーが重要なアクションをメニューバー、ツールバー、キーボードショートカットから見つけられるようにします。デスクトップユーザーがジェスチャーでしか使えないコントロールを探し回らずに済むよう、シーンレベルの commands、状況に応じたメニュー項目、ツールバーボタンのいずれからも同じアプリアクションを呼び出せるよう Codex に依頼します。
@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、シーン状態、または明示的な選択状態を使用します。ショートカットが複数の場所で登録される場合は、アプリ内のコマンド経路を 1 つに明確化できるよう、管理主体を集約するよう 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 で補完した箇所を要約させます。
サイドバーの各行は、アイコン 1 つ、タイトル 1 行、短い補足行を多くても 1 行にします。情報量の多いカード、カウンター、メタデータは詳細ペインかインスペクタに移し、サイドバーのリストを見渡しやすく保ちます。
ユーザー設定がアプリ全体に影響する場合は、別の設定画面をプッシュ表示するのではなく、そのコントロールを Settings に配置して @AppStorage で永続化し、アプリメニューから開けるよう Codex に依頼します。
機能に開く/保存パネル、ファーストレスポンダーの制御、カスタム NSView が必要な場合は、ウィンドウ全体を AppKit で書き直すのではなく、SwiftUI が所有する状態モデルの境界部分だけを補う小規模な手段として AppKit を使用します。
Need
Default options
Why it's needed
Need
分割ビューのアプリシェル
Default options
NavigationSplitView、.sidebar リスト、inspector(isPresented:)
Why it's needed
永続的なサイドバー、詳細ペイン、インスペクタは、タッチ操作優先のプッシュナビゲーションよりも一般的な Mac アプリのレイアウトに適しています。
Need
デスクトップのアクションと設定
Default options
commands、CommandMenu、キーボードショートカット、Settings シーン
Why it's needed
メニューバーのアクション、ショートカット、専用の設定ウィンドウがあることで、デスクトップ向けに引き延ばした iOS 画面ではなく、本格的な Mac アプリらしくなります。
Need
状態の所有関係
Default options
@State、@SceneStorage、@AppStorage、明示的な選択バインディング
Why it's needed
Codex は、むやみにビューモデルを追加することなく、サイドバーの選択、インスペクタの表示状態、ユーザー設定を予測可能に管理できます。
Need
ネイティブ機能を使うためのエスケープハッチ
Default options
限定的な NSViewRepresentable または NSWindow ブリッジを介した AppKit
Why it's needed
SwiftUI では適切に表現できないプラットフォーム動作にのみ AppKit を使用し、シーンと選択状態については SwiftUI を信頼できる唯一の情報源として維持します。
| Need | Default options | Why it's needed |
|---|---|---|
| 分割ビューのアプリシェル | NavigationSplitView 、 .sidebar リスト、 inspector(isPresented:) | 永続的なサイドバー、詳細ペイン、インスペクタは、タッチ操作優先のプッシュナビゲーションよりも一般的な Mac アプリのレイアウトに適しています。 |
| デスクトップのアクションと設定 | commands 、 CommandMenu 、キーボードショートカット、 Settings シーン | メニューバーのアクション、ショートカット、専用の設定ウィンドウがあることで、デスクトップ向けに引き延ばした iOS 画面ではなく、本格的な Mac アプリらしくなります。 |
| 状態の所有関係 | @State 、 @SceneStorage 、 @AppStorage 、明示的な選択バインディング | Codex は、むやみにビューモデルを追加することなく、サイドバーの選択、インスペクタの表示状態、ユーザー設定を予測可能に管理できます。 |
| ネイティブ機能を使うためのエスケープハッチ | 限定的な NSViewRepresentable または NSWindow ブリッジを介した AppKit | SwiftUI では適切に表現できないプラットフォーム動作にのみ AppKit を使用し、シーンと選択状態については SwiftUI を信頼できる唯一の情報源として維持します。 |