From 828bec3ed30e6270a42c80d67b077d5cf5296e67 Mon Sep 17 00:00:00 2001 From: Ryan Heise Date: Thu, 13 Feb 2020 03:58:46 +1100 Subject: [PATCH 1/7] Fix crash on iOS caused by null hostedDomain --- packages/google_sign_in/google_sign_in/CHANGELOG.md | 4 ++++ .../google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m | 1 - .../google_sign_in/google_sign_in/lib/google_sign_in.dart | 2 +- packages/google_sign_in/google_sign_in/pubspec.yaml | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/google_sign_in/google_sign_in/CHANGELOG.md b/packages/google_sign_in/google_sign_in/CHANGELOG.md index efd760773240..5522ede2b85d 100644 --- a/packages/google_sign_in/google_sign_in/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.1.4 + +* Fix crash on iOS caused by null hostedDomain. + ## 4.1.3 * Make plugin example meet naming convention. diff --git a/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m b/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m index dff3481ec16f..09ad0daf7685 100644 --- a/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m +++ b/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m @@ -98,7 +98,6 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result [[GIDSignIn sharedInstance] signIn]; } @catch (NSException *e) { result([FlutterError errorWithCode:@"google_sign_in" message:e.reason details:e.name]); - [e raise]; } } } else if ([call.method isEqualToString:@"getTokens"]) { diff --git a/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart b/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart index 09753377ac76..74d64a2cf346 100644 --- a/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart +++ b/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart @@ -164,7 +164,7 @@ class GoogleSignIn { GoogleSignIn({ this.signInOption = SignInOption.standard, this.scopes = const [], - this.hostedDomain, + this.hostedDomain = '', this.clientId, }); diff --git a/packages/google_sign_in/google_sign_in/pubspec.yaml b/packages/google_sign_in/google_sign_in/pubspec.yaml index afa0a36c4d01..c3de8d22ce79 100644 --- a/packages/google_sign_in/google_sign_in/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in/pubspec.yaml @@ -2,7 +2,7 @@ name: google_sign_in description: Flutter plugin for Google Sign-In, a secure authentication system for signing in with a Google account on Android and iOS. homepage: https://github.com/flutter/plugins/tree/master/packages/google_sign_in/google_sign_in -version: 4.1.3 +version: 4.1.4 flutter: plugin: From 2411dbbd0df208f6bc51046794386309497368cc Mon Sep 17 00:00:00 2001 From: Ryan Heise Date: Sat, 13 Jun 2020 01:13:54 +1000 Subject: [PATCH 2/7] Remove default parameter value for hostedDomain --- packages/google_sign_in/google_sign_in/CHANGELOG.md | 2 +- packages/google_sign_in/google_sign_in/lib/google_sign_in.dart | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google_sign_in/google_sign_in/CHANGELOG.md b/packages/google_sign_in/google_sign_in/CHANGELOG.md index 9c1db8dd8dcc..09689caa8c34 100644 --- a/packages/google_sign_in/google_sign_in/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in/CHANGELOG.md @@ -1,6 +1,6 @@ ## 4.5.2 -* Fix crash on iOS caused by null hostedDomain. +* Prevent exceptions from crashing app on iOS. ## 4.5.1 diff --git a/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart b/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart index 275037ccf599..0f1f15bbb8c4 100644 --- a/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart +++ b/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart @@ -167,7 +167,7 @@ class GoogleSignIn { GoogleSignIn({ this.signInOption = SignInOption.standard, this.scopes = const [], - this.hostedDomain = '', + this.hostedDomain, this.clientId, }); From 87bc053559853b4e73ee50c3538dec731ba48c1c Mon Sep 17 00:00:00 2001 From: Ryan Heise Date: Tue, 11 Aug 2020 01:38:35 +1000 Subject: [PATCH 3/7] Move hostedDomain null check into objective c --- .../google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m b/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m index 66e618b73842..83871e1a7b87 100644 --- a/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m +++ b/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m @@ -80,7 +80,8 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result [GIDSignIn sharedInstance].clientID = plist[kClientIdKey]; [GIDSignIn sharedInstance].serverClientID = plist[kServerClientIdKey]; [GIDSignIn sharedInstance].scopes = call.arguments[@"scopes"]; - [GIDSignIn sharedInstance].hostedDomain = call.arguments[@"hostedDomain"]; + NSString *hostedDomain = call.arguments[@"hostedDomain"]; + [GIDSignIn sharedInstance].hostedDomain = hostedDomain != (id)[NSNull null] ? hostedDomain : @""; result(nil); } else { result([FlutterError errorWithCode:@"missing-config" From e2ee1dfe562b739fdd918e0d2b80e7c61285418f Mon Sep 17 00:00:00 2001 From: Ryan Heise Date: Tue, 11 Aug 2020 02:09:01 +1000 Subject: [PATCH 4/7] Fix formatting --- .../google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m b/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m index 83871e1a7b87..bb9bbdea532c 100644 --- a/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m +++ b/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m @@ -80,8 +80,8 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result [GIDSignIn sharedInstance].clientID = plist[kClientIdKey]; [GIDSignIn sharedInstance].serverClientID = plist[kServerClientIdKey]; [GIDSignIn sharedInstance].scopes = call.arguments[@"scopes"]; - NSString *hostedDomain = call.arguments[@"hostedDomain"]; - [GIDSignIn sharedInstance].hostedDomain = hostedDomain != (id)[NSNull null] ? hostedDomain : @""; + NSString *hostedDomain = call.arguments[@"hostedDomain"]; + [GIDSignIn sharedInstance].hostedDomain = hostedDomain != (id)[NSNull null] ? hostedDomain : @""; result(nil); } else { result([FlutterError errorWithCode:@"missing-config" From 90372aaacd26b2c22b661c20a6d82d86691ee0d6 Mon Sep 17 00:00:00 2001 From: Ryan Heise Date: Tue, 11 Aug 2020 02:15:35 +1000 Subject: [PATCH 5/7] Update version in pubspec only --- packages/google_sign_in/google_sign_in/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/google_sign_in/google_sign_in/pubspec.yaml b/packages/google_sign_in/google_sign_in/pubspec.yaml index a7de7a663a9e..a13f81a0f0db 100644 --- a/packages/google_sign_in/google_sign_in/pubspec.yaml +++ b/packages/google_sign_in/google_sign_in/pubspec.yaml @@ -2,7 +2,7 @@ name: google_sign_in description: Flutter plugin for Google Sign-In, a secure authentication system for signing in with a Google account on Android and iOS. homepage: https://github.com/flutter/plugins/tree/master/packages/google_sign_in/google_sign_in -version: 4.5.2 +version: 4.5.3 flutter: plugin: From f6b409dc00d8ae0b02fbc3705a181b52cd5080e7 Mon Sep 17 00:00:00 2001 From: Ryan Heise Date: Tue, 11 Aug 2020 02:39:11 +1000 Subject: [PATCH 6/7] format --- .../google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m b/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m index bb9bbdea532c..21884f6584c4 100644 --- a/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m +++ b/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m @@ -81,7 +81,8 @@ - (void)handleMethodCall:(FlutterMethodCall *)call result:(FlutterResult)result [GIDSignIn sharedInstance].serverClientID = plist[kServerClientIdKey]; [GIDSignIn sharedInstance].scopes = call.arguments[@"scopes"]; NSString *hostedDomain = call.arguments[@"hostedDomain"]; - [GIDSignIn sharedInstance].hostedDomain = hostedDomain != (id)[NSNull null] ? hostedDomain : @""; + [GIDSignIn sharedInstance].hostedDomain = + hostedDomain != (id)[NSNull null] ? hostedDomain : @""; result(nil); } else { result([FlutterError errorWithCode:@"missing-config" From 56663bd8e9b16883f5b3683babab1e268b523145 Mon Sep 17 00:00:00 2001 From: Ryan Heise Date: Mon, 17 Aug 2020 23:14:58 +1000 Subject: [PATCH 7/7] Call method channel on main thread --- .../google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m b/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m index 21884f6584c4..90802035afd6 100644 --- a/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m +++ b/packages/google_sign_in/google_sign_in/ios/Classes/FLTGoogleSignInPlugin.m @@ -241,9 +241,11 @@ - (void)signIn:(GIDSignIn *)signIn #pragma mark - private methods - (void)respondWithAccount:(id)account error:(NSError *)error { - FlutterResult result = _accountRequest; - _accountRequest = nil; - result(error != nil ? getFlutterError(error) : account); + dispatch_async(dispatch_get_main_queue(), ^{ + FlutterResult result = _accountRequest; + _accountRequest = nil; + result(error != nil ? getFlutterError(error) : account); + }); } - (UIViewController *)topViewController {