44
55#import " flutter/shell/platform/darwin/ios/framework/Headers/FlutterAppDelegate.h"
66
7- #import " flutter/fml/logging.h"
7+ #include " flutter/fml/logging.h"
88#import " flutter/shell/platform/darwin/ios/framework/Headers/FlutterPluginAppLifeCycleDelegate.h"
99#import " flutter/shell/platform/darwin/ios/framework/Headers/FlutterViewController.h"
10- #import " flutter/shell/platform/darwin/ios/framework/Source/FlutterAppDelegate_Test.h"
11- #import " flutter/shell/platform/darwin/ios/framework/Source/FlutterEngine_Internal.h"
1210#import " flutter/shell/platform/darwin/ios/framework/Source/FlutterPluginAppLifeCycleDelegate_internal.h"
1311
1412static NSString * kUIBackgroundMode = @" UIBackgroundModes" ;
1513static NSString * kRemoteNotificationCapabitiliy = @" remote-notification" ;
1614static NSString * kBackgroundFetchCapatibility = @" fetch" ;
1715
18- @interface FlutterAppDelegate ()
19- @property (nonatomic , copy ) FlutterViewController* (^rootFlutterViewControllerGetter)(void );
20- @end
21-
2216@implementation FlutterAppDelegate {
2317 FlutterPluginAppLifeCycleDelegate* _lifeCycleDelegate;
2418}
@@ -32,7 +26,6 @@ - (instancetype)init {
3226
3327- (void )dealloc {
3428 [_lifeCycleDelegate release ];
35- [_rootFlutterViewControllerGetter release ];
3629 [super dealloc ];
3730}
3831
@@ -48,13 +41,10 @@ - (BOOL)application:(UIApplication*)application
4841
4942// Returns the key window's rootViewController, if it's a FlutterViewController.
5043// Otherwise, returns nil.
51- - (FlutterViewController*)rootFlutterViewController {
52- if (_rootFlutterViewControllerGetter != nil ) {
53- return _rootFlutterViewControllerGetter ();
54- }
55- UIViewController* rootViewController = _window.rootViewController ;
56- if ([rootViewController isKindOfClass: [FlutterViewController class ]]) {
57- return (FlutterViewController*)rootViewController;
44+ + (FlutterViewController*)rootFlutterViewController {
45+ UIViewController* viewController = [UIApplication sharedApplication ].keyWindow .rootViewController ;
46+ if ([viewController isKindOfClass: [FlutterViewController class ]]) {
47+ return (FlutterViewController*)viewController;
5848 }
5949 return nil ;
6050}
@@ -134,28 +124,7 @@ - (void)userNotificationCenter:(UNUserNotificationCenter*)center
134124- (BOOL )application : (UIApplication*)application
135125 openURL : (NSURL *)url
136126 options : (NSDictionary <UIApplicationOpenURLOptionsKey, id>*)options {
137- if ([_lifeCycleDelegate application: application openURL: url options: options]) {
138- return YES ;
139- } else {
140- FlutterViewController* flutterViewController = [self rootFlutterViewController ];
141- if (flutterViewController) {
142- [flutterViewController.engine
143- waitForFirstFrame: 3.0
144- callback: ^(BOOL didTimeout) {
145- if (didTimeout) {
146- FML_LOG (ERROR)
147- << " Timeout waiting for the first frame when launching an URL." ;
148- } else {
149- [flutterViewController.engine.navigationChannel invokeMethod: @" pushRoute"
150- arguments: url.path];
151- }
152- }];
153- return YES ;
154- } else {
155- FML_LOG (ERROR) << " Attempting to open an URL without a Flutter RootViewController." ;
156- return NO ;
157- }
158- }
127+ return [_lifeCycleDelegate application: application openURL: url options: options];
159128}
160129
161130- (BOOL )application : (UIApplication*)application handleOpenURL : (NSURL *)url {
@@ -206,25 +175,27 @@ - (BOOL)application:(UIApplication*)application
206175#pragma mark - FlutterPluginRegistry methods. All delegating to the rootViewController
207176
208177- (NSObject <FlutterPluginRegistrar>*)registrarForPlugin:(NSString *)pluginKey {
209- FlutterViewController* flutterRootViewController = [self rootFlutterViewController ];
210- if (flutterRootViewController) {
211- return [[flutterRootViewController pluginRegistry ] registrarForPlugin: pluginKey];
178+ UIViewController* rootViewController = _window.rootViewController ;
179+ if ([rootViewController isKindOfClass: [FlutterViewController class ]]) {
180+ return
181+ [[(FlutterViewController*)rootViewController pluginRegistry ] registrarForPlugin: pluginKey];
212182 }
213183 return nil ;
214184}
215185
216186- (BOOL )hasPlugin:(NSString *)pluginKey {
217- FlutterViewController* flutterRootViewController = [ self rootFlutterViewController ] ;
218- if (flutterRootViewController ) {
219- return [[flutterRootViewController pluginRegistry ] hasPlugin: pluginKey];
187+ UIViewController* rootViewController = _window. rootViewController ;
188+ if ([rootViewController isKindOfClass: [FlutterViewController class ]] ) {
189+ return [[(FlutterViewController*)rootViewController pluginRegistry ] hasPlugin: pluginKey];
220190 }
221191 return false ;
222192}
223193
224194- (NSObject *)valuePublishedByPlugin:(NSString *)pluginKey {
225- FlutterViewController* flutterRootViewController = [self rootFlutterViewController ];
226- if (flutterRootViewController) {
227- return [[flutterRootViewController pluginRegistry ] valuePublishedByPlugin: pluginKey];
195+ UIViewController* rootViewController = _window.rootViewController ;
196+ if ([rootViewController isKindOfClass: [FlutterViewController class ]]) {
197+ return [[(FlutterViewController*)rootViewController pluginRegistry ]
198+ valuePublishedByPlugin: pluginKey];
228199 }
229200 return nil ;
230201}
0 commit comments