Skip to content

Commit e174e50

Browse files
authored
feat: support for linking in iOS (#268)
* feat: support linking in Expo * chore: add changeset
1 parent 99feb82 commit e174e50

File tree

4 files changed

+65
-0
lines changed

4 files changed

+65
-0
lines changed

.changeset/real-seas-bake.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@callstack/react-native-brownfield': minor
3+
---
4+
5+
feat: support linking in Expo and vanilla

packages/react-native-brownfield/ios/ExpoHostRuntime.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,25 @@ final class ExpoHostRuntime {
9696
) != nil
9797
}
9898

99+
// Linking API; base implementation courtesy of Expo, licensed under the MIT License - changes were made to call the method on expo delegate - https://github.com/expo/expo/blob/main/apps/bare-expo/ios/AppDelegate.swift
100+
func application(
101+
_ app: UIApplication,
102+
open url: URL,
103+
options: [UIApplication.OpenURLOptionsKey: Any] = [:]
104+
) -> Bool {
105+
return (expoDelegate?.application(app, open: url, options: options) ?? false) || RCTLinkingManager.application(app, open: url, options: options)
106+
}
107+
108+
// Universal Links; base implementation courtesy of Expo, licensed under the MIT License - changes were made to call the method on expo delegate - https://github.com/expo/expo/blob/main/apps/bare-expo/ios/AppDelegate.swift
109+
func application(
110+
_ application: UIApplication,
111+
continue userActivity: NSUserActivity,
112+
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
113+
) -> Bool {
114+
let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)
115+
return (expoDelegate?.application(application, continue: userActivity, restorationHandler: restorationHandler) ?? false) || result
116+
}
117+
99118
func view(
100119
moduleName: String,
101120
initialProps: [AnyHashable: Any]?,

packages/react-native-brownfield/ios/ReactNativeBrownfield.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,31 @@ internal import Expo
122122
#endif
123123
}
124124

125+
@objc public func application(
126+
_ app: UIApplication,
127+
open url: URL,
128+
options: [UIApplication.OpenURLOptionsKey: Any] = [:]
129+
) -> Bool {
130+
#if canImport(Expo)
131+
return ExpoHostRuntime.shared.application(app, open: url, options: options)
132+
#else
133+
return ReactNativeHostRuntime.shared.application(app, open: url, options: options)
134+
#endif
135+
}
136+
137+
// Universal Links
138+
@objc public func application(
139+
_ application: UIApplication,
140+
continue userActivity: NSUserActivity,
141+
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
142+
) -> Bool {
143+
#if canImport(Expo)
144+
return ExpoHostRuntime.shared.application(application, continue: userActivity, restorationHandler: restorationHandler)
145+
#else
146+
return ReactNativeHostRuntime.shared.application(application, continue: userActivity, restorationHandler: restorationHandler)
147+
#endif
148+
}
149+
125150
/**
126151
* Starts React Native with optional callback when bundle is loaded.
127152
*

packages/react-native-brownfield/ios/ReactNativeHostRuntime.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,22 @@ final class ReactNativeHostRuntime {
120120
return true
121121
}
122122

123+
public func application(
124+
_ app: UIApplication,
125+
open url: URL,
126+
options: [UIApplication.OpenURLOptionsKey: Any] = [:]
127+
) -> Bool {
128+
return RCTLinkingManager.application(app, open: url, options: options)
129+
}
130+
131+
public func application(
132+
_ application: UIApplication,
133+
continue userActivity: NSUserActivity,
134+
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
135+
) -> Bool {
136+
return RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)
137+
}
138+
123139
/**
124140
* Starts React Native with optional callback when bundle is loaded.
125141
*

0 commit comments

Comments
 (0)