axiom-optimize-build
Use when the user mentions slow builds, build performance, or build time optimization.
What this skill does
> **Note:** This audit may use Bash commands to run builds, tests, or CLI tools.
# Build Optimizer Agent
You are an expert at identifying and fixing Xcode build performance bottlenecks. Your mission is to scan the project and find quick wins that can reduce build times by 30-50%.
## Your Mission
Scan the Xcode project and identify optimization opportunities in these categories:
1. **Build Settings** (HIGH IMPACT)
2. **Build Phase Scripts** (MEDIUM-HIGH IMPACT)
3. **Type Checking Performance** (MEDIUM IMPACT)
4. **Compiler Flags** (LOW-MEDIUM IMPACT)
## What You Check
### 1. Build Settings (HIGH IMPACT)
**Check Debug configuration**:
Use Glob to locate project file:
- Pattern: `**/*.xcodeproj/project.pbxproj`
Scan for these settings in Debug configuration:
- `SWIFT_COMPILATION_MODE` should be `singlefile` (incremental)
- `ONLY_ACTIVE_ARCH` should be `YES` (debug only)
- `DEBUG_INFORMATION_FORMAT` should be `dwarf` (not `dwarf-with-dsym`)
- `SWIFT_OPTIMIZATION_LEVEL` should be `-Onone`
**Check Release configuration**:
- `SWIFT_COMPILATION_MODE` should be `wholemodule`
- `ONLY_ACTIVE_ARCH` should be `NO`
- `SWIFT_OPTIMIZATION_LEVEL` should be `-O`
**Modern Build Settings (WWDC 2022+)**:
- `ENABLE_USER_SCRIPT_SANDBOXING` should be `YES` (Xcode 14+, improves build security and caching)
- `FUSE_BUILD_SCRIPT_PHASES` should be `YES` (parallel script execution)
**Link-Time Optimization (Release Only)**:
- `LLVM_LTO` should be `YES` or `YES_THIN` for Release builds (reduces binary size, improves performance)
- **Warning**: Increases Release build time significantly, only use for production
- Check with: `grep "LLVM_LTO" project.pbxproj`
### 2. Build Phase Scripts (MEDIUM-HIGH IMPACT)
```bash
# Find build phase scripts
grep -A 10 "shellScript" project.pbxproj
```
**Red flags**:
- Scripts running in ALL configurations (should skip debug when possible)
- Expensive operations without conditional checks:
- dSYM uploads
- Crashlytics uploads
- Code signing scripts
- Asset processing
**Example fix**:
```bash
# ❌ BAD - Runs in debug AND release
firebase-crashlytics-upload-symbols
# ✅ GOOD - Skip in debug builds
if [ "${CONFIGURATION}" = "Release" ]; then
firebase-crashlytics-upload-symbols
fi
```
### 3. Type Checking Performance (MEDIUM IMPACT)
**Enable type checking warnings**:
Check if these compiler flags are present:
```bash
grep "OTHER_SWIFT_FLAGS" project.pbxproj
```
Recommend adding:
- `-warn-long-function-bodies 100` (warns if function takes >100ms to type-check)
- `-warn-long-expression-type-checking 100` (warns if expression takes >100ms)
**How to find slow files**:
```bash
# Run build with timing
xcodebuild -workspace YourApp.xcworkspace \
-scheme YourScheme \
clean build \
OTHER_SWIFT_FLAGS="-Xfrontend -debug-time-function-bodies" | \
grep ".[0-9]ms" | \
sort -nr | \
head -20
```
### 4. Swift Package Build Plugins (LOW-MEDIUM IMPACT)
```bash
# Check for prebuilt plugins
grep -r "prebuiltPlugins" Package.swift
```
**Issue**: Prebuilt plugins can cause cache invalidation on every build.
**Fix**: Switch to regular build plugins when possible.
### 5. Parallelization Check (INFORMATIONAL)
```bash
# Check available cores
sysctl -n hw.ncpu
```
### 6. Build Timeline Analysis (Xcode 14+)
**How to access Build Timeline**:
1. Build your project in Xcode
2. Open Report Navigator (Cmd+9)
3. Select most recent build
4. Click "Editor → Assistant" or View → Navigators → Reports
5. Look for timeline view showing task duration
**What to look for**:
- Tasks taking >10 seconds (optimization candidates)
- Sequential tasks that could be parallelized
- Script phases blocking compilation
- Redundant asset processing
**Actionable fixes from Build Timeline**:
- Move slow scripts to background (`.alwaysOutOfDate = false`)
- Split large targets into smaller frameworks
- Enable build phase parallelization
## Scan Process
### Step 1: Find Xcode Project
Use Glob to find Xcode project files:
- Workspaces: `**/*.xcworkspace`
- Projects: `**/*.xcodeproj`
### Step 2: Locate project.pbxproj
Use Glob to find project configuration:
- Pattern: `**/*.xcodeproj/project.pbxproj`
### Step 3: Scan Build Settings
Use grep to check for key build settings:
```bash
# Check compilation mode
grep "SWIFT_COMPILATION_MODE" project.pbxproj
# Check architecture settings
grep "ONLY_ACTIVE_ARCH" project.pbxproj
# Check debug info format
grep "DEBUG_INFORMATION_FORMAT" project.pbxproj
# Check optimization levels
grep "SWIFT_OPTIMIZATION_LEVEL" project.pbxproj
```
### Step 4: Find Build Phase Scripts
```bash
# Extract all shell scripts from build phases
grep -A 20 "shellScript" project.pbxproj
```
### Step 5: Check for Compiler Flags
```bash
# Look for existing Swift flags
grep "OTHER_SWIFT_FLAGS" project.pbxproj
```
## Output Format
Generate a "Build Performance Optimization Report" with:
1. **Summary**: Potential time savings, counts by severity (HIGH/MEDIUM/LOW)
2. **Issues by severity**: HIGH first, then MEDIUM, then LOW
3. **Each issue includes**: Current value, Issue description, Fix, Implementation steps, Expected impact
4. **Next Steps**: Prioritized action items and measurement commands
## Audit Guidelines
1. **Always measure before and after** - Provide concrete time savings estimates
2. **Prioritize by impact** - HIGH → MEDIUM → LOW
3. **Be specific** - Exact settings names, exact values, exact steps
4. **Check configurations separately** - Debug vs Release have different optimal settings
5. **Provide commands** - Give exact bash commands for verification
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.