thebushidocollective/han/publishing-workflow

Claude Code and agent skill by thebushidocollective/han

Trust tier 2
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Use when publishing CocoaPods libraries to CocoaPods Trunk. Covers pod trunk registration, podspec validation, version management, and publishing best practices for successful library distribution.

Install

npx vskill@latest install thebushidocollective/han/publishing-workflow

SKILL.md

CocoaPods - Publishing Workflow

Complete guide to publishing your CocoaPods library to the official CocoaPods Trunk.

Publishing Overview

Process Steps
  1. Register with CocoaPods Trunk (one-time)
  2. Prepare your podspec
  3. Validate locally (pod lib lint)
  4. Validate for publishing (pod spec lint)
  5. Tag version in git
  6. Push to Trunk (pod trunk push)

Trunk Registration

Register Email (One-Time)
bash
# Register your email
pod trunk register email@example.com 'Your Name'
# Verify email (check inbox for verification link)
# Click link in email to activate account
Check Registration
bash
# Verify registration
pod trunk me
# Sample output:
# - Name: Your Name
# - Email: email@example.com
# - Since: January 1st, 2024
# - Pods: None

Podspec Preparation

Version Management
ruby
Pod::Spec.new do |spec|
# Semantic versioning: MAJOR.MINOR.PATCH
spec.version = '1.0.0'
# Must match git tag
spec.source = {
:git => 'https://github.com/username/MyLibrary.git',
:tag => spec.version.to_s
}
end
Required Metadata
ruby
Pod::Spec.new do |spec|
# Identity (required)
spec.name = 'MyLibrary'
spec.version = '1.0.0'
# Description (required)
spec.summary = 'Brief one-line description'
spec.description = 'Longer description with more details about what the library does'
# Links (required)
spec.homepage = 'https://github.com/username/MyLibrary'
spec.source = { :git => 'https://github.com/username/MyLibrary.git', :tag => spec.version.to_s }
# License (required)
spec.license = { :type => 'MIT', :file => 'LICENSE' }
# Authors (required)
spec.authors = { 'Your Name' => 'email@example.com' }
# Platform (required)
spec.ios.deployment_target = '13.0'
end

Local Validation

Quick Validation
bash
# Fast validation (skips build)
pod lib lint --quick
# Check for common issues without full build
Full Validation
bash
# Complete validation with build
pod lib lint
# With Swift version
pod lib lint --swift-version=5.9
# Verbose output
pod lib lint --verbose
Handle Warnings
bash
# Allow warnings (not recommended for new pods)
pod lib lint --allow-warnings
# Better: Fix warnings
pod lib lint
# Address each warning individually

Publishing Validation

Spec Lint
bash
# Validate podspec for publishing
pod spec lint
# Validates against remote repository
# Simulates real-world installation
Pre-Publishing Checklist
  • [ ] All tests pass
  • [ ] No lint warnings
  • [ ] Privacy manifest included (iOS 17+)
  • [ ] README is complete
  • [ ] LICENSE file exists
  • [ ] CHANGELOG updated
  • [ ] Version number is correct
  • [ ] Git repository is clean

Git Tagging

Create Tag
bash
# Stage all changes
git add .
# Commit changes
git commit -m "Release version 1.0.0"
# Create tag matching podspec version
git tag 1.0.0
# Push to remote with tags
git push origin main --tags
Tag Format
bash
# Semantic versioning
git tag 1.0.0 # MAJOR.MINOR.PATCH
git tag 1.0.0-beta.1 # Pre-release
git tag 1.0.0-rc.1 # Release candidate
# Must match spec.version in podspec

Publishing to Trunk

Push Pod
bash
# Push to CocoaPods Trunk
pod trunk push MyLibrary.podspec
# With specific Swift version
pod trunk push MyLibrary.podspec --swift-version=5.9
# Allow warnings (not recommended)
pod trunk push MyLibrary.podspec --allow-warnings
Successful Publish Output
Validating podspec
-> MyLibrary (1.0.0)
Updating spec repo `trunk`
-> MyLibrary (1.0.0)
--------------------------------------------------------------------------------
🎉 Congrats
🚀 MyLibrary (1.0.0) successfully published
📅 January 1st, 2024
🌎 https://cocoapods.org/pods/MyLibrary
👍 Tell your friends!
--------------------------------------------------------------------------------

Version Updates

Patch Release (Bug Fixes)
ruby
# In podspec
spec.version = '1.0.1' # Was 1.0.0
bash
# Git workflow
git add .
git commit -m "Fix: Resolve crash in background mode"
git tag 1.0.1
git push origin main --tags
pod trunk push MyLibrary.podspec
Minor Release (New Features)
ruby
# In podspec
spec.version = '1.1.0' # Was 1.0.1
bash
# Git workflow
git add .
git commit -m "Add: Support for custom themes"
git tag 1.1.0
git push origin main --tags
pod trunk push MyLibrary.podspec
Major Release (Breaking Changes)
ruby
# In podspec
spec.version = '2.0.0' # Was 1.1.0
bash
# Git workflow
git add .
git commit -m "BREAKING: Refactor API for modern Swift"
git tag 2.0.0
git push origin main --tags
pod trunk push MyLibrary.podspec

