Free tool · React Native 0.87 · iOS
Migrate React Native from CocoaPods to Swift Package Manager
CocoaPods stops accepting new pods on December 2, 2026. Find out in 2 minutes what stands between your app and Swift Package Manager.
# Before: Ruby + CocoaPods
bundle exec pod install
# After: Xcode only
cd ios
npx react-native spm --deintegrate
✓ Package.swift injected
✓ Podfile removed
✓ .xcodeproj kept in placeThe CocoaPods deadline
Your app keeps building after December 2. The risk is slower: every native SDK that moves to Swift Package Manager only stops shipping fixes and security patches to your Podfile.
Aug 11, 2026
React Native 0.87
Experimental, opt-in Swift Package Manager support for iOS.
Oct 2026
Firebase leaves CocoaPods
New Firebase iOS SDK versions ship through SPM only.
Nov 1–7, 2026
Read-only test run
CocoaPods trunk is temporarily frozen. No pod can be published.
Dec 2, 2026
Trunk goes read-only
No new pod versions, ever. Existing ones still install.
12 checks · 2 minutes
Your SPM readiness check
Answer No, Unknown or Yes. Your score shows up instantly.
01React Native
0/3Your app runs React Native 0.87 or later (or the upgrade is planned this quarter). Swift Package Manager support does not exist before 0.87.
You consume the prebuilt React Native XCFrameworks and do not patch React Native native code (no patch-package on ReactCommon or React-Core).
Your AppDelegate and native modules use framework-style includes like #import <React/RCTAppDelegate.h>, not bare-form #import <RCTAppDelegate.h>.
How the migration works in React Native 0.87
React Native 0.87 injects Swift package references into your existing .xcodeproj. Signing, capabilities and build phases stay untouched. No Ruby, no Bundler, no pod install.
- Upgrade to React Native 0.87.
- Run the migration from the
iosfolder. - Generate a
Package.swiftfor each library that lacks one. - Replace
pod installwithnpx react-native spmin CI and after a fresh clone.
The full design lives in RFC #994.
# Migrate from CocoaPods
cd ios
npx react-native spm --deintegrate
# Library without Package.swift
npx react-native spm scaffold
# Fresh clone or CI (replaces pod install)
npx react-native spm
# Roll back
npx react-native spm deinitWhat blocks a migration today
SPM support is experimental and not production-ready yet. These are the issues we expect on real codebases.
Swift + C++ libraries
SPM cannot mix Swift and C++ in one target. Nitro modules, VisionCamera and MMKV are affected until they split their targets.
Podspec script phases
Libraries running Ruby or shell logic from their podspec need an SPM plugin or a new build step.
Bare header imports
Headers now come from ReactNativeHeaders.xcframework. #import <RCTAppDelegate.h> becomes #import <React/RCTAppDelegate.h>.
Podfile post_install hooks
Build settings patched in Ruby have no SPM equivalent. Move them to the Xcode project or drop them.
Build from source
The first phase consumes prebuilt XCFrameworks only. Patching React Native native code means staying on CocoaPods.
Expo
Available in expo@canary only. Managed and CNG apps should wait for a stable SDK.
Also on your list before the next release? Run the free React Native security audit.
Frequently asked questions
No. CocoaPods trunk becomes read-only, so existing pod versions keep installing. What stops is new releases: SDKs that move to Swift Package Manager only (Firebase already did) will no longer ship fixes or security patches through CocoaPods.
Migrating a production app?
We map every native dependency, flag the blockers and hand you a migration plan you can ship before your SDKs leave CocoaPods.
Discover the full audit