Skip to content

Commit

Permalink
Add newly recommended method for RCTLinkingManager due to deprecation
Browse files Browse the repository at this point in the history
Summary:
What existing problem does the pull request solve?

Beginning in iOS9, Apple has deprecated `-application:openURL:sourceApplication:annotations:`

`- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;`

This PR uses the newly recommended method:

`- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)`

while meanwhile, leaving the deprecated one for developers wishing to use the older `-application:openURL:sourceApplication:annotations:` for apps that support versions 8.x or less.

Benefits will include:
- [x] less warnings
- [x] official deprecation should happen when iOS 11 is deployed
- [x] TVOS support
Closes #13615

Differential Revision: D4987980

Pulled By: javache

fbshipit-source-id: ae07715a55ca627860262a9c8cf7df1e3c5e752b
  • Loading branch information
jasonnoahchoi authored and facebook-github-bot committed May 25, 2017
1 parent 9b4a644 commit ff78a8d
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 17 deletions.
23 changes: 10 additions & 13 deletions Libraries/Linking/Linking.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,37 +72,35 @@ const LinkingManager = Platform.OS === 'android' ?
* execution, you'll need to add the following lines to your `*AppDelegate.m`:
*
* ```
* // iOS 10
* // iOS 9.x or newer
* #import <React/RCTLinkingManager.h>
*
* - (BOOL)application:(UIApplication *)application
* openURL:(NSURL *)url
* options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
* {
*
* return [RCTLinkingManager application:application openURL:url
* sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
* annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
*
* return [RCTLinkingManager application:app openURL:url options:options];
* }
* ```
*
* If you're targeting iOS 9 or older, you can use the following code instead:
* If you're targeting iOS 8.x or older, you can use the following code instead:
*
* ```
* // iOS 9 or older
* // iOS 8.x or older
* #import <React/RCTLinkingManager.h>
*
* - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
* sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
* {
* return [RCTLinkingManager application:application openURL:url
* sourceApplication:sourceApplication annotation:annotation];
* sourceApplication:sourceApplication annotation:annotation];
* }
* ```
*
* If your app is using [Universal Links](https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html),
*
*
* // If your app is using [Universal Links](https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html),
* you'll need to add the following code as well:
*
*
* ```
* - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
* restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
Expand All @@ -111,7 +109,6 @@ const LinkingManager = Platform.OS === 'android' ?
* continueUserActivity:userActivity
* restorationHandler:restorationHandler];
* }
*
* ```
*
* And then on your React component you'll be able to listen to the events on
Expand Down
4 changes: 4 additions & 0 deletions Libraries/LinkingIOS/RCTLinkingManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@

@interface RCTLinkingManager : RCTEventEmitter

+ (BOOL)application:(UIApplication *)app
openURL:(NSURL *)URL
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options;

+ (BOOL)application:(UIApplication *)application
openURL:(NSURL *)URL
sourceApplication:(NSString *)sourceApplication
Expand Down
22 changes: 18 additions & 4 deletions Libraries/LinkingIOS/RCTLinkingManager.m
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@

NSString *const RCTOpenURLNotification = @"RCTOpenURLNotification";


static void postNotificationWithURL(NSURL *URL, id sender)
{
NSDictionary<NSString *, id> *payload = @{@"url": URL.absoluteString};
[[NSNotificationCenter defaultCenter] postNotificationName:RCTOpenURLNotification
object:sender
userInfo:payload];
}

@implementation RCTLinkingManager

RCT_EXPORT_MODULE()
Expand Down Expand Up @@ -42,15 +51,20 @@ - (void)stopObserving
return @[@"url"];
}

+ (BOOL)application:(UIApplication *)app
openURL:(NSURL *)URL
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
postNotificationWithURL(URL, self);
return YES;
}

+ (BOOL)application:(UIApplication *)application
openURL:(NSURL *)URL
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
{
NSDictionary<NSString *, id> *payload = @{@"url": URL.absoluteString};
[[NSNotificationCenter defaultCenter] postNotificationName:RCTOpenURLNotification
object:self
userInfo:payload];
postNotificationWithURL(URL, self);
return YES;
}

Expand Down
6 changes: 6 additions & 0 deletions RNTester/RNTester/AppDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,12 @@ - (NSURL *)sourceURLForBridge:(__unused RCTBridge *)bridge
fallbackResource:nil];
}

- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
return [RCTLinkingManager application:app openURL:url options:options];
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
Expand Down

0 comments on commit ff78a8d

Please sign in to comment.