Cocoapods
v1.1.0Validation and quality enforcement for CocoaPods dependency management in iOS, macOS, tvOS, watchOS, and visionOS projects.
Installation
Install han binary (required for hooks to work):
curl -fsSL https://han.guru/install.sh | bashThen install this plugin:
han plugin install jutsu-cocoapodsOverview
Validation and quality enforcement for CocoaPods dependency management in iOS, macOS, tvOS, watchOS, and visionOS projects.
What This Jutsu Provides
Validation Hooks
- Podspec Validation: Automatically runs
pod lib lintto validate podspec syntax, dependencies, and build integrity - Quick Validation: Uses
--quickflag for fast feedback during development - Fail-Fast: Stops on first error to provide immediate feedback
- Smart Caching: Only re-validates when podspec or source files change
Skills
This jutsu provides the following skills for CocoaPods development:
- cocoapods-podspec-fundamentals: Creating and maintaining podspec files with required attributes, file patterns, dependencies, and platform specifications for iOS, macOS, tvOS, watchOS, and visionOS
- cocoapods-subspecs-organization: Organizing complex libraries into modular subspecs with proper dependency management and default subspec patterns
- cocoapods-test-specs: Adding automated tests to CocoaPods libraries using test specs that run during validation
- cocoapods-privacy-manifests: Implementing iOS 17+ privacy manifests (PrivacyInfo.xcprivacy) for App Store compliance
- cocoapods-publishing-workflow: Publishing libraries to CocoaPods Trunk with proper validation, version management, and best practices
Installation
Install via the Han marketplace:
han plugin install jutsu-cocoapods
Or install manually:
claude plugin marketplace add thebushidocollective/han
claude plugin install jutsu-cocoapods@han
Usage
Once installed, this jutsu automatically validates your CocoaPods code:
- When you finish a conversation with Claude Code
- When Claude Code agents complete their work
- Before commits (when combined with git hooks)
What Gets Validated
The hook runs in directories containing:
.podspecfiles
And validates when these files change:
*.podspec(podspec files)**/*.{swift,h,m,mm}(source files)**/*.xcprivacy(privacy manifests)
Validation Command
pod lib lint --quick --fail-fast
This ensures:
- Podspec syntax is valid
- Required attributes are present
- Source file patterns are correct
- Dependencies resolve properly
- Platform targets are compatible
- Resources are properly configured
Requirements
- CocoaPods: 1.12.0 or later (1.16.2 recommended for latest features)
- Xcode: 15.0 or later (for iOS 17+ privacy manifests)
- Ruby: 2.7 or later
- Git: For version control and publishing
Installing CocoaPods
# Using gem (recommended)
sudo gem install cocoapods
# Or using Homebrew
brew install cocoapods
# Verify installation
pod --version
Validation Workflow
Automatic Validation
When you make changes to:
- Podspec files (
*.podspec) - Source code (
*.swift,*.h,*.m,*.mm) - Privacy manifests (
*.xcprivacy)
The jutsu automatically runs validation when you stop a conversation or complete agent work.
Manual Validation
You can also run validation manually:
# Quick validation (recommended during development)
pod lib lint --quick
# Full validation (with build)
pod lib lint
# Validate for publishing
pod spec lint
Common Validation Errors
Missing Required Attributes
ERROR | [MyLibrary] Missing required attribute `license`
Fix: Add license to podspec:
spec.license = { :type => 'MIT', :file => 'LICENSE' }
Invalid Source Files Pattern
ERROR | [MyLibrary] The `source_files` pattern did not match any file
Fix: Update source_files pattern:
spec.source_files = 'Source/**/*.{swift,h,m}'
Platform Not Specified
ERROR | [MyLibrary] The platform attribute is required
Fix: Add platform deployment target:
spec.ios.deployment_target = '13.0'
Privacy Manifest Missing (iOS 17+)
WARNING | [MyLibrary] Missing privacy manifest for iOS 17+
Fix: Add privacy manifest:
spec.resource_bundles = {
'MyLibrary' => ['Resources/PrivacyInfo.xcprivacy']
}
Skipping Validation
If you need to skip validation temporarily:
# Set environment variable
HAN_SKIP_HOOKS=1
# Or disable the plugin
claude plugin disable jutsu-cocoapods
Advanced Configuration
Custom Validation Options
Create han-config.yml in your project to customize validation:
jutsu-cocoapods:
lint:
command: pod lib lint --quick --fail-fast --allow-warnings
Platform-Specific Validation
jutsu-cocoapods:
lint:
command: pod lib lint --platforms=ios --quick
Best Practices
Podspec Structure
Pod::Spec.new do |spec|
# Identity
spec.name = 'MyLibrary'
spec.version = '1.0.0'
# Metadata
spec.summary = 'Brief description'
spec.homepage = 'https://github.com/username/MyLibrary'
spec.license = { :type => 'MIT', :file => 'LICENSE' }
spec.authors = { 'Your Name' => 'email@example.com' }
# Source
spec.source = { :git => 'https://github.com/username/MyLibrary.git', :tag => spec.version.to_s }
# Platform
spec.ios.deployment_target = '13.0'
spec.swift_versions = ['5.7', '5.8', '5.9']
# Files
spec.source_files = 'Source/**/*.swift'
# Resources (use resource bundles)
spec.resource_bundles = {
'MyLibrary' => ['Resources/**/*']
}
# Dependencies
spec.dependency 'Alamofire', '~> 5.0'
end
Directory Structure
MyLibrary/
âââ MyLibrary.podspec
âââ LICENSE
âââ README.md
âââ CHANGELOG.md
âââ Source/
â âââ MyLibrary/
â âââ Core/
â âââ Extensions/
â âââ Utilities/
âââ Resources/
â âââ Assets.xcassets
â âââ PrivacyInfo.xcprivacy
âââ Tests/
â âââ MyLibraryTests/
âââ Example/
âââ MyLibraryExample.xcodeproj
Pre-Publish Checklist
- All validation passes without warnings
- Tests are included and passing
- Privacy manifest included (iOS 17+)
- README is comprehensive
- CHANGELOG is updated
- Version is tagged in git
- License file exists
Troubleshooting
CocoaPods Not Found
# Install CocoaPods
sudo gem install cocoapods
# Or update
sudo gem update cocoapods
Validation Timeout
If validation takes too long, the hook will timeout after 3 minutes. To fix:
- Use
--quickflag (already enabled by default) - Skip tests during quick validation
- Reduce dependencies
- Check for slow network (dependency downloads)
Cache Issues
If validation fails due to stale cache:
# Clear CocoaPods cache
pod cache clean --all
# Re-run validation
pod lib lint
Resources
Contributing
See CONTRIBUTING.md for guidelines on contributing to this jutsu.
License
MIT License - See LICENSE for details.
Skills
cocoapods-podspec-fundamentals
Use when creating or modifying CocoaPods podspec files. Covers required attributes, file patterns, dependencies, and platform specifications for iOS, macOS, tvOS, watchOS, and visionOS projects.
cocoapods-privacy-manifests
Use when implementing iOS 17+ privacy manifests for CocoaPods libraries. Covers PrivacyInfo.xcprivacy file creation, required reasons API declarations, and proper resource bundle integration for App Store compliance.
cocoapods-publishing-workflow
Use when publishing CocoaPods libraries to CocoaPods Trunk. Covers pod trunk registration, podspec validation, version management, and publishing best practices for successful library distribution.
cocoapods-subspecs-organization
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.
cocoapods-test-specs
Use when adding automated tests to CocoaPods libraries using test specs. Covers test spec configuration, app host requirements, and testing patterns that integrate with pod lib lint validation.
Hooks
Token Usage Notice
Hooks run automatically during Claude Code sessions and their output is sent to the model for processing. This may increase token usage and associated costs. Consider disabling hooks you don't need via han-config.yml.
Stop
Runs when the main Claude Code agent has finished responding. Can verify task completion, check quality gates, or ensure documentation requirements are met before the session ends.
SubagentStop
Runs when a Claude Code subagent (Task tool call) has finished responding. Can validate subagent outputs, enforce quality standards, or trigger additional workflows after delegated tasks complete.