Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 4 additions & 18 deletions .github/workflows/sample-application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
caller_ref: ${{ github.ref }}

build-ios:
name: Build ${{ matrix.rn-architecture }} ios ${{ matrix.build-type }} ${{ matrix.ios-use-frameworks }} ${{ matrix.sentry-consumption }}
name: Build ${{ matrix.rn-architecture }} ios ${{ matrix.build-type }} ${{ matrix.ios-use-frameworks }}
runs-on: macos-26-xlarge
needs: [diff_check, detect-changes]
if: >-
Expand All @@ -60,16 +60,6 @@ jobs:
rn-architecture: ["new"]
ios-use-frameworks: ["no-frameworks"]
build-type: ["dev", "production"]
sentry-consumption: ["xcframework"]
# `xcframework` is the default: RNSentry vendors a prebuilt
# `Sentry-Dynamic.xcframework` downloaded from sentry-cocoa's release.
# Keep a single CocoaPods job to catch regressions in the source-build
# fallback (`SENTRY_USE_XCFRAMEWORK=0`).
include:
- rn-architecture: "new"
ios-use-frameworks: "no-frameworks"
build-type: "production"
sentry-consumption: "cocoapods"
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

Expand Down Expand Up @@ -105,7 +95,6 @@ jobs:
[[ "${{ matrix.build-type }}" == "production" ]] && export ENABLE_PROD=1 || export ENABLE_PROD=0
[[ "${{ matrix.rn-architecture }}" == "new" ]] && export ENABLE_NEW_ARCH=1 || export ENABLE_NEW_ARCH=0
[[ "${{ matrix.ios-use-frameworks }}" == "dynamic-frameworks" ]] && export USE_FRAMEWORKS=dynamic
[[ "${{ matrix.sentry-consumption }}" == "cocoapods" ]] && export SENTRY_USE_XCFRAMEWORK=0

./scripts/pod-install.sh

Expand All @@ -123,18 +112,15 @@ jobs:
./scripts/build-ios.sh

- name: Archive iOS App
# Only upload from the xcframework job (the default consumption path)
# to avoid duplicate artifact names when the CocoaPods regression job
# runs.
if: ${{ matrix.rn-architecture == 'new' && matrix.build-type == 'production' && matrix.ios-use-frameworks == 'no-frameworks' && matrix.sentry-consumption == 'xcframework' }}
if: ${{ matrix.rn-architecture == 'new' && matrix.build-type == 'production' && matrix.ios-use-frameworks == 'no-frameworks' }}
working-directory: ${{ env.REACT_NATIVE_SAMPLE_PATH }}
run: |
zip -r \
${{ github.workspace }}/${{ env.IOS_APP_ARCHIVE_PATH }} \
sentryreactnativesample.app

