> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.qonversion.io/llms.txt
> Use this file to discover all available pages before exploring further.

# [Dec 2026] Migration guide. CocoaPods → Swift Package Manager

> CocoaPods trunk becomes read-only on December 2, 2026. What it means for Qonversion SDK users on iOS, macOS, Flutter, React Native, Cordova, Capacitor and Unity, and how to move to Swift Package Manager.

## What happens on December 2, 2026

The CocoaPods team is turning the CocoaPods trunk (the public spec repository behind `pod install`) read-only on **December 2, 2026**, with a test run of the read-only mode on **November 1–7, 2026** — see the [CocoaPods announcement](https://blog.cocoapods.org/CocoaPods-Specs-Repo/). From that date:

* **No new pods or pod versions can be published to trunk.** New Qonversion releases will no longer reach CocoaPods trunk — **Swift Package Manager** is the supported way to receive them.
* **Existing builds keep working.** The CocoaPods CDN and the specs published before the switch stay available, so `pod install` with the versions you already use (and your `Podfile.lock`) continues to resolve. Nothing breaks on December 2 by itself — you only stop receiving updates until you migrate.

Qonversion SDKs are ready for the switch: every SDK with an iOS part — except React Native, which follows React Native's CocoaPods-based integration — can resolve its native dependency through Swift Package Manager today, with CocoaPods kept as a fallback where the host framework still needs it. Kids Mode on iOS is the one remaining CocoaPods-only build (see the table below).

## Am I affected?

| You use                                                                 | Affected?                                                                                                                                                        | What to do                                                                                                                                                                                                                       |
| ----------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| iOS / macOS / watchOS / visionOS SDK via Swift Package Manager          | No                                                                                                                                                               | Nothing.                                                                                                                                                                                                                         |
| iOS / macOS / watchOS / visionOS SDK via CocoaPods (`pod 'Qonversion'`) | Yes                                                                                                                                                              | Switch to the Swift package — [steps](#ios-macos-watchos-and-visionos).                                                                                                                                                          |
| iOS SDK via Carthage                                                    | No — Carthage builds from GitHub tags, not from trunk; it is no longer documented                                                                                | Move to the Swift package at your convenience.                                                                                                                                                                                   |
| Kids Mode on iOS (`pod 'Qonversion/NoIdfa'`)                            | Yes                                                                                                                                                              | Nothing today — keep the pod. A Swift Package Manager product for Kids Mode is in progress; the [Kids Mode page](kids-mode-sdk) will carry the instructions once it ships.                                                       |
| Flutter                                                                 | Yes, if the native side still comes through CocoaPods (Flutter \< 3.24, Swift Package Manager disabled, or `qonversion_flutter` \< 11.11.0)                      | Enable Swift Package Manager and update the plugin — [steps](#flutter).                                                                                                                                                          |
| React Native                                                            | Yes, later — no action today                                                                                                                                     | React Native integrates native modules through CocoaPods; after December 2 new Qonversion versions come from Qonversion's own spec repository (one `source` line in your `Podfile`, to be published) — [details](#react-native). |
| Cordova                                                                 | Yes, on cordova-ios 6/7 or plugin \< 7.10.0                                                                                                                      | Move to cordova-ios 8 and plugin 7.10.0+ — [steps](#cordova).                                                                                                                                                                    |
| Capacitor                                                               | Yes, if the iOS project uses CocoaPods (`ios/App/Podfile` present — the default for projects created with Capacitor 7 or older)                                  | Migrate the iOS project to Swift Package Manager — [steps](#capacitor).                                                                                                                                                          |
| Unity                                                                   | Yes, if `QonversionSandwich` still comes from the generated Podfile (SDK \< 9.10.0, EDM4U \< 1.2.189, Unity \< 2021.3, or Swift Package Manager Integration off) | Update the SDK and EDM4U, keep Swift Package Manager Integration on — [steps](#unity).                                                                                                                                           |
| Android, Web                                                            | No                                                                                                                                                               | Nothing — not related to CocoaPods.                                                                                                                                                                                              |

## iOS, macOS, watchOS and visionOS

Any 6.x version installs through Swift Package Manager — the package has shipped since 2.2.0 (2020) and the current module layout (`Qonversion` / `QonversionSwift` / `NoCodes`) since 6.0.0. Use the latest release (`from: "6.15.0"` in the docs snippet is a floor, not a requirement).

1. Remove `pod 'Qonversion'` from your `Podfile` and run `pod install`. If Qonversion was your only pod, you can remove CocoaPods from the project entirely (`pod deintegrate`) and open the `.xcodeproj` instead of the workspace.
2. In Xcode go to **File → Add Package Dependencies...**, enter `https://github.com/qonversion/qonversion-ios-sdk` and add the `Qonversion` library to your app target (or add the package to your `Package.swift` — see the [iOS installation page](ios-sdk-setup)).
3. Fix imports: the Swift package exposes three modules where the pod exposed one. `import Qonversion` keeps working for the core SDK; add `import QonversionSwift` where you call the Swift-only API (for example `QonversionSwift.shared.syncStoreKit2Purchases()`) and `import NoCodes` where you use No-Codes.
4. Build. Xcode resolves the package once and records it in `Package.resolved` (`YourApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved`, or `YourApp.xcworkspace/xcshareddata/swiftpm/Package.resolved` when you build a workspace); commit that file for reproducible builds, as you commit `Podfile.lock` today.

## Flutter

Minimum SDK version: **11.11.0** (Flutter 3.24 or newer).

1. Enable Swift Package Manager in Flutter: `flutter config --enable-swift-package-manager` (on by default since Flutter 3.44).
2. Update `qonversion_flutter` to 11.11.0 or newer and run `flutter pub get`.
3. Build with `flutter run` / `flutter build`. On Flutter 3.24–3.34 run `flutter build ios --config-only` (`flutter build macos --config-only`) before building from Xcode. See the [Flutter installation page](flutter-sdk) for the details.
4. If your `Podfile` also declared `pod 'Qonversion'`, remove it.

Add-to-app modules integrated through CocoaPods keep working through CocoaPods; Flutter 3.44+ can also integrate add-to-app modules through Swift Package Manager — see Flutter's [add-to-app documentation](https://docs.flutter.dev/add-to-app/ios/project-setup).

## React Native

React Native itself still integrates native modules through CocoaPods, so `@qonversion/react-native-sdk` keeps using `pod install`. What changes for you:

* Your existing builds are unaffected — the pod versions you use stay on the CocoaPods CDN.
* New versions of the Qonversion React Native SDK after December 2, 2026 will be published through Qonversion's own CocoaPods spec repository; on your side that is one `source` line in the `Podfile`, which we will publish on the [React Native installation page](react-native-sdk) and here as soon as the repository is live. If you use Expo with prebuild / EAS Build, the `ios/` folder is generated — that case (a config plugin) will be covered together with the `Podfile` line.
* React Native's own Swift Package Manager mode is still experimental; a Swift package for the React Native SDK is planned once React Native declares that mode production-ready.

## Cordova

Minimum plugin version: **7.10.0**.

1. Upgrade to cordova-ios 8: `cordova platform rm ios && cordova platform add ios@8`.
2. Update the plugin: `cordova plugin rm @qonversion/cordova-plugin && cordova plugin add @qonversion/cordova-plugin`. On cordova-ios 8 the plugin is installed as a Swift package and the native dependency comes from Swift Package Manager.
3. Keep the CocoaPods tool installed for now — cordova-ios 8 still writes an empty Podfile and runs `pod install`, nothing is downloaded from it. See the [Cordova installation page](cordova) for the requirements and troubleshooting.

Projects that stay on cordova-ios 6/7 keep working with the current plugin version but will not receive Qonversion updates after the switch.

## Capacitor

Minimum plugin version: **1.9.0** (Capacitor 7 or 8).

1. If your iOS project uses CocoaPods, move it to Swift Package Manager with Capacitor's assistant: `npx cap spm-migration-assistant`. The assistant warns about installed plugins that have no Swift package and leaves a couple of manual Xcode steps — follow Capacitor's [Swift Package Manager guide](https://capacitorjs.com/docs/ios/spm). New iOS projects created with Capacitor 8 (`npx cap add ios`) already use Swift Package Manager; on Capacitor 7 create them with `npx cap add ios --packagemanager SPM`.
2. Update `@qonversion/capacitor-plugin` to 1.9.0 or newer and run `npx cap sync`.
3. If your Podfile or the App project's package dependencies in Xcode also declared the native `Qonversion` SDK directly, remove it. See the [Capacitor installation page](capacitor).

## Unity

Minimum SDK version: **9.10.0**.

1. Update EDM4U to 1.2.189 or newer (`openupm add com.google.external-dependency-manager`, or the `external-dependency-manager-<version>.unitypackage` from the root of the [EDM4U repository](https://github.com/googlesamples/unity-jar-resolver) at the release tag). Unity 2021.3 or newer is required for the Swift Package Manager path.
2. Update `com.qonversion.unity` to 9.10.0 or newer.
3. Check that **Swift Package Manager Integration** is enabled in **Assets → External Dependency Manager → iOS Resolver → Settings** (it is by default). On the next iOS build EDM4U links `QonversionSandwich` into `UnityFramework` as a Swift package and leaves it out of the Podfile.
4. Optionally turn off **Allow empty Podfile generation** if Qonversion was your only pod — then no Podfile is generated and you open `Unity-iPhone.xcodeproj` instead of the workspace. If your project added the native `Qonversion` SDK itself, remove it. See the [Unity installation page](unity-sdk).

## FAQ

**Will my app stop building on December 2?** No. Existing pod versions stay on the CocoaPods CDN and your `Podfile.lock` keeps resolving. You only stop receiving Qonversion updates until you migrate.

**Do I have to update the Qonversion SDK before December 2?** For the native iOS SDK, no — any 6.x version installs through Swift Package Manager (Kids Mode excepted, see the table). The cross-platform SDKs need the version that added the Swift package path: Flutter 11.11.0+, Cordova 7.10.0+, Capacitor 1.9.0+, Unity 9.10.0+. Older versions keep working through CocoaPods; they just stop receiving updates.

**What happens if I update the SDK after December 2 while still on CocoaPods?** `pod install` fails with `None of your spec sources contain a spec satisfying the dependency: QonversionSandwich (= 7.x.y)` (cross-platform SDKs) or `... Qonversion (= 6.x.y)` (native), because the new version was never published to trunk. Either stay on your current version or move to the Swift package first — nothing else on your machine has changed.

**Can I stay on CocoaPods?** Your current versions keep installing indefinitely. New versions are not published to trunk, and Swift Package Manager is the supported way to receive them. For React Native, which cannot use Swift Package Manager yet, Qonversion will run its own spec repository (see above); whether and how other CocoaPods projects can use that repository will be documented once it is live.

**How do I know which path my project is on today?** Native apps: `pod 'Qonversion'` in the `Podfile` means CocoaPods, the package under **Package Dependencies** in Xcode means Swift Package Manager. Flutter: with Swift Package Manager the Xcode project has `FlutterGeneratedPluginSwiftPackage` under **Package Dependencies** and `qonversion_flutter` is absent from `Podfile.lock`. Capacitor: `ios/App/CapApp-SPM/Package.swift` means Swift Package Manager, `ios/App/Podfile` means CocoaPods. Cordova: `cordova platform ls` shows the cordova-ios version (8.x = Swift package). Unity: the toggle is on and `QonversionSandwich` is absent from the generated Podfile.

**Anything to change on CI?** Nothing until you migrate. On the Swift package path the build machine needs HTTPS access to `github.com`; commit `Package.resolved` and cache the checked-out packages (`xcodebuild -resolvePackageDependencies -clonedSourcePackagesDirPath <dir>` or your CI's Swift Package Manager cache step). Unity: if you turn off empty Podfile generation, build `Unity-iPhone.xcodeproj` — no workspace is produced.

**How do I check that the package is actually linked?** In Xcode, open the project navigator — the package appears under **Package Dependencies** (or in the target's **Frameworks, Libraries, and Embedded Content**), and `Package.resolved` lists `qonversion-ios-sdk` (and `sandwich-sdk` for the cross-platform SDKs) with the version. For cross-platform SDKs, also make sure the generated Podfile no longer contains `Qonversion` / `QonversionSandwich`.

**Can I keep both the pod and the package during the transition?** No — that links the SDK twice and produces duplicate symbols. Remove the pod when you add the package (the cross-platform SDKs do this for you: their CocoaPods fallback is skipped once the package path is active).

**What about the November 1–7 test run?** The CocoaPods team plans a test run of the read-only mode on November 1–7, 2026, so publishing may be refused during that week. It does not affect installs of existing versions.
