Zum Inhalt springen
cd /languages
  • Apple-Plattformen
  • Programmierung
  • AST- und Symbol-Support

Swift in Maguyva: Code-Graphen für iOS und macOS

Maguyva unterstützt Swift mit AST, Symbolen und Graph, damit KI-Agenten Protokolle, Extensions, Initializer und Observer in iOS- und macOS-Code verfolgen können.

Warum Swift mehr braucht als eine Dateisuche

Swift verteilt einen Typ auf viele Stellen. Ein Struct wird in einer Datei deklariert, erhält Verhalten aus Extensions in drei anderen und entspricht Protokollen, die in einem Paket definiert sind. Zustandsänderungen verstecken sich in berechneten Properties und willSet / didSet-Observern. Ein Agent, der eine Datei nach der anderen liest, übersieht das meiste davon.

Maguyva indexiert die Struktur, sodass ein Agent die Member, Protokollkonformitäten und Aufrufer eines Typs zusammen sehen kann.

Was Maguyva in Swift extrahiert

Maguyva deckt .swift ab. Zu den aufrufbaren Symbolen gehören Funktionen, init und deinit, Subscripts, Getter und Setter berechneter Properties sowie willSet / didSet-Observer. Zustandsändernder Code ist damit als Symbol durchsuchbar, statt in Property-Rümpfen zu verschwinden.

Member, die in Structs, Enums, Protokollen und Extensions deklariert sind, werden mit ihrem besitzenden Typ qualifiziert (zum Beispiel CartStore.add), und in einer Extension hinzugefügte Member werden dem erweiterten Typ zugeordnet. Bei Definitionsnamen werden generische Parameter, Listen der Protokollkonformität und die Suffixe ? / ! entfernt, sodass Abfragen den schlichten Namen verwenden. Aufrufe behalten self. und die Klassenqualifizierung, und Trailing Closures zählen zur Aufrufarität.

Der Graph erfasst Aufrufe, Protokollkonformität, Vererbung, Overrides, Instanziierung, Attribute, Typreferenzen, Lese- und Schreibzugriffe sowie throw-Kanten.

Beispiel-Prompts für Agenten

  • „Welche Typen entsprechen PaymentProvider, und wo wird jeder davon erzeugt?“ (dependency_search)
  • „Wer ruft CartStore.add auf, und aus welchen Views?“ (find_symbol, dann dependency_search incoming)
  • „Erkläre, wie eine Push-Benachrichtigung den Posteingang-Bildschirm erreicht.“ (get_task_context)

Bekannte Grenzen

  • Nur .swift-Quelltext ist zugeordnet. Storyboard- und XIB-Dateien stehen nicht in der Liste der Dateiendungen, daher liegen Interface-Builder-Verbindungen außerhalb des Graphen.
  • Aufrufe der Standardbibliothek und von Foundation wie print, debugPrint, NSLog und Assertions werden aus den Beziehungen gefiltert und sind daher keine Graphkanten. Verwende dafür text_pattern_search.

Nächste Schritte

Verbinde ein Repository über den Schnellstart und prüfe dann die Unterstützungsmatrix auf der Kompatibilitätsseite. Wenn du dasselbe Produkt auch für Android auslieferst, lies den Kotlin-Leitfaden.

Am besten geeignet

  • > iOS- und macOS-Teams mit großen App-Targets und gemeinsam genutzten Swift-Paketen.
  • > Codebasen rund um Protokolle und Extensions, in denen das Verhalten eines Typs über viele Dateien verteilt ist.
  • > Agenten-Workflows, die eine Auswirkungsanalyse brauchen, bevor sich ein gemeinsames Modell, ein Dienst oder ein Protokoll ändert.

Agentenabläufe

  • > Jeden Typ finden, der einem Protokoll entspricht, bevor sich eine seiner Anforderungen ändert.
  • > Aufrufer einer Dienstmethode über ViewModels, Coordinators und Pakete hinweg nachverfolgen.
  • > Initializer, berechnete Properties und `didSet`-Observer finden, die einen bestimmten Zustand berühren.

Engine-Einordnung

  • > Zu den aufrufbaren Symbolen gehören Funktionen, `init`, `deinit`, Subscripts, Getter und Setter berechneter Properties sowie `willSet` / `didSet`-Observer.
  • > Member von Structs, Enums, Protokollen und Extensions werden mit ihrem besitzenden Typ qualifiziert, etwa `CartStore.add`.
  • > Generische Parameter, Listen der Protokollkonformität und die Suffixe `?` / `!` werden aus Definitionsnamen entfernt, und Aufrufe behalten `self.` und die Klassenqualifizierung.

Nützliche MCP-Einstiegspunkte

  • find_symbol

    Nutz es für einen Typ-, Protokoll- oder Methodennamen, wenn du Definition und Referenzen brauchst.

  • dependency_search

    Nutz es auf einem Protokoll, um konforme Typen zu finden, oder die eingehende Traversierung auf einer Methode, um Aufrufer zu finden.

  • get_task_context

    Nutz es für Prompts wie „erkläre, wie eine Push-Benachrichtigung den Posteingang-Bildschirm erreicht“.