Use when organizing complex CocoaPods libraries into subspecs. Covers modular architecture, dependency management between subspecs, and default subspecs patterns for better code organization and optional features.
View on GitHubTheBushidoCollective/han
jutsu-cocoapods
January 24, 2026
Select agents to install to:
npx add-skill https://github.com/TheBushidoCollective/han/blob/main/jutsu/jutsu-cocoapods/skills/subspecs-organization/SKILL.md -a claude-code --skill cocoapods-subspecs-organizationInstallation paths:
.claude/skills/cocoapods-subspecs-organization/# CocoaPods - Subspecs Organization
Organize complex libraries into modular subspecs for better maintainability and optional features.
## What Are Subspecs?
Subspecs allow you to split a pod into logical modules that can be installed independently or as a group.
### Benefits
- **Modularity**: Separate core functionality from optional features
- **Selective Installation**: Users install only what they need
- **Reduced Dependencies**: Optional features don't force unnecessary dependencies
- **Better Organization**: Clear separation of concerns
## Basic Subspec Pattern
```ruby
Pod::Spec.new do |spec|
spec.name = 'MyLibrary'
spec.version = '1.0.0'
# Main spec has no source files - all in subspecs
spec.default_subspecs = 'Core'
# Core subspec - installed by default
spec.subspec 'Core' do |core|
core.source_files = 'Source/Core/**/*.swift'
core.frameworks = 'Foundation'
end
# Optional feature subspec
spec.subspec 'Networking' do |networking|
networking.source_files = 'Source/Networking/**/*.swift'
networking.dependency 'MyLibrary/Core' # Depends on Core
networking.dependency 'Alamofire', '~> 5.0'
end
# Another optional feature
spec.subspec 'UI' do |ui|
ui.source_files = 'Source/UI/**/*.swift'
ui.dependency 'MyLibrary/Core'
ui.ios.frameworks = 'UIKit'
ui.osx.frameworks = 'AppKit'
end
end
```
## Dependency Patterns
### Subspec Dependencies
```ruby
Pod::Spec.new do |spec|
spec.name = 'MySDK'
# Foundation layer
spec.subspec 'Core' do |core|
core.source_files = 'Source/Core/**/*.swift'
end
# Networking depends on Core
spec.subspec 'Networking' do |net|
net.source_files = 'Source/Networking/**/*.swift'
net.dependency 'MySDK/Core'
net.dependency 'Alamofire', '~> 5.0'
end
# Analytics depends on Core and Networking
spec.subspec 'Analytics' do |analytics|
analytics.source_files = 'Source/Analytics/**/*.swift'
analytics.dependency 'MySDK/Core'
analytics.depenIssues Found: