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
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [2.3.4] - 2026-06-03

### Fixed
- Fixed session recordings associating events with the wrong DevRev workspace.
- [iOS] Fixed crashes from thread-unsafe access.
- [Android] Fixed masking issues on rapid scrolls.
- [Android] Fixed an issue with missing crash types.

## [2.3.3] - 2026-05-26

### Fixed
Expand Down
22 changes: 16 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -679,15 +679,25 @@ DevRev.processPushNotification(JSON.stringify(messageJson));

##### iOS

On iOS devices, you must pass the received push notification payload to the DevRev SDK for processing. The SDK handles the notification and executes the necessary actions.
On iOS, the `AppDelegate` must be updated to intercept notification clicks and forward the payload to the SDK.

```typescript
DevRev.processPushNotification(payload: string)
In `didFinishLaunchingWithOptions`, set the `UNUserNotificationCenter` delegate:

```swift
UNUserNotificationCenter.current().delegate = self
```

For example:
```typescript
DevRev.processPushNotification(JSON.stringify(payload));
Implement `userNotificationCenter(_:didReceive:)` to pass the notification payload to the SDK:

```swift
func userNotificationCenter(
_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse
) async {
await DevRev.processPushNotification(
response.notification.request.content.userInfo
)
}
```

## Sample app (without framework)
Expand Down
Binary file added devrev-sdk-react-native-2.3.4.tgz
Binary file not shown.
2 changes: 1 addition & 1 deletion sample/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"build:ios": "react-native build-ios --scheme DevRevSDKSample --mode Debug --extra-params \"-sdk iphonesimulator CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ GCC_OPTIMIZATION_LEVEL=0 GCC_PRECOMPILE_PREFIX_HEADER=YES ASSETCATALOG_COMPILER_OPTIMIZATION=time DEBUG_INFORMATION_FORMAT=dwarf COMPILER_INDEX_STORE_ENABLE=NO\""
},
"dependencies": {
"@devrev/sdk-react-native": "^2.3.3",
"@devrev/sdk-react-native": "^2.3.4",
"@notifee/react-native": "^9.1.3",
"@react-native-community/cli-platform-ios": "^13.6.9",
"@react-native-firebase/app": "^21.0.0",
Expand Down
107 changes: 107 additions & 0 deletions sample/react-native/ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,120 @@ target 'DevRevSDKSampleRN' do
:path => config[:reactNativePath],
:app_path => "#{Pod::Config.instance.installation_root}/.."
)
end

post_install do |installer|
react_native_post_install(
installer,
'../node_modules/react-native',
:mac_catalyst_enabled => false,
# :ccache_enabled => true
)
end

# Run after CocoaPods integrates the user project so generated files are final.
post_integrate do |installer|
# CocoaPods SPM integration can assign DevRevSDK the same UUID as the Pods project
# root object (46EB2E00000000), which corrupts Pods.xcodeproj and prevents Xcode from
# loading any pod dependencies (manifesting as "No such module 'React'").
pods_pbxproj_path = File.join(installer.sandbox.root, 'Pods.xcodeproj', 'project.pbxproj')
if File.exist?(pods_pbxproj_path)
content = File.read(pods_pbxproj_path)
root_uuid = '46EB2E00000000'
devrev_product_uuid = '46EB2E00033F40'
package_ref_uuid = '46EB2E00033F30'
spm_collision = content.match?(
/#{root_uuid} \/\* DevRevSDK \*\/ = \{\n\t\t\tisa = XCSwiftPackageProductDependency;/,
)

post_install do |installer|
react_native_post_install(
installer,
config[:reactNativePath],
:mac_catalyst_enabled => false,
# :ccache_enabled => true
if spm_collision && !content.include?('isa = PBXProject')
content = content.gsub(
"#{root_uuid} /* DevRevSDK */",
"#{devrev_product_uuid} /* DevRevSDK */",
)
target_uuids = content.scan(
/\t\t([A-F0-9]+) \/\* .+ \*\/ = \{\n\t\t\tisa = PBX(?:Native|Aggregate)Target;/,
).flatten
targets_section = target_uuids.map { |uuid| "\t\t\t\t#{uuid}," }.join("\n")
pbx_project = <<~PROJECT
/* Begin PBXProject section */
\t\t#{root_uuid} /* Project object */ = {
\t\t\tisa = PBXProject;
\t\t\tattributes = {
\t\t\t\tBuildIndependentTargetsInParallel = YES;
\t\t\t\tLastSwiftUpdateCheck = 1600;
\t\t\t\tLastUpgradeCheck = 1600;
\t\t\t};
\t\t\tbuildConfigurationList = 46EB2E00000030 /* Build configuration list for PBXProject "Pods" */;
\t\t\tcompatibilityVersion = "Xcode 8.0";
\t\t\tdevelopmentRegion = en;
\t\t\thasScannedForEncodings = 0;
\t\t\tknownRegions = (
\t\t\t\ten,
\t\t\t\tBase,
\t\t\t);
\t\t\tmainGroup = 46EB2E00000010;
\t\t\tpackageReferences = (
\t\t\t\t#{package_ref_uuid} /* XCRemoteSwiftPackageReference "devrev-sdk-ios" */,
\t\t\t);
\t\t\tproductRefGroup = 46EB2E00000020 /* Products */;
\t\t\tprojectDirPath = "";
\t\t\tprojectRoot = "";
\t\t\ttargets = (
#{targets_section}
\t\t\t);
\t\t};
/* End PBXProject section */

PROJECT
content = content.sub(
'/* Begin XCSwiftPackageProductDependency section */',
"#{pbx_project}/* Begin XCSwiftPackageProductDependency section */",
)
File.write(pods_pbxproj_path, content)
end
end

# DevRevSDK is pulled in via SPM (see devrev-sdk-react-native.podspec). CocoaPods embeds
# devrev_sdk_react_native.framework but not the transitive SPM product DevRevSDK.framework,
# which causes a dyld crash at launch on device.
frameworks_support_dir = File.join(
installer.sandbox.root,
'Target Support Files',
'Pods-DevRevSDKSampleRN',
)
devrev_bridge_framework_line =
'install_framework "${BUILT_PRODUCTS_DIR}/devrev-sdk-react-native/devrev_sdk_react_native.framework"'
devrev_sdk_install_block = <<~'SHELL'.gsub(/^/, ' ')
if [ -r "${BUILT_PRODUCTS_DIR}/DevRevSDK.framework" ]; then
install_framework "${BUILT_PRODUCTS_DIR}/DevRevSDK.framework"
elif [ -r "${BUILT_PRODUCTS_DIR}/devrev-sdk-react-native/DevRevSDK.framework" ]; then
install_framework "${BUILT_PRODUCTS_DIR}/devrev-sdk-react-native/DevRevSDK.framework"
fi
SHELL

frameworks_script = File.join(
frameworks_support_dir,
'Pods-DevRevSDKSampleRN-frameworks.sh',
)
if File.exist?(frameworks_script)
script_contents = File.read(frameworks_script)
script_contents = script_contents.gsub(
/^\s*install_framework "\$\{BUILT_PRODUCTS_DIR\}\/DevRevSDK\.framework"\n?/m,
'',
)
unless script_contents.include?('devrev-sdk-react-native/DevRevSDK.framework')
script_contents = script_contents.gsub(
devrev_bridge_framework_line,
"#{devrev_bridge_framework_line}\n#{devrev_sdk_install_block}",
)
end
File.write(frameworks_script, script_contents)
end
end
150 changes: 108 additions & 42 deletions sample/react-native/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -29,35 +29,35 @@ PODS:
- DoubleConversion (1.1.6)
- fast_float (6.1.4)
- FBLazyVector (0.79.7)
- Firebase/CoreOnly (11.11.0):
- FirebaseCore (~> 11.11.0)
- Firebase/Installations (11.11.0):
- Firebase/CoreOnly (12.10.0):
- FirebaseCore (~> 12.10.0)
- Firebase/Installations (12.10.0):
- Firebase/CoreOnly
- FirebaseInstallations (~> 11.11.0)
- Firebase/Messaging (11.11.0):
- FirebaseInstallations (~> 12.10.0)
- Firebase/Messaging (12.10.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 11.11.0)
- FirebaseCore (11.11.0):
- FirebaseCoreInternal (~> 11.11.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/Logger (~> 8.0)
- FirebaseCoreExtension (11.11.0):
- FirebaseCore (~> 11.11.0)
- FirebaseCoreInternal (11.11.0):
- "GoogleUtilities/NSData+zlib (~> 8.0)"
- FirebaseInstallations (11.11.0):
- FirebaseCore (~> 11.11.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- FirebaseMessaging (~> 12.10.0)
- FirebaseCore (12.10.0):
- FirebaseCoreInternal (~> 12.10.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Logger (~> 8.1)
- FirebaseCoreExtension (12.10.0):
- FirebaseCore (~> 12.10.0)
- FirebaseCoreInternal (12.10.0):
- "GoogleUtilities/NSData+zlib (~> 8.1)"
- FirebaseInstallations (12.10.0):
- FirebaseCore (~> 12.10.0)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- PromisesObjC (~> 2.4)
- FirebaseMessaging (11.11.0):
- FirebaseCore (~> 11.11.0)
- FirebaseInstallations (~> 11.0)
- GoogleDataTransport (~> 10.0)
- GoogleUtilities/AppDelegateSwizzler (~> 8.0)
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/Reachability (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- FirebaseMessaging (12.10.0):
- FirebaseCore (~> 12.10.0)
- FirebaseInstallations (~> 12.10.0)
- GoogleDataTransport (~> 10.1)
- GoogleUtilities/AppDelegateSwizzler (~> 8.1)
- GoogleUtilities/Environment (~> 8.1)
- GoogleUtilities/Reachability (~> 8.1)
- GoogleUtilities/UserDefaults (~> 8.1)
- nanopb (~> 3.30910.0)
- fmt (11.0.2)
- glog (0.3.5)
Expand Down Expand Up @@ -1896,18 +1896,84 @@ PODS:
- React-utils (= 0.79.7)
- RNDeviceInfo (14.1.1):
- React-Core
- RNFBApp (21.14.0):
- Firebase/CoreOnly (= 11.11.0)
- RNFBApp (24.0.0):
- DoubleConversion
- Firebase/CoreOnly (= 12.10.0)
- glog
- hermes-engine
- RCT-Folly (= 2024.11.18.00)
- RCTRequired
- RCTTypeSafety
- React-Core
- RNFBInstallations (21.14.0):
- Firebase/Installations (= 11.11.0)
- React-debug
- React-Fabric
- React-featureflags
- React-graphics
- React-hermes
- React-ImageManager
- React-jsi
- React-NativeModulesApple
- React-RCTFabric
- React-renderercss
- React-rendererdebug
- React-utils
- ReactCodegen
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- Yoga
- RNFBInstallations (24.0.0):
- DoubleConversion
- Firebase/Installations (= 12.10.0)
- glog
- hermes-engine
- RCT-Folly (= 2024.11.18.00)
- RCTRequired
- RCTTypeSafety
- React-Core
- React-debug
- React-Fabric
- React-featureflags
- React-graphics
- React-hermes
- React-ImageManager
- React-jsi
- React-NativeModulesApple
- React-RCTFabric
- React-renderercss
- React-rendererdebug
- React-utils
- ReactCodegen
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- RNFBApp
- RNFBMessaging (21.14.0):
- Firebase/Messaging (= 11.11.0)
- Yoga
- RNFBMessaging (24.0.0):
- DoubleConversion
- Firebase/Messaging (= 12.10.0)
- FirebaseCoreExtension
- glog
- hermes-engine
- RCT-Folly (= 2024.11.18.00)
- RCTRequired
- RCTTypeSafety
- React-Core
- React-debug
- React-Fabric
- React-featureflags
- React-graphics
- React-hermes
- React-ImageManager
- React-jsi
- React-NativeModulesApple
- React-RCTFabric
- React-renderercss
- React-rendererdebug
- React-utils
- ReactCodegen
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- RNFBApp
- Yoga
- RNGestureHandler (2.31.2):
- DoubleConversion
- glog
Expand Down Expand Up @@ -2272,12 +2338,12 @@ SPEC CHECKSUMS:
DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb
fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6
FBLazyVector: b60fe06f0f15b7d7408f169442176e69e8eeacde
Firebase: 6a8f201c61eda24e98f1ce2b44b1b9c2caf525cc
FirebaseCore: 2321536f9c423b1f857e047a82b8a42abc6d9e2c
FirebaseCoreExtension: 3a64994969dd05f4bcb7e6896c654eded238e75b
FirebaseCoreInternal: 31ee350d87b30a9349e907f84bf49ef8e6791e5a
FirebaseInstallations: 781e0e37aa0e1c92b44d00e739aba79ad31b2dba
FirebaseMessaging: c7be9357fd8ba33bc45b9a6c3cdff0b466e1e2a4
Firebase: 99f203d3a114c6ba591f3b32263a9626e450af65
FirebaseCore: f4428e22415ea3b3eca652c2098413dabf2a23a9
FirebaseCoreExtension: 3473a6ec16a91aee29fb75994a86c0220d2cddf3
FirebaseCoreInternal: e7bbaeb00ab73011298f35ed223aa7371e212948
FirebaseInstallations: 047343aa91fd6a1ebfa3eb374ddecf36a8aaddfd
FirebaseMessaging: ed18fb50634e6e85b5d3e77e628c21e2c928cc53
fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd
glog: 5683914934d5b6e4240e497e0f4a3b42d1854183
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
Expand Down Expand Up @@ -2354,15 +2420,15 @@ SPEC CHECKSUMS:
ReactCodegen: 7241880e54e276454ced5735f7d422df215bec6e
ReactCommon: 7aecadba671f30ab03ce021f3c6445ef8acafa9a
RNDeviceInfo: bcce8752b5043a623fe3c26789679b473f705d3c
RNFBApp: 4105e54d9ca4a1c10893a032268470f670181110
RNFBInstallations: 0af3ed83ee414205ae466cc5dde4864c01179f99
RNFBMessaging: 6857871d9dff8f26b0c325fc7d97ba69cb77d213
RNFBApp: f55df7179df53e5b9bfce30b4401d88719a3bf3e
RNFBInstallations: 533a3f89922cf8da06147176127beb06f03a1ba3
RNFBMessaging: 8e747b6a477b4ee27b8cefde1e94a215b22bd860
RNGestureHandler: ee4fab31b7325a6090ccd19392800a5e0911a2d5
RNSVG: 0917f41364761ab9f5f488a51c3d10428c3c8dd1
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
VisionCamera: 7187b3dac1ff3071234ead959ce311875748e14f
Yoga: fce72270ebed754904bbe5e18bb05cda3c3075db

PODFILE CHECKSUM: 77a3bbff7d76f2ae1551ede8ef62e45eff2a9e3b
PODFILE CHECKSUM: a8ae828ef7e9fd31bc746cdb10b7fd09691841f4

COCOAPODS: 1.16.2
9 changes: 6 additions & 3 deletions sample/react-native/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@
},
"dependencies": {
"@devrev/sdk-react-native": "workspace:*",
"@react-native-firebase/app": "^21.0.0",
"@react-native-firebase/installations": "^21.0.0",
"@react-native-firebase/messaging": "^21.0.0",
"@react-native-firebase/app": "^24.0.0",
"@react-native-firebase/installations": "^24.0.0",
"@react-native-firebase/messaging": "^24.0.0",
"lottie-react-native": "^7.3.6",
"react-native-device-info": "^14.0.1",
"react-native-gifted-charts": "^1.4.74",
Expand Down Expand Up @@ -72,6 +72,9 @@
]
}
},
"resolutions": {
"protobufjs": ">=7.5.8"
},
"peerDependencies": {
"@react-navigation/native": "^6.0.8",
"@react-navigation/stack": "^6.3.21",
Expand Down
Loading