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
6 changes: 3 additions & 3 deletions .github/workflows/e2e-v2.yml
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ jobs:
strategy:
fail-fast: false # keeps matrix running if one fails
matrix:
rn-version: ["0.71.19", "0.87.0"]
rn-version: ["0.71.19", "0.87.1"]
rn-architecture: ["legacy", "new"]
platform: ["android", "ios"]
build-type: ["production"]
Expand All @@ -245,7 +245,7 @@ jobs:
runs-on: macos-15-xlarge
# Use Xcode 26 (macos-26) for newer RN versions
- platform: ios
rn-version: "0.87.0"
rn-version: "0.87.1"
runs-on: macos-26-xlarge
- platform: android
runs-on: ubuntu-24.04
Expand Down Expand Up @@ -385,7 +385,7 @@ jobs:
strategy:
fail-fast: false # keeps matrix running if one fails
matrix:
rn-version: ["0.87.0"]
rn-version: ["0.87.1"]
rn-architecture: ["legacy", "new"]
platform: ["android", "ios"]
build-type: ["production"]
Expand Down
2 changes: 1 addition & 1 deletion dev-packages/e2e-tests/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"babel-jest": "^29.7.0",
"jest": "^29.7.0",
"react": "19.2.3",
"react-native": "0.86.2",
"react-native": "0.87.1",
"react-native-launch-arguments": "^4.0.2",
"typescript": "4.9.5",
"webdriverio": "^8.27.0"
Expand Down
11 changes: 8 additions & 3 deletions dev-packages/e2e-tests/tsconfig.build.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,13 @@
"esModuleInterop": true,
"skipLibCheck": true,
"moduleResolution": "node",
"types": [
"react-native",
],
// react-native >=0.87 dropped its root `types` field; its type definitions are now only
// reachable through the package `exports` map, which classic `node` resolution can't follow.
// Point directly at the shipped legacy type definitions (what earlier RN versions' root
// `types` field resolved to) so `import ... from 'react-native'` keeps resolving.
"paths": {
"react-native": ["./node_modules/react-native/types/index.d.ts"],
},
"types": [],
}
}
14 changes: 5 additions & 9 deletions packages/core/etc/sentry-react-native.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,10 @@ import { getRootSpan } from '@sentry/core';
import { GoogleGenAIChat } from '@sentry/core';
import { GoogleGenAIClient } from '@sentry/core';
import { GoogleGenAIOptions } from '@sentry/core';
import type { HostComponent } from 'react-native';
import { httpClientIntegration } from '@sentry/react';
import { httpContextIntegration } from '@sentry/react';
import type { ImageStyle } from 'react-native';
import { inboundFiltersIntegration } from '@sentry/react';
import { instrumentAnthropicAiClient } from '@sentry/core';
import { InstrumentedMethod } from '@sentry/core';
Expand All @@ -66,8 +68,6 @@ import { LangChainOptions } from '@sentry/core';
import { LangGraphIntegration } from '@sentry/core';
import { LangGraphOptions } from '@sentry/core';
import { lastEventId } from '@sentry/core';
import type { ListRenderItem } from '@react-native/virtualized-lists';
import type { ListRenderItemInfo } from '@react-native/virtualized-lists';
import { logger } from '@sentry/browser';
import type { makeFetchTransport } from '@sentry/browser';
import { Metric } from '@sentry/core';
Expand Down Expand Up @@ -105,16 +105,15 @@ import { startSpan } from '@sentry/core';
import { startSpanManual } from '@sentry/core';
import type { StartSpanOptions } from '@sentry/core';
import { suppressTracing } from '@sentry/core';
import type { TextStyle } from 'react-native';
import { Thread } from '@sentry/core';
import { TransactionEvent } from '@sentry/core';
import type { TransportMakeRequestResponse } from '@sentry/core';
import { useProfiler } from '@sentry/react';
import { User } from '@sentry/core';
import { UserFeedback } from '@sentry/core';
import type { ViewabilityConfig } from '@react-native/virtualized-lists';
import type { ViewToken } from '@react-native/virtualized-lists';
import type { VirtualizedListProps } from '@react-native/virtualized-lists';
import type { VirtualizedListWithoutRenderItemProps } from '@react-native/virtualized-lists';
import type { ViewProps } from 'react-native';
import type { ViewStyle } from 'react-native';
import { withActiveSpan } from '@sentry/core';
import { withErrorBoundary } from '@sentry/react';
import { withProfiler } from '@sentry/react';
Expand Down Expand Up @@ -488,9 +487,6 @@ export const logEnricherIntegration: () => Integration;

export { logger }

// Warning: (ae-forgotten-export) The symbol "HostComponent" needs to be exported by the entry point index.d.ts
// Warning: (ae-forgotten-export) The symbol "ViewProps" needs to be exported by the entry point index.d.ts
//
// @public (undocumented)
export const Mask: HostComponent<ViewProps> | React_2.ComponentType<ViewProps>;

