跳至主要內容
cd /languages
  • Apple 平台
  • 程式語言
  • AST 與符號支援

Maguyva 對 Swift 的支援:iOS 與 macOS 的程式碼圖譜

Maguyva 以 AST、符號與圖譜支援 Swift,讓 AI 代理能在 iOS 與 macOS 程式碼中追蹤協定、擴充、初始化器與屬性觀察器。

為什麼 Swift 需要的不只是檔案搜尋

Swift 會把一個型別分散到許多地方。一個結構在某個檔案中宣告,從另外三個檔案的擴充取得行為,並遵循某個套件中定義的協定。狀態變化藏在計算屬性與 willSet / didSet 觀察器裡。一次只讀一個檔案的代理會漏掉其中大部分。

Maguyva 會為這些結構建立索引,讓代理能一併看到一個型別的成員、協定遵循與呼叫端。

Maguyva 在 Swift 中擷取了什麼

Maguyva 涵蓋 .swift。可呼叫的符號包括函式、init 與 deinit、下標、計算屬性的 getter 與 setter,以及 willSet / didSet 觀察器,因此改變狀態的程式碼可以作為符號搜尋,而不會埋在屬性本體中。

在結構、列舉、協定與擴充中宣告的成員,會以所屬型別限定(例如 CartStore.add),在擴充中新增的成員則歸屬到被擴充的型別。定義名稱會移除泛型參數、協定遵循清單,以及 ? / ! 後綴,因此查找時使用的是單純的名稱。呼叫會保留 self. 與類別限定,尾隨閉包也會計入呼叫的引數數量。

圖譜會記錄呼叫、協定遵循、繼承、覆寫、實例化、屬性標記(attribute)、型別參照、讀寫,以及 throw 邊。

代理提示範例

  • 「哪些型別遵循 PaymentProvider,它們各自在哪裡建立?」(dependency_search)
  • 「誰呼叫了 CartStore.add,來自哪些視圖?」(先用 find_symbol,再用 dependency_search 的 incoming 方向)
  • 「說明一則推播通知是如何抵達收件匣畫面的。」(get_task_context)

已知限制

  • 只有 .swift 原始碼會被對應。Storyboard 與 XIB 檔案不在副檔名清單中,因此 Interface Builder 中的連結不在圖譜範圍內。
  • print、debugPrint、NSLog 與斷言等標準函式庫與 Foundation 呼叫會從關係中過濾掉,因此它們不是圖譜的邊。查找它們請使用 text_pattern_search。

下一步

透過快速入門連接儲存庫,然後在相容性頁面查看支援矩陣。如果同一款產品也在 Android 上推出,請閱讀 Kotlin 指南。

最適合的情境

  • > 擁有大型應用程式 target 與共用 Swift 套件的 iOS 與 macOS 團隊。
  • > 圍繞協定與擴充打造的程式碼庫,一個型別的行為分散在許多檔案中。
  • > 在變更共用模型、服務或協定之前需要影響分析的代理工作流程。

代理工作流程

  • > 在變更協定要求之前,找出所有遵循該協定的型別。
  • > 跨越 ViewModel、協調器與套件,追蹤某個服務方法的呼叫端。
  • > 找出會碰到某個狀態的初始化器、計算屬性與 `didSet` 觀察器。

引擎細節

  • > 可呼叫的符號包括函式、`init`、`deinit`、下標、計算屬性的 getter 與 setter,以及 `willSet` / `didSet` 觀察器。
  • > 結構、列舉、協定與擴充的成員會以所屬型別限定,例如 `CartStore.add`。
  • > 定義名稱會移除泛型參數、協定遵循清單與 `?` / `!` 後綴,呼叫會保留 `self.` 與類別限定。

實用的 MCP 進入點

  • find_symbol

    需要定義與參照時,以型別、協定或方法名稱查找。

  • dependency_search

    對協定使用它,可找到遵循它的型別;對方法以 incoming 方向使用,可找到呼叫端。

  • get_task_context

    適合用於「說明一則推播通知是如何抵達收件匣畫面的」這類提示。