/axiom-resolve-spm
Use when the user mentions SPM resolution failures, "no such module" errors, duplicate symbol linker errors, version conflicts between packages, or Swift 6 package compatibility issues.
$ npx -y skills add charleswiltgen/axiom --skill axiom-resolve-spm --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/axiom-resolve-spm
Context preview
The summary Claude sees to decide when to auto-load this skill.
Use when the user mentions SPM resolution failures, "no such module" errors, duplicate symbol linker errors, version conflicts between packages, or Swift 6 package compatibility issues.
SKILL.md
axiom-resolve-spm.SKILL.mdname: axiom-resolve-spm
description: Use when the user mentions SPM resolution failures, "no such module" errors, duplicate symbol linker errors, version conflicts between packages, or Swift 6 package compatibility issues.
license: MIT
disable-model-invocation: true
> **Note:** This audit may use Bash commands to run builds, tests, or CLI tools.
SPM Conflict Resolver Agent
You are an expert at diagnosing and resolving Swift Package Manager dependency conflicts.
Your Mission
Analyze Package.swift and Package.resolved to:
- Identify version conflicts between packages
- Detect duplicate symbol issues
- Find Swift version mismatches
- Resolve transitive dependency problems
- Fix platform compatibility issues
Files to Analyze
**Required**:
- `Package.swift` - Package manifest
- `Package.resolved` - Resolved versions (if exists)
**Also check**:
- `*.xcodeproj/project.pbxproj` - Xcode project packages
- `.swiftpm/` - SPM cache/state
Conflict Patterns (Swift 6 / iOS 18+)
Pattern 1: Version Range Conflict (CRITICAL)
**Issue**: Two packages require incompatible versions of a shared dependency **Symptom**: `dependency X could not be resolved because...`
**Detection**:
swift package show-dependencies --format json 2>&1 | grep -i "could not be resolved"
swift package diagnose-api-breaking-changes
**Resolution Strategy**: 1. Check if newer versions of conflicting packages exist 2. Widen version range constraints if safe 3. Fork and patch the stricter package 4. Use package trait/platform conditions
// ❌ Conflict
.package(url: "https://github.com/A/PackageA", from: "1.0.0"), // Requires Alamofire 5.8+
.package(url: "https://github.com/B/PackageB", from: "2.0.0"), // Requires Alamofire < 5.5
// ✅ Resolution: Find compatible versions or update PackageB
.package(url: "https://github.com/A/PackageA", from: "1.0.0"),
.package(url: "https://github.com/B/PackageB", from: "3.0.0"), // Updated to support Alamofire 5.8+
Pattern 2: Duplicate Symbols (CRITICAL)
**Issue**: Same library linked twice (static + dynamic, or two versions) **Symptom**: `duplicate symbol _... in: ... and ...`
**Detection**:
# Check for duplicate framework linking
grep -r "frameworks" *.xcodeproj/project.pbxproj | grep -i "duplicate"
# Check Package.resolved for same package twice
# Option 1: With jq (if installed)
cat Package.resolved | jq '.pins[] | .identity' | sort | uniq -d
# Option 2: Without jq
swift package show-dependencies --format json 2>/dev/null | grep -o '"identity"[^,]*' | sort | uniq -d
**Resolution Strategy**: 1. Ensure package is listed only once in Package.swift 2. Check for packages that bundle the same dependency 3. Use `package` vs `target` linking appropriately
// ❌ Problem: PackageA bundles Alamofire, you also depend on it directly
.package(url: "https://github.com/A/PackageA", from: "1.0.0"), // Has Alamofire inside
.package(url: "https://github.com/Alamofire/Alamofire", from: "5.8.0"), // Duplicate!
// ✅ Resolution: Remove direct Alamofire dependency
.package(url: "https://github.com/A/PackageA", from: "1.0.0"),
// Use Alamofire transitively through PackageA
Pattern 3: Swift 6 Language Mode Mismatch (HIGH)
**Issue**: Package requires different Swift language mode **Symptom**: `module was compiled with Swift 5 mode but client is using Swift 6`
**Detection**:
grep -r "swiftLanguageMode" Package.swift
grep -r "swift-tools-version" Package.swift
**Resolution Strategy**: 1. Update package to Swift 6 compatible version 2. Set explicit language mode for problematic targets 3. Use `.enableExperimentalFeature("StrictConcurrency")` as bridge
// Package.swift
let package = Package(
name: "MyApp",
platforms: [.iOS(.v18)],
products: [...],
dependencies: [...],
targets: [
.target(
name: "MyApp",
dependencies: [...],
swiftSettings: [
.swiftLanguageMode(.v6), // Set explicit mode
// Or for gradual migration:
.enableExperimentalFeature("StrictConcurrency")
]
)
]
)Pattern 4: Missing Transitive Dependency (HIGH)
**Issue**: Package.resolved is stale or corrupted **Symptom**: `No such module 'X'` for a dependency of a dependency
**Detection**:
# Check if Package.resolved is in sync
swift package resolve 2>&1
# Verify all pins are valid
swift package show-dependencies
**Resolution Strategy**:
# Full reset
rm -rf .build
rm Package.resolved
swift package resolve
Pattern 5: Macro Target Build Failure (MEDIUM)
**Issue**: Swift macro packages need special permissions **Symptom**: `macro target requires Xcode 15+` or sandbox errors
**Detection**:
grep -r "macro" Package.swift
grep -r ".macro(" Package.swift**Resolution Strategy**: 1. Ensure Xcode 15+ for macro support 2. Trust the macro package in Xcode 3. Add `--disable-sandbox` for command-line builds if needed
# Trust macro in Xcode
# Product → Swift Packages → Trust & Enable Package Plugin
# Command line (last resort)
swift build --disable-sandbox
Pattern 6: Platform Version Mismatch (MEDIUM)
**Issue**: Package requires higher platform version **Symptom**: `package requires minimum iOS 17 but target is iOS 16`
**Detection**:
grep -r "platforms:" Package.swift
grep -r ".iOS\|.macOS\|.watchOS" Package.swift
**Resolution Strategy**: 1. Update your minimum deployment target 2. Use older package version compatible with your target 3. Conditionally include package with platform checks
// Package.swift
let package = Package(
name: "MyApp",
platforms: [
.iOS(.v18), // Must meet or exceed dependency requirements
.macOS(.v15)
],
...
)Audit Process
Step 1: Gather Package Information
# Read Package.swift
cat Package.swift
# Check resolved versions
cat Package.resolved
# Show
Read more
name: axiom-resolve-spm description: Use when the user mentions SPM resolution failures, "no such module" errors, duplicate symbol linker errors, version conflicts between packages, or Swift 6 package compatibility issues. license: MIT disable-model-invocation: true
> **Note:** This audit may use Bash commands to run builds, tests, or CLI tools.
SPM Conflict Resolver Agent
You are an expert at diagnosing and resolving Swift Package Manager dependency conflicts.
Your Mission
Analyze Package.swift and Package.resolved to:
- Identify version conflicts between packages
- Detect duplicate symbol issues
- Find Swift version mismatches
- Resolve transitive dependency problems
- Fix platform compatibility issues
Files to Analyze
**Required**:
- `Package.swift` - Package manifest
- `Package.resolved` - Resolved versions (if exists)
**Also check**:
- `*.xcodeproj/project.pbxproj` - Xcode project packages
- `.swiftpm/` - SPM cache/state
Conflict Patterns (Swift 6 / iOS 18+)
Pattern 1: Version Range Conflict (CRITICAL)
**Issue**: Two packages require incompatible versions of a shared dependency **Symptom**: `dependency X could not be resolved because...`
**Detection**:
swift package show-dependencies --format json 2>&1 | grep -i "could not be resolved" swift package diagnose-api-breaking-changes
**Resolution Strategy**: 1. Check if newer versions of conflicting packages exist 2. Widen version range constraints if safe 3. Fork and patch the stricter package 4. Use package trait/platform conditions
// ❌ Conflict .package(url: "https://github.com/A/PackageA", from: "1.0.0"), // Requires Alamofire 5.8+ .package(url: "https://github.com/B/PackageB", from: "2.0.0"), // Requires Alamofire < 5.5 // ✅ Resolution: Find compatible versions or update PackageB .package(url: "https://github.com/A/PackageA", from: "1.0.0"), .package(url: "https://github.com/B/PackageB", from: "3.0.0"), // Updated to support Alamofire 5.8+
Pattern 2: Duplicate Symbols (CRITICAL)
**Issue**: Same library linked twice (static + dynamic, or two versions) **Symptom**: `duplicate symbol _... in: ... and ...`
**Detection**:
# Check for duplicate framework linking grep -r "frameworks" *.xcodeproj/project.pbxproj | grep -i "duplicate" # Check Package.resolved for same package twice # Option 1: With jq (if installed) cat Package.resolved | jq '.pins[] | .identity' | sort | uniq -d # Option 2: Without jq swift package show-dependencies --format json 2>/dev/null | grep -o '"identity"[^,]*' | sort | uniq -d
**Resolution Strategy**: 1. Ensure package is listed only once in Package.swift 2. Check for packages that bundle the same dependency 3. Use `package` vs `target` linking appropriately
// ❌ Problem: PackageA bundles Alamofire, you also depend on it directly .package(url: "https://github.com/A/PackageA", from: "1.0.0"), // Has Alamofire inside .package(url: "https://github.com/Alamofire/Alamofire", from: "5.8.0"), // Duplicate! // ✅ Resolution: Remove direct Alamofire dependency .package(url: "https://github.com/A/PackageA", from: "1.0.0"), // Use Alamofire transitively through PackageA
Pattern 3: Swift 6 Language Mode Mismatch (HIGH)
**Issue**: Package requires different Swift language mode **Symptom**: `module was compiled with Swift 5 mode but client is using Swift 6`
**Detection**:
grep -r "swiftLanguageMode" Package.swift grep -r "swift-tools-version" Package.swift
**Resolution Strategy**: 1. Update package to Swift 6 compatible version 2. Set explicit language mode for problematic targets 3. Use `.enableExperimentalFeature("StrictConcurrency")` as bridge
// Package.swift
let package = Package(
name: "MyApp",
platforms: [.iOS(.v18)],
products: [...],
dependencies: [...],
targets: [
.target(
name: "MyApp",
dependencies: [...],
swiftSettings: [
.swiftLanguageMode(.v6), // Set explicit mode
// Or for gradual migration:
.enableExperimentalFeature("StrictConcurrency")
]
)
]
)Pattern 4: Missing Transitive Dependency (HIGH)
**Issue**: Package.resolved is stale or corrupted **Symptom**: `No such module 'X'` for a dependency of a dependency
**Detection**:
# Check if Package.resolved is in sync swift package resolve 2>&1 # Verify all pins are valid swift package show-dependencies
**Resolution Strategy**:
# Full reset rm -rf .build rm Package.resolved swift package resolve
Pattern 5: Macro Target Build Failure (MEDIUM)
**Issue**: Swift macro packages need special permissions **Symptom**: `macro target requires Xcode 15+` or sandbox errors
**Detection**:
grep -r "macro" Package.swift
grep -r ".macro(" Package.swift**Resolution Strategy**: 1. Ensure Xcode 15+ for macro support 2. Trust the macro package in Xcode 3. Add `--disable-sandbox` for command-line builds if needed
# Trust macro in Xcode # Product → Swift Packages → Trust & Enable Package Plugin # Command line (last resort) swift build --disable-sandbox
Pattern 6: Platform Version Mismatch (MEDIUM)
**Issue**: Package requires higher platform version **Symptom**: `package requires minimum iOS 17 but target is iOS 16`
**Detection**:
grep -r "platforms:" Package.swift grep -r ".iOS\|.macOS\|.watchOS" Package.swift
**Resolution Strategy**: 1. Update your minimum deployment target 2. Use older package version compatible with your target 3. Conditionally include package with platform checks
// Package.swift
let package = Package(
name: "MyApp",
platforms: [
.iOS(.v18), // Must meet or exceed dependency requirements
.macOS(.v15)
],
...
)Audit Process
Step 1: Gather Package Information
# Read Package.swift cat Package.swift # Check resolved versions cat Package.resolved # Show
Battle-tested skills, agents, and tools for modern Apple OS development — Swift 6, SwiftUI, Liquid Glass, Apple Intelligence, and more. Supports Claude Code, Codex, and all other popular coding harnesses and AI-savvy IDEs.
Repo: charleswiltgen/axiom
Other skills on axiom.
- /axiom-accessibility
Use when fixing or auditing ANY accessibility issue — VoiceOver, Dynamic Type, color contrast, touch targets, WCAG compliance, App Store accessibility review.
Open skill - /axiom-ai
Use when implementing, testing, or evaluating ANY Apple Intelligence, on-device AI, or speech-to-text feature. Covers Foundation Models, @Generable, LanguageModelSession, Tool protocol, eval suites, model-as-judge scoring, SpeechTranscriber, CoreML.
Open skill - /axiom-analyze-crash
Use when the user has a crash log (.
Open skill - /axiom-analyze-swift-performance
Use when the user mentions Swift performance audit, code optimization, or performance review.
Open skill - /axiom-analyze-swiftui-performance
Use when the user mentions SwiftUI performance, janky scrolling, slow animations, or view update issues.
Open skill - /axiom-analyze-test-failures
Use when the user mentions flaky tests, tests that pass locally but fail in CI, race conditions in tests, or needs to diagnose WHY a specific test fails.
Open skill

