Skip to content

SDK-812: Verify RN SDK 3.2.1 and inject Xcode 27 iOS 15.1 Podfile lift - #74

Merged
jferrao-itrbl merged 6 commits into
mainfrom
feature/SDK-812-verify-react-sdk-3-2-1
Oct 27, 2026
Merged

jferrao-itrbl merged 6 commits into
mainfrom
feature/SDK-812-verify-react-sdk-3-2-1

Conversation

@jferrao-itrbl

@jferrao-itrbl jferrao-itrbl commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

📝 Summary

Verify @iterable/react-native-sdk 3.2.1 and inject the Xcode 27 IPHONEOS 15.1 Podfile lift during expo prebuild.

🎟️ Jira Ticket: SDK-812

📖 Description

Plugin changes (the ticket scope)

  • Refresh the root and example Yarn lockfiles so ^3.0.0 resolves to 3.2.1. The peer dependency floor stays at ^3.0.0.
  • Add the withIosDeploymentTargetLift mod. During expo prebuild it injects a post_install block that raises IPHONEOS_DEPLOYMENT_TARGET to 15.1 for any Pods target below 15.1. Xcode 27 no longer builds the IterableSDKResources bundle target at its default deployment target. The block has a marker, so running prebuild again doesn't duplicate it.
  • Extract injectAfterReactNativePostInstall (plugin/src/withIosPodfile.utils.ts) so the fmt workaround and the new lift share one regex, marker check and warning. The generated Podfile output is unchanged.
  • Document the pipeline order in withIterable.ts. withStoreConfigValues stays first, and because Expo runs withPodfile mods in reverse order, on a fresh prebuild, the fmt block lands before the lift. The two blocks are independent.
  • README, example troubleshooting and CHANGELOG now list 3.2.1 as the tested RN SDK version and explain the lift.

CI changes (prerequisites, not feature work)

These jobs were already broken on main. This PR couldn't go green without fixing them, and they're split into their own ci: commits so they're easy to review apart from the feature:

  • lint.yml: bump reviewdog/action-misspell to v1.30.3. The old version's Docker image was based on Debian bullseye, and its apt mirrors now return 404, so the misspell job failed on every PR.
  • codeql.yml (Swift): this job had been failing silently since the Expo 55 upgrade because continue-on-error hid it. ExpoModulesCore 55 doesn't compile with Xcode 16.4, so the job now uses latest-stable Xcode. It also resolves an installed iOS 18 simulator runtime, pins iPhone 16 Pro to it, and drops continue-on-error, so a real failure now shows up.
  • example/app.json: set expo-build-properties ios.deploymentTarget to 15.1, which matches the lift and the RN SDK / demo app setup.
  • ios/ExpoAdapterIterable.podspec has no net change; swift_version stays 5.4.

Commits

Each commit is a clean conventional commit, so release-it generates the correct changelog:

  1. feat(ios): inject Xcode 27 iOS 15.1 Podfile lift for RN SDK 3.2.1
  2. ci: bump reviewdog/action-misspell to v1.30.3
  3. ci(codeql): build the Expo example on latest-stable Xcode
  4. refactor(plugin): share the react_native_post_install Podfile injection
  5. docs(plugin): document the withIterable pipeline order

Merge with a merge commit (the repo default) so these commit types reach the changelog. If you squash, set the squash title to a conventional one, e.g. feat(ios): inject Xcode 27 iOS 15.1 Podfile lift for RN SDK 3.2.1.

🧪 How to test?

Automated: yarn test (67 tests, 100% coverage on the Podfile mods), yarn lint and yarn tsc --noEmit. CI is green, including the CodeQL Swift build of the example app.

Manual QA, done by the merger before merging:

  • yarn install in the repo root, then cd example && yarn install, and confirm node_modules/@iterable/react-native-sdk/package.json shows 3.2.1.
  • npx expo prebuild --clean and check that example/ios/Podfile contains both markers, fmt first and then the lift:
    • # @iterable/expo-plugin: fmt workaround for Xcode 26.4
    • # @iterable/expo-plugin: IPHONEOS deployment target lift for Xcode 27
  • Run npx expo prebuild again (without --clean) and confirm each marker still appears exactly once.
  • Xcode 26.x (regression check): yarn ios still builds and launches.
  • Android: yarn android builds and launches.
  • Smoke test in the example app: initialize with an API key, set an email/userId, receive a push, open an in-app message, and follow a deep link.

🧾 Changelog

Added

  • Podfile post_install injection that sets IPHONEOS_DEPLOYMENT_TARGET to 15.1 for Pods targets below 15.1 (Xcode 27 / IterableSDKResources workaround).

