In a real app
Concretely, in 0.87 and 0.88 you opt in from ios/ with npx react-native spm --deintegrate, which removes CocoaPods and adds the packages; npx react-native spm deinit reverses it. After a fresh clone or in CI, npx react-native spm plays the role of pod install, but it does not need re-running on every dependency change: the project detects the change and re-runs autolinking. A library must ship a Package.swift; npx react-native spm scaffold generates one from the podspec for those that do not. The docs are explicit: do not use it in production yet, commands and generated layout may still change.
The visible change for library maintainers is the arrival of two header-only XCFrameworks, ReactNativeHeaders and ReactNativeDependenciesHeaders, and the import rule #import <React/RCTAppDelegate.h> instead of the bare form. A podspec relying on internal header paths needs a review. On the Expo side, SDK 58 split its iOS sources into SwiftPM targets and offers an autolinking plugin in preview, but CocoaPods remains the default, supported path.
For an app project, my recommendation in October 2026: stay on CocoaPods in production, try SwiftPM on a branch to list the libraries without a Package.swift, and report blockers on RFC #0994. The team targets 0.89 to make it the default; no production switch before that.
Related terms
CocoaPods
React Native’s historical iOS dependency manager (Podfile, pod install, .xcworkspace), in maintenance mode and being replaced by SwiftPM.
XCFramework
Apple’s format for shipping a multi-platform binary framework (device, simulator, macOS) in one bundle; React Native ships its precompiled core in it.
Prebuilt (precompiled React Native)
React Native core shipped as precompiled binaries (iOS XCFrameworks, Android AARs) downloaded at build time instead of rebuilt from source.
Autolinking
The mechanism that discovers native libraries in node_modules and adds them to the Podfile and Gradle with no manual edits.