SKILL.md
readonlyread-only
name
xcode-compilation-analyzer
description
Analyze Swift and mixed-language compile hotspots using build timing summaries and Swift frontend diagnostics, then produce a recommend-first source-level optimization plan. Use when a developer reports slow compilation, type-checking warnings, expensive clean-build compile phases, long CompileSwiftSources tasks, warn-long-function-bodies output, or wants to speed up Swift type checking.
Xcode 編譯分析工具
當瓶頸在於編譯時間(而非一般專案設定)時,使用此技能。
核心規則
- 從證據出發,最好是最近的
.build-benchmark/產出或原始時間摘要輸出。 - 調查期間優先使用僅分析的編譯器旗標,而非直接修改專案設定。
- 根據預期的實際時間影響排序發現,而非累計編譯時間影響。當編譯任務高度並行化(編譯類別總和 >> 實際時間中位數)時,請注意修正個別熱點可能提升並行效率,但不會減少建置等待時間。
- 若證據指向並行工作而非序列瓶頸,將建議標示為「減少編譯器工作量(並行)」,而非「減少建置時間」。
- 未經開發者明確同意,不得編輯原始碼或建置設定。
檢查項目
- 乾淨建置與增量建置的
Build Timing Summary輸出 - 長時間執行的
CompileSwiftSources或每個檔案的編譯任務 SwiftEmitModule時間——大型模組中單行變更後可能達到 60 秒以上;若在增量建置中佔主導地位,表示模組可能過大或巨集過多Planning Swift module時間——若此類別在增量建置中異常大(每個模組最多 30 秒),表示意外的輸入失效或巨集相關的重新建置連鎖反應- 臨時執行以下旗標:
-Xfrontend -warn-long-expression-type-checking=<ms>-Xfrontend -warn-long-function-bodies=<ms>
- 用於深入調查的診斷旗標:
-Xfrontend -debug-time-compilation——每個檔案的編譯時間,用於排序最慢的檔案-Xfrontend -debug-time-function-bodies——每個函式的編譯時間(未過濾,補充基於閾值的警告旗標)-Xswiftc -driver-time-compilation——驅動程式層級的時間,用於隔離驅動程式開銷-Xfrontend -stats-output-dir <path>——每個編譯單元的詳細編譯器統計資料(JSON),用於根本原因分析
- 混合 Swift 與 Objective-C 的介面,會增加橋接工作量
分析流程
- 判斷主要問題是廣泛的編譯量還是少數極端熱點。
- 解析時間摘要類別,排序最大的編譯貢獻者。
- 執行診斷腳本以找出型別檢查熱點:
這會產生一個排序清單,列出超過毫秒閾值的函式與表達式。將診斷產出與原始碼檢查結合,優先處理最昂貴的檔案。python3 scripts/diagnose_compilation.py \ --project App.xcodeproj \ --scheme MyApp \ --configuration Debug \ --destination "platform=iOS Simulator,name=iPhone 16" \ --threshold 100 \ --output-dir .build-benchmark - 將證據對應到具體的建議清單。
- 區分程式碼層級的建議與專案層級或模組層級的建議。
Apple 衍生檢查
優先尋找以下模式:
- 昂貴表達式中缺少明確的型別資訊
- 難以進行型別檢查的複雜鏈式或巢狀表達式
- 委派屬性型別為
AnyObject而非具體協定 - 過大的 Objective-C 橋接標頭或產生的 Swift-to-Objective-C 介面
- 跳過框架限定且未重複使用模組快取的標頭匯入
- 從未被子類別化但缺少
final的類別 - 內部符號使用了過於寬鬆的存取控制(
public/open) - 龐大的 SwiftUI
body屬性,應分解為子視圖 - 缺少中間型別註解的長方法鏈或閉包
報告格式
每個建議應包含:
- 觀察到的證據
- 可能受影響的檔案或模組
- 預期的等待時間影響(例如「預計減少乾淨建置約 2 秒」或「減少並行編譯工作量,但不太可能減少建置等待時間」)
- 信心程度
- 是否需要批准才能套用
若證據指向專案設定而非原始碼,請閱讀 xcode-project-analyzer 的 SKILL.md,並將其工作流程套用至相同專案環境。
偏好策略
- 在建議永久修改建置設定前,先建議透過建置指令臨時注入旗標。
- 優先將大型視圖建構器、閉包或結果建構器表達式縮小為較小的型別化單元。
- 當能減少編譯器搜尋空間時,建議明確的匯入與協定型別。
- 若混合語言邊界才是真正問題,而非單純的 Swift 語法,請特別指出。
其他資源
- 詳細稽核查檢表請參閱 references/code-compilation-checks.md
- 共用建議結構請參閱 references/recommendation-format.md
- 來源引用請參閱 references/build-optimization-sources.md