- name: Upload iOS APP
if: ${{ matrix.rn-architecture == 'new' && matrix.build-type == 'production' && matrix.ios-use-frameworks == 'no-frameworks' && matrix.sentry-consumption == 'xcframework' }}
if: ${{ matrix.rn-architecture == 'new' && matrix.build-type == 'production' && matrix.ios-use-frameworks == 'no-frameworks' }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: sample-rn-${{ matrix.rn-architecture }}-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks}}-ios
Expand All @@ -145,7 +131,7 @@ jobs:
if: ${{ always() }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: build-sample-${{ matrix.rn-architecture }}-ios-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks}}-${{ matrix.sentry-consumption }}-logs
name: build-sample-${{ matrix.rn-architecture }}-ios-${{ matrix.build-type }}-${{ matrix.ios-use-frameworks}}-logs
path: ${{ env.REACT_NATIVE_SAMPLE_PATH }}/ios/*.log

build-android:
Expand Down
10 changes: 0 additions & 10 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,6 @@
> make sure you follow our [migration guide](https://docs.sentry.io/platforms/react-native/migration/) first.
<!-- prettier-ignore-end -->

## 8.18.0-alpha.3

### Changes

- Consume `sentry-cocoa` as a prebuilt xcframework by default on iOS ([#6381](https://github.com/getsentry/sentry-react-native/pull/6381))

**Warning**

**This may be a breaking change for some setups.** `pod install` now downloads `Sentry.xcframework` from sentry-cocoa's GitHub release (SHA256-verified) and vendors it, instead of building Sentry from source as a CocoaPod. If your iOS build breaks after upgrading (e.g. when another pod also depends on the `Sentry` CocoaPod), or if your `pod install` environment cannot reach `github.com`, set `SENTRY_USE_XCFRAMEWORK=0` before `pod install` to restore the previous source-build behavior.

## 8.17.2

### Fixes
Expand Down
1 change: 0 additions & 1 deletion SDK-VERSIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ To manually update the table with the current version, run `./scripts/update-sdk

| React Native SDK | Android SDK | Cocoa SDK | JavaScript SDK |
| ---------------- | ----------- | --------- | -------------- |
| [8.18.0-alpha.3](https://github.com/getsentry/sentry-react-native/releases/tag/8.18.0-alpha.3) | [8.47.0](https://github.com/getsentry/sentry-java/releases/tag/8.47.0) | [9.19.1](https://github.com/getsentry/sentry-cocoa/releases/tag/9.19.1) | [10.63.0](https://github.com/getsentry/sentry-javascript/releases/tag/10.63.0) |
| [8.17.2](https://github.com/getsentry/sentry-react-native/releases/tag/8.17.2) | [8.47.0](https://github.com/getsentry/sentry-java/releases/tag/8.47.0) | [9.19.1](https://github.com/getsentry/sentry-cocoa/releases/tag/9.19.1) | [10.63.0](https://github.com/getsentry/sentry-javascript/releases/tag/10.63.0) |
| [8.17.1](https://github.com/getsentry/sentry-react-native/releases/tag/8.17.1) | [8.47.0](https://github.com/getsentry/sentry-java/releases/tag/8.47.0) | [9.19.1](https://github.com/getsentry/sentry-cocoa/releases/tag/9.19.1) | [10.63.0](https://github.com/getsentry/sentry-javascript/releases/tag/10.63.0) |
| [8.17.0](https://github.com/getsentry/sentry-react-native/releases/tag/8.17.0) | [8.47.0](https://github.com/getsentry/sentry-java/releases/tag/8.47.0) | [9.19.1](https://github.com/getsentry/sentry-cocoa/releases/tag/9.19.1) | [10.63.0](https://github.com/getsentry/sentry-javascript/releases/tag/10.63.0) |
Expand Down
4 changes: 2 additions & 2 deletions dev-packages/e2e-tests/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "sentry-react-native-e2e-tests",
"version": "8.18.0-alpha.3",
"version": "8.17.2",
"private": true,
"description": "Sentry React Native End to End Tests Library",
"main": "dist/index.js",
Expand All @@ -14,7 +14,7 @@
"@babel/preset-env": "^7.25.3",
"@babel/preset-typescript": "^7.18.6",
"@sentry/core": "10.63.0",
"@sentry/react-native": "8.18.0-alpha.3",
"@sentry/react-native": "8.17.2",
"@types/node": "^20.9.3",
"@types/react": "^19.1.4",
"appium": "3.2.2",
Expand Down
2 changes: 1 addition & 1 deletion dev-packages/type-check/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "sentry-react-native-type-check",
"private": true,
"version": "8.18.0-alpha.3",
"version": "8.17.2",
"scripts": {
"type-check": "./run-type-check.sh"
}
Expand Down
2 changes: 1 addition & 1 deletion dev-packages/utils/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "sentry-react-native-samples-utils",
"version": "8.18.0-alpha.3",
"version": "8.17.2",
"description": "Internal Samples Utils",
"main": "index.js",
"license": "MIT",
Expand Down
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"version": "8.18.0-alpha.3",
"version": "8.17.2",
"packages": [
"packages/*",
"dev-packages/*",
Expand Down
119 changes: 21 additions & 98 deletions packages/core/RNSentry.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -45,115 +45,41 @@ Pod::Spec.new do |s|
# is pulled in here; on Android it is compiled by the dedicated CMake target
# in `android/CMakeLists.txt`. The files are guarded with
# `RCT_NEW_ARCH_ENABLED` so they compile to empty TUs on Old Arch.
#
# We include `.swift` (for `RNSentrySwiftLinkStub.swift`) only on RN >=
# 0.75. Adding a Swift file makes CocoaPods treat RNSentry as a Swift
# pod, which then requires modular headers from its ObjC dependencies
# (React-Core, React-hermes) — RN < 0.75 doesn't emit those, so
# `pod install` fails with:
# "The Swift pod `RNSentry` depends upon `React-hermes`, which does
# not define modules."
# The stub is only needed when linking Sentry.xcframework's Swift
# symbols into a dynamic framework anyway (RN 0.86+ `use_frameworks!
# :dynamic`), so gating on RN 0.75 is safe.
supports_swift_stub = rn_version[:major] >= 1 || (rn_version[:major] == 0 && rn_version[:minor] >= 75)
if supports_swift_stub
s.source_files = 'ios/**/*.{h,m,mm,swift}', 'cpp/**/*.{h,cpp}'
s.swift_versions = ['5.5']
else
s.source_files = 'ios/**/*.{h,m,mm}', 'cpp/**/*.{h,cpp}'
end
s.source_files = 'ios/**/*.{h,m,mm}', 'cpp/**/*.{h,cpp}'
s.public_header_files = 'ios/RNSentry.h', 'ios/RNSentrySDK.h', 'ios/RNSentryStart.h', 'ios/RNSentryVersion.h', 'ios/RNSentryBreadcrumb.h', 'ios/RNSentryReplay.h', 'ios/RNSentryReplayBreadcrumbConverter.h', 'ios/Replay/RNSentryReplayMask.h', 'ios/Replay/RNSentryReplayUnmask.h', 'ios/RNSentryTimeToDisplay.h'

s.compiler_flags = other_cflags

pod_target_xcconfig = {
s.pod_target_xcconfig = {
'DEFINES_MODULE' => 'YES'
}

sentry_cocoa_version = '9.19.1'

# Consume sentry-cocoa as a prebuilt `Sentry.xcframework` by default.
# Opt-in to consuming sentry-cocoa via Swift Package Manager.
# When `SENTRY_USE_SPM=1` is set, RNSentry pulls `Sentry` from the
# sentry-cocoa SPM package as a binary xcframework instead of from
# the Sentry CocoaPods source build. Defaults to CocoaPods consumption
# for backward compatibility with the full RN version range we support.
#
# The xcframework is downloaded from sentry-cocoa's GitHub Release,
# SHA256-verified, and cached under `~/Library/Caches/sentry-react-native/
# xcframeworks/<version>/` (override with `SENTRY_XCFRAMEWORK_CACHE_DIR`).
# Slice paths are then wired into the pod and app target via
# `FRAMEWORK_SEARCH_PATHS` below. Consuming the xcframework this way
# avoids compiling sentry-cocoa from source (fast install) and
# sidesteps the Xcode 16/26 archive bug that affects the same
# xcframework when consumed through Xcode's SPM integration
# (`Signatures/*.signature` collision during archive).
#
# Set `SENTRY_USE_XCFRAMEWORK=0` to fall back to the source-built
# `Sentry` CocoaPod (e.g. for offline builds behind a restrictive proxy).
#
# `SENTRY_USE_SPM` was the name in earlier drafts of this PR; honor it as a
# deprecated alias so CI or local envs still exporting `SENTRY_USE_SPM=0`
# don't silently take the new xcframework path.
env_use_xcframework = ENV['SENTRY_USE_XCFRAMEWORK']
if env_use_xcframework.nil? && !ENV['SENTRY_USE_SPM'].nil?
Pod::UI.warn '[Sentry] SENTRY_USE_SPM is deprecated; use SENTRY_USE_XCFRAMEWORK instead.' if defined?(Pod::UI)
env_use_xcframework = ENV['SENTRY_USE_SPM']
end
use_xcframework = case env_use_xcframework
when '0' then false
else true
end

if use_xcframework
sentry_xcframework_dir = ensure_sentry_xcframework(sentry_cocoa_version, 'Sentry')

# We deliberately do NOT set `s.vendored_frameworks` even though the
# xcframework is downloaded and referenced below. CocoaPods doesn't
# stage vendored xcframeworks for `path:` (development) pods anyway
# — it did nothing for us functionally — and pointing it at a path
# inside `node_modules/@sentry/react-native/ios/Vendor/` used to be
# actively harmful, because that path only existed when the SDK was
# cached into the package directory (broken under pnpm's isolated
# store / Yarn PnP where node_modules is read-only). Framework
# linking still happens: `@import Sentry;` in RNSentry.mm + user
# code triggers clang's `-fmodules-autolink`, which emits the
# `-framework Sentry` linker directive automatically once the
# module is discovered via `FRAMEWORK_SEARCH_PATHS` below.

# Xcode's `-F <dir>` doesn't descend into `.xcframework` bundles — it
# looks for `Sentry.framework` directly at the given path. Point a
# separate framework search path at each slice, gated by the matching
# SDK selector so `#import <Sentry/…>` resolves against exactly one
# slice per build. An unconditional search-path list would let Xcode's
# Swift module precompiler stumble into a slice for a different arch
# and fail with "unsupported Swift architecture".
#
# We hardcode the slice → SDK map in `SENTRY_XCFRAMEWORK_SLICES_BY_SDK`
# (see `sentry_utils.rb`) rather than scanning the extracted bundle —
# sentry-cocoa's `Sentry.xcframework` layout is stable across releases.
# Add a slice there if a future release ships one.
#
# Point the search paths at the pod-install-time absolute path to the
# xcframework. `${PODS_TARGET_SRCROOT}` is only defined in per-pod
# xcconfigs, not in aggregate/user-target xcconfigs, and a
# `${PODS_ROOT}`-relative fallback works for one Podfile layout but
# breaks for another (e.g. the RN sample apps put node_modules at a
# different depth from RNSentryCocoaTester). Using the absolute path
# avoids the layout-detection dance — the path is regenerated on
# every `pod install`, so it's not something anyone commits.
xcframework_search_paths = SENTRY_XCFRAMEWORK_SLICES_BY_SDK.each_with_object({}) do |(sdk, slice_ids), acc|
paths = slice_ids.map { |slice| %("#{File.join(sentry_xcframework_dir, slice)}") }
acc["FRAMEWORK_SEARCH_PATHS[sdk=#{sdk}*]"] = (['$(inherited)'] + paths).join(' ')
# Requires React Native >= 0.75 because the SPM helper
# (`react-native/scripts/cocoapods/spm.rb`) is loaded transitively from
# the Podfile via `react_native_pods.rb`.
if ENV['SENTRY_USE_SPM'] == '1'
unless defined?(SPM) && SPM.respond_to?(:dependency)
raise 'SENTRY_USE_SPM=1 is set but the SPM helper is not loaded. ' \
'This requires React Native >= 0.75 and a Podfile that imports ' \
'react_native_pods.rb.'
end

pod_target_xcconfig.merge!(xcframework_search_paths)
s.user_target_xcconfig = xcframework_search_paths
SPM.dependency(s,
url: 'https://github.com/getsentry/sentry-cocoa',
requirement: { kind: 'exactVersion', version: sentry_cocoa_version },
products: ['Sentry']
)
else
s.dependency 'Sentry', sentry_cocoa_version
end

# Assign before `install_modules_dependencies` so it can merge its
# RN-specific settings on top. Assigning after would clobber those and
# break header resolution across the pod.
s.pod_target_xcconfig = pod_target_xcconfig

if defined? install_modules_dependencies
# Default React Native dependencies for 0.71 and above (new and legacy architecture)
install_modules_dependencies(s)
Expand All @@ -162,13 +88,10 @@ Pod::Spec.new do |s|

if is_new_arch_enabled then
# New Architecture on React Native 0.70 and older
pod_target_xcconfig.merge!({
s.pod_target_xcconfig.merge!({
"HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",
"CLANG_CXX_LANGUAGE_STANDARD" => "c++17"
})
# `install_modules_dependencies` is not defined on RN < 0.71 so re-assigning
# here is safe — nothing else has written to `s.pod_target_xcconfig` yet.
s.pod_target_xcconfig = pod_target_xcconfig

s.dependency "React-RCTFabric" # Required for Fabric Components (like RCTViewComponentView)
s.dependency "React-Codegen"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

class RNSentryVersion {
static final String REACT_NATIVE_SDK_PACKAGE_NAME = "npm:@sentry/react-native";
static final String REACT_NATIVE_SDK_PACKAGE_VERSION = "8.18.0-alpha.3";
static final String REACT_NATIVE_SDK_PACKAGE_VERSION = "8.17.2";
static final String NATIVE_SDK_NAME = "sentry.native.android.react-native";
static final String ANDROID_SDK_NAME = "sentry.java.android.react-native";
static final String REACT_NATIVE_SDK_NAME = "sentry.javascript.react-native";
Expand Down
12 changes: 0 additions & 12 deletions packages/core/ios/RNSentrySwiftLinkStub.swift

This file was deleted.

2 changes: 1 addition & 1 deletion packages/core/ios/RNSentryVersion.m
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@
NSString *const NATIVE_SDK_NAME = @"sentry.cocoa.react-native";
NSString *const REACT_NATIVE_SDK_NAME = @"sentry.javascript.react-native";
NSString *const REACT_NATIVE_SDK_PACKAGE_NAME = @"npm:@sentry/react-native";
NSString *const REACT_NATIVE_SDK_PACKAGE_VERSION = @"8.18.0-alpha.3";
NSString *const REACT_NATIVE_SDK_PACKAGE_VERSION = @"8.17.2";
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@sentry/react-native",
"homepage": "https://github.com/getsentry/sentry-react-native",
"repository": "https://github.com/getsentry/sentry-react-native",
"version": "8.18.0-alpha.3",
"version": "8.17.2",
"description": "Official Sentry SDK for react-native",
"typings": "dist/js/index.d.ts",
"types": "dist/js/index.d.ts",
Expand Down
Loading
Loading