Flutter iOS Build Errors: 16 pod install and Build Fixes
Most Flutter iOS build errors come from pod install and the deployment target: no Podfile platform, plugins needing newer iOS, stale specs. 16 fixes.
Most Flutter iOS build errors come from pod install or the minimum deployment target. Typically the Podfile has no platform line, a plugin needs a newer iOS version, the local Specs index is stale, or pod install ran before flutter pub get. This article covers 16 common errors as error text, cause and fix. Find your error in the summary table, then jump to its section. Error text is taken from CocoaPods, the Flutter templates and Apple documentation, as of October 2026.
Which step is the Flutter iOS build failing at?
The same plugin problem looks completely different depending on the stage where it fails. Pin down the stage first and you cut the search in half.
| Stage | Typical symptom | Check first |
|---|---|---|
pod install |
Output has lines starting with [!] |
Podfile, deployment target, network, CocoaPods version |
| Compile | Missing modules or headers, or a Run Script phase fails | Whether you built Runner.xcworkspace, whether the Flutter environment is ready |
| Signing and linking | Errors about certificates, provisioning profiles or architectures | The certificate folder, binaries bundled with plugins |
| Upload to App Store Connect | An email with an ITMS code | Privacy manifests of third-party SDKs |
How do you find your error among the 16?
| # | Error (excerpt) | Cause | Fix |
|---|---|---|---|
| 1 | Generated.xcconfig must exist |
Flutter’s iOS config hasn’t been generated | Run flutter pub get before pod install |
| 2 | FLUTTER_ROOT not found in … |
Generated.xcconfig is incomplete | Delete it and run flutter pub get again |
| 3 | Automatically assigning platform … because no platform was specified |
The platform line in the Podfile is commented out | Uncomment it and set a version |
| 4 | required a higher minimum deployment target |
A plugin needs a newer iOS version than the project | Raise the deployment target in the Podfile and Runner |
| 5 | out-of-date source repos |
The local Specs index is stale | pod install --repo-update |
| 6 | CDN: trunk URL couldn't be downloaded |
The CocoaPods CDN can’t be reached | Retry, or use a closer mirror |
| 7 | Unable to find compatibility version string for object version |
CocoaPods is too old to read the newer project format | Update CocoaPods |
| 8 | Unable to determine Swift version for the following pods |
Runner has no SWIFT_VERSION | Set a Swift version on Runner |
| 9 | transitive dependencies that include statically linked binaries |
A dynamic framework depends on a static library | Link statically, or update the plugin |
| 10 | The sandbox is not in sync with the Podfile.lock |
Podfile.lock changed after a pull | Run pod install again |
| 11 | module 'xxx' not found / no such module |
You built the .xcodeproj, or pods aren’t installed |
Install pods and build the .xcworkspace |
| 12 | 'Flutter/Flutter.h' file not found, Run Script phase fails |
The Flutter environment isn’t ready | Run doctor again with the project path |
| 13 | No signing certificate matching "…" found |
The certificate folder has no matching certificate | Add the certificate, or change signing settings |
| 14 | Linker says a library isn’t built for arm64 iOS devices | A plugin’s bundled binary lacks the device architecture | Update the plugin, check EXCLUDED_ARCHS |
| 15 | requires minimum platform version … but this target supports … |
An SPM plugin needs a newer iOS version | Raise Runner’s deployment target |
| 16 | ITMS-91061 email | A third-party SDK has no privacy manifest | Update the plugin to a version with a privacy manifest |
How do you fix errors during pod install?
1. Generated.xcconfig must exist
1[!] Invalid `Podfile` file: .../ios/Flutter/Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first
The Podfile Flutter generates reads ios/Flutter/Generated.xcconfig to find the Flutter SDK. That file isn’t checked into version control, so a freshly cloned project, or one where you ran flutter clean, doesn’t have it.
Run flutter pub get in the project root first, then pod install in the ios folder. When you use KXBuild on Windows or Linux, run doctor with the project path first, then pod install. See Build with KXBuild at the end.
2. FLUTTER_ROOT not found
1FLUTTER_ROOT not found in .../ios/Flutter/Generated.xcconfig. Try deleting Generated.xcconfig, then run flutter pub get
The file exists but its contents are wrong. This usually happens after Flutter moves to a different install location, or when someone committed Generated.xcconfig from another computer. Delete the file as the message says and run flutter pub get again. Check .gitignore while you’re at it so the file doesn’t get committed.
3. The Podfile doesn’t set a platform
1[!] Automatically assigning platform `iOS` with version `13.0` on target `Runner` because no platform was specified. Please specify a platform for this target in your Podfile.
The first line of the Podfile from the Flutter template is a commented-out # platform :ios, '…'. Without it, CocoaPods picks a version on its own and prints this warning. The version number varies by project. The warning doesn’t stop the install, but adding plugins later easily leads to error 4.
Open ios/Podfile, uncomment the line and set a version that matches Runner’s deployment target.
1platform :ios, '15.0'
According to Flutter’s supported platforms page, as of October 2026 Flutter supports iOS 15 and later and no longer supports iOS 14 or earlier, so use 15.0 or higher.
4. A plugin requires a higher minimum deployment target
1[!] CocoaPods could not find compatible versions for pod "xxx":
2 ...
3Specs satisfying the `xxx (...)` dependency were found, but they required a higher minimum deployment target.
The plugin, or a native library it depends on, declares a minimum iOS version higher than the platform in your Podfile.
- Look up the required version on the plugin’s pub.dev page or in its
ios/*.podspec. - Set
platform :iosin the Podfile to at least that version. - Set Runner’s
IPHONEOS_DEPLOYMENT_TARGETto the same value. - Run
pod installagain.
In a Flutter project, Runner’s deployment target is set at the project level. On Windows or Linux, change it in the Deployment Info section of the Project Settings Editor, or with a command.
1kxbuild project add-setting -k IPHONEOS_DEPLOYMENT_TARGET -v 15.0 -P .\ios\Runner.xcodeproj
Don’t go the other way and downgrade the plugin to an old version to keep an old iOS target. Old versions often lack a privacy manifest, and you run into error 16 at upload.
5. Stale Specs index
1[!] CocoaPods could not find compatible versions for pod "..."
2You have either:
3 * out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`.
A plugin was just updated and needs a native library version newer than your locally cached index, so CocoaPods can’t find it.
1cd ios
2pod install --repo-update
If that doesn’t help, check whether Podfile.lock pins an old version, and run pod update <pod name> for the pod in the error.
6. CDN download fails
1[!] CDN: trunk URL couldn't be downloaded: https://cdn.cocoapods.org/... Response: ...
You may also see CDN: trunk Repo update failed. The connection to the CocoaPods CDN timed out or was interrupted. It’s a network problem, not a project configuration problem.
Retry once. If the network keeps failing, add a source line at the top of the Podfile that points to a closer mirror of the Specs repo. CocoaPods trunk becomes read-only on December 2, 2026. Published versions can still be installed. See Migrate from CocoaPods to SPM for details.
7. CocoaPods is too old
1[Xcodeproj] Unable to find compatibility version string for object version `70`.
The error comes from the part of CocoaPods that reads project files. Runner.xcodeproj was saved by a newer Xcode, and the project format version (70 here, which corresponds to Xcode 16) is newer than your CocoaPods understands. This is most common when a teammate opened the project in a newer Xcode on a Mac.
Update CocoaPods to the latest version. With KXBuild, run kxbuild doctor once, then check the version with pod --version.
8. Swift version can’t be determined
1[!] Unable to determine Swift version for the following pods:
2
3- `xxx` does not specify a Swift version and none of the targets (`Runner`) integrating it have the `SWIFT_VERSION` attribute set. Please contact the author or set the `SWIFT_VERSION` attribute in at least one of the targets that integrate this pod.
An older plugin’s podspec doesn’t declare a Swift version, and Runner doesn’t set SWIFT_VERSION either. This is common in older Flutter projects created from the Objective-C template.
Set a Swift version on Runner, then run pod install again.
1kxbuild project add-setting -k SWIFT_VERSION -v 5.0 -t Runner -P .\ios\Runner.xcodeproj
9. Static library and dynamic framework conflict
1[!] The 'Pods-Runner' target has transitive dependencies that include statically linked binaries: (...)
The Flutter template’s Podfile has use_frameworks!, so every pod is built as a dynamic framework, but a native library one plugin depends on only ships as a static library.
There are two fixes. Update the plugin, since many SDKs now ship an xcframework. Or switch to static linking in the Podfile.
1target 'Runner' do
2 use_frameworks! :linkage => :static
3 flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
4end
A similar error is The following Swift pods cannot yet be integrated as static libraries, which says a library a Swift pod depends on doesn’t define a module. As the message suggests, add use_modular_headers! to the Podfile, or add :modular_headers => true to just that dependency.
10. The sandbox is out of sync with Podfile.lock
1error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
This appears during the build, in the “[CP] Check Pods Manifest.lock” script. Podfile.lock changed when you pulled, but your local Pods folder is still the old one. Run pod install again in the ios folder.
How do you fix errors during build and signing?
11. Plugin module not found
1.../ios/Runner/GeneratedPluginRegistrant.m: fatal error: module 'image_picker_ios' not found
In Swift code it reads no such module 'xxx'. The cause is almost always one of two things. You added a plugin with native code and didn’t run pod install, or you built Runner.xcodeproj.
Run pod install in the ios folder, and from then on always build ios\Runner.xcworkspace.
12. Flutter.h not found, or the Run Script phase fails
1fatal error: 'Flutter/Flutter.h' file not found
It can also show up as a “Run Script” build phase that exits with an error. The environment for compiling the Flutter framework and Dart code isn’t ready. This is common right after switching Flutter versions, right after pulling a project, or when you skipped doctor on Windows or Linux.
Run doctor again with the project path, then build.
1kxbuild doctor D:\work\myflutterapp
13. Signing certificate not found
1No signing certificate matching "…" found
Runner in the Flutter template has no development team set, so this shows up most often after you switch computers or certificates. When you build with KXBuild, the certificate folder needs the matching .p12 and provisioning profile. Add them and retry, or use -D CODE_SIGN_IDENTITY=… -D DEVELOPMENT_TEAM=… to switch to a certificate already in the folder. The provisioning profile must include Runner’s Bundle ID and the iPhone’s UDID. See Certificates and signing and 16 common iOS code signing and .ipa install errors, and how to fix them.
14. arm64 architecture problems
The linker reports something like “an object file in this library was built for the iOS Simulator” or “missing arm64 architecture”. An iPhone only needs arm64, so the problem is usually a prebuilt library bundled with a plugin.
- The plugin only ships simulator or old-architecture binaries. Update the plugin and check that its xcframework contains an
ios-arm64folder. - EXCLUDED_ARCHS copied into the Podfile. Some post_install snippets passed around online exclude arm64. Check
EXCLUDED_ARCHS[sdk=iphoneos*]. For devices it must not contain arm64. Flutter’s own configuration only excludes armv7 there. - Only simulator arm64 is excluded.
EXCLUDED_ARCHS[sdk=iphonesimulator*]only affects the simulator. It has nothing to do with device builds and isn’t the cause of this error.
15. An SPM plugin needs a newer iOS version
1Target Integrity (Xcode): The package product 'plugin_name_ios' requires minimum platform version 14.0 for the iOS platform, but this target supports 12.0
This is the error shown in Flutter’s Swift Package Manager guide. Since Flutter 3.44, SPM is on by default. Plugins that support SPM come in as Swift packages and the rest fall back to CocoaPods, so one project can hit both error 4 and this one. The fix is the same, raise Runner’s deployment target.
The Flutter docs then tell you to run flutter build ios --config-only to regenerate the configuration. That command only runs on macOS. On Windows or Linux, run doctor again instead. For mixing SPM and CocoaPods, see Migrate from CocoaPods to SPM.
What if upload says a third-party plugin lacks a privacy manifest?
16. ITMS-91061 Missing privacy manifest
The build and install work, but after uploading to App Store Connect you get an ITMS-91061 email saying a third-party SDK has no privacy manifest. Apple’s list of commonly used third-party SDKs includes many Flutter-related names, such as Flutter itself, path_provider, shared_preferences_ios, image_picker_ios, url_launcher, sqflite, device_info_plus, package_info_plus, connectivity_plus, share_plus, fluttertoast, and Firebase libraries like FirebaseCore. When a new app, or an update that adds the dependency, includes an SDK from the list, the SDK must include a privacy manifest. As a binary dependency it also has to be signed.
Update the plugins and Flutter to versions that include privacy manifests, then run pod install and build again. If your own code uses required reason APIs such as UserDefaults, add a PrivacyInfo.xcprivacy to the app as well. See Write an iOS privacy manifest (PrivacyInfo.xcprivacy) and declare required reason APIs. For other ITMS codes, see ITMS error codes.
How do you build a Flutter iOS app with KXBuild on Windows and Linux?
Flutter’s own flutter build ios and flutter run only target iOS on macOS. When you use KXBuild on Windows or Linux, KXBuild handles the iOS build and every other flutter command works as usual. Follow this order and you avoid most of the errors above.
| Step | Command or action | When |
|---|---|---|
| 1 | kxbuild doctor <project folder>, or Doctor (fix environment) in the “···” menu of the KXBuild view |
The first time you open the project, and after switching Flutter versions, adding plugins or changing the version in pubspec.yaml |
| 2 | pod install in the ios folder |
After doctor, when the project has plugins that need CocoaPods. Doctor doesn’t run it for you |
| 3 | Press F5, or kxbuild build .\ios\Runner.xcworkspace |
Always use the .xcworkspace when there are pods |
| 4 | kxbuild build .\ios\Runner.xcworkspace -c Release --export app-store |
Produces ios\build\Runner.ipa for the App Store |
There are three main differences from working on a Mac.
- Doctor replaces Flutter’s iOS preparation step. On a Mac,
flutter build iosalso generates the iOS configuration. There’s no such step on Windows, so if you skip doctor you hit errors 1 and 12. - Adding a plugin takes doctor plus pod install.
flutter pub addalone isn’t enough. The iOS project doesn’t know about the new plugin yet, and you get error 11. - Native configuration changes need a full rebuild. Hot reload only updates Dart code. After changing the deployment target, Podfile or Info.plist, stop debugging and press F5 again.
For the full workflow and more Flutter iOS build errors, see Flutter and Debug a Flutter iOS app on your iPhone from Windows, with hot reload.
FAQ
What minimum deployment target should a Flutter iOS app use?
As of October 2026, Flutter supports iOS 15 and later, so use at least 15.0. If a plugin needs a higher version, use the highest version any plugin requires, and set the Podfile platform and Runner’s IPHONEOS_DEPLOYMENT_TARGET to the same value.
How do I fix “Generated.xcconfig must exist” during pod install?
Run flutter pub get in the project root first, then pod install in the ios folder. When you use KXBuild on Windows or Linux, run doctor once with the project path, then run pod install.
Which version is too low when I see “required a higher minimum deployment target”?
The project’s minimum deployment target is lower than the plugin requires. Raise platform :ios in ios/Podfile and Runner’s deployment target to the version the plugin needs, then run pod install again.
How do I fix “module not found” after adding a Flutter plugin?
Plugins with native code need their pods installed. Run doctor and pod install, then build Runner.xcworkspace, not Runner.xcodeproj.
What do I do when pod install hangs or downloads fail?
It’s a network problem reaching the CocoaPods CDN or GitHub. Retry first. If it still fails, add a source line at the top of the Podfile that points to a closer mirror, then run pod install –repo-update.