Skip to content

chore(ios): raise minimum iOS version to 16.0 - #666

Open
Zeroupper wants to merge 1 commit into
masterfrom
chore/ios-min-16
Open

chore(ios): raise minimum iOS version to 16.0#666
Zeroupper wants to merge 1 commit into
masterfrom
chore/ios-min-16

Conversation

@Zeroupper

@Zeroupper Zeroupper commented Aug 25, 2026

Copy link
Copy Markdown
Collaborator

Bumps the app to 4.4.3 and raises the iOS floor to 16.0.

The three places that declare the minimum version had drifted apart — Podfile and IPHONEOS_DEPLOYMENT_TARGET said 15.0 while AppFrameworkInfo.plist still said 14.0. All three are now 16.0.

SwiftPM stays off. enable-swift-package-manager: false in pubspec.yaml is still required. See the blocker below.

Verification

Branch as-is (SwiftPM off), clean build:

flutter build ipa --no-codesign
→ ✓ Built build/ios/archive/Runner.xcarchive (249.7MB)
  • Version Number: 4.4.3
  • Deployment Target: 16.0

ios/Podfile.lock churn from the local pod install was left out of this PR.

Blocked: SwiftPM cannot be enabled yet

Flipping enable-swift-package-manager: true and running a clean flutter build ipa fails at archive time. Note this does not reproduce with flutter build ios --no-codesign — that path succeeds and hides the problem; the failure only appears in the full archive.

Target Integrity (Xcode): The package product 'carp-movesense-flutter' requires minimum platform version 15.0 for the iOS platform, but this target supports 13.0
Target Integrity (Xcode): The package product 'health'              requires minimum platform version 15.0 ... but this target supports 13.0
Target Integrity (Xcode): The package product 'screen-state'        requires minimum platform version 15.0 ... but this target supports 13.0
Target Integrity (Xcode): The package product 'light'               requires minimum platform version 14.0 ... but this target supports 13.0
Target Integrity (Xcode): The package product 'polar'               requires minimum platform version 14.0 ... but this target supports 13.0

Blocking packages, by required minimum:

Package Requires Pulled in via
carp_movesense_flutter 0.1.1 iOS 15.0 carp_movesense_package
health 13.3.2 iOS 15.0 carp_health_package
screen_state 5.0.2 iOS 15.0 carp_mobile_sensing
light 5.0.0 iOS 14.0 carp_mobile_sensing
polar 7.10.2 iOS 14.0 carp_polar_package

Why "target supports 13.0" when this PR sets 16.0

The 13.0 does not come from the Xcode project. Every IPHONEOS_DEPLOYMENT_TARGET in project.pbxproj is 16.0, the Podfile is 16.0, AppFrameworkInfo.plist is 16.0, and xcodebuild -showBuildSettings confirms IPHONEOS_DEPLOYMENT_TARGET = 16.0.

It comes from Flutter's generated SPM manifest, ios/Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage/Package.swift, which is emitted with:

platforms: [
    .iOS("13.0")
],

SwiftPackageManager.updateMinimumDeployment (flutter_tools/lib/src/ios/mac.dart:352) is supposed to rewrite that from the project's build settings, but on Flutter 3.44.6 the manifest is still 13.0 after a clean regenerate. So the SPM platform floor never gets raised and every plugin above 13.0 trips Target Integrity.

Worth noting: the SwiftProtobuf duplicate-symbol clash between Polar (SPM) and Movesense (CocoaPods) — the reason originally recorded in the pubspec.yaml comment for keeping SwiftPM off — is not what fails today. That may have been fixed upstream, or it is simply masked because the build dies earlier at Target Integrity. It should be re-checked once the platform floor issue is resolved.

Not blocking this PR

This PR ships with SwiftPM off, which archives cleanly. The above is what has to be solved before SwiftPM can be turned on in a follow-up.

Separately, these plugins still have no SPM support at all and keep CocoaPods in the build regardless: audio_streamer, flutter_activity_recognition, flutter_sound, location, oidc_ios, open_settings_plus.

Aligns Podfile platform, IPHONEOS_DEPLOYMENT_TARGET and
AppFrameworkInfo.plist MinimumOSVersion, which had drifted apart (15.0 vs
14.0).

SwiftPM stays off here: `enable-swift-package-manager: false` is still
required because Polar (SPM) and Movesense (CocoaPods) both pull in
SwiftProtobuf and duplicate its symbols.

Verified with `flutter build ios --no-codesign`.
@Zeroupper Zeroupper self-assigned this Aug 25, 2026
@Zeroupper

Copy link
Copy Markdown
Collaborator Author

@iarata the SPM blocker here is on the sensing side — carp_movesense_flutter (15.0), health (15.0) and screen_state (15.0) are the ones holding it back, plus light and polar at 14.0. Could you bump the iOS platform floor on those so we can turn SwiftPM back on in a follow-up? Details in the PR description.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant