After 15 years of faithful service, CocoaPods is officially dying.
On December 2, 2026, the CocoaPods trunk will become permanently read-only. No new pods. No updates. Game over.
If you're an iOS developer, React Native developer, or Flutter developer β this affects YOU. Here's your complete survival guide.
π’
| What | Details |
|---|---|
| π Death Date | December 2, 2026 |
| β What Stops | New pods, updates to existing pods |
| β What Still Works | Existing projects (for now) |
| π― Your Action | Migrate to Swift Package Manager |
| β° Time Left | ~11 months |
π° The Official Announcement
From Orta Therox, CocoaPods maintainer:
"In two years we plan to turn CocoaPods trunk to be read-only. At that point, no new versions or pods will be added to trunk."
This isn't speculation. This is official.
π The Complete Timeline
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β COCOAPODS SUNSET TIMELINE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
Aug 2024 β Maintenance mode announced β
β β
Nov 2024 β Read-only plan confirmed β
β β
May 2025 β prepare_command blocked (security) β
β β³ Mid-late 2025β First mass notification to contributors β
β β³ Sept-Oct 2026β Final warning notification β
β β³ Nov 1-7 2026 β Test run of read-only mode β
β π Dec 2, 2026 β TRUNK PERMANENTLY READ-ONLY β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Why December 2nd? It's the Wednesday after American Thanksgiving β chosen so developers won't be in "rush mode."
π€ Why Is CocoaPods Dying?
1. Swift Package Manager Won
When Apple introduced SPM in 2015, CocoaPods' fate was sealed:
+ β
SPM: Built into Xcode
+ β
SPM: No Ruby dependency
+ β
SPM: Apple's official support
+ β
SPM: Better security model
+ β
SPM: Faster resolution
- β CocoaPods: External tool
- β CocoaPods: Ruby dependency hell
- β CocoaPods: Community maintained
- β CocoaPods: Security vulnerabilities
- β CocoaPods: Slower builds
2. Maintainer Burnout
From the official blog:
"Members of the core team have individually had reasons for continual maintenance: a sense of duty, being employed to work on libraries or apps which use CocoaPods... However, with time β these links become more tenuous too, jobs change, people move to new ecosystems."
The team is tired. And rightfully so after 15 years.
3. Security Nightmares
In May 2025, CocoaPods had to block the prepare_command field because security researchers kept exploiting it:
"We've had enough security researchers abusing scripting capabilities in CocoaPods that we are now introducing a block on allowing new CocoaPods to use the
prepare_commandfield."
4. The Irony: Cross-Platform Kept It Alive
Here's the twist:
"If CocoaPods' only audience were native Cocoa developers, CocoaPods' usage should be on the decline. The popularity of React Native and Flutter have ensured that most metrics of usage/traffic have been steadily rising over time."
React Native and Flutter developers β you're the reason CocoaPods lasted this long!
β What Will STILL Work After Dec 2026
Don't panic completely. These will continue working:
// β
STILL WORKS
pod install // Existing pods
pod update // To versions already on trunk
// Pods from GitHub/jsDelivr
// Private spec repositories
// Vendored dependencies (from npm)
Why? The infrastructure stays online as long as GitHub and jsDelivr exist.
β What Will BREAK
// β BROKEN
pod trunk push MyAwesomePod // New pods rejected
pod trunk push --version 2.0 // Updates rejected
// Security patches via trunk
// New library releases
π¨ Who Should Be MOST Worried?
π΄ HIGH PRIORITY β Migrate NOW
| Developer Type | Why You're at Risk |
|---|---|
| Library Maintainers | Your users need SPM support yesterday |
| Enterprise Teams | Security updates = critical |
| New Projects | Don't start with dead tech |
| React Native iOS | Google Maps dropping CocoaPods Q2 2026 |
π‘ MEDIUM PRIORITY β Plan Your Migration
| Developer Type | Your Situation |
|---|---|
| Existing Production Apps | Works now, but plan ahead |
| Flutter Developers | Flutter team working on SPM |
| Private Spec Repo Users | More runway, but still migrate |
π’ LOW PRIORITY β You Have Time
| Developer Type | Why You're OK |
|---|---|
| Fully Vendored Dependencies | Not dependent on trunk |
| Internal-only Libraries | Private repos keep working |
π οΈ Complete Migration Guide: CocoaPods β SPM
Step 1: Audit Your Dependencies
First, list everything you're using:
# See all your pods
cat Podfile | grep "pod '"
# Or from Podfile.lock
cat Podfile.lock | grep " -" | head -20
Create a migration spreadsheet:
| Pod Name | Version | SPM Support? | Alternative |
|---|---|---|---|
| Alamofire | 5.8.0 | β Yes | β |
| Firebase | 10.x | β Yes | β |
| Charts | 5.0 | β Yes | β |
| SomeLegacyPod | 1.2 | β No | Fork it |
Step 2: Check SPM Availability
Quick resources:
- Swift Package Index β Search 6,000+ packages
- GitHub README β Look for "Swift Package Manager" section
- Podspec
sourcefield β Get the Git URL
# Most libraries with SPM support have this file
ls Package.swift # in the repo root
Step 3: Remove CocoaPods (The Clean Way)
# Install deintegration tools
sudo gem install cocoapods-deintegrate cocoapods-clean
# Navigate to your project
cd /path/to/your/project/ios
# Remove CocoaPods integration
pod deintegrate
# Clean cache
pod cache clean --all
# Delete leftover files
rm -rf Pods/
rm Podfile
rm Podfile.lock
rm -rf *.xcworkspace
# Now open .xcodeproj (not workspace!)
open YourApp.xcodeproj
Step 4: Add SPM Dependencies
In Xcode:
- File β Add Package Dependencies...
- Enter repo URL:
https://github.com/Alamofire/Alamofire.git - Select version rule (e.g., "Up to Next Major")
- Choose target(s)
- Click Add Package
Or via Package.swift (for libraries):
// swift-tools-version:5.9
import PackageDescription
let package = Package(
name: "MyAwesomeApp",
platforms: [
.iOS(.v15),
.macOS(.v12)
],
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire.git",
from: "5.8.0"),
.package(url: "https://github.com/firebase/firebase-ios-sdk.git",
from: "10.0.0"),
.package(url: "https://github.com/realm/realm-swift.git",
from: "10.45.0"),
],
targets: [
.target(
name: "MyAwesomeApp",
dependencies: [
"Alamofire",
.product(name: "FirebaseAnalytics", package: "firebase-ios-sdk"),
.product(name: "RealmSwift", package: "realm-swift"),
]
),
]
)
Step 5: Handle Libraries WITHOUT SPM Support
Option A: Use XCFramework
// Package.swift
.binaryTarget(
name: "SomeSDK",
path: "Frameworks/SomeSDK.xcframework"
)
Option B: Fork and Add SPM Support
// Use your fork temporarily
.package(url: "https://github.com/YOUR_USERNAME/legacy-lib.git",
branch: "add-spm-support")
Then submit a PR to the original repo!
Option C: Vendor the Code
Copy source files directly into your project. Check the license first!
π₯ React Native Developers: Special Section
The Deprecation Warning You've Seen
==================== DEPRECATION NOTICE =====================
Calling `pod install` directly is deprecated in React Native
============================================================
This is intentional. React Native is preparing for the post-CocoaPods world.
New Commands to Use
# β OLD WAY (deprecated)
cd ios && pod install
# β
NEW WAY
yarn ios
# or
npx react-native run-ios
# or (Expo)
npx expo run:ios
React Native 0.75+ SPM Integration
React Native 0.75 introduced spm_dependency helper:
# In your library's .podspec
Pod::Spec.new do |s|
s.name = "MyRNLibrary"
# ...
spm_dependency(s,
url: 'https://github.com/example/package.git',
requirement: {kind: 'upToNextMajorVersion', minimumVersion: '1.0.0'},
products: ['SomeProduct']
)
end
β οΈ Google Maps SDK Warning
Google announced:
"Starting with version 11.0 of all Google Maps Platform iOS SDKs, new versions will not be released on CocoaPods." (Q2 2026)
If you use react-native-maps with Google provider β watch this closely.
Alternative: Use Apple Maps (no provider prop needed).
π± Flutter Developers: What to Know
Flutter also relies on CocoaPods for iOS. The Flutter team is actively working on SPM:
- Track progress: flutter/flutter#126005
- Many plugins already support SPM
- Migration tools in development
For now: Keep using CocoaPods but monitor Flutter's SPM progress.
π¦ For Library Maintainers: Add SPM Support TODAY
Your users need this. Here's how:
1. Create Package.swift
// swift-tools-version:5.9
import PackageDescription
let package = Package(
name: "MyAwesomeLibrary",
platforms: [
.iOS(.v13),
.macOS(.v10_15),
.tvOS(.v13),
.watchOS(.v6)
],
products: [
.library(
name: "MyAwesomeLibrary",
targets: ["MyAwesomeLibrary"]
),
],
targets: [
.target(
name: "MyAwesomeLibrary",
path: "Sources"
),
.testTarget(
name: "MyAwesomeLibraryTests",
dependencies: ["MyAwesomeLibrary"],
path: "Tests"
),
]
)
2. Reorganize Your Files
SPM expects this structure:
MyLibrary/
βββ Package.swift # NEW
βββ Sources/
β βββ MyAwesomeLibrary/
β βββ File1.swift
β βββ File2.swift
β βββ Resources/ # If needed
βββ Tests/
β βββ MyAwesomeLibraryTests/
β βββ Tests.swift
βββ MyLibrary.podspec # Keep for backward compatibility
3. Test Locally
swift build
swift test
swift package resolve
4. Tag a Release
git add Package.swift Sources/ Tests/
git commit -m "Add Swift Package Manager support"
git tag 2.0.0
git push origin main --tags
β Migration Checklist
Copy this for your project:
## Pre-Migration
- [ ] List all CocoaPods dependencies
- [ ] Check SPM support for each
- [ ] Find alternatives for unsupported libs
- [ ] Create backup branch
- [ ] Notify team members
## Migration
- [ ] Run `pod deintegrate`
- [ ] Delete Pods/, Podfile, Podfile.lock, *.xcworkspace
- [ ] Open .xcodeproj
- [ ] Add each dependency via SPM
- [ ] Update import statements if needed
- [ ] Fix build errors
## Post-Migration
- [ ] Run all unit tests
- [ ] Run all UI tests
- [ ] Test on real devices (iPhone + iPad)
- [ ] Test CI/CD pipeline
- [ ] Update README.md
- [ ] Update onboarding docs
- [ ] Celebrate π
π‘ Pro Tips from the Trenches
1. Don't Wait Until November 2026
Library maintainers won't magically add SPM support at the last minute. Start now.
2. Migrate One Dependency at a Time
# Podfile - Gradual migration
target 'MyApp' do
# Already migrated to SPM:
# - Alamofire
# - Firebase
# Still on CocoaPods:
pod 'SomeLegacyLib', '~> 1.0'
end
3. Test on Fresh Clones
SPM resolves differently than CocoaPods. Always test:
# Simulate a new developer
git clone your-repo fresh-clone
cd fresh-clone
open Project.xcodeproj
# Build and run
4. Update Your CI/CD
Before (CocoaPods):
- run: pod install
- run: xcodebuild -workspace App.xcworkspace ...
After (SPM):
- run: xcodebuild -project App.xcodeproj -resolvePackageDependencies
- run: xcodebuild -project App.xcodeproj ...
5. For New Projects: SPM Only
Starting a new project in 2025+? Don't even install CocoaPods.
# Just use Xcode's built-in package management
# File β Add Package Dependencies...
π Essential Resources
| Resource | Link |
|---|---|
| Official Announcement | blog.cocoapods.org |
| SPM Documentation | swift.org/package-manager |
| Swift Package Index | swiftpackageindex.com |
| Apple: Adding Packages | developer.apple.com |
| RN New Architecture | reactnative.dev |
π¬ Conclusion
CocoaPods was a game-changer. It transformed iOS development by making dependency management accessible to everyone. Before CocoaPods, integrating third-party libraries was a nightmare of manual file copying and build configuration.
But technology evolves. Swift Package Manager is:
- Faster
- More secure
- Native to Xcode
- Backed by Apple
The clock is ticking. December 2, 2026 will arrive faster than you think.
ββββββββββββββββββββββββββββββββββββββββββ
β β
β Time remaining: ~11 months β
β β
β Start your migration TODAY. β
β β
β Your future self will thank you. β
β β
ββββββββββββββββββββββββββββββββββββββββββ
Thank you, CocoaPods, for 15 incredible years. πͺ¦π
Top comments (0)