@leejungkiin/awkit 1.4.0 → 1.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/awk.js +432 -6
- package/bin/claude-generators.js +122 -0
- package/core/AGENTS.md +16 -0
- package/core/CLAUDE.md +155 -0
- package/core/GEMINI.md +44 -9
- package/package.json +1 -1
- package/skills/ai-sprite-maker/SKILL.md +81 -0
- package/skills/ai-sprite-maker/scripts/animate_sprite.py +102 -0
- package/skills/ai-sprite-maker/scripts/process_sprites.py +140 -0
- package/skills/code-review/SKILL.md +21 -33
- package/skills/lucylab-tts/SKILL.md +64 -0
- package/skills/lucylab-tts/resources/voices_library.json +908 -0
- package/skills/lucylab-tts/scripts/.env +1 -0
- package/skills/lucylab-tts/scripts/lucylab_tts.py +506 -0
- package/skills/orchestrator/SKILL.md +5 -0
- package/skills/short-maker/SKILL.md +150 -0
- package/skills/short-maker/_backup/storyboard.html +106 -0
- package/skills/short-maker/_backup/video_mixer.py +296 -0
- package/skills/short-maker/outputs/fitbite-promo/background.jpg +0 -0
- package/skills/short-maker/outputs/fitbite-promo/final/promo-final.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/script.md +19 -0
- package/skills/short-maker/outputs/fitbite-promo/segments/scene-01.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/segments/scene-02.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/segments/scene-03.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/segments/scene-04.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/storyboard/scene-01.png +0 -0
- package/skills/short-maker/outputs/fitbite-promo/storyboard/scene-02.png +0 -0
- package/skills/short-maker/outputs/fitbite-promo/storyboard/scene-03.png +0 -0
- package/skills/short-maker/outputs/fitbite-promo/storyboard/scene-04.png +0 -0
- package/skills/short-maker/outputs/fitbite-promo/storyboard.html +133 -0
- package/skills/short-maker/outputs/fitbite-promo/storyboard.json +38 -0
- package/skills/short-maker/outputs/fitbite-promo/temp/merged_chroma.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/temp/merged_crossfaded.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/temp/ready_00.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/temp/ready_01.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/temp/ready_02.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/temp/ready_03.mp4 +0 -0
- package/skills/short-maker/outputs/fitbite-promo/tts/manifest.json +31 -0
- package/skills/short-maker/outputs/fitbite-promo/tts/scene-01.wav +0 -0
- package/skills/short-maker/outputs/fitbite-promo/tts/scene-02.wav +0 -0
- package/skills/short-maker/outputs/fitbite-promo/tts/scene-03.wav +0 -0
- package/skills/short-maker/outputs/fitbite-promo/tts/scene-04.wav +0 -0
- package/skills/short-maker/outputs/fitbite-promo/tts_script.txt +11 -0
- package/skills/short-maker/scripts/google-flow-cli/.project-identity +41 -0
- package/skills/short-maker/scripts/google-flow-cli/.trae/rules/project_rules.md +52 -0
- package/skills/short-maker/scripts/google-flow-cli/CODEBASE.md +67 -0
- package/skills/short-maker/scripts/google-flow-cli/GoogleFlowCli.code-workspace +29 -0
- package/skills/short-maker/scripts/google-flow-cli/README.md +168 -0
- package/skills/short-maker/scripts/google-flow-cli/docs/specs/PROJECT.md +12 -0
- package/skills/short-maker/scripts/google-flow-cli/docs/specs/REQUIREMENTS.md +22 -0
- package/skills/short-maker/scripts/google-flow-cli/docs/specs/ROADMAP.md +16 -0
- package/skills/short-maker/scripts/google-flow-cli/docs/specs/TECH-SPEC.md +13 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/__init__.py +3 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/api/__init__.py +19 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/api/client.py +1921 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/api/models.py +64 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/api/rpc_ids.py +98 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/auth/__init__.py +15 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/auth/browser_auth.py +692 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/auth/humanizer.py +417 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/auth/proxy_ext.py +120 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/auth/recaptcha.py +482 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/batchexecute/__init__.py +5 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/batchexecute/client.py +414 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/cli/__init__.py +1 -0
- package/skills/short-maker/scripts/google-flow-cli/gflow/cli/main.py +1075 -0
- package/skills/short-maker/scripts/google-flow-cli/pyproject.toml +36 -0
- package/skills/short-maker/scripts/google-flow-cli/script.txt +22 -0
- package/skills/short-maker/scripts/google-flow-cli/tests/__init__.py +0 -0
- package/skills/short-maker/scripts/google-flow-cli/tests/test_batchexecute.py +113 -0
- package/skills/short-maker/scripts/google-flow-cli/tests/test_client.py +190 -0
- package/skills/short-maker/templates/aida_script.md +40 -0
- package/skills/short-maker/templates/mimic_analyzer.md +29 -0
- package/skills/single-flow-task-execution/SKILL.md +9 -6
- package/skills/skill-creator/SKILL.md +44 -0
- package/skills/spm-build-analysis/SKILL.md +92 -0
- package/skills/spm-build-analysis/references/build-optimization-sources.md +155 -0
- package/skills/spm-build-analysis/references/recommendation-format.md +85 -0
- package/skills/spm-build-analysis/references/spm-analysis-checks.md +105 -0
- package/skills/spm-build-analysis/scripts/check_spm_pins.py +118 -0
- package/skills/symphony-enforcer/SKILL.md +51 -83
- package/skills/symphony-orchestrator/SKILL.md +1 -1
- package/skills/trello-sync/SKILL.md +27 -28
- package/skills/verification-gate/SKILL.md +13 -2
- package/skills/xcode-build-benchmark/SKILL.md +88 -0
- package/skills/xcode-build-benchmark/references/benchmark-artifacts.md +94 -0
- package/skills/xcode-build-benchmark/references/benchmarking-workflow.md +67 -0
- package/skills/xcode-build-benchmark/schemas/build-benchmark.schema.json +230 -0
- package/skills/xcode-build-benchmark/scripts/benchmark_builds.py +308 -0
- package/skills/xcode-build-fixer/SKILL.md +218 -0
- package/skills/xcode-build-fixer/references/build-settings-best-practices.md +216 -0
- package/skills/xcode-build-fixer/references/fix-patterns.md +290 -0
- package/skills/xcode-build-fixer/references/recommendation-format.md +85 -0
- package/skills/xcode-build-fixer/scripts/benchmark_builds.py +308 -0
- package/skills/xcode-build-orchestrator/SKILL.md +156 -0
- package/skills/xcode-build-orchestrator/references/benchmark-artifacts.md +94 -0
- package/skills/xcode-build-orchestrator/references/build-settings-best-practices.md +216 -0
- package/skills/xcode-build-orchestrator/references/orchestration-report-template.md +143 -0
- package/skills/xcode-build-orchestrator/references/recommendation-format.md +85 -0
- package/skills/xcode-build-orchestrator/scripts/benchmark_builds.py +308 -0
- package/skills/xcode-build-orchestrator/scripts/diagnose_compilation.py +273 -0
- package/skills/xcode-build-orchestrator/scripts/generate_optimization_report.py +533 -0
- package/skills/xcode-compilation-analyzer/SKILL.md +89 -0
- package/skills/xcode-compilation-analyzer/references/build-optimization-sources.md +155 -0
- package/skills/xcode-compilation-analyzer/references/code-compilation-checks.md +106 -0
- package/skills/xcode-compilation-analyzer/references/recommendation-format.md +85 -0
- package/skills/xcode-compilation-analyzer/scripts/diagnose_compilation.py +273 -0
- package/skills/xcode-project-analyzer/SKILL.md +76 -0
- package/skills/xcode-project-analyzer/references/build-optimization-sources.md +155 -0
- package/skills/xcode-project-analyzer/references/build-settings-best-practices.md +216 -0
- package/skills/xcode-project-analyzer/references/project-audit-checks.md +101 -0
- package/skills/xcode-project-analyzer/references/recommendation-format.md +85 -0
- package/templates/project-identity/android.json +0 -10
- package/templates/project-identity/backend-nestjs.json +0 -10
- package/templates/project-identity/expo.json +0 -10
- package/templates/project-identity/ios.json +0 -10
- package/templates/project-identity/web-nextjs.json +0 -10
- package/workflows/_uncategorized/ship-to-code.md +85 -0
- package/workflows/context/codebase-sync.md +10 -87
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: xcode-project-analyzer
|
|
3
|
+
description: Kiểm tra toàn diện Xcode project configuration, build settings, schemes, và run script phases để tìm ra cơ hội tối ưu hoá tốc độ build (yêu cầu dev phê duyệt). Sử dụng khi dev muốn phân tích project-level, gặp lỗi incremental build quá chậm, cần review target dependencies, build settings, song song hoá tác vụ (parallelization), hoặc xử lý lỗi module-map và DEFINES_MODULE.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Xcode Project Analyzer
|
|
7
|
+
|
|
8
|
+
Use this skill for project- and target-level build inefficiencies that are unlikely to be solved by source edits alone.
|
|
9
|
+
|
|
10
|
+
## Core Rules
|
|
11
|
+
|
|
12
|
+
- Recommendation-first by default.
|
|
13
|
+
- Require explicit approval before changing project files, schemes, or build settings.
|
|
14
|
+
- Prefer measured findings tied to timing summaries, build logs, or project configuration evidence.
|
|
15
|
+
- Distinguish debug-only pain from release-only pain.
|
|
16
|
+
|
|
17
|
+
## What To Review
|
|
18
|
+
|
|
19
|
+
- scheme build order and target dependencies
|
|
20
|
+
- debug vs release build settings against the [build settings best practices](references/build-settings-best-practices.md)
|
|
21
|
+
- run script phases and dependency-analysis settings
|
|
22
|
+
- derived-data churn or obviously invalidating custom steps
|
|
23
|
+
- opportunities for parallelization
|
|
24
|
+
- explicit module dependency settings and module-map readiness
|
|
25
|
+
- "Planning Swift module" time in the Build Timing Summary -- if it dominates incremental builds, suspect unexpected input modification or macro-related invalidation
|
|
26
|
+
- asset catalog compilation time, especially in targets with large or numerous catalogs
|
|
27
|
+
- `ExtractAppIntentsMetadata` time in the Build Timing Summary -- if this phase consumes significant time, record it as `xcode-behavior` (report the cost and impact, but do not suggest a repo-local optimization unless there is explicit Apple guidance)
|
|
28
|
+
- zero-change build overhead -- if a no-op rebuild exceeds a few seconds, investigate fixed-cost phases (script execution, codesign, validation, CopySwiftLibs)
|
|
29
|
+
- CocoaPods usage -- if a `Podfile` or `Pods.xcodeproj` exists, CocoaPods is deprecated; recommend migrating to SPM and do not attempt CocoaPods-specific optimizations (see [project-audit-checks.md](references/project-audit-checks.md))
|
|
30
|
+
- Task Backtraces (Xcode 16.4+: Scheme Editor > Build > Build Debugging) to diagnose why tasks re-run unexpectedly in incremental builds
|
|
31
|
+
|
|
32
|
+
## Build Settings Best Practices Audit
|
|
33
|
+
|
|
34
|
+
Every project audit should include a build settings checklist comparing the project's Debug and Release configurations against the recommended values in [build-settings-best-practices.md](references/build-settings-best-practices.md). Present results using checkmark/cross indicators (`[x]`/`[ ]`). The scope is strictly build performance -- do not flag language-migration settings like `SWIFT_STRICT_CONCURRENCY` or `SWIFT_UPCOMING_FEATURE_*`.
|
|
35
|
+
|
|
36
|
+
## Apple-Derived Checks
|
|
37
|
+
|
|
38
|
+
Review these items in every audit:
|
|
39
|
+
|
|
40
|
+
- target dependencies are accurate and not missing or inflated
|
|
41
|
+
- schemes build in `Dependency Order`
|
|
42
|
+
- run scripts declare inputs and outputs
|
|
43
|
+
- `.xcfilelist` files are used when scripts have many inputs or outputs
|
|
44
|
+
- `DEFINES_MODULE` is enabled where custom frameworks or libraries should expose module maps
|
|
45
|
+
- headers are self-contained enough for module-map use
|
|
46
|
+
- explicit module dependency settings are consistent for targets that should share modules
|
|
47
|
+
|
|
48
|
+
## Typical Wins
|
|
49
|
+
|
|
50
|
+
- skip debug-time scripts that only matter in release
|
|
51
|
+
- add missing script guards or dependency-analysis metadata
|
|
52
|
+
- remove accidental serial bottlenecks in schemes
|
|
53
|
+
- align build settings that cause unnecessary module variants
|
|
54
|
+
- fix stale project structure that forces broader rebuilds than necessary
|
|
55
|
+
- identify linters or formatters that touch file timestamps without changing content, silently invalidating build inputs and forcing module replanning
|
|
56
|
+
- split large asset catalogs into separate resource bundles across targets to parallelize compilation
|
|
57
|
+
- use Task Backtraces to pinpoint the exact input change that triggers unnecessary incremental work
|
|
58
|
+
|
|
59
|
+
## Reporting Format
|
|
60
|
+
|
|
61
|
+
For each issue, include:
|
|
62
|
+
|
|
63
|
+
- evidence
|
|
64
|
+
- likely scope
|
|
65
|
+
- why it affects clean builds, incremental builds, or both
|
|
66
|
+
- estimated impact
|
|
67
|
+
- approval requirement
|
|
68
|
+
|
|
69
|
+
If the evidence points to package graph or build plugins, hand off to [`spm-build-analysis`](../spm-build-analysis/SKILL.md) by reading its SKILL.md and applying its workflow to the same project context.
|
|
70
|
+
|
|
71
|
+
## Additional Resources
|
|
72
|
+
|
|
73
|
+
- For the detailed audit checklist, see [references/project-audit-checks.md](references/project-audit-checks.md)
|
|
74
|
+
- For build settings best practices, see [references/build-settings-best-practices.md](references/build-settings-best-practices.md)
|
|
75
|
+
- For the shared recommendation structure, see [references/recommendation-format.md](references/recommendation-format.md)
|
|
76
|
+
- For Apple-aligned source summaries, see [references/build-optimization-sources.md](references/build-optimization-sources.md)
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Build Optimization Sources
|
|
2
|
+
|
|
3
|
+
This file stores the external sources that the README and skill docs should cite consistently.
|
|
4
|
+
|
|
5
|
+
## Apple: Improving the speed of incremental builds
|
|
6
|
+
|
|
7
|
+
Source:
|
|
8
|
+
|
|
9
|
+
- <https://developer.apple.com/documentation/xcode/improving-the-speed-of-incremental-builds>
|
|
10
|
+
|
|
11
|
+
Key takeaways:
|
|
12
|
+
|
|
13
|
+
- Measure first with `Build With Timing Summary` or `xcodebuild -showBuildTimingSummary`.
|
|
14
|
+
- Accurate target dependencies improve correctness and parallelism.
|
|
15
|
+
- Run scripts should declare inputs and outputs so Xcode can skip unnecessary work.
|
|
16
|
+
- `.xcfilelist` files are appropriate when scripts have many inputs or outputs.
|
|
17
|
+
- Custom frameworks and libraries benefit from module maps, typically by enabling `DEFINES_MODULE`.
|
|
18
|
+
- Module reuse is strongest when related sources compile with consistent options.
|
|
19
|
+
- Breaking monolithic targets into better-scoped modules can reduce unnecessary rebuilds.
|
|
20
|
+
|
|
21
|
+
## Apple: Improving build efficiency with good coding practices
|
|
22
|
+
|
|
23
|
+
Source:
|
|
24
|
+
|
|
25
|
+
- <https://developer.apple.com/documentation/xcode/improving-build-efficiency-with-good-coding-practices>
|
|
26
|
+
|
|
27
|
+
Key takeaways:
|
|
28
|
+
|
|
29
|
+
- Use framework-qualified imports when module maps are available.
|
|
30
|
+
- Keep Objective-C bridging surfaces narrow.
|
|
31
|
+
- Prefer explicit type information when inference becomes expensive.
|
|
32
|
+
- Use explicit delegate protocols instead of overly generic delegate types.
|
|
33
|
+
- Simplify complex expressions that are hard for the compiler to type-check.
|
|
34
|
+
|
|
35
|
+
## Apple: Building your project with explicit module dependencies
|
|
36
|
+
|
|
37
|
+
Source:
|
|
38
|
+
|
|
39
|
+
- <https://developer.apple.com/documentation/xcode/building-your-project-with-explicit-module-dependencies>
|
|
40
|
+
|
|
41
|
+
Key takeaways:
|
|
42
|
+
|
|
43
|
+
- Explicit module builds make module work visible in the build log and improve scheduling.
|
|
44
|
+
- Repeated builds of the same module often point to avoidable module variants.
|
|
45
|
+
- Inconsistent build options across targets can force duplicate module builds.
|
|
46
|
+
- Timing summaries can reveal option drift that prevents module reuse.
|
|
47
|
+
|
|
48
|
+
## SwiftLee: Build performance analysis for speeding up Xcode builds
|
|
49
|
+
|
|
50
|
+
Source:
|
|
51
|
+
|
|
52
|
+
- <https://www.avanderlee.com/optimization/analysing-build-performance-xcode/>
|
|
53
|
+
|
|
54
|
+
Key takeaways:
|
|
55
|
+
|
|
56
|
+
- Clean and incremental builds should both be measured because they reveal different problems.
|
|
57
|
+
- Build Timeline and Build Timing Summary are practical starting points for build optimization.
|
|
58
|
+
- Build scripts often produce large incremental-build wins when guarded correctly.
|
|
59
|
+
- `-warn-long-function-bodies` and `-warn-long-expression-type-checking` help surface compile hotspots.
|
|
60
|
+
- Typical debug and release build setting mismatches are worth auditing, especially in older projects.
|
|
61
|
+
|
|
62
|
+
## Apple: Xcode Release Notes -- Compilation Caching
|
|
63
|
+
|
|
64
|
+
Source:
|
|
65
|
+
|
|
66
|
+
- Xcode Release Notes (149700201)
|
|
67
|
+
|
|
68
|
+
Key takeaways:
|
|
69
|
+
|
|
70
|
+
- Compilation caching is an opt-in feature for Swift and C-family languages.
|
|
71
|
+
- It caches prior compilation results and reuses them when the same source inputs are recompiled.
|
|
72
|
+
- Branch switching and clean builds benefit the most.
|
|
73
|
+
- Can be enabled via the "Enable Compilation Caching" build setting or per-user project settings.
|
|
74
|
+
|
|
75
|
+
## Apple: Demystify explicitly built modules (WWDC24)
|
|
76
|
+
|
|
77
|
+
Source:
|
|
78
|
+
|
|
79
|
+
- <https://developer.apple.com/videos/play/wwdc2024/10171/>
|
|
80
|
+
|
|
81
|
+
Key takeaways:
|
|
82
|
+
|
|
83
|
+
- Explains how explicitly built modules divide compilation into scan, module build, and source compile stages.
|
|
84
|
+
- Unrelated modules build in parallel, improving CPU utilization.
|
|
85
|
+
- Module variant duplication is a key bottleneck -- uniform compiler options across targets prevent it.
|
|
86
|
+
- The build log shows each module as a discrete task, making it easier to diagnose scheduling issues.
|
|
87
|
+
|
|
88
|
+
## Swift Compile-Time Best Practices
|
|
89
|
+
|
|
90
|
+
Well-known Swift language patterns that reduce type-checker workload during compilation:
|
|
91
|
+
|
|
92
|
+
- Mark classes `final` when they are not intended for subclassing. This eliminates dynamic dispatch overhead and allows the compiler to de-virtualize method calls.
|
|
93
|
+
- Restrict access control to the narrowest useful scope (`private`, `fileprivate`). Fewer visible symbols reduce the compiler's search space during type resolution.
|
|
94
|
+
- Prefer value types (`struct`, `enum`) over `class` when reference semantics are not needed. Value types are simpler for the compiler to reason about.
|
|
95
|
+
- Break long method chains (`.map().flatMap().filter()`) into intermediate `let` bindings with explicit type annotations. Even simple-looking chains can take seconds to type-check.
|
|
96
|
+
- Provide explicit return types on closures passed to generic functions, especially in SwiftUI result-builder contexts.
|
|
97
|
+
- Decompose large SwiftUI `body` properties into smaller extracted subviews. Each subview narrows the scope of the result-builder expression the type-checker must resolve.
|
|
98
|
+
|
|
99
|
+
## Bitrise: Demystifying Explicitly Built Modules for Xcode
|
|
100
|
+
|
|
101
|
+
Source:
|
|
102
|
+
|
|
103
|
+
- <https://bitrise.io/blog/post/demystifying-explicitly-built-modules-for-xcode>
|
|
104
|
+
|
|
105
|
+
Key takeaways:
|
|
106
|
+
|
|
107
|
+
- Explicit module builds give `xcodebuild` visibility into smaller compilation tasks for better parallelism.
|
|
108
|
+
- Enabled by default for C/Objective-C in Xcode 16+; experimental for Swift.
|
|
109
|
+
- Minimizing module variants by aligning build options is the primary optimization lever.
|
|
110
|
+
- Some projects see regressions from dependency scanning overhead -- benchmark before and after.
|
|
111
|
+
|
|
112
|
+
## Bitrise: Xcode Compilation Cache FAQ
|
|
113
|
+
|
|
114
|
+
Source:
|
|
115
|
+
|
|
116
|
+
- <https://docs.bitrise.io/en/bitrise-build-cache/build-cache-for-xcode/xcode-compilation-cache-faq.html>
|
|
117
|
+
|
|
118
|
+
Key takeaways:
|
|
119
|
+
|
|
120
|
+
- Granular caching is controlled by `SWIFT_ENABLE_COMPILE_CACHE` and `CLANG_ENABLE_COMPILE_CACHE`, under the umbrella `COMPILATION_CACHING` setting.
|
|
121
|
+
- Non-cacheable tasks include `CompileStoryboard`, `CompileXIB`, `CompileAssetCatalogVariant`, `PhaseScriptExecution`, `DataModelCompile`, `CopyPNGFile`, `GenerateDSYMFile`, and `Ld`.
|
|
122
|
+
- SPM dependencies are not yet cacheable as of Xcode 26 beta.
|
|
123
|
+
|
|
124
|
+
## RocketSim Docs: Build Insights
|
|
125
|
+
|
|
126
|
+
Sources:
|
|
127
|
+
|
|
128
|
+
- <https://www.rocketsim.app/docs/features/build-insights/build-insights/>
|
|
129
|
+
- <https://www.rocketsim.app/docs/features/build-insights/team-build-insights/>
|
|
130
|
+
|
|
131
|
+
Key takeaways:
|
|
132
|
+
|
|
133
|
+
- RocketSim automatically tracks clean vs incremental builds over time without build scripts.
|
|
134
|
+
- It reports build counts, duration trends, and percentile-based metrics such as p75 and p95.
|
|
135
|
+
- Team Build Insights adds machine, Xcode, and macOS comparisons for cross-team visibility.
|
|
136
|
+
- This repository is best positioned as the point-in-time analyze-and-improve toolkit, while RocketSim is the monitor-over-time companion.
|
|
137
|
+
|
|
138
|
+
## Swift Forums: Slow incremental builds because of planning swift module
|
|
139
|
+
|
|
140
|
+
Source:
|
|
141
|
+
|
|
142
|
+
- <https://forums.swift.org/t/slow-incremental-builds-because-of-planning-swift-module/84803>
|
|
143
|
+
|
|
144
|
+
Key takeaways:
|
|
145
|
+
|
|
146
|
+
- "Planning Swift module" can dominate incremental builds (up to 30s per module), sometimes exceeding clean build time.
|
|
147
|
+
- Replanning every module without scheduling compiles is a sign that build inputs are being modified unexpectedly (e.g., a misconfigured linter touching file timestamps).
|
|
148
|
+
- Enable **Task Backtraces** (Xcode 16.4+: Scheme Editor > Build > Build Debugging) to see why each task re-ran in an incremental build.
|
|
149
|
+
- Heavy Swift macro usage (e.g., TCA / swift-syntax) can cause trivial changes to cascade into near-full rebuilds.
|
|
150
|
+
- `swift-syntax` builds universally (all architectures) when no prebuilt binary is available, adding significant overhead.
|
|
151
|
+
- `SwiftEmitModule` can take 60s+ after a single-line change in large modules.
|
|
152
|
+
- Asset catalog compilation is single-threaded per target; splitting assets into separate bundles across targets enables parallel compilation.
|
|
153
|
+
- Multi-platform targets (e.g., adding watchOS) can cause SPM packages to build 3x (iOS arm64, iOS x86_64, watchOS arm64).
|
|
154
|
+
- Zero-change incremental builds still incur ~10s of fixed overhead: compute dependencies, send project description, create build description, script phases, codesigning, and validation.
|
|
155
|
+
- Codesigning and validation run even when output has not changed.
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
# Build Settings Best Practices
|
|
2
|
+
|
|
3
|
+
This reference lists Xcode build settings that affect build performance. Use it to audit a project and produce a pass/fail checklist.
|
|
4
|
+
|
|
5
|
+
The scope is strictly **build performance**. Do not flag language-migration settings like `SWIFT_STRICT_CONCURRENCY` or `SWIFT_UPCOMING_FEATURE_*` -- those are developer adoption choices unrelated to build speed.
|
|
6
|
+
|
|
7
|
+
## How To Read This Reference
|
|
8
|
+
|
|
9
|
+
Each setting includes:
|
|
10
|
+
|
|
11
|
+
- **Setting name** and the Xcode build-settings key
|
|
12
|
+
- **Recommended value** for Debug and Release
|
|
13
|
+
- **Why it matters** for build time
|
|
14
|
+
- **Risk** of changing it
|
|
15
|
+
|
|
16
|
+
Use checkmark and cross indicators when reporting:
|
|
17
|
+
|
|
18
|
+
- `[x]` -- setting matches the recommended value
|
|
19
|
+
- `[ ]` -- setting does not match; include the actual value and the expected value
|
|
20
|
+
|
|
21
|
+
## Debug Configuration
|
|
22
|
+
|
|
23
|
+
These settings optimize for fast iteration during development.
|
|
24
|
+
|
|
25
|
+
### Compilation Mode
|
|
26
|
+
|
|
27
|
+
- **Key:** `SWIFT_COMPILATION_MODE`
|
|
28
|
+
- **Recommended:** `singlefile` (Xcode UI: "Incremental"; or unset -- Xcode defaults to singlefile for Debug)
|
|
29
|
+
- **Why:** Single-file mode recompiles only changed files. `wholemodule` recompiles the entire target on every change.
|
|
30
|
+
- **Risk:** Low
|
|
31
|
+
|
|
32
|
+
### Swift Optimization Level
|
|
33
|
+
|
|
34
|
+
- **Key:** `SWIFT_OPTIMIZATION_LEVEL`
|
|
35
|
+
- **Recommended:** `-Onone`
|
|
36
|
+
- **Why:** Optimization passes add significant compile time. Debug builds do not benefit from runtime speed improvements.
|
|
37
|
+
- **Risk:** Low
|
|
38
|
+
|
|
39
|
+
### GCC Optimization Level
|
|
40
|
+
|
|
41
|
+
- **Key:** `GCC_OPTIMIZATION_LEVEL`
|
|
42
|
+
- **Recommended:** `0`
|
|
43
|
+
- **Why:** Same rationale as Swift optimization level, but for C/C++/Objective-C sources.
|
|
44
|
+
- **Risk:** Low
|
|
45
|
+
|
|
46
|
+
### Build Active Architecture Only
|
|
47
|
+
|
|
48
|
+
- **Key:** `ONLY_ACTIVE_ARCH` (`BUILD_ACTIVE_ARCHITECTURE_ONLY`)
|
|
49
|
+
- **Recommended:** `YES`
|
|
50
|
+
- **Why:** Building all architectures doubles or triples compile and link time for no debug benefit.
|
|
51
|
+
- **Risk:** Low
|
|
52
|
+
|
|
53
|
+
### Debug Information Format
|
|
54
|
+
|
|
55
|
+
- **Key:** `DEBUG_INFORMATION_FORMAT`
|
|
56
|
+
- **Recommended:** `dwarf`
|
|
57
|
+
- **Why:** `dwarf-with-dsym` generates a separate dSYM bundle which adds overhead. Plain `dwarf` embeds debug info directly in the binary, which is sufficient for local debugging.
|
|
58
|
+
- **Risk:** Low
|
|
59
|
+
|
|
60
|
+
### Enable Testability
|
|
61
|
+
|
|
62
|
+
- **Key:** `ENABLE_TESTABILITY`
|
|
63
|
+
- **Recommended:** `YES`
|
|
64
|
+
- **Why:** Required for `@testable import`. Adds minor overhead by exporting internal symbols, but this is expected during development.
|
|
65
|
+
- **Risk:** Low
|
|
66
|
+
|
|
67
|
+
### Active Compilation Conditions
|
|
68
|
+
|
|
69
|
+
- **Key:** `SWIFT_ACTIVE_COMPILATION_CONDITIONS`
|
|
70
|
+
- **Recommended:** Should include `DEBUG`
|
|
71
|
+
- **Why:** Guards conditional compilation blocks (e.g., `#if DEBUG`) and ensures debug-only code paths are included.
|
|
72
|
+
- **Risk:** Low
|
|
73
|
+
|
|
74
|
+
### Eager Linking
|
|
75
|
+
|
|
76
|
+
- **Key:** `EAGER_LINKING`
|
|
77
|
+
- **Recommended:** `YES`
|
|
78
|
+
- **Why:** Allows the linker to start work before all compilation tasks finish, reducing wall-clock build time. Particularly effective for Debug builds where link time is a meaningful fraction of total build time.
|
|
79
|
+
- **Risk:** Low
|
|
80
|
+
|
|
81
|
+
## Release Configuration
|
|
82
|
+
|
|
83
|
+
These settings optimize for production builds.
|
|
84
|
+
|
|
85
|
+
### Compilation Mode
|
|
86
|
+
|
|
87
|
+
- **Key:** `SWIFT_COMPILATION_MODE`
|
|
88
|
+
- **Recommended:** `wholemodule`
|
|
89
|
+
- **Why:** Whole-module optimization produces faster runtime code. Build time is secondary for release.
|
|
90
|
+
- **Risk:** Low
|
|
91
|
+
|
|
92
|
+
### Swift Optimization Level
|
|
93
|
+
|
|
94
|
+
- **Key:** `SWIFT_OPTIMIZATION_LEVEL`
|
|
95
|
+
- **Recommended:** `-O` or `-Osize`
|
|
96
|
+
- **Why:** Produces optimized binaries. `-Osize` trades some speed for smaller binary size.
|
|
97
|
+
- **Risk:** Low
|
|
98
|
+
|
|
99
|
+
### GCC Optimization Level
|
|
100
|
+
|
|
101
|
+
- **Key:** `GCC_OPTIMIZATION_LEVEL`
|
|
102
|
+
- **Recommended:** `s`
|
|
103
|
+
- **Why:** Optimizes C/C++/Objective-C for size, matching the typical release expectation.
|
|
104
|
+
- **Risk:** Low
|
|
105
|
+
|
|
106
|
+
### Build Active Architecture Only
|
|
107
|
+
|
|
108
|
+
- **Key:** `ONLY_ACTIVE_ARCH`
|
|
109
|
+
- **Recommended:** `NO`
|
|
110
|
+
- **Why:** Release builds must include all supported architectures for distribution.
|
|
111
|
+
- **Risk:** Low
|
|
112
|
+
|
|
113
|
+
### Debug Information Format
|
|
114
|
+
|
|
115
|
+
- **Key:** `DEBUG_INFORMATION_FORMAT`
|
|
116
|
+
- **Recommended:** `dwarf-with-dsym`
|
|
117
|
+
- **Why:** dSYM bundles are required for crash symbolication in production.
|
|
118
|
+
- **Risk:** Low
|
|
119
|
+
|
|
120
|
+
### Enable Testability
|
|
121
|
+
|
|
122
|
+
- **Key:** `ENABLE_TESTABILITY`
|
|
123
|
+
- **Recommended:** `NO`
|
|
124
|
+
- **Why:** Removes internal-symbol export overhead from release builds. Testing should use Debug configuration.
|
|
125
|
+
- **Risk:** Low
|
|
126
|
+
|
|
127
|
+
## General (All Configurations)
|
|
128
|
+
|
|
129
|
+
### Compilation Caching
|
|
130
|
+
|
|
131
|
+
- **Key:** `COMPILATION_CACHING`
|
|
132
|
+
- **Recommended:** `YES`
|
|
133
|
+
- **Why:** Caches compilation results for Swift and C-family sources so repeated compilations of the same inputs are served from cache. The biggest wins come from branch switching and clean builds where source files are recompiled unchanged. This is an opt-in feature. The umbrella setting controls both `SWIFT_ENABLE_COMPILE_CACHE` and `CLANG_ENABLE_COMPILE_CACHE` under the hood; those can be toggled independently if needed.
|
|
134
|
+
- **Measurement:** Measured 5-14% faster clean builds across tested projects (87 to 1,991 Swift files). The benefit compounds in real developer workflows where the cache persists between builds -- branch switching, pulling changes, and CI with persistent DerivedData -- though the exact savings depend on how many files change between builds.
|
|
135
|
+
- **Risk:** Low -- can also be enabled via per-user project settings so it does not need to be committed to the shared project file.
|
|
136
|
+
|
|
137
|
+
### Integrated Swift Driver
|
|
138
|
+
|
|
139
|
+
- **Key:** `SWIFT_USE_INTEGRATED_DRIVER`
|
|
140
|
+
- **Recommended:** `YES`
|
|
141
|
+
- **Why:** Uses the integrated Swift driver which runs inside the build system process, eliminating inter-process overhead for compilation scheduling. Enabled by default in modern Xcode but worth verifying in migrated projects.
|
|
142
|
+
- **Risk:** Low
|
|
143
|
+
|
|
144
|
+
### Clang Module Compilation
|
|
145
|
+
|
|
146
|
+
- **Key:** `CLANG_ENABLE_MODULES`
|
|
147
|
+
- **Recommended:** `YES`
|
|
148
|
+
- **Why:** Enables Clang module compilation for C/Objective-C sources, caching module maps on disk instead of reprocessing headers on every import. Eliminates redundant header parsing across translation units.
|
|
149
|
+
- **Risk:** Low
|
|
150
|
+
|
|
151
|
+
### Explicit Module Builds
|
|
152
|
+
|
|
153
|
+
- **Key:** `SWIFT_ENABLE_EXPLICIT_MODULES` (C/ObjC enabled by default in Xcode 16+; for Swift use `_EXPERIMENTAL_SWIFT_EXPLICIT_MODULES`)
|
|
154
|
+
- **Recommended:** Evaluate per-project
|
|
155
|
+
- **Why:** Makes module compilation visible to the build system as discrete tasks, improving parallelism and scheduling. Reduces redundant module rebuilds by making dependency edges explicit. Some projects see regressions due to the overhead of dependency scanning, so benchmark before and after enabling.
|
|
156
|
+
- **Risk:** Medium -- test thoroughly; currently experimental for Swift targets.
|
|
157
|
+
|
|
158
|
+
## Cross-Target Consistency
|
|
159
|
+
|
|
160
|
+
These checks find settings differences between targets that cause redundant build work.
|
|
161
|
+
|
|
162
|
+
### Project-Level vs Target-Level Overrides
|
|
163
|
+
|
|
164
|
+
Build-affecting settings should be set at the project level unless a target has a specific reason to override. Unnecessary per-target overrides cause confusion and can silently create module variants.
|
|
165
|
+
|
|
166
|
+
Settings to check for project-level consistency:
|
|
167
|
+
|
|
168
|
+
- `SWIFT_COMPILATION_MODE`
|
|
169
|
+
- `SWIFT_OPTIMIZATION_LEVEL`
|
|
170
|
+
- `ONLY_ACTIVE_ARCH`
|
|
171
|
+
- `DEBUG_INFORMATION_FORMAT`
|
|
172
|
+
|
|
173
|
+
### Module Variant Duplication
|
|
174
|
+
|
|
175
|
+
When multiple targets import the same SPM package but compile with different Swift compiler options, the build system produces separate module variants for each combination. This inflates `SwiftEmitModule` task counts.
|
|
176
|
+
|
|
177
|
+
Check for drift in:
|
|
178
|
+
|
|
179
|
+
- `SWIFT_OPTIMIZATION_LEVEL`
|
|
180
|
+
- `SWIFT_COMPILATION_MODE`
|
|
181
|
+
- `OTHER_SWIFT_FLAGS`
|
|
182
|
+
- Target-level build settings that override project defaults
|
|
183
|
+
|
|
184
|
+
### Out of Scope
|
|
185
|
+
|
|
186
|
+
Do **not** flag the following as build-performance issues:
|
|
187
|
+
|
|
188
|
+
- `SWIFT_STRICT_CONCURRENCY` -- language migration choice
|
|
189
|
+
- `SWIFT_UPCOMING_FEATURE_*` -- language migration choice
|
|
190
|
+
- `SWIFT_APPROACHABLE_CONCURRENCY` -- language migration choice
|
|
191
|
+
- `SWIFT_ACTIVE_COMPILATION_CONDITIONS` values beyond `DEBUG` (e.g., `WIDGETS`, `APPCLIP`) -- intentional per-target customization
|
|
192
|
+
|
|
193
|
+
## Checklist Output Format
|
|
194
|
+
|
|
195
|
+
When reporting results, use this structure:
|
|
196
|
+
|
|
197
|
+
```markdown
|
|
198
|
+
### Debug Configuration
|
|
199
|
+
- [x] `SWIFT_COMPILATION_MODE`: `singlefile` (recommended: `singlefile`)
|
|
200
|
+
- [ ] `DEBUG_INFORMATION_FORMAT`: `dwarf-with-dsym` (recommended: `dwarf`)
|
|
201
|
+
- [x] `SWIFT_OPTIMIZATION_LEVEL`: `-Onone` (recommended: `-Onone`)
|
|
202
|
+
...
|
|
203
|
+
|
|
204
|
+
### Release Configuration
|
|
205
|
+
- [x] `SWIFT_COMPILATION_MODE`: `wholemodule` (recommended: `wholemodule`)
|
|
206
|
+
...
|
|
207
|
+
|
|
208
|
+
### General (All Configurations)
|
|
209
|
+
- [ ] `COMPILATION_CACHING`: `NO` (recommended: `YES`)
|
|
210
|
+
...
|
|
211
|
+
|
|
212
|
+
### Cross-Target Consistency
|
|
213
|
+
- [x] All targets inherit `SWIFT_OPTIMIZATION_LEVEL` from project level
|
|
214
|
+
- [ ] `OTHER_SWIFT_FLAGS` differs between Stock Analyzer and StockAnalyzerClip
|
|
215
|
+
...
|
|
216
|
+
```
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Project Audit Checks
|
|
2
|
+
|
|
3
|
+
Use this reference when reviewing build-system configuration rather than source-level compile behavior.
|
|
4
|
+
|
|
5
|
+
## Target And Scheme Checks
|
|
6
|
+
|
|
7
|
+
- Confirm target dependencies are explicit and accurate.
|
|
8
|
+
- Remove dependencies that no longer reflect real build requirements.
|
|
9
|
+
- Ensure the scheme builds targets in `Dependency Order`.
|
|
10
|
+
- Look for oversized or monolithic targets that block parallel work.
|
|
11
|
+
|
|
12
|
+
## Build Script Checks
|
|
13
|
+
|
|
14
|
+
- Does each script need to run during incremental builds?
|
|
15
|
+
- Are input and output files declared?
|
|
16
|
+
- Should inputs and outputs be moved into `.xcfilelist` files?
|
|
17
|
+
- Can the script skip debug builds, simulator builds, or unchanged inputs?
|
|
18
|
+
- Would the script become parallelizable if dependency analysis were declared correctly?
|
|
19
|
+
- Could a misconfigured linter or formatter script be touching file timestamps without changing content? This silently invalidates build inputs and forces replanning of every module.
|
|
20
|
+
|
|
21
|
+
## Build Planning And Incremental Overhead Checks
|
|
22
|
+
|
|
23
|
+
- Check whether "Planning Swift module" appears as a significant category in the Build Timing Summary. In projects with many modules this step can take up to 30s per module, sometimes exceeding clean build time.
|
|
24
|
+
- If modules are replanned but no compiles are scheduled, suspect unexpected input modification (see Build Script Checks above).
|
|
25
|
+
- Enable **Task Backtraces** (Xcode 16.4+) to diagnose why tasks re-run in incremental builds: Scheme Editor > Build tab > Build Debugging > enable "Task Backtraces." Expanding tasks in the build log will show a backtrace explaining what input change triggered the re-run.
|
|
26
|
+
- Measure zero-change incremental build time as a baseline. Even with no source changes, builds incur fixed overhead: compute dependencies, send project description to build service, create build description, run script phases, codesign, and validate. If this baseline exceeds a few seconds, investigate each contributor.
|
|
27
|
+
- Check whether codesigning and validation run on every build even when the build output has not changed.
|
|
28
|
+
|
|
29
|
+
## Zero-Change Build Overhead Analysis
|
|
30
|
+
|
|
31
|
+
When a zero-change build (no edits, immediate rebuild) takes more than a few seconds, the overhead comes from fixed-cost phases rather than compilation. Investigate these categories in the Build Timing Summary:
|
|
32
|
+
|
|
33
|
+
- **PhaseScriptExecution**: Script phases with `alwaysOutOfDate = 1` or missing input/output declarations run on every build regardless of changes. Linters, formatters, and upload scripts are common offenders.
|
|
34
|
+
- **CodeSign**: Codesigning runs on every build for the app target and any embedded frameworks. Time scales with the number of signed binaries.
|
|
35
|
+
- **ValidateEmbeddedBinary**: Validates embedded binaries against the host app's provisioning profile. Runs unconditionally.
|
|
36
|
+
- **CopySwiftLibs**: Copies Swift standard libraries into the app bundle. Runs even when nothing changed.
|
|
37
|
+
- **RegisterWithLaunchServices**: Registers the built app with Launch Services. Fast but present in every build.
|
|
38
|
+
- **ProcessInfoPlistFile**: Re-processes Info.plist files. Time scales with the number of targets.
|
|
39
|
+
- **ExtractAppIntentsMetadata**: Extracts App Intents metadata from all targets. This phase is driven by Xcode and runs across all targets including CocoaPods and SwiftPM dependencies, not just first-party targets. If the project does not use App Intents, the work is unnecessary overhead, but it is not cleanly suppressible from project-level build settings alone. Classify findings about this phase as `xcode-behavior` actionability -- report the measured cost for awareness but do not promise a repo-local fix.
|
|
40
|
+
|
|
41
|
+
A zero-change build above 5 seconds on Apple Silicon typically indicates script phase overhead or an excessive number of targets requiring codesign and validation passes.
|
|
42
|
+
|
|
43
|
+
## Asset Catalog Checks
|
|
44
|
+
|
|
45
|
+
- Asset catalog compilation (`CompileAssetCatalog`) is single-threaded per target. Multiple catalogs within the same target compile sequentially in a single process.
|
|
46
|
+
- If asset catalog compilation appears as a significant timing category, recommend splitting assets into separate resource bundles across separate targets to enable parallel compilation.
|
|
47
|
+
- Asset catalog compilation is not cacheable by the Xcode compilation cache (`CompileAssetCatalogVariant` is non-cacheable).
|
|
48
|
+
- Check whether asset catalogs rebuild during incremental builds even when no assets changed. If so, investigate whether build inputs for the catalog step are being invalidated unexpectedly.
|
|
49
|
+
|
|
50
|
+
## Build Setting Checks
|
|
51
|
+
|
|
52
|
+
Audit project-level and target-level settings against the [build settings best practices](build-settings-best-practices.md). Present results as a checklist with `[x]`/`[ ]` indicators.
|
|
53
|
+
|
|
54
|
+
Key settings to verify:
|
|
55
|
+
|
|
56
|
+
- `SWIFT_COMPILATION_MODE` -- `singlefile` for Debug, `wholemodule` for Release
|
|
57
|
+
- `SWIFT_OPTIMIZATION_LEVEL` -- `-Onone` for Debug, `-O` or `-Osize` for Release
|
|
58
|
+
- `ONLY_ACTIVE_ARCH` -- `YES` for Debug, `NO` for Release
|
|
59
|
+
- `DEBUG_INFORMATION_FORMAT` -- `dwarf` for Debug, `dwarf-with-dsym` for Release
|
|
60
|
+
- `GCC_OPTIMIZATION_LEVEL` -- `0` for Debug, `s` for Release
|
|
61
|
+
- `ENABLE_TESTABILITY` -- `YES` for Debug, `NO` for Release
|
|
62
|
+
- `COMPILATION_CACHING` -- recommended `YES` for all configurations; caches repeated compilations during branch switching and clean builds
|
|
63
|
+
- `EAGER_LINKING` -- recommended `YES` for Debug; starts linking before all compilation finishes
|
|
64
|
+
- `SWIFT_USE_INTEGRATED_DRIVER` -- recommended `YES`; uses the integrated driver for better scheduling
|
|
65
|
+
- `CLANG_ENABLE_MODULES` -- recommended `YES`; caches module maps on disk for C/ObjC
|
|
66
|
+
|
|
67
|
+
Do not flag language-migration settings (`SWIFT_STRICT_CONCURRENCY`, `SWIFT_UPCOMING_FEATURE_*`) as build performance issues.
|
|
68
|
+
|
|
69
|
+
## Module And Header Checks
|
|
70
|
+
|
|
71
|
+
- `DEFINES_MODULE` is enabled for custom frameworks that should benefit from module maps.
|
|
72
|
+
- Public headers are self-contained enough to compile as a module.
|
|
73
|
+
- Import statements use framework-qualified imports where available.
|
|
74
|
+
- targets that should share built modules use consistent options
|
|
75
|
+
|
|
76
|
+
## Explicit Module Dependency Checks
|
|
77
|
+
|
|
78
|
+
- Check whether explicit modules are enabled or expected in the current Xcode version and Swift mode.
|
|
79
|
+
- Look for repeated module builds caused by configuration drift.
|
|
80
|
+
- Compare preprocessor macros or other build options across sibling targets that import the same modules.
|
|
81
|
+
|
|
82
|
+
## CocoaPods Projects
|
|
83
|
+
|
|
84
|
+
CocoaPods is deprecated. Do not attempt CocoaPods-specific build optimizations such as linkage mode changes (`use_frameworks! :linkage => :static`), `COCOAPODS_PARALLEL_CODE_SIGN`, or Podfile tweaks. These are unreliable and frequently regress build times.
|
|
85
|
+
|
|
86
|
+
When a project uses CocoaPods (presence of `Podfile`, `Pods/`, or a `Pods.xcodeproj`), recommend migrating to Swift Package Manager as the highest-impact long-term improvement. SPM advantages for build time:
|
|
87
|
+
|
|
88
|
+
- **Compilation caching**: `COMPILATION_CACHING` works with SPM targets out of the box, delivering cumulative benefits across branch switching, pulling changes, and CI.
|
|
89
|
+
- **Better build parallelism**: SPM targets build in parallel based on the dependency graph without the overhead of a separate Pods project.
|
|
90
|
+
- **No xcconfig regeneration**: CocoaPods regenerates xcconfigs and its own project file on every `pod install`. SPM resolution is lighter and its outputs integrate natively.
|
|
91
|
+
- **Native Xcode integration**: No separate `Pods.xcodeproj`, no workspace stitching, and full support for modern Xcode features like explicit modules.
|
|
92
|
+
|
|
93
|
+
Focus the remaining analysis on first-party targets and build settings that the project controls directly. Do not audit or recommend changes to `Pods.xcodeproj` or the Podfile.
|
|
94
|
+
|
|
95
|
+
## Recommendation Prioritization
|
|
96
|
+
|
|
97
|
+
Qualify every estimated impact with wall-clock framing. High-priority items should be those likely to reduce the developer's actual wait time, not just cumulative task totals. If the impact on wait time is uncertain, say so.
|
|
98
|
+
|
|
99
|
+
- High: serial script bottlenecks, missing dependency metadata, configuration drift causing redundant module builds, excessive "Planning Swift module" time, or scripts silently invalidating build inputs.
|
|
100
|
+
- Medium: stale target structure, noncritical scripts running too often, slow asset catalog compilation blocking the critical path, unnecessary codesigning on unchanged output, or significant `ExtractAppIntentsMetadata` time in projects without App Intents.
|
|
101
|
+
- Low: settings cleanup without strong evidence of current impact.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Recommendation Format
|
|
2
|
+
|
|
3
|
+
All optimization skills should report recommendations in a shared structure so the orchestrator can merge and prioritize them cleanly.
|
|
4
|
+
|
|
5
|
+
## Required Fields
|
|
6
|
+
|
|
7
|
+
Each recommendation should include:
|
|
8
|
+
|
|
9
|
+
- `title`
|
|
10
|
+
- `wait_time_impact` -- plain-language statement of expected wall-clock impact, e.g. "Expected to reduce your clean build by ~3s", "Reduces parallel compile work but unlikely to reduce build wait time", or "Impact on wait time is uncertain -- re-benchmark to confirm"
|
|
11
|
+
- `actionability` -- classifies how fixable the issue is from the project (see values below)
|
|
12
|
+
- `category`
|
|
13
|
+
- `observed_evidence`
|
|
14
|
+
- `estimated_impact`
|
|
15
|
+
- `confidence`
|
|
16
|
+
- `approval_required`
|
|
17
|
+
- `benchmark_verification_status`
|
|
18
|
+
|
|
19
|
+
### Actionability Values
|
|
20
|
+
|
|
21
|
+
Every recommendation must include an `actionability` classification:
|
|
22
|
+
|
|
23
|
+
- `repo-local` -- Fix lives entirely in project files, source code, or local configuration. The developer can apply it without side effects outside the repo.
|
|
24
|
+
- `package-manager` -- Requires CocoaPods or SPM configuration changes that may have broad side effects (e.g., linkage mode, dependency restructuring). These should be benchmarked before and after.
|
|
25
|
+
- `xcode-behavior` -- Observed cost is driven by Xcode internals and is not suppressible from the project. Report the finding for awareness but do not promise a fix.
|
|
26
|
+
- `upstream` -- Requires changes in a third-party dependency or external tool. The developer cannot fix it locally.
|
|
27
|
+
|
|
28
|
+
## Suggested Optional Fields
|
|
29
|
+
|
|
30
|
+
- `scope`
|
|
31
|
+
- `affected_files`
|
|
32
|
+
- `affected_targets`
|
|
33
|
+
- `affected_packages`
|
|
34
|
+
- `implementation_notes`
|
|
35
|
+
- `risk_level`
|
|
36
|
+
|
|
37
|
+
## JSON Example
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"recommendations": [
|
|
42
|
+
{
|
|
43
|
+
"title": "Guard a release-only symbol upload script",
|
|
44
|
+
"wait_time_impact": "Expected to reduce your incremental build by approximately 6 seconds.",
|
|
45
|
+
"actionability": "repo-local",
|
|
46
|
+
"category": "project",
|
|
47
|
+
"observed_evidence": [
|
|
48
|
+
"Incremental builds spend 6.3 seconds in a run script phase.",
|
|
49
|
+
"The script runs for Debug builds even though the output is only needed in Release."
|
|
50
|
+
],
|
|
51
|
+
"estimated_impact": "High incremental-build improvement",
|
|
52
|
+
"confidence": "High",
|
|
53
|
+
"approval_required": true,
|
|
54
|
+
"benchmark_verification_status": "Not yet verified",
|
|
55
|
+
"scope": "Target build phase",
|
|
56
|
+
"risk_level": "Low"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Markdown Rendering Guidance
|
|
63
|
+
|
|
64
|
+
When rendering for human review, preserve the same field order:
|
|
65
|
+
|
|
66
|
+
1. title
|
|
67
|
+
2. wait-time impact
|
|
68
|
+
3. actionability
|
|
69
|
+
4. observed evidence
|
|
70
|
+
5. estimated impact
|
|
71
|
+
6. confidence
|
|
72
|
+
7. approval required
|
|
73
|
+
8. benchmark verification status
|
|
74
|
+
|
|
75
|
+
That makes it easier for the developer to approve or reject specific items quickly.
|
|
76
|
+
|
|
77
|
+
## Verification Status Values
|
|
78
|
+
|
|
79
|
+
Recommended values:
|
|
80
|
+
|
|
81
|
+
- `Not yet verified`
|
|
82
|
+
- `Queued for verification`
|
|
83
|
+
- `Verified improvement`
|
|
84
|
+
- `No measurable improvement`
|
|
85
|
+
- `Inconclusive due to benchmark noise`
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"_comments": {
|
|
3
|
-
"projectId": "Auto-generated from folder name. DO NOT change — used by Symphony for task scoping.",
|
|
4
|
-
"trello": "Fill in your Trello board/list/card names. Run 'awkit trello info' to verify."
|
|
5
|
-
},
|
|
6
2
|
"projectName": "MyAndroidApp",
|
|
7
|
-
"projectId": "myandroidapp",
|
|
8
3
|
"projectType": "android",
|
|
9
4
|
"packageName": "com.company.myandroidapp",
|
|
10
5
|
"primaryLanguage": "en",
|
|
@@ -21,11 +16,6 @@
|
|
|
21
16
|
"testing": "JUnit + Espresso",
|
|
22
17
|
"buildSystem": "Gradle (KTS)"
|
|
23
18
|
},
|
|
24
|
-
"trello": {
|
|
25
|
-
"board": "Your Board Name",
|
|
26
|
-
"list": "Your List Name",
|
|
27
|
-
"card": "Your Card Name"
|
|
28
|
-
},
|
|
29
19
|
"projectStage": "planning",
|
|
30
20
|
"codingStandards": {
|
|
31
21
|
"language": "en",
|