Description
Description
This error occured after upgrading to 0.7x from 0.67 and deeplink worked properly before doing the upgrade.
Have to mention that in both cases (background state & starting through deeplink) the url of the deeplink is there (looking with console.log()).
This error is being thrown only if the app is in background, starting the app through deeplink throws no error.
TypeError: Cannot read property 'apply' of undefined, js engine: hermes
While debugging on simulator, I could just minimize the thrown error and actions defined for the deeplink are processed properly. However the thrown error seems to block the execution of the deeplink actions on a real device.
The error is caused as shown in the thrown error at emit()-method of EventEmitter.js (Line 105):
registration.listener.apply(registration.context, args);
Adding a check if the listener is undefined before execution solves the issue for me and deeplink works as expected (both on the simulator and the real device):
if(typeof registration.listener !== "undefined" )
registration.listener.apply(registration.context, args);
Unfortunately I am not sure, how this does effect the app in general and whether it must be solved by doing something else.
Version
0.70.4
Output of npx react-native info
System:
OS: macOS 13.0
CPU: (8) x64 Intel(R) Core(TM) i5-8257U CPU @ 1.40GHz
Memory: 32.26 MB / 16.00 GB
Shell: 5.8.1 - /bin/zsh
Binaries:
Node: 16.14.0 - /usr/local/bin/node
Yarn: 1.22.19 - /usr/local/bin/yarn
npm: 8.3.1 - /usr/local/bin/npm
Watchman: 2022.03.21.00 - /usr/local/bin/watchman
Managers:
CocoaPods: 1.11.3 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: DriverKit 21.4, iOS 16.0, macOS 12.3, tvOS 16.0, watchOS 9.0
Android SDK:
API Levels: 30, 31, 32
Build Tools: 30.0.2, 30.0.3, 32.0.0, 32.1.0
System Images: android-30 | Google APIs Intel x86 Atom, android-30 | Google Play Intel x86 Atom, android-31 | Google Play Intel x86 Atom_64
Android NDK: Not Found
IDEs:
Android Studio: 2021.2 AI-212.5712.43.2112.8609683
Xcode: 14.0.1/14A400 - /usr/bin/xcodebuild
Languages:
Java: 1.8.0_322 - /usr/bin/javac
npmPackages:
@react-native-community/cli: Not Found
react: 18.1.0 => 18.1.0
react-native: 0.70.4 => 0.70.4
react-native-macos: Not Found
npmGlobalPackages:
react-native: Not Found
Steps to reproduce
Create a project and configure deeplinking using the docs.
Add to AppDelegate.m:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
return [RCTLinkingManager application:application openURL:url options:options];
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
return [RCTLinkingManager application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
}
in JSX:
Linking.getInitialURL().then(url => { //ACTIONS FOR DEEPLINK START }
Linking.addEventListener('url',(url)=>{ //ACTIONS FOR DEEPLINK DURING RUNTIME})