ci: normalize CocoaPods targets for Xcode 27 (MBL-2278) - #633
Open
Shahroz16 wants to merge 6 commits into
Open
Conversation
Contributor
Sample app builds 📱Below you will find the list of the latest versions of the sample apps. It's recommended to always download the latest builds of the sample apps to accurately test the pull request.
|
Shahroz16
marked this pull request as ready for review
August 14, 2026 17:30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
max(React Native floor, 15.0)Root cause
Xcode 27 validates every generated target configuration. React Native 0.83 currently requires iOS 15.1, but generated dependency and resource-bundle targets can still carry lower deployment metadata and fail before Customer.io source compilation.
Compatibility policy
Customer.io still supports iOS versions below 15, so lower native podspec minimums remain intentional. Raising those public minimums first would drop older applications and would not control transitive pod metadata. This helper instead aligns generated build targets with the current React Native iOS floor, without changing published package runtime support.
Safety
The helper validates the whole selected configuration set before mutation, preserves higher numeric values, reports each
original -> finalchange, and fails closed for unresolved xcconfig forms. Autolinking explicitly selects the published primary podspec without changing production lifecycle ownership. The helper is byte-identical to the native iOS and Flutter copies.Validation
Release impact
This prerequisite does not trigger an immediate npm release. The helper is versioned on
mainand will ship with the next coordinated React Native package release after lifecycle runtime validation.Boundaries
Expo remains the no-override control. This PR does not change React Native lifecycle routing or prove physical-device delivery, signed export, App Store submission, or every customer dependency graph. Hosted Xcode 27 after-proof remains separate.
Note
Medium Risk
Changes iOS build integration (Podfile post_install mutates Xcode projects) and raises deployment floors for integrated targets; mistakes could affect customer Podfiles or block
pod install, but behavior is opt-in, audited, and heavily tested.Overview
Adds an opt-in CocoaPods helper (
ios/cocoapods_deployment_target.rb) that raises low or missingIPHONEOS_DEPLOYMENT_TARGETvalues on generated Pods targets and integrated app/extension targets tomax(React Native floor, 15.0), without changing published podspec minimums. The sample app Podfile callsnormalize!afterreact_native_post_install; README links a new deployment-target normalization guide.Autolinking pins the primary
customerio-reactnative.podspecinreact-native.config.jsso discovery stays deterministic when a rich-push podspec is also present; a Node check validates that wiring in CI.CI runs helper Minitest coverage, the autolinking script, and a recursive audit of
ios/PodsplusSampleApp.xcodeprojbefore iOS sample builds.Reviewed by Cursor Bugbot for commit f3428e7. Bugbot is set up for automated code reviews on this repo. Configure here.