Changed

  • Verified against @iterable/react-native-sdk 3.2.1 (lockfiles).

📹 Loom recording if applicable

N/A

🐞 Github Issues solved

N/A

📚 Docs PR if applicable

N/A

@qltysh

qltysh Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Qlty


Coverage Impact

This PR will not change total coverage.

Modified Files with Diff Coverage (3)

RatingFile% DiffUncovered Line #s
Coverage rating: A Coverage rating: A
plugin/src/withIosFmtWorkaround.ts100.0%
New file Coverage rating: A
plugin/src/withIosPodfile.utils.ts100.0%
New file Coverage rating: A
plugin/src/withIosDeploymentTargetLift.ts100.0%
Total100.0%
🚦 See full report on Qlty Cloud »

🛟 Help
  • Diff Coverage: Coverage for added or modified lines of code (excludes deleted files). Learn more.

  • Total Coverage: Coverage for the whole repository, calculated as the sum of all File Coverage. Learn more.

  • File Coverage: Covered Lines divided by Covered Lines plus Missed Lines. (Excludes non-executable lines including blank lines and comments.)

    • Indirect Changes: Changes to File Coverage for files that were not modified in this PR. Learn more.

@qltysh

qltysh Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

All good ✅

Comment thread plugin/__tests__/withIosDeploymentTargetLift.test.ts
Comment thread plugin/src/withIosDeploymentTargetLift.ts
Lockfiles now resolve @iterable/react-native-sdk 3.2.1 (ranges stay
^3.0.0). Prebuild adds a post_install hook that lifts Pods targets below
iOS 15.1, so Xcode 27 accepts IterableSDKResources (still 12.0 upstream).
v1.26.3 builds on debian bullseye, whose security mirrors now 404.
Resolve an installed iOS simulator runtime instead of a missing iPhone 16
destination, use latest-stable Xcode (ExpoModulesCore 55 does not compile
on 16.4), and fail the job when the example build fails. The example app
sets ios.deploymentTarget 15.1 via expo-build-properties.
Both Podfile mods now call injectAfterReactNativePostInstall, so the regex,
marker check and warning live in one place. Generated Podfiles are unchanged.
@jferrao-itrbl
jferrao-itrbl force-pushed the feature/SDK-812-verify-react-sdk-3-2-1 branch from eb4b277 to b000a46 Compare October 23, 2026 09:00
Comment thread plugin/__tests__/withIosDeploymentTargetLift.test.ts
Comment thread plugin/__tests__/withIosFmtWorkaround.test.ts
@jferrao-itrbl

jferrao-itrbl commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor Author

Extra manual testing (all successful):

1. Build the plugin and install dependencies

git checkout feature/SDK-812-verify-react-sdk-3-2-1 && git pull
yarn install && yarn build
cd example && yarn install

2. Confirm the RN SDK resolved to 3.2.1

node -p "require('@iterable/react-native-sdk/package.json').version"

3. Regenerate the native project

npx expo prebuild --clean --platform ios

4. Both markers should be there, fmt first, then the lift

grep -n "@iterable/expo-plugin" ios/Podfile

5. Run prebuild again: each marker should still appear exactly once

npx expo prebuild --platform ios
grep -c "@iterable/expo-plugin" ios/Podfile   # expect 2

6. Build and launch on a simulator with Xcode 27

yarn ios

@jferrao-itrbl
jferrao-itrbl marked this pull request as ready for review October 26, 2026 10:08
@jferrao-itrbl
jferrao-itrbl requested a review from a team as a code owner October 26, 2026 10:08
Comment thread .github/workflows/codeql.yml Outdated
Comment thread CHANGELOG.md
Comment thread plugin/src/withIterable.ts Outdated
Comment thread README.md Outdated
Comment thread plugin/__tests__/withIosDeploymentTargetLift.test.ts
Comment thread plugin/src/withIosDeploymentTargetLift.ts Outdated
Comment thread .github/workflows/codeql.yml Outdated
Comment thread .github/workflows/lint.yml Outdated
Pin CodeQL to Xcode 26.3 and remove redundant pod install.
Fix misspell action commit SHA, deployment-target test guard, README wording,
pipeline comment, and RN SDK @see link.
@jferrao-itrbl
jferrao-itrbl merged commit a755d09 into main Oct 27, 2026
18 checks passed
@jferrao-itrbl
jferrao-itrbl deleted the feature/SDK-812-verify-react-sdk-3-2-1 branch October 27, 2026 09:15
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.

2 participants