Skip to content

ci: normalize CocoaPods targets for Xcode 27 (MBL-2278) - #633

Open
Shahroz16 wants to merge 6 commits into
mainfrom
codex/mbl-2278-cocoapods-target-normalization
Open

ci: normalize CocoaPods targets for Xcode 27 (MBL-2278)#633
Shahroz16 wants to merge 6 commits into
mainfrom
codex/mbl-2278-cocoapods-target-normalization

Conversation

@Shahroz16

@Shahroz16 Shahroz16 commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Summary

  • ship the shared CocoaPods deployment-target helper with the React Native package
  • normalize generated and integrated targets to max(React Native floor, 15.0)
  • wire the APN/FCM sample through deterministic primary-podspec discovery
  • add focused helper/autolinking tests, recursive audits, CI coverage, and customer guidance

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 -> final change, 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

  • helper suite: 18 tests, 85 assertions with xcodeproj 1.27 and 1.25.1
  • recursive FCM audit: 294 target configurations at iOS 15.1 or newer
  • clean APN and FCM installs on CocoaPods 1.15.2 normalized their known lower targets
  • APN and FCM Xcode 26.6 simulator builds and unsigned generic-device archives passed
  • workspace and installed-package autolinking tests, Ruby/Node syntax, ESLint pre-push hook, and diff check passed
  • Customer.io Opus production review and final Fable exact-diff review accepted

Release impact

This prerequisite does not trigger an immediate npm release. The helper is versioned on main and 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 missing IPHONEOS_DEPLOYMENT_TARGET values on generated Pods targets and integrated app/extension targets to max(React Native floor, 15.0), without changing published podspec minimums. The sample app Podfile calls normalize! after react_native_post_install; README links a new deployment-target normalization guide.

Autolinking pins the primary customerio-reactnative.podspec in react-native.config.js so 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/Pods plus SampleApp.xcodeproj before iOS sample builds.

Reviewed by Cursor Bugbot for commit f3428e7. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown
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.


  • iOS FCM: 633.6.0 (29778857)
  • Android APN: 633.6.0 (29778857)
  • iOS APN: 633.6.0 (29778857)

@Shahroz16
Shahroz16 marked this pull request as ready for review August 14, 2026 17:30
@Shahroz16
Shahroz16 requested a review from a team as a code owner August 14, 2026 17:30
@Shahroz16 Shahroz16 changed the title fix: normalize CocoaPods targets for Xcode 27 (MBL-2278) ci: normalize CocoaPods targets for Xcode 27 (MBL-2278) Aug 14, 2026
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