4343 caller_ref : ${{ github.ref }}
4444
4545 build-ios :
46- name : Build ${{ matrix.rn-architecture }} ios ${{ matrix.build-type }} ${{ matrix.ios-use-frameworks }}
46+ name : Build ${{ matrix.rn-architecture }} ios ${{ matrix.build-type }} ${{ matrix.ios-use-frameworks }} ${{ matrix.sentry-consumption }}
4747 runs-on : macos-26-xlarge
4848 needs : [diff_check, detect-changes]
4949 if : >-
6060 rn-architecture : ["new"]
6161 ios-use-frameworks : ["no-frameworks"]
6262 build-type : ["dev", "production"]
63+ sentry-consumption : ["xcframework"]
64+ # `xcframework` is the default: RNSentry vendors a prebuilt
65+ # `Sentry-Dynamic.xcframework` downloaded from sentry-cocoa's release.
66+ # Keep a single CocoaPods job to catch regressions in the source-build
67+ # fallback (`SENTRY_USE_XCFRAMEWORK=0`).
68+ include :
69+ - rn-architecture : " new"
70+ ios-use-frameworks : " no-frameworks"
71+ build-type : " production"
72+ sentry-consumption : " cocoapods"
6373 steps :
6474 - uses : actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
6575
95105 [[ "${{ matrix.build-type }}" == "production" ]] && export ENABLE_PROD=1 || export ENABLE_PROD=0
96106 [[ "${{ matrix.rn-architecture }}" == "new" ]] && export ENABLE_NEW_ARCH=1 || export ENABLE_NEW_ARCH=0
97107 [[ "${{ matrix.ios-use-frameworks }}" == "dynamic-frameworks" ]] && export USE_FRAMEWORKS=dynamic
108+ [[ "${{ matrix.sentry-consumption }}" == "cocoapods" ]] && export SENTRY_USE_XCFRAMEWORK=0
98109
99110 ./scripts/pod-install.sh
100111
@@ -112,15 +123,18 @@ jobs:
112123 ./scripts/build-ios.sh
113124
114125 - name : Archive iOS App
115- if : ${{ matrix.rn-architecture == 'new' && matrix.build-type == 'production' && matrix.ios-use-frameworks == 'no-frameworks' }}
126+ # Only upload from the xcframework job (the default consumption path)
127+ # to avoid duplicate artifact names when the CocoaPods regression job
128+ # runs.
129+ if : ${{ matrix.rn-architecture == 'new' && matrix.build-type == 'production' && matrix.ios-use-frameworks == 'no-frameworks' && matrix.sentry-consumption == 'xcframework' }}
116130 working-directory : ${{ env.REACT_NATIVE_SAMPLE_PATH }}
117131 run : |
118132 zip -r \
119133 ${{ github.workspace }}/${{ env.IOS_APP_ARCHIVE_PATH }} \
120134 sentryreactnativesample.app
121135
122136 - name : Upload iOS APP
123- if : ${{ matrix.rn-architecture == 'new' && matrix.build-type == 'production' && matrix.ios-use-frameworks == 'no-frameworks' }}
137+ if : ${{ matrix.rn-architecture == 'new' && matrix.build-type == 'production' && matrix.ios-use-frameworks == 'no-frameworks' && matrix.sentry-consumption == 'xcframework' }}
124138 uses : actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
125139 with :
126140 name : sample-rn-${{ matrix.rn-architecture }}-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks}}-ios
@@ -131,7 +145,7 @@ jobs:
131145 if : ${{ always() }}
132146 uses : actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
133147 with :
134- name : build-sample-${{ matrix.rn-architecture }}-ios-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks}}-logs
148+ name : build-sample-${{ matrix.rn-architecture }}-ios-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks}}-${{ matrix.sentry-consumption }}- logs
135149 path : ${{ env.REACT_NATIVE_SAMPLE_PATH }}/ios/*.log
136150
137151 build-android :
@@ -185,7 +199,31 @@ jobs:
185199 [[ "${{ matrix.build-type }}" == "production" ]] && export CONFIG='release' || export CONFIG='debug'
186200
187201 ./scripts/set-dsn-aos.mjs
188- ./scripts/build-android.sh -PreactNativeArchitectures=x86
202+ # Split ABI coverage across the two matrix entries:
203+ # - `dev` → subset (arm64-v8a only) so we can assert the module
204+ # builds only the ABIs the app requested — the root
205+ # cause of #6398 was hardcoded abiFilters ignoring
206+ # `reactNativeArchitectures`.
207+ # - `production` → all four ABIs so the 16 KB alignment check below
208+ # runs across every ABI (guards against #6394).
209+ if [[ "${{ matrix.build-type }}" == "production" ]]; then
210+ ./scripts/build-android.sh -PreactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
211+ else
212+ ./scripts/build-android.sh -PreactNativeArchitectures=arm64-v8a
213+ fi
214+
215+ - name : Check libsentry-tm-perf-logger.so honors reactNativeArchitectures
216+ if : ${{ matrix.build-type == 'dev' }}
217+ # Asserts the module packaged our .so for exactly the subset the app
218+ # requested — guards against regressing the #6398 root-cause fix.
219+ run : ./scripts/check-tm-perf-logger-abi-subset.sh ${{ env.REACT_NATIVE_SAMPLE_PATH }}/app.apk 'arm64-v8a'
220+
221+ - name : Check 16 KB native library alignment
222+ # Only Sentry-owned libraries are checked: third-party/React Native
223+ # libraries are aligned by their own build (RN ships arm64 at 16 KB but
224+ # x86 at 4 KB, and CI builds x86), so a whole-APK check is not
225+ # meaningful here. Guards against regressing #6394.
226+ run : ./scripts/check-android-16kb-alignment.sh ${{ env.REACT_NATIVE_SAMPLE_PATH }}/app.apk 'libsentry'
189227
190228 - name : Archive Android App
191229 if : ${{ matrix.rn-architecture == 'new' && matrix.build-type == 'production' }}
@@ -436,7 +474,7 @@ jobs:
436474 sudo udevadm trigger --name-match=kvm
437475
438476 - name : Run Android Tests on API ${{ env.ANDROID_API_LEVEL }}
439- uses : reactivecircus/android-emulator-runner@e89f39f1abbbd05b1113a29cf4db69e7540cae5a # pin@v2.37 .0
477+ uses : reactivecircus/android-emulator-runner@a421e43855164a8197daf9d8d40fe71c6996bb0d # pin@v2.38 .0
440478 with :
441479 api-level : ${{ env.ANDROID_API_LEVEL }}
442480 # Pin the emulator binary: canary 37.1.6.0 (build 15726199) broke emulator
0 commit comments