For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
Navigation principale
Theme
Codex

Codex use case

Créer l’interface de base d’une app Mac

Utilisez Codex pour créer une interface SwiftUI native pour Mac avec une barre latérale, un volet de détail, un inspecteur, des commandes et des réglages.

Difficulty Advanced
Time horizon 1h

Utilisez Codex et le plugin Build macOS Apps pour concrétiser votre idée d’app avec une interface Mac native basée sur NavigationSplitView. Conservez la sélection dans la barre latérale, ajoutez des menus, des barres d’outils et des raccourcis clavier, puis déplacez les préférences dans une scène Settings dédiée.

Best for

  • Nouveaux projets d’apps Mac ou concepts initialement conçus pour l’iPad ou le Web qui nécessitent une interface de bureau avec une navigation persistante, des menus, des barres d’outils et des raccourcis clavier
  • Éditeurs, gestionnaires de bibliothèques, outils d’administration ou de révision où la sélection dans la barre latérale détermine le contenu du volet de détail et où l’inspecteur présente des métadonnées ou des actions secondaires
  • Apps Mac dont les réglages doivent s’ouvrir dans une fenêtre dédiée plutôt que dans un écran supplémentaire de la pile de navigation principale

Contents

    ← All use cases

    Créer l’interface de base d’une app Mac

    Utilisez Codex pour créer une interface SwiftUI native pour Mac avec une barre latérale, un volet de détail, un inspecteur, des commandes et des réglages.

    Utilisez Codex et le plugin Build macOS Apps pour concrétiser votre idée d’app avec une interface Mac native basée sur NavigationSplitView. Conservez la sélection dans la barre latérale, ajoutez des menus, des barres d’outils et des raccourcis clavier, puis déplacez les préférences dans une scène Settings dédiée.

    Advanced
    1h

    Utilisez Codex et le plugin Build macOS Apps pour concrétiser votre idée d’app avec une interface Mac native basée sur NavigationSplitView. Conservez la sélection dans la barre latérale, ajoutez des menus, des barres d’outils et des raccourcis clavier, puis déplacez les préférences dans une scène Settings dédiée.

    Advanced
    1h

    Best for

    • Nouveaux projets d’apps Mac ou concepts initialement conçus pour l’iPad ou le Web qui nécessitent une interface de bureau avec une navigation persistante, des menus, des barres d’outils et des raccourcis clavier
    • Éditeurs, gestionnaires de bibliothèques, outils d’administration ou de révision où la sélection dans la barre latérale détermine le contenu du volet de détail et où l’inspecteur présente des métadonnées ou des actions secondaires
    • Apps Mac dont les réglages doivent s’ouvrir dans une fenêtre dédiée plutôt que dans un écran supplémentaire de la pile de navigation principale

    Skills & Plugins

    • Utilisez les skills consacrés aux pratiques SwiftUI sur macOS, à la gestion des fenêtres, à l’intégration d’AppKit ainsi qu’à la compilation et à l’exécution. Commencez par structurer l’interface autour de la barre latérale, du volet de détail et de l’inspecteur, puis intégrez les menus et les réglages en testant l’app à chaque itération.
    Skill Why use it
    Build macOS Apps Utilisez les skills consacrés aux pratiques SwiftUI sur macOS, à la gestion des fenêtres, à l’intégration d’AppKit ainsi qu’à la compilation et à l’exécution. Commencez par structurer l’interface autour de la barre latérale, du volet de détail et de l’inspecteur, puis intégrez les menus et les réglages en testant l’app à chaque itération.

    Starter prompt

    Utilisez le plugin Build macOS Apps pour transformer [describe your app idea] en une interface SwiftUI native pour Mac avec une barre latérale, un volet de détail, un inspecteur, des commandes et des réglages. Contraintes : - Choisissez d’abord le modèle de scène. Privilégiez `WindowGroup` pour la fenêtre principale et ajoutez une scène `Settings` dédiée aux préférences. - Structurez l’interface principale autour de `NavigationSplitView` avec un état de sélection explicite, une liste native de style `.sidebar`, un volet de détail et un panneau `inspector(isPresented:)` pour les métadonnées ou les commandes secondaires. - Conservez le style natif des lignes de la barre latérale. Limitez chaque ligne à une icône, un titre sur une ligne et, au plus, une courte ligne de texte complémentaire. Évitez de placer chaque ligne dans une grande carte personnalisée, sauf si un besoin précis de l’app le justifie vraiment. - Rendez les actions importantes accessibles depuis les menus de la scène (`commands`, `CommandMenu`), les boutons de la barre d’outils et les raccourcis clavier. Prévoyez un autre moyen d’accéder à toute action essentielle déclenchée par un geste. - Utilisez `@SceneStorage` pour l’état de l’interface propre à chaque fenêtre et `@AppStorage` pour les préférences. Pour synchroniser la barre latérale et le volet de détail, utilisez des liaisons explicites vers l’état de sélection géré par la vue parente. - Privilégiez les matériaux système, les couleurs sémantiques et les arrière-plans standard des barres latérales. Si un style personnalisé est nécessaire, appliquez-le uniquement aux cartes de contenu du volet de détail ou de l’inspecteur. - Utilisez une passerelle AppKit uniquement si SwiftUI ne permet pas d’implémenter simplement un comportement précis sur Mac. Limitez la passerelle à ce comportement. - Créez ou mettez à jour `script/build_and_run.sh`, effectuez le test le plus simple permettant de vérifier la compilation et l’exécution, puis indiquez-moi les commandes exactes utilisées. Éléments à fournir : - la structure des scènes et les vues principales de la barre latérale, du volet de détail et de l’inspecteur - la façon dont les éléments de menu, les boutons de la barre d’outils et les raccourcis clavier déclenchent les actions correspondantes - la scène de réglages et le modèle d’état des préférences - toute passerelle AppKit ajoutée et la raison pour laquelle elle était nécessaire - les étapes de vérification de la compilation et de l’exécution, ainsi que les améliorations que vous recommandez pour l’ergonomie de l’app sur Mac
    Utilisez le plugin Build macOS Apps pour transformer [describe your app idea] en une interface SwiftUI native pour Mac avec une barre latérale, un volet de détail, un inspecteur, des commandes et des réglages. Contraintes : - Choisissez d’abord le modèle de scène. Privilégiez `WindowGroup` pour la fenêtre principale et ajoutez une scène `Settings` dédiée aux préférences. - Structurez l’interface principale autour de `NavigationSplitView` avec un état de sélection explicite, une liste native de style `.sidebar`, un volet de détail et un panneau `inspector(isPresented:)` pour les métadonnées ou les commandes secondaires. - Conservez le style natif des lignes de la barre latérale. Limitez chaque ligne à une icône, un titre sur une ligne et, au plus, une courte ligne de texte complémentaire. Évitez de placer chaque ligne dans une grande carte personnalisée, sauf si un besoin précis de l’app le justifie vraiment. - Rendez les actions importantes accessibles depuis les menus de la scène (`commands`, `CommandMenu`), les boutons de la barre d’outils et les raccourcis clavier. Prévoyez un autre moyen d’accéder à toute action essentielle déclenchée par un geste. - Utilisez `@SceneStorage` pour l’état de l’interface propre à chaque fenêtre et `@AppStorage` pour les préférences. Pour synchroniser la barre latérale et le volet de détail, utilisez des liaisons explicites vers l’état de sélection géré par la vue parente. - Privilégiez les matériaux système, les couleurs sémantiques et les arrière-plans standard des barres latérales. Si un style personnalisé est nécessaire, appliquez-le uniquement aux cartes de contenu du volet de détail ou de l’inspecteur. - Utilisez une passerelle AppKit uniquement si SwiftUI ne permet pas d’implémenter simplement un comportement précis sur Mac. Limitez la passerelle à ce comportement. - Créez ou mettez à jour `script/build_and_run.sh`, effectuez le test le plus simple permettant de vérifier la compilation et l’exécution, puis indiquez-moi les commandes exactes utilisées. Éléments à fournir : - la structure des scènes et les vues principales de la barre latérale, du volet de détail et de l’inspecteur - la façon dont les éléments de menu, les boutons de la barre d’outils et les raccourcis clavier déclenchent les actions correspondantes - la scène de réglages et le modèle d’état des préférences - toute passerelle AppKit ajoutée et la raison pour laquelle elle était nécessaire - les étapes de vérification de la compilation et de l’exécution, ainsi que les améliorations que vous recommandez pour l’ergonomie de l’app sur Mac

    Commencez par le modèle de scènes du Mac

    Ce cas d’usage vous aide à transformer une idée d’application en une interface conçue dès le départ pour le Mac. Vous évitez ainsi de transposer sur grand écran une navigation pensée pour le tactile. Demandez d’abord à Codex de choisir le modèle de scènes, puis de concevoir la fenêtre principale avec une barre latérale qui conserve la sélection, un volet de détail et un inspecteur pour les commandes secondaires ou les métadonnées.

    Interface native d’une application Mac avec un élément sélectionné dans la barre latérale et son contenu affiché dans le volet de détail

    Utilisez le plugin Build macOS Apps pour que Codex adopte cette structure de bureau et privilégie la ligne de commande pour compiler et lancer l’application à chaque itération. Son skill consacré aux pratiques SwiftUI sur macOS convient à la conception des scènes, des barres latérales, des inspecteurs, des commandes et des réglages. Il couvre aussi les intégrations ciblées avec AppKit lorsqu’un comportement propre au Mac dépasse les possibilités de SwiftUI.

    Créez une barre latérale, un volet de détail et un inspecteur

    Privilégiez NavigationSplitView lorsque la fonctionnalité gagne à garder la navigation visible et à conserver la sélection. Utilisez des lignes natives et simples dans la barre latérale, conservez les arrière-plans du système et réservez les cartes personnalisées ou les métadonnées détaillées au volet de détail ou à l’inspecteur.

    import SwiftUI
    
    struct Item: Identifiable, Hashable {
      let id: String
      let title: String
      let systemImage: String
    }
    let items = [Item(id: "notes", title: "Notes", systemImage: "note.text"), Item(id: "photos", title: "Photos", systemImage: "photo")]
    
    struct ItemDetailView: View {
      let selection: String?
      var body: some View { Text(selection ?? "Select an item").frame(maxWidth: .infinity, maxHeight: .infinity) }
    }
    struct ItemInspectorView: View {
      let selection: String?
      var body: some View { Text("Metadata: \(selection ?? "No selection")").padding().frame(minWidth: 220) }
    }
    @MainActor final class LibraryStore: ObservableObject {
      @Published var entries = items
      @Published var selection: String?
      @Published var showInspector = true
      func addItem() {
        let item = Item(id: UUID().uuidString, title: "New Item", systemImage: "doc")
        entries.append(item)
        selection = item.id
      }
    }
    
    struct LibraryRootView: View {
      @StateObject private var store = LibraryStore()
      @SceneStorage("LibraryRootView.selection") private var savedSelection: Item.ID?
      @SceneStorage("LibraryRootView.showInspector") private var savedShowInspector = true
    
      var body: some View {
        NavigationSplitView {
          List(selection: $store.selection) {
            ForEach(store.entries) { item in
              Label(item.title, systemImage: item.systemImage)
                .tag(item.id)
            }
          }
          .listStyle(.sidebar)
          .navigationTitle("Library")
        } detail: {
          ItemDetailView(selection: store.selection)
            .inspector(isPresented: $store.showInspector) {
              ItemInspectorView(selection: store.selection)
            }
        }
        .focusedSceneObject(store)
        .onAppear {
          store.selection = savedSelection
          store.showInspector = savedShowInspector
        }
        .onChange(of: store.selection) { _, selection in
          savedSelection = selection
        }
        .onChange(of: store.showInspector) { _, showInspector in
          savedShowInspector = showInspector
        }
      }
    }

    Si l’application exige un dimensionnement particulier des volets, une coordination de bas niveau entre les fenêtres ou un comportement personnalisé de la chaîne de répondants, demandez à Codex de conserver la structure SwiftUI et de limiter l’intégration d’AppKit au strict nécessaire pour ce besoin précis.

    Intégrez les commandes, les barres d’outils et les raccourcis clavier à l’interface Mac

    Sur Mac, les utilisateurs doivent pouvoir repérer les actions importantes dans la barre des menus et la barre d’outils, et découvrir les raccourcis clavier associés. Demandez à Codex de relier les commands de la scène, les éléments de menu qui varient selon le contexte et les boutons de la barre d’outils aux mêmes actions de l’application. Les utilisateurs peuvent ainsi accéder à ces actions sans avoir à découvrir le geste qui les déclenche.

    @main
    struct LibraryApp: App {
      @FocusedObject private var store: LibraryStore?
      var body: some Scene {
        WindowGroup {
          LibraryRootView()
        }
        .commands {
          CommandMenu("Library") {
            Button("New Item") {
              store?.addItem()
            }
            .keyboardShortcut("n")
            .disabled(store == nil)
    
            Button("Toggle Inspector") {
              store?.showInspector.toggle()
            }
            .keyboardShortcut("i", modifiers: [.command, .option])
            .disabled(store == nil)
          }
        }
    
        Settings {
          LibrarySettingsView()
        }
      }
    }

    Utilisez FocusedValue, l’état de la scène ou un état de sélection explicite lorsqu’une commande doit s’appliquer à l’élément affiché dans le volet de détail. Si un même raccourci risque d’être déclaré à plusieurs endroits, demandez à Codex de centraliser sa gestion pour que l’application achemine la commande par un seul chemin.

    Regroupez les préférences dans Settings

    Pour les préférences de l’application, utilisez une scène Settings dédiée et enregistrez avec @AppStorage les choix de l’utilisateur à conserver d’une session à l’autre. Cette approche correspond généralement mieux aux usages du Mac que l’ajout d’un écran de réglages dans la navigation de la fenêtre principale.

    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()
      }
    }

    Décrivez l’application dans votre prompt, puis validez sa structure

    Pour tirer le meilleur parti de cette démarche, précisez dans votre prompt l’idée de l’application, les principaux objets qu’elle manipule et les actions essentielles. Demandez ensuite à Codex de commencer par construire l’interface de bureau autour de ce workflow. Faites compiler et lancer l’application par l’agent pour une vérification rapide. Demandez-lui de résumer l’organisation des scènes, les liens entre les commandes et les actions, les composants responsables de l’état et les comportements qui ont nécessité une intégration avec AppKit.

    Conseils pratiques

    Conservez l’aspect natif de la barre latérale

    Pour chaque élément de la barre latérale, utilisez une icône, un titre sur une ligne et, au plus, une courte ligne de texte secondaire. Placez les cartes plus détaillées, les compteurs et les métadonnées dans le volet de détail ou l’inspecteur pour que la liste reste facile à parcourir d’un coup d’œil.

    Rendez les réglages accessibles en dehors de la navigation principale

    Si une préférence s’applique à toute l’application, demandez à Codex de placer le contrôle correspondant dans Settings, d’enregistrer sa valeur avec @AppStorage et de le rendre accessible depuis le menu de l’application. Vous évitez ainsi d’ajouter un écran de réglages à la pile de navigation.

    Réservez AppKit aux besoins spécifiques du Mac

    Si la fonctionnalité nécessite des panneaux d’ouverture ou d’enregistrement, la gestion du premier répondant ou une vue NSView personnalisée, limitez l’utilisation d’AppKit à ce besoin. SwiftUI conserve ainsi la gestion du modèle d’état, sans que vous ayez à réécrire toute la fenêtre avec AppKit.

    Tech stack

    Need

    Interface à plusieurs volets

    Default options

    NavigationSplitView, listes de style .sidebar et inspector(isPresented:)

    Why it's needed

    Une barre latérale persistante, un volet de détail et un inspecteur correspondent mieux aux usages des apps Mac qu’une succession d’écrans conçue pour la navigation tactile.

    Need

    Actions et réglages sur Mac

    Default options

    commands, CommandMenu, raccourcis clavier et scène Settings

    Why it's needed

    Les actions de la barre des menus, les raccourcis clavier et la fenêtre de réglages dédiée donnent à la fonctionnalité l’ergonomie d’une app Mac plutôt que celle d’un écran iOS agrandi.

    Need

    Gestion de l’état

    Default options

    @State, @SceneStorage, @AppStorage et liaisons de sélection explicites

    Why it's needed

    Codex peut gérer de manière prévisible la sélection dans la barre latérale, l’affichage de l’inspecteur et les préférences de l’utilisateur sans ajouter systématiquement un modèle de vue.

    Need

    Recours ciblé à AppKit

    Default options

    AppKit avec des passerelles ciblées utilisant NSViewRepresentable ou NSWindow

    Why it's needed

    Réservez AppKit aux comportements propres à macOS que SwiftUI ne permet pas d’implémenter simplement. Gardez SwiftUI comme source de vérité pour l’état des scènes et de la sélection.

    Need Default options Why it's needed
    Interface à plusieurs volets NavigationSplitView , listes de style .sidebar et inspector(isPresented:) Une barre latérale persistante, un volet de détail et un inspecteur correspondent mieux aux usages des apps Mac qu’une succession d’écrans conçue pour la navigation tactile.
    Actions et réglages sur Mac commands , CommandMenu , raccourcis clavier et scène Settings Les actions de la barre des menus, les raccourcis clavier et la fenêtre de réglages dédiée donnent à la fonctionnalité l’ergonomie d’une app Mac plutôt que celle d’un écran iOS agrandi.
    Gestion de l’état @State , @SceneStorage , @AppStorage et liaisons de sélection explicites Codex peut gérer de manière prévisible la sélection dans la barre latérale, l’affichage de l’inspecteur et les préférences de l’utilisateur sans ajouter systématiquement un modèle de vue.
    Recours ciblé à AppKit AppKit avec des passerelles ciblées utilisant NSViewRepresentable ou NSWindow Réservez AppKit aux comportements propres à macOS que SwiftUI ne permet pas d’implémenter simplement. Gardez SwiftUI comme source de vérité pour l’état des scènes et de la sélection.

    Related use cases