DEV Community

Cover image for # πŸͺ¦ RIP CocoaPods (2011-2026): What Every iOS Developer Must Do NOW
Nam Tran
Nam Tran

Posted on

# πŸͺ¦ RIP CocoaPods (2011-2026): What Every iOS Developer Must Do NOW

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."

β€” CocoaPods Blog, November 2024

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              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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_command field."

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

🚨 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
Enter fullscreen mode Exit fullscreen mode

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 source field β€” Get the Git URL
# Most libraries with SPM support have this file
ls Package.swift  # in the repo root
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Step 4: Add SPM Dependencies

In Xcode:

  1. File β†’ Add Package Dependencies...
  2. Enter repo URL: https://github.com/Alamofire/Alamofire.git
  3. Select version rule (e.g., "Up to Next Major")
  4. Choose target(s)
  5. 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"),
            ]
        ),
    ]
)
Enter fullscreen mode Exit fullscreen mode

Step 5: Handle Libraries WITHOUT SPM Support

Option A: Use XCFramework

// Package.swift
.binaryTarget(
    name: "SomeSDK",
    path: "Frameworks/SomeSDK.xcframework"
)
Enter fullscreen mode Exit fullscreen mode

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")
Enter fullscreen mode Exit fullscreen mode

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
============================================================
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

⚠️ 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:

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"
        ),
    ]
)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

3. Test Locally

swift build
swift test
swift package resolve
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

βœ… 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 πŸŽ‰
Enter fullscreen mode Exit fullscreen mode

πŸ’‘ 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

4. Update Your CI/CD

Before (CocoaPods):

- run: pod install
- run: xcodebuild -workspace App.xcworkspace ...
Enter fullscreen mode Exit fullscreen mode

After (SPM):

- run: xcodebuild -project App.xcodeproj -resolvePackageDependencies
- run: xcodebuild -project App.xcodeproj ...
Enter fullscreen mode Exit fullscreen mode

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...
Enter fullscreen mode Exit fullscreen mode

πŸ”— 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.     β”‚
β”‚                                        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Enter fullscreen mode Exit fullscreen mode

Thank you, CocoaPods, for 15 incredible years. πŸͺ¦πŸ’


Top comments (0)