Muhittin ÇamdalıCocoaPods trunk, the service that accepts new podspecs, stops accepting them on December 2, 2026. A...
CocoaPods trunk, the service that accepts new podspecs, stops accepting them on December 2, 2026. A trial run of read-only mode comes first, from November 1 to 7. Both dates are in the CocoaPods announcement, which I re-read today.
Most of the discussion I see is about whether builds break. They don't, and the announcement says so. The more useful question is a different one: which of the pods in your lockfile will never get another release, and where will their next release come from?
The plan has three parts:
pod trunk push, that week is when you find out what depends on it.pod install keeps resolving the versions already published.So nothing in your app changes on December 2. What changes is the future: a pod that only ships through trunk gets no new version after that date. A bug fix or a security fix released later has to reach you some other way, usually as a Swift package.
One publisher is ahead of the deadline. The Firebase migration page says Firebase "will stop publishing new versions to CocoaPods in October 2026", and that "Firebase 12 is the final major version published to CocoaPods." Versions 12 and earlier stay installable.
This matters for apps that never list Firebase in their own Podfile. GoogleUtilities, nanopb, PromisesObjC and GoogleDataTransport usually arrive as Firebase dependencies, and they stop with it.
To see what this looks like on an actual project, I ran a small open-source CLI I wrote, podexit, on the native iOS fixture in its repository: a Podfile with Alamofire, Kingfisher, SnapKit, Lottie, MBProgressHUD, Firebase Analytics and Crashlytics, Google Sign-In, a git pod and a local path pod. The lockfile was resolved by CocoaPods 1.16.2. In the project folder:
npx @mcamdali/podexit
Excerpt of today's output (podexit 0.1.2, exit code 0):
podexit 0.1.2 · CocoaPods trunk goes read-only on 2026-12-02 (trial run 2026-11-01 to 2026-11-07)
Builds keep working: pods already on trunk stay installable after December 2, 2026. Trunk only stops accepting new versions.
Podfile.lock native iOS app · 28 pods, 10 in the Podfile
POD LOCKED LATEST ON TRUNK UPDATES SWIFT PACKAGE PULLED IN BY
FirebaseAnalytics 12.19.0 12.19.0 capped at 12.x yes (Firebase)
GoogleAppMeasurement 12.19.0 12.19.0 capped with Firebase unknown FirebaseAnalytics
GoogleUtilities 8.1.4 8.1.5 capped with Firebase yes AppCheckCore +8
Alamofire 5.12.2 5.12.2 frozen after Dec 2 yes
GoogleSignIn 9.2.0 10.1.0 frozen after Dec 2 yes
Kingfisher 8.13.0 8.14.0 frozen after Dec 2 yes
GTMSessionFetcher 3.5.0 5.3.1 frozen after Dec 2 yes GTMAppAuth +1
11 frozen on trunk · 15 capped by the publisher · 2 not affected
25 pods with a Swift package · 0 without · 2 unknown
Four things in that table are worth reading slowly.
The Podfile lists 10 pods; the lockfile has 28. Most of the exposure is in transitive pods. GoogleUtilities is pulled in by nine others.
"Capped" and "frozen" are different dates. The 15 Firebase pods and their dependencies stop at 12.x from October 2026. The 11 frozen pods (Alamofire, Kingfisher, SnapKit and others) can still get a release on trunk until December 2, then no more.
Some locked versions are already far behind. GoogleSignIn is locked at 9.2.0 while trunk has 10.1.0; GTMSessionFetcher at 3.5.0 against 5.3.1. For those pods, moving to Swift Package Manager is also a major-version upgrade. Plan the testing time for it.
"Unknown" comes with a reason. For GoogleAppMeasurement, the JSON report says: "The podspec points to dl.google.com, not a GitHub repository." podexit checks for a Package.swift only in GitHub repositories, so anything hosted elsewhere is marked unknown instead of guessed.
The two "not affected" pods are the git pod and the local path pod. They never came from trunk, so the switch does not touch them.
pod trunk push. The trial week is the announcement's chance for that automation to fail early.Package.swift, also at the version you lock where it says so. It does not prove the package offers every subspec you use; check the products when you move.--offline uses the cache only.Run these in the folder that has your Podfile.lock, or in a Flutter or React Native app root; podexit also looks in ios/ and example/ios/. Node.js 22.12 or later is required.
npx @mcamdali/podexit
npx @mcamdali/podexit --format markdown --output podexit.md
npx @mcamdali/podexit --offline
The second command writes a Markdown report you can paste into a pull request; it starts with the trial-run dates and the summary line ("11 frozen on trunk · 15 capped by the publisher · 2 not affected" for the fixture above).
If your app also has to build with the iOS 27 SDK, the companion piece "Built with the iOS 27 SDK, a UIKit app without a scene stops at launch" covers the other deadline.
Repository: github.com/muhittincamdali/podexit (MIT).
Muhittin Camdali is a mobile engineer (iOS, Flutter, React Native) and the author of podexit.