Managing Multiple Pods

List Your Pods
bash
# View all your published pods
pod trunk me
# Shows:
# - Pods:
# - MyLibrary
# - MyOtherLibrary
Add Contributors
bash
# Add team member to pod
pod trunk add-owner MyLibrary email@example.com
# Remove contributor
pod trunk remove-owner MyLibrary email@example.com

Deprecation

Deprecate Old Version
bash
# Deprecate specific version
pod trunk deprecate MyLibrary --version=1.0.0
# Deprecate entire pod
pod trunk deprecate MyLibrary
Deprecation with Replacement
ruby
# In podspec
spec.deprecated = true
spec.deprecated_in_favor_of = 'NewAwesomeLibrary'

Common Issues

Issue: Tag Doesn't Match
ERROR | [MyLibrary] The repo has no tag for version 1.0.0

Solution:

bash
# Create and push tag
git tag 1.0.0
git push origin --tags
Issue: Validation Fails
ERROR | [MyLibrary] xcodebuild: Returned an unsuccessful exit code

Solution:

bash
# Run detailed validation
pod lib lint --verbose
# Fix errors shown in output
# Re-validate until clean
Issue: Missing License
ERROR | [MyLibrary] Missing required attribute `license`

Solution:

ruby
# Add to podspec
spec.license = { :type => 'MIT', :file => 'LICENSE' }
bash
# Create LICENSE file in repo root

Best Practices

Pre-Publish Testing
bash
# 1. Test in example app
cd Example
pod install
# Run app, verify functionality
# 2. Test in real project
# Create test project, add pod from local path
pod 'MyLibrary', :path => '../MyLibrary'
# 3. Validate
pod lib lint
pod spec lint
Version Numbering
ruby
# Follow semantic versioning strictly
spec.version = '1.0.0' # Initial release
spec.version = '1.0.1' # Bug fix
spec.version = '1.1.0' # New feature
spec.version = '2.0.0' # Breaking change
CHANGELOG
markdown
# Changelog
## [1.1.0] - 2024-01-15
### Added
-Custom theme support
-Dark mode compatibility
### Fixed
-Memory leak in background processing
## [1.0.0] - 2024-01-01
-Initial release
README
markdown
# MyLibrary
Brief description of library.
## Installation
\`\`\`ruby
pod 'MyLibrary', '~> 1.0'
\`\`\`
## Usage
\`\`\`swift
import MyLibrary
let library = MyLibrary()
library.doSomething()
\`\`\`
## Requirements
-iOS 13.0+
-Swift 5.7+
## License
MyLibrary is available under the MIT license.

Anti-Patterns

Don't

❌ Publish without testing

bash
pod trunk push --skip-tests # Risky

❌ Use --allow-warnings for initial release

bash
pod trunk push --allow-warnings # Fix warnings instead

❌ Forget to tag git

bash
# Missing git tag - publish will fail
pod trunk push

❌ Skip version bump

ruby
# Still version 1.0.0 after changes - confusing
spec.version = '1.0.0'
Do

✅ Test thoroughly before publishing

bash
pod lib lint
pod spec lint
# Test in real project

✅ Fix all warnings

bash
pod lib lint
# Address warnings

✅ Always tag git

bash
git tag 1.0.0
git push --tags

✅ Bump version for every release

ruby
spec.version = '1.0.1' # Incremented

Complete Publishing Example

bash
# 1. Prepare podspec
vim MyLibrary.podspec
# Update version to 1.0.0
# 2. Update CHANGELOG
vim CHANGELOG.md
# Document changes
# 3. Commit and tag
git add .
git commit -m "Release 1.0.0: Initial public release"
git tag 1.0.0
git push origin main --tags
# 4. Validate locally
pod lib lint
# 5. Validate for publishing
pod spec lint
# 6. Publish
pod trunk push MyLibrary.podspec
# 7. Verify
pod search MyLibrary
# Should show your new pod

Related Skills

  • cocoapods-podspec-fundamentals
  • cocoapods-subspecs-organization
  • cocoapods-test-specs
  • cocoapods-privacy-manifests

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
130
Repository forks
14
7-day trend score
24

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 5 Apr 2026, 7 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/thebushidocollective/han/publishing-workflow/badge)](https://verified-skill.com/skills/thebushidocollective/han/publishing-workflow)

Something wrong with this skill or its page? Tell us.