Expand Down
12 changes: 6 additions & 6 deletions packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -85,15 +85,15 @@
"@expo/metro-config": "~0.20.0",
"@microsoft/api-extractor": "^7.58.7",
"@mswjs/interceptors": "^0.25.15",
"@react-native/babel-preset": "0.86.2",
"@react-native/jest-preset": "0.86.2",
"@react-native/babel-preset": "0.87.1",
"@react-native/jest-preset": "0.87.1",
"@sentry/eslint-plugin-sdk": "10.73.0",
"@sentry/typescript": "10.73.0",
"@sentry/wizard": "7.0.3",
"@testing-library/react-native": "^13.2.2",
"@types/jest": "^29.5.13",
"@types/node": "^20.9.3",
"@types/react": "^19.1.0",
"@types/react": "^19.2.0",
"@types/react-test-renderer": "^19.1.0",
"@types/uglify-js": "^3.17.2",
"@types/xmlhttprequest": "^1.8.2",
Expand All @@ -111,9 +111,9 @@
"oxfmt": "^0.42.0",
"oxlint": "^1.56.0",
"oxlint-tsgolint": "^0.17.4",
"react": "19.1.0",
"react-native": "0.86.2",
"react-test-renderer": "19.1.0",
"react": "19.2.3",
"react-native": "0.87.1",
Comment thread
sentry-warden[bot] marked this conversation as resolved.
Comment thread
sentry-warden[bot] marked this conversation as resolved.
"react-test-renderer": "19.2.3",
"rimraf": "^4.1.1",
"ts-jest": "^29.3.1",
"typescript": "~5.9.3",
Expand Down
4 changes: 3 additions & 1 deletion packages/core/src/js/feedback/FeedbackForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,9 @@ export class FeedbackForm extends React.Component<FeedbackFormProps, FeedbackFor

return (
<TouchableWithoutFeedback
onPress={notWeb() ? Keyboard.dismiss : undefined}
// Wrapped rather than passing `Keyboard.dismiss` directly: react-native >=0.87 types it as a
// method, which trips the unbound-method lint rule even though it uses no `this`.
onPress={notWeb() ? () => Keyboard.dismiss() : undefined}
accessible={false}
accessibilityElementsHidden={false}
>
Expand Down
17 changes: 13 additions & 4 deletions packages/core/src/js/feedback/FeedbackFormProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,15 @@ import { isModalSupported, isNativeDriverSupportedForColorAnimations } from './u

const useNativeDriverForColorAnimations = isNativeDriverSupportedForColorAnimations();

// react-native >=0.87 types Easing's helpers (`quad`, `in`, `out`) as methods rather than plain
// function properties. Passing `Easing.quad` as an `EasingFunction` is safe — it's a pure function
// with no `this` — but the unbound-method lint rule can't know that, so compute the easing curves
// once here and reference them from the animations below.
// oxlint-disable-next-line typescript-eslint(unbound-method)
const SHOW_EASING = Easing.in(Easing.quad);
// oxlint-disable-next-line typescript-eslint(unbound-method)
const HIDE_EASING = Easing.out(Easing.quad);

export interface FeedbackFormProviderProps {
children: React.ReactNode;
styles?: FeedbackFormStyles;
Expand Down Expand Up @@ -153,13 +162,13 @@ export class FeedbackFormProvider extends React.Component<FeedbackFormProviderPr
toValue: 1,
duration: BACKGROUND_ANIMATION_DURATION,
useNativeDriver: useNativeDriverForColorAnimations,
easing: Easing.in(Easing.quad),
easing: SHOW_EASING,
}),
Animated.timing(this.state.panY, {
toValue: 0,
duration: SLIDE_ANIMATION_DURATION,
useNativeDriver: true,
easing: Easing.in(Easing.quad),
easing: SHOW_EASING,
}),
]).start(() => {
debug.log('FeedbackFormProvider componentDidUpdate');
Expand Down Expand Up @@ -242,13 +251,13 @@ export class FeedbackFormProvider extends React.Component<FeedbackFormProviderPr
toValue: Dimensions.get('screen').height,
duration: SLIDE_ANIMATION_DURATION,
useNativeDriver: true,
easing: Easing.out(Easing.quad),
easing: HIDE_EASING,
}),
Animated.timing(this.state.backgroundOpacity, {
toValue: 0,
duration: BACKGROUND_ANIMATION_DURATION,
useNativeDriver: useNativeDriverForColorAnimations,
easing: Easing.out(Easing.quad),
easing: HIDE_EASING,
}),
]).start(() => {
// Change of the state unmount the component
Expand Down
14 changes: 10 additions & 4 deletions packages/core/tsconfig.build.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,23 @@
// subpath export, which classic `node` resolution can't follow. Point directly at its types.
"@sentry/bundler-plugins/babel-plugin": [
"./node_modules/@sentry/bundler-plugins/build/types/babel-plugin/index.d.ts"
]
],
// react-native >=0.87 dropped its root `types` field; its type definitions are now only
// reachable through the package `exports` map, which classic `node` resolution can't follow.
// Point directly at the shipped legacy type definitions (what earlier RN versions' root
// `types` field resolved to), so both `import ... from 'react-native'` and the global types
// keep resolving.
"react-native": ["./node_modules/react-native/types/index.d.ts"]
},
"outDir": "dist",
"rootDir": "src",
"lib": [
"es7"
],
"jsx": "react",
"types": [
"react-native"
],
// react-native's global types are pulled in via the `paths` mapping above; classic `node`
// resolution can no longer discover them through the removed root `types` field.
"types": [],
"target": "es6",
"module": "es6",
"skipLibCheck": true,
Expand Down
2 changes: 1 addition & 1 deletion packages/core/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@
"compilerOptions": {
"rootDir": ".",
"jsx": "react",
"types": ["jest", "react-native"]
"types": ["jest"]
}
}
9 changes: 7 additions & 2 deletions packages/core/tsconfig.lint.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,16 @@
// subpath export, which classic `node` resolution can't follow. Point directly at its types.
"@sentry/bundler-plugins/babel-plugin": [
"./node_modules/@sentry/bundler-plugins/build/types/babel-plugin/index.d.ts"
]
],
// react-native >=0.87 dropped its root `types` field; its type definitions are now only
// reachable through the package `exports` map, which classic `node` resolution can't follow.
// Point directly at the shipped legacy type definitions (what earlier RN versions' root
// `types` field resolved to).
"react-native": ["./node_modules/react-native/types/index.d.ts"]
},
"lib": ["es7"],
"jsx": "react",
"types": ["jest", "react-native"],
"types": ["jest"],
"target": "es6",
"module": "es6",
"skipLibCheck": true,
Expand Down
2 changes: 1 addition & 1 deletion performance-tests/TestAppPlain/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ android {
// see https://reactnative.dev/docs/signed-apk-android.
signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,21 @@ import com.facebook.react.PackageList
import com.facebook.react.ReactApplication
import com.facebook.react.ReactHost
import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative
import com.facebook.react.ReactNativeHost
import com.facebook.react.ReactPackage
import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
import com.facebook.react.defaults.DefaultReactNativeHost

class MainApplication :
Application(),
ReactApplication {
override val reactNativeHost: ReactNativeHost =
object : DefaultReactNativeHost(this) {
override fun getPackages(): List<ReactPackage> =
override val reactHost: ReactHost by lazy {
getDefaultReactHost(
context = applicationContext,
packageList =
PackageList(this).packages.apply {
// Packages that cannot be autolinked yet can be added manually here, for example:
// add(MyReactNativePackage())
}

override fun getJSMainModuleName(): String = "index"

override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG

override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
}

override val reactHost: ReactHost
get() = getDefaultReactHost(applicationContext, reactNativeHost)
},
)
}

override fun onCreate() {
super.onCreate()
Expand Down
6 changes: 3 additions & 3 deletions performance-tests/TestAppPlain/android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
buildscript {
ext {
buildToolsVersion = "36.0.0"
buildToolsVersion = "37.0.0"
minSdkVersion = 24
compileSdkVersion = 36
compileSdkVersion = 37
targetSdkVersion = 36
ndkVersion = "27.1.12297006"
kotlinVersion = "2.1.20"
kotlinVersion = "2.2.0"
}
repositories {
google()
Expand Down
5 changes: 5 additions & 0 deletions performance-tests/TestAppPlain/android/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true

# Opt out of built-in kotlin and new DSL behavior that ships with AGP 9.
# Starting from AGP 10.x these opt outs will be removed.
android.builtInKotlin=false
android.newDsl=false

# Use this property to specify which architecture you want to build.
# You can also override it from the CLI using
# ./gradlew <task> -PreactNativeArchitectures=x86_64
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
8 changes: 4 additions & 4 deletions performance-tests/TestAppPlain/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
},
"dependencies": {
"react": "19.2.3",
"react-native": "0.86.2"
"react-native": "0.87.1"
},
"devDependencies": {
"@babel/core": "^7.25.2",
Expand All @@ -18,9 +18,9 @@
"@react-native-community/cli": "20.1.3",
"@react-native-community/cli-platform-android": "20.1.3",
"@react-native-community/cli-platform-ios": "20.1.3",
"@react-native/babel-preset": "0.86.2",
"@react-native/metro-config": "0.86.2",
"@react-native/typescript-config": "0.86.2",
"@react-native/babel-preset": "0.87.1",
"@react-native/metro-config": "0.87.1",
"@react-native/typescript-config": "0.87.1",
"@types/jest": "^29.5.13",
"@types/react": "^19.1.1",
"@types/react-test-renderer": "^19.1.0",
Expand Down
2 changes: 1 addition & 1 deletion performance-tests/TestAppSentry/android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ android {
// see https://reactnative.dev/docs/signed-apk-android.
signingConfig signingConfigs.debug
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
}
}
}
Expand Down
Loading
Loading