Skip to content

Deeplinking is being interrupted by "Cannot read property 'apply' of undefined". #35577

Closed as not planned
@seco35

Description

@seco35

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})

Snack, code example, screenshot, or link to a repository

Bug

Metadata

Metadata

Assignees

No one assigned

    Labels

    API: LinkingNeeds: Triage 🔍StaleThere has been a lack of activity on this issue and it may be closed soon.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions