Add newly recommended method for RCTLinkingManager due to deprecation

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 https://github.com/facebook/react-native/pull/13615

Differential Revision: D4987980

Pulled By: javache

fbshipit-source-id: ae07715a55ca627860262a9c8cf7df1e3c5e752b
This commit is contained in:
Jason Noah Choi 2017-05-25 11:24:07 -07:00 committed by Facebook Github Bot
parent 9b4a644fec
commit ff78a8de22
4 changed files with 38 additions and 17 deletions

View File

@ -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
@ -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

View File

@ -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

View File

@ -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()
@ -42,15 +51,20 @@ RCT_EXPORT_MODULE()
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;
}

View File

@ -56,6 +56,12 @@
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