[google_sign_in] Add macOS support (#4962)
Adds macOS support to `google_sign_in_ios` by moving the existing source to `darwin/`, adjusting it somewhat to be macOS-compatible, and enabling `sharedDarwinSource` in the podspec. Unlike previous cases of code sharing, this doesn't rename the package to be something more generic, since when we do that the name is based on the underlying SDK, and the SDK is still mostly called "Google Sign-In for iOS", so I don't think there's a better name to give it at the moment. Most of https://github.com/flutter/flutter/issues/46157 (Once this lands, there will be a follow-up PR to update the app-facing package to endorse it and list it in the README.)
10
.ci/scripts/update_pods.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright 2013 The Flutter Authors. All rights reserved.
|
||||||
|
# Use of this source code is governed by a BSD-style license that can be
|
||||||
|
# found in the LICENSE file.
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Ensure that the pods repos are up to date, since analyze will not check for
|
||||||
|
# the latest versions of pods, so can use stale Flutter or FlutterMacOS pods
|
||||||
|
# for analysis otherwise.
|
||||||
|
pod repo update --verbose
|
@ -2,6 +2,9 @@ tasks:
|
|||||||
- name: prepare tool
|
- name: prepare tool
|
||||||
script: .ci/scripts/prepare_tool.sh
|
script: .ci/scripts/prepare_tool.sh
|
||||||
infra_step: true # Note infra steps failing prevents "always" from running.
|
infra_step: true # Note infra steps failing prevents "always" from running.
|
||||||
|
- name: update pods repo
|
||||||
|
script: .ci/scripts/update_pods.sh
|
||||||
|
infra_step: true # Note infra steps failing prevents "always" from running.
|
||||||
- name: validate iOS and macOS podspecs
|
- name: validate iOS and macOS podspecs
|
||||||
script: script/tool_runner.sh
|
script: script/tool_runner.sh
|
||||||
args: ["podspec-check"]
|
args: ["podspec-check"]
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
## NEXT
|
## 5.7.0
|
||||||
|
|
||||||
* Updates minimum supported SDK version to Flutter 3.10/Dart 3.0.
|
* Adds support for macOS.
|
||||||
|
* Updates minimum supported SDK version to Flutter 3.16/Dart 3.2.
|
||||||
|
|
||||||
## 5.6.5
|
## 5.6.5
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# google\_sign\_in\_ios
|
# google\_sign\_in\_ios
|
||||||
|
|
||||||
The iOS implementation of [`google_sign_in`][1].
|
The iOS and macOS implementation of [`google_sign_in`][1].
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@ -11,6 +11,21 @@ so you do not need to add it to your `pubspec.yaml`.
|
|||||||
However, if you `import` this package to use any of its APIs directly, you
|
However, if you `import` this package to use any of its APIs directly, you
|
||||||
should add it to your `pubspec.yaml` as usual.
|
should add it to your `pubspec.yaml` as usual.
|
||||||
|
|
||||||
|
### macOS setup
|
||||||
|
|
||||||
|
The GoogleSignIn SDK requires keychain sharing to be enabled, by [adding the
|
||||||
|
following entitlements](https://docs.flutter.dev/platform-integration/macos/building#entitlements-and-the-app-sandbox):
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<key>keychain-access-groups</key>
|
||||||
|
<array>
|
||||||
|
<string>$(AppIdentifierPrefix)com.google.GIDSignIn</string>
|
||||||
|
</array>
|
||||||
|
```
|
||||||
|
|
||||||
|
Without this step, the plugin will throw a `keychain error` `PlatformException`
|
||||||
|
when trying to sign in.
|
||||||
|
|
||||||
[1]: https://pub.dev/packages/google_sign_in
|
[1]: https://pub.dev/packages/google_sign_in
|
||||||
[2]: https://flutter.dev/docs/development/packages-and-plugins/developing-packages#endorsed-federated-plugin
|
[2]: https://flutter.dev/docs/development/packages-and-plugins/developing-packages#endorsed-federated-plugin
|
||||||
|
|
||||||
|
@ -2,10 +2,14 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#if TARGET_OS_OSX
|
||||||
|
#import <FlutterMacOS/FlutterMacOS.h>
|
||||||
|
#else
|
||||||
#import <Flutter/Flutter.h>
|
#import <Flutter/Flutter.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#import "messages.g.h"
|
#import "messages.g.h"
|
||||||
|
|
||||||
@interface FLTGoogleSignInPlugin : NSObject <FlutterPlugin, FSIGoogleSignInApi>
|
@interface FLTGoogleSignInPlugin : NSObject <FlutterPlugin, FSIGoogleSignInApi>
|
||||||
|
- (instancetype)init NS_UNAVAILABLE;
|
||||||
@end
|
@end
|
@ -50,32 +50,37 @@ static FlutterError *getFlutterError(NSError *error) {
|
|||||||
// The contents of GoogleService-Info.plist, if it exists.
|
// The contents of GoogleService-Info.plist, if it exists.
|
||||||
@property(strong, nullable) NSDictionary<NSString *, id> *googleServiceProperties;
|
@property(strong, nullable) NSDictionary<NSString *, id> *googleServiceProperties;
|
||||||
|
|
||||||
// Redeclared as not a designated initializer.
|
// The plugin registrar, for querying views.
|
||||||
- (instancetype)init;
|
@property(strong, nonnull) id<FlutterPluginRegistrar> registrar;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@implementation FLTGoogleSignInPlugin
|
@implementation FLTGoogleSignInPlugin
|
||||||
|
|
||||||
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar {
|
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar {
|
||||||
FLTGoogleSignInPlugin *instance = [[FLTGoogleSignInPlugin alloc] init];
|
FLTGoogleSignInPlugin *instance = [[FLTGoogleSignInPlugin alloc] initWithRegistrar:registrar];
|
||||||
[registrar addApplicationDelegate:instance];
|
[registrar addApplicationDelegate:instance];
|
||||||
FSIGoogleSignInApiSetup(registrar.messenger, instance);
|
FSIGoogleSignInApiSetup(registrar.messenger, instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)init {
|
- (instancetype)initWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar {
|
||||||
return [self initWithSignIn:GIDSignIn.sharedInstance];
|
return [self initWithSignIn:GIDSignIn.sharedInstance registrar:registrar];
|
||||||
}
|
|
||||||
|
|
||||||
- (instancetype)initWithSignIn:(GIDSignIn *)signIn {
|
|
||||||
return [self initWithSignIn:signIn withGoogleServiceProperties:loadGoogleServiceInfo()];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype)initWithSignIn:(GIDSignIn *)signIn
|
- (instancetype)initWithSignIn:(GIDSignIn *)signIn
|
||||||
withGoogleServiceProperties:(nullable NSDictionary<NSString *, id> *)googleServiceProperties {
|
registrar:(NSObject<FlutterPluginRegistrar> *)registrar {
|
||||||
|
return [self initWithSignIn:signIn
|
||||||
|
registrar:registrar
|
||||||
|
googleServiceProperties:loadGoogleServiceInfo()];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithSignIn:(GIDSignIn *)signIn
|
||||||
|
registrar:(NSObject<FlutterPluginRegistrar> *)registrar
|
||||||
|
googleServiceProperties:(nullable NSDictionary<NSString *, id> *)googleServiceProperties {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) {
|
if (self) {
|
||||||
_signIn = signIn;
|
_signIn = signIn;
|
||||||
|
_registrar = registrar;
|
||||||
_googleServiceProperties = googleServiceProperties;
|
_googleServiceProperties = googleServiceProperties;
|
||||||
|
|
||||||
// On the iOS simulator, we get "Broken pipe" errors after sign-in for some
|
// On the iOS simulator, we get "Broken pipe" errors after sign-in for some
|
||||||
@ -88,9 +93,19 @@ static FlutterError *getFlutterError(NSError *error) {
|
|||||||
|
|
||||||
#pragma mark - <FlutterPlugin> protocol
|
#pragma mark - <FlutterPlugin> protocol
|
||||||
|
|
||||||
|
#if TARGET_OS_IOS
|
||||||
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options {
|
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options {
|
||||||
return [self.signIn handleURL:url];
|
return [self.signIn handleURL:url];
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
- (BOOL)handleOpenURLs:(NSArray<NSURL *> *)urls {
|
||||||
|
BOOL handled = NO;
|
||||||
|
for (NSURL *url in urls) {
|
||||||
|
handled = handled || [self.signIn handleURL:url];
|
||||||
|
}
|
||||||
|
return handled;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#pragma mark - FSIGoogleSignInApi
|
#pragma mark - FSIGoogleSignInApi
|
||||||
|
|
||||||
@ -134,23 +149,21 @@ static FlutterError *getFlutterError(NSError *error) {
|
|||||||
self.signIn.configuration = self.configuration;
|
self.signIn.configuration = self.configuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
[self.signIn signInWithPresentingViewController:[self topViewController]
|
[self signInWithHint:nil
|
||||||
hint:nil
|
additionalScopes:self.requestedScopes.allObjects
|
||||||
additionalScopes:self.requestedScopes.allObjects
|
completion:^(GIDSignInResult *_Nullable signInResult, NSError *_Nullable error) {
|
||||||
completion:^(GIDSignInResult *_Nullable signInResult,
|
GIDGoogleUser *user;
|
||||||
NSError *_Nullable error) {
|
NSString *serverAuthCode;
|
||||||
GIDGoogleUser *user;
|
if (signInResult) {
|
||||||
NSString *serverAuthCode;
|
user = signInResult.user;
|
||||||
if (signInResult) {
|
serverAuthCode = signInResult.serverAuthCode;
|
||||||
user = signInResult.user;
|
}
|
||||||
serverAuthCode = signInResult.serverAuthCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
[self didSignInForUser:user
|
[self didSignInForUser:user
|
||||||
withServerAuthCode:serverAuthCode
|
withServerAuthCode:serverAuthCode
|
||||||
completion:completion
|
completion:completion
|
||||||
error:error];
|
error:error];
|
||||||
}];
|
}];
|
||||||
} @catch (NSException *e) {
|
} @catch (NSException *e) {
|
||||||
completion(nil, [FlutterError errorWithCode:@"google_sign_in" message:e.reason details:e.name]);
|
completion(nil, [FlutterError errorWithCode:@"google_sign_in" message:e.reason details:e.name]);
|
||||||
[e raise];
|
[e raise];
|
||||||
@ -196,51 +209,67 @@ static FlutterError *getFlutterError(NSError *error) {
|
|||||||
message:@"No account to grant scopes."
|
message:@"No account to grant scopes."
|
||||||
details:nil]);
|
details:nil]);
|
||||||
}
|
}
|
||||||
[currentUser addScopes:requestedScopes.allObjects
|
[self addScopes:requestedScopes.allObjects
|
||||||
presentingViewController:[self topViewController]
|
completion:^(GIDSignInResult *_Nullable signInResult, NSError *_Nullable addedScopeError) {
|
||||||
completion:^(GIDSignInResult *_Nullable signInResult,
|
BOOL granted = NO;
|
||||||
NSError *_Nullable addedScopeError) {
|
FlutterError *error = nil;
|
||||||
BOOL granted = NO;
|
|
||||||
FlutterError *error = nil;
|
|
||||||
|
|
||||||
if ([addedScopeError.domain isEqualToString:kGIDSignInErrorDomain] &&
|
if ([addedScopeError.domain isEqualToString:kGIDSignInErrorDomain] &&
|
||||||
addedScopeError.code == kGIDSignInErrorCodeMismatchWithCurrentUser) {
|
addedScopeError.code == kGIDSignInErrorCodeMismatchWithCurrentUser) {
|
||||||
error =
|
error = [FlutterError errorWithCode:@"mismatch_user"
|
||||||
[FlutterError errorWithCode:@"mismatch_user"
|
message:@"There is an operation on a previous "
|
||||||
message:@"There is an operation on a previous "
|
@"user. Try signing in again."
|
||||||
@"user. Try signing in again."
|
details:nil];
|
||||||
details:nil];
|
} else if ([addedScopeError.domain isEqualToString:kGIDSignInErrorDomain] &&
|
||||||
} else if ([addedScopeError.domain isEqualToString:kGIDSignInErrorDomain] &&
|
addedScopeError.code == kGIDSignInErrorCodeScopesAlreadyGranted) {
|
||||||
addedScopeError.code ==
|
// Scopes already granted, report success.
|
||||||
kGIDSignInErrorCodeScopesAlreadyGranted) {
|
granted = YES;
|
||||||
// Scopes already granted, report success.
|
} else if (signInResult.user) {
|
||||||
granted = YES;
|
NSSet<NSString *> *grantedScopes =
|
||||||
} else if (signInResult.user) {
|
[NSSet setWithArray:signInResult.user.grantedScopes];
|
||||||
NSSet<NSString *> *grantedScopes =
|
granted = [requestedScopes isSubsetOfSet:grantedScopes];
|
||||||
[NSSet setWithArray:signInResult.user.grantedScopes];
|
}
|
||||||
granted = [requestedScopes isSubsetOfSet:grantedScopes];
|
completion(error == nil ? @(granted) : nil, error);
|
||||||
}
|
}];
|
||||||
completion(error == nil ? @(granted) : nil, error);
|
|
||||||
}];
|
|
||||||
} @catch (NSException *e) {
|
} @catch (NSException *e) {
|
||||||
completion(nil, [FlutterError errorWithCode:@"request_scopes" message:e.reason details:e.name]);
|
completion(nil, [FlutterError errorWithCode:@"request_scopes" message:e.reason details:e.name]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - <GIDSignInUIDelegate> protocol
|
|
||||||
|
|
||||||
- (void)signIn:(GIDSignIn *)signIn presentViewController:(UIViewController *)viewController {
|
|
||||||
UIViewController *rootViewController =
|
|
||||||
[UIApplication sharedApplication].delegate.window.rootViewController;
|
|
||||||
[rootViewController presentViewController:viewController animated:YES completion:nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)signIn:(GIDSignIn *)signIn dismissViewController:(UIViewController *)viewController {
|
|
||||||
[viewController dismissViewControllerAnimated:YES completion:nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - private methods
|
#pragma mark - private methods
|
||||||
|
|
||||||
|
// Wraps the iOS and macOS sign in display methods.
|
||||||
|
- (void)signInWithHint:(nullable NSString *)hint
|
||||||
|
additionalScopes:(nullable NSArray<NSString *> *)additionalScopes
|
||||||
|
completion:(nullable void (^)(GIDSignInResult *_Nullable signInResult,
|
||||||
|
NSError *_Nullable error))completion {
|
||||||
|
#if TARGET_OS_OSX
|
||||||
|
[self.signIn signInWithPresentingWindow:self.registrar.view.window
|
||||||
|
hint:hint
|
||||||
|
additionalScopes:additionalScopes
|
||||||
|
completion:completion];
|
||||||
|
#else
|
||||||
|
[self.signIn signInWithPresentingViewController:[self topViewController]
|
||||||
|
hint:hint
|
||||||
|
additionalScopes:additionalScopes
|
||||||
|
completion:completion];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wraps the iOS and macOS scope addition methods.
|
||||||
|
- (void)addScopes:(NSArray<NSString *> *)scopes
|
||||||
|
completion:(nullable void (^)(GIDSignInResult *_Nullable signInResult,
|
||||||
|
NSError *_Nullable error))completion {
|
||||||
|
GIDGoogleUser *currentUser = self.signIn.currentUser;
|
||||||
|
#if TARGET_OS_OSX
|
||||||
|
[currentUser addScopes:scopes presentingWindow:self.registrar.view.window completion:completion];
|
||||||
|
#else
|
||||||
|
[currentUser addScopes:scopes
|
||||||
|
presentingViewController:[self topViewController]
|
||||||
|
completion:completion];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/// @return @c nil if GoogleService-Info.plist not found and clientId is not provided.
|
/// @return @c nil if GoogleService-Info.plist not found and clientId is not provided.
|
||||||
- (GIDConfiguration *)configurationWithClientIdArgument:(id)clientIDArg
|
- (GIDConfiguration *)configurationWithClientIdArgument:(id)clientIDArg
|
||||||
serverClientIdArgument:(id)serverClientIDArg
|
serverClientIdArgument:(id)serverClientIDArg
|
||||||
@ -299,6 +328,8 @@ static FlutterError *getFlutterError(NSError *error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if TARGET_OS_IOS
|
||||||
|
|
||||||
- (UIViewController *)topViewController {
|
- (UIViewController *)topViewController {
|
||||||
#pragma clang diagnostic push
|
#pragma clang diagnostic push
|
||||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||||
@ -337,4 +368,6 @@ static FlutterError *getFlutterError(NSError *error) {
|
|||||||
return viewController;
|
return viewController;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
@end
|
@end
|
@ -29,12 +29,17 @@ NS_ASSUME_NONNULL_BEGIN
|
|||||||
// sign in, sign out, and requesting additional scopes.
|
// sign in, sign out, and requesting additional scopes.
|
||||||
@property(strong, readonly) GIDSignIn *signIn;
|
@property(strong, readonly) GIDSignIn *signIn;
|
||||||
|
|
||||||
|
/// Inject @c FlutterPluginRegistrar for testing.
|
||||||
|
- (instancetype)initWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar;
|
||||||
|
|
||||||
/// Inject @c GIDSignIn for testing.
|
/// Inject @c GIDSignIn for testing.
|
||||||
- (instancetype)initWithSignIn:(GIDSignIn *)signIn;
|
- (instancetype)initWithSignIn:(GIDSignIn *)signIn
|
||||||
|
registrar:(NSObject<FlutterPluginRegistrar> *)registrar;
|
||||||
|
|
||||||
/// Inject @c GIDSignIn and @c googleServiceProperties for testing.
|
/// Inject @c GIDSignIn and @c googleServiceProperties for testing.
|
||||||
- (instancetype)initWithSignIn:(GIDSignIn *)signIn
|
- (instancetype)initWithSignIn:(GIDSignIn *)signIn
|
||||||
withGoogleServiceProperties:(nullable NSDictionary<NSString *, id> *)googleServiceProperties
|
registrar:(NSObject<FlutterPluginRegistrar> *)registrar
|
||||||
|
googleServiceProperties:(nullable NSDictionary<NSString *, id> *)googleServiceProperties
|
||||||
NS_DESIGNATED_INITIALIZER;
|
NS_DESIGNATED_INITIALIZER;
|
||||||
|
|
||||||
@end
|
@end
|
@ -2,7 +2,12 @@
|
|||||||
// Use of this source code is governed by a BSD-style license that can be
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
// found in the LICENSE file.
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#include <TargetConditionals.h>
|
||||||
|
#if TARGET_OS_OSX
|
||||||
|
@import FlutterMacOS;
|
||||||
|
#else
|
||||||
@import Flutter;
|
@import Flutter;
|
||||||
|
#endif
|
||||||
|
|
||||||
@import XCTest;
|
@import XCTest;
|
||||||
@import google_sign_in_ios;
|
@import google_sign_in_ios;
|
||||||
@ -33,7 +38,8 @@
|
|||||||
self.mockSignIn = mockSignIn;
|
self.mockSignIn = mockSignIn;
|
||||||
|
|
||||||
OCMStub(self.mockPluginRegistrar.messenger).andReturn(self.mockBinaryMessenger);
|
OCMStub(self.mockPluginRegistrar.messenger).andReturn(self.mockBinaryMessenger);
|
||||||
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:mockSignIn];
|
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:mockSignIn
|
||||||
|
registrar:self.mockPluginRegistrar];
|
||||||
[FLTGoogleSignInPlugin registerWithRegistrar:self.mockPluginRegistrar];
|
[FLTGoogleSignInPlugin registerWithRegistrar:self.mockPluginRegistrar];
|
||||||
|
|
||||||
NSString *plistPath =
|
NSString *plistPath =
|
||||||
@ -52,7 +58,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)testDisconnect {
|
- (void)testDisconnect {
|
||||||
[[self.mockSignIn stub] disconnectWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null], nil]];
|
[(GIDSignIn *)[self.mockSignIn stub]
|
||||||
|
disconnectWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null], nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns true"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns true"];
|
||||||
[self.plugin disconnectWithCompletion:^(FlutterError *error) {
|
[self.plugin disconnectWithCompletion:^(FlutterError *error) {
|
||||||
@ -63,10 +70,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)testDisconnectIgnoresError {
|
- (void)testDisconnectIgnoresError {
|
||||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||||
code:kGIDSignInErrorCodeHasNoAuthInKeychain
|
code:kGIDSignInErrorCodeHasNoAuthInKeychain
|
||||||
userInfo:nil];
|
userInfo:nil];
|
||||||
[[self.mockSignIn stub] disconnectWithCompletion:[OCMArg invokeBlockWithArgs:error, nil]];
|
[(GIDSignIn *)[self.mockSignIn stub]
|
||||||
|
disconnectWithCompletion:[OCMArg invokeBlockWithArgs:sdkError, nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns true"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns true"];
|
||||||
[self.plugin disconnectWithCompletion:^(FlutterError *error) {
|
[self.plugin disconnectWithCompletion:^(FlutterError *error) {
|
||||||
@ -81,7 +89,8 @@
|
|||||||
- (void)testInitNoClientIdNoError {
|
- (void)testInitNoClientIdNoError {
|
||||||
// Init plugin without GoogleService-Info.plist.
|
// Init plugin without GoogleService-Info.plist.
|
||||||
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
||||||
withGoogleServiceProperties:nil];
|
registrar:self.mockPluginRegistrar
|
||||||
|
googleServiceProperties:nil];
|
||||||
|
|
||||||
// init call does not provide a clientId.
|
// init call does not provide a clientId.
|
||||||
FSIInitParams *params = [FSIInitParams makeWithScopes:@[]
|
FSIInitParams *params = [FSIInitParams makeWithScopes:@[]
|
||||||
@ -96,24 +105,24 @@
|
|||||||
|
|
||||||
- (void)testInitGoogleServiceInfoPlist {
|
- (void)testInitGoogleServiceInfoPlist {
|
||||||
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
||||||
withGoogleServiceProperties:self.googleServiceInfo];
|
registrar:self.mockPluginRegistrar
|
||||||
|
googleServiceProperties:self.googleServiceInfo];
|
||||||
FSIInitParams *params = [FSIInitParams makeWithScopes:@[]
|
FSIInitParams *params = [FSIInitParams makeWithScopes:@[]
|
||||||
hostedDomain:@"example.com"
|
hostedDomain:@"example.com"
|
||||||
clientId:nil
|
clientId:nil
|
||||||
serverClientId:nil];
|
serverClientId:nil];
|
||||||
|
|
||||||
FlutterError *error;
|
FlutterError *initializationError;
|
||||||
[self.plugin initializeSignInWithParameters:params error:&error];
|
[self.plugin initializeSignInWithParameters:params error:&initializationError];
|
||||||
XCTAssertNil(error);
|
XCTAssertNil(initializationError);
|
||||||
|
|
||||||
// Initialization values used in the next sign in request.
|
// Initialization values used in the next sign in request.
|
||||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error){
|
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error){
|
||||||
}];
|
}];
|
||||||
OCMVerify([self.mockSignIn
|
OCMVerify([self configureMock:self.mockSignIn
|
||||||
signInWithPresentingViewController:[OCMArg isKindOfClass:[FlutterViewController class]]
|
forSignInWithHint:nil
|
||||||
hint:nil
|
additionalScopes:OCMOCK_ANY
|
||||||
additionalScopes:OCMOCK_ANY
|
completion:OCMOCK_ANY]);
|
||||||
completion:OCMOCK_ANY]);
|
|
||||||
|
|
||||||
XCTAssertEqualObjects(self.plugin.configuration.hostedDomain, @"example.com");
|
XCTAssertEqualObjects(self.plugin.configuration.hostedDomain, @"example.com");
|
||||||
// Set in example app GoogleService-Info.plist.
|
// Set in example app GoogleService-Info.plist.
|
||||||
@ -126,25 +135,25 @@
|
|||||||
- (void)testInitDynamicClientIdNullDomain {
|
- (void)testInitDynamicClientIdNullDomain {
|
||||||
// Init plugin without GoogleService-Info.plist.
|
// Init plugin without GoogleService-Info.plist.
|
||||||
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
||||||
withGoogleServiceProperties:nil];
|
registrar:self.mockPluginRegistrar
|
||||||
|
googleServiceProperties:nil];
|
||||||
|
|
||||||
FSIInitParams *params = [FSIInitParams makeWithScopes:@[]
|
FSIInitParams *params = [FSIInitParams makeWithScopes:@[]
|
||||||
hostedDomain:nil
|
hostedDomain:nil
|
||||||
clientId:@"mockClientId"
|
clientId:@"mockClientId"
|
||||||
serverClientId:nil];
|
serverClientId:nil];
|
||||||
|
|
||||||
FlutterError *error;
|
FlutterError *initializationError;
|
||||||
[self.plugin initializeSignInWithParameters:params error:&error];
|
[self.plugin initializeSignInWithParameters:params error:&initializationError];
|
||||||
XCTAssertNil(error);
|
XCTAssertNil(initializationError);
|
||||||
|
|
||||||
// Initialization values used in the next sign in request.
|
// Initialization values used in the next sign in request.
|
||||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error){
|
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error){
|
||||||
}];
|
}];
|
||||||
OCMVerify([self.mockSignIn
|
OCMVerify([self configureMock:self.mockSignIn
|
||||||
signInWithPresentingViewController:[OCMArg isKindOfClass:[FlutterViewController class]]
|
forSignInWithHint:nil
|
||||||
hint:nil
|
additionalScopes:OCMOCK_ANY
|
||||||
additionalScopes:OCMOCK_ANY
|
completion:OCMOCK_ANY]);
|
||||||
completion:OCMOCK_ANY]);
|
|
||||||
|
|
||||||
XCTAssertEqualObjects(self.plugin.configuration.hostedDomain, nil);
|
XCTAssertEqualObjects(self.plugin.configuration.hostedDomain, nil);
|
||||||
XCTAssertEqualObjects(self.plugin.configuration.clientID, @"mockClientId");
|
XCTAssertEqualObjects(self.plugin.configuration.clientID, @"mockClientId");
|
||||||
@ -153,23 +162,23 @@
|
|||||||
|
|
||||||
- (void)testInitDynamicServerClientIdNullDomain {
|
- (void)testInitDynamicServerClientIdNullDomain {
|
||||||
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
||||||
withGoogleServiceProperties:self.googleServiceInfo];
|
registrar:self.mockPluginRegistrar
|
||||||
|
googleServiceProperties:self.googleServiceInfo];
|
||||||
FSIInitParams *params = [FSIInitParams makeWithScopes:@[]
|
FSIInitParams *params = [FSIInitParams makeWithScopes:@[]
|
||||||
hostedDomain:nil
|
hostedDomain:nil
|
||||||
clientId:nil
|
clientId:nil
|
||||||
serverClientId:@"mockServerClientId"];
|
serverClientId:@"mockServerClientId"];
|
||||||
FlutterError *error;
|
FlutterError *initializationError;
|
||||||
[self.plugin initializeSignInWithParameters:params error:&error];
|
[self.plugin initializeSignInWithParameters:params error:&initializationError];
|
||||||
XCTAssertNil(error);
|
XCTAssertNil(initializationError);
|
||||||
|
|
||||||
// Initialization values used in the next sign in request.
|
// Initialization values used in the next sign in request.
|
||||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error){
|
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error){
|
||||||
}];
|
}];
|
||||||
OCMVerify([self.mockSignIn
|
OCMVerify([self configureMock:self.mockSignIn
|
||||||
signInWithPresentingViewController:[OCMArg isKindOfClass:[FlutterViewController class]]
|
forSignInWithHint:nil
|
||||||
hint:nil
|
additionalScopes:OCMOCK_ANY
|
||||||
additionalScopes:OCMOCK_ANY
|
completion:OCMOCK_ANY]);
|
||||||
completion:OCMOCK_ANY]);
|
|
||||||
|
|
||||||
XCTAssertEqualObjects(self.plugin.configuration.hostedDomain, nil);
|
XCTAssertEqualObjects(self.plugin.configuration.hostedDomain, nil);
|
||||||
// Set in example app GoogleService-Info.plist.
|
// Set in example app GoogleService-Info.plist.
|
||||||
@ -186,7 +195,7 @@
|
|||||||
serverClientId:nil];
|
serverClientId:nil];
|
||||||
|
|
||||||
FlutterError *error;
|
FlutterError *error;
|
||||||
self.plugin = [[FLTGoogleSignInPlugin alloc] init];
|
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithRegistrar:self.mockPluginRegistrar];
|
||||||
[self.plugin initializeSignInWithParameters:params error:&error];
|
[self.plugin initializeSignInWithParameters:params error:&error];
|
||||||
XCTAssertNil(error);
|
XCTAssertNil(error);
|
||||||
XCTAssertNil(self.plugin.configuration);
|
XCTAssertNil(self.plugin.configuration);
|
||||||
@ -243,12 +252,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)testSignInSilentlyWithError {
|
- (void)testSignInSilentlyWithError {
|
||||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||||
code:kGIDSignInErrorCodeHasNoAuthInKeychain
|
code:kGIDSignInErrorCodeHasNoAuthInKeychain
|
||||||
userInfo:nil];
|
userInfo:nil];
|
||||||
|
|
||||||
[[self.mockSignIn stub]
|
[[self.mockSignIn stub]
|
||||||
restorePreviousSignInWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
restorePreviousSignInWithCompletion:[OCMArg
|
||||||
|
invokeBlockWithArgs:[NSNull null], sdkError, nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin signInSilentlyWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
[self.plugin signInSilentlyWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
||||||
@ -263,7 +273,8 @@
|
|||||||
|
|
||||||
- (void)testSignIn {
|
- (void)testSignIn {
|
||||||
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
||||||
withGoogleServiceProperties:self.googleServiceInfo];
|
registrar:self.mockPluginRegistrar
|
||||||
|
googleServiceProperties:self.googleServiceInfo];
|
||||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||||
id mockUserProfile = OCMClassMock([GIDProfileData class]);
|
id mockUserProfile = OCMClassMock([GIDProfileData class]);
|
||||||
OCMStub([mockUserProfile name]).andReturn(@"mockDisplay");
|
OCMStub([mockUserProfile name]).andReturn(@"mockDisplay");
|
||||||
@ -279,12 +290,10 @@
|
|||||||
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
||||||
OCMStub([mockSignInResult serverAuthCode]).andReturn(@"mockAuthCode");
|
OCMStub([mockSignInResult serverAuthCode]).andReturn(@"mockAuthCode");
|
||||||
|
|
||||||
[[self.mockSignIn expect]
|
[self configureMock:[self.mockSignIn expect]
|
||||||
signInWithPresentingViewController:[OCMArg isKindOfClass:[FlutterViewController class]]
|
forSignInWithHint:nil
|
||||||
hint:nil
|
additionalScopes:@[]
|
||||||
additionalScopes:@[]
|
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
||||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult,
|
|
||||||
[NSNull null], nil]];
|
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
||||||
@ -307,28 +316,26 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)testSignInWithInitializedScopes {
|
- (void)testSignInWithInitializedScopes {
|
||||||
FlutterError *error;
|
FlutterError *initializationError;
|
||||||
[self.plugin
|
[self.plugin
|
||||||
initializeSignInWithParameters:[FSIInitParams makeWithScopes:@[ @"initial1", @"initial2" ]
|
initializeSignInWithParameters:[FSIInitParams makeWithScopes:@[ @"initial1", @"initial2" ]
|
||||||
hostedDomain:nil
|
hostedDomain:nil
|
||||||
clientId:nil
|
clientId:nil
|
||||||
serverClientId:nil]
|
serverClientId:nil]
|
||||||
error:&error];
|
error:&initializationError];
|
||||||
|
|
||||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||||
OCMStub([mockUser userID]).andReturn(@"mockID");
|
OCMStub([mockUser userID]).andReturn(@"mockID");
|
||||||
id mockSignInResult = OCMClassMock([GIDSignInResult class]);
|
id mockSignInResult = OCMClassMock([GIDSignInResult class]);
|
||||||
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
||||||
|
|
||||||
[[self.mockSignIn expect]
|
[self configureMock:[self.mockSignIn expect]
|
||||||
signInWithPresentingViewController:OCMOCK_ANY
|
forSignInWithHint:nil
|
||||||
hint:nil
|
additionalScopes:[OCMArg checkWithBlock:^BOOL(NSArray<NSString *> *scopes) {
|
||||||
additionalScopes:[OCMArg checkWithBlock:^BOOL(NSArray<NSString *> *scopes) {
|
return [[NSSet setWithArray:scopes]
|
||||||
return [[NSSet setWithArray:scopes]
|
isEqualToSet:[NSSet setWithObjects:@"initial1", @"initial2", nil]];
|
||||||
isEqualToSet:[NSSet setWithObjects:@"initial1", @"initial2", nil]];
|
}]
|
||||||
}]
|
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
||||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult,
|
|
||||||
[NSNull null], nil]];
|
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
||||||
@ -347,19 +354,17 @@
|
|||||||
id mockSignInResult = OCMClassMock([GIDSignInResult class]);
|
id mockSignInResult = OCMClassMock([GIDSignInResult class]);
|
||||||
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
||||||
|
|
||||||
[[self.mockSignIn stub]
|
[self configureMock:[self.mockSignIn stub]
|
||||||
signInWithPresentingViewController:OCMOCK_ANY
|
forSignInWithHint:nil
|
||||||
hint:nil
|
additionalScopes:OCMOCK_ANY
|
||||||
additionalScopes:OCMOCK_ANY
|
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
||||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult,
|
|
||||||
[NSNull null], nil]];
|
|
||||||
|
|
||||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||||
code:kGIDSignInErrorCodeScopesAlreadyGranted
|
code:kGIDSignInErrorCodeScopesAlreadyGranted
|
||||||
userInfo:nil];
|
userInfo:nil];
|
||||||
[[self.mockSignIn currentUser] addScopes:OCMOCK_ANY
|
[self configureMock:mockUser
|
||||||
presentingViewController:OCMOCK_ANY
|
forAddScopes:OCMOCK_ANY
|
||||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
completion:[OCMArg invokeBlockWithArgs:[NSNull null], sdkError, nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
||||||
@ -371,14 +376,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)testSignInError {
|
- (void)testSignInError {
|
||||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||||
code:kGIDSignInErrorCodeCanceled
|
code:kGIDSignInErrorCodeCanceled
|
||||||
userInfo:nil];
|
userInfo:nil];
|
||||||
[[self.mockSignIn stub]
|
[self configureMock:[self.mockSignIn stub]
|
||||||
signInWithPresentingViewController:OCMOCK_ANY
|
forSignInWithHint:nil
|
||||||
hint:nil
|
additionalScopes:OCMOCK_ANY
|
||||||
additionalScopes:OCMOCK_ANY
|
completion:[OCMArg invokeBlockWithArgs:[NSNull null], sdkError, nil]];
|
||||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
||||||
@ -390,10 +394,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)testSignInException {
|
- (void)testSignInException {
|
||||||
OCMExpect([self.mockSignIn signInWithPresentingViewController:OCMOCK_ANY
|
OCMExpect([self configureMock:self.mockSignIn
|
||||||
hint:OCMOCK_ANY
|
forSignInWithHint:OCMOCK_ANY
|
||||||
additionalScopes:OCMOCK_ANY
|
additionalScopes:OCMOCK_ANY
|
||||||
completion:OCMOCK_ANY])
|
completion:OCMOCK_ANY])
|
||||||
.andThrow([NSException exceptionWithName:@"MockName" reason:@"MockReason" userInfo:nil]);
|
.andThrow([NSException exceptionWithName:@"MockName" reason:@"MockReason" userInfo:nil]);
|
||||||
|
|
||||||
__block FlutterError *error;
|
__block FlutterError *error;
|
||||||
@ -441,11 +445,11 @@
|
|||||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||||
|
|
||||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||||
code:kGIDSignInErrorCodeHasNoAuthInKeychain
|
code:kGIDSignInErrorCodeHasNoAuthInKeychain
|
||||||
userInfo:nil];
|
userInfo:nil];
|
||||||
[[mockUser stub]
|
[[mockUser stub] refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null],
|
||||||
refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
sdkError, nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin getAccessTokenWithCompletion:^(FSITokenData *token, FlutterError *error) {
|
[self.plugin getAccessTokenWithCompletion:^(FSITokenData *token, FlutterError *error) {
|
||||||
@ -461,11 +465,11 @@
|
|||||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||||
|
|
||||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||||
code:kGIDSignInErrorCodeCanceled
|
code:kGIDSignInErrorCodeCanceled
|
||||||
userInfo:nil];
|
userInfo:nil];
|
||||||
[[mockUser stub]
|
[[mockUser stub] refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null],
|
||||||
refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
sdkError, nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin getAccessTokenWithCompletion:^(FSITokenData *token, FlutterError *error) {
|
[self.plugin getAccessTokenWithCompletion:^(FSITokenData *token, FlutterError *error) {
|
||||||
@ -481,9 +485,11 @@
|
|||||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||||
|
|
||||||
NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorTimedOut userInfo:nil];
|
NSError *sdkError = [NSError errorWithDomain:NSURLErrorDomain
|
||||||
[[mockUser stub]
|
code:NSURLErrorTimedOut
|
||||||
refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
userInfo:nil];
|
||||||
|
[[mockUser stub] refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null],
|
||||||
|
sdkError, nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin getAccessTokenWithCompletion:^(FSITokenData *token, FlutterError *error) {
|
[self.plugin getAccessTokenWithCompletion:^(FSITokenData *token, FlutterError *error) {
|
||||||
@ -499,9 +505,9 @@
|
|||||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||||
|
|
||||||
NSError *error = [NSError errorWithDomain:@"BogusDomain" code:42 userInfo:nil];
|
NSError *sdkError = [NSError errorWithDomain:@"BogusDomain" code:42 userInfo:nil];
|
||||||
[[mockUser stub]
|
[[mockUser stub] refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null],
|
||||||
refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
sdkError, nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin getAccessTokenWithCompletion:^(FSITokenData *token, FlutterError *error) {
|
[self.plugin getAccessTokenWithCompletion:^(FSITokenData *token, FlutterError *error) {
|
||||||
@ -530,12 +536,12 @@
|
|||||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||||
|
|
||||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||||
code:kGIDSignInErrorCodeScopesAlreadyGranted
|
code:kGIDSignInErrorCodeScopesAlreadyGranted
|
||||||
userInfo:nil];
|
userInfo:nil];
|
||||||
[[mockUser stub] addScopes:@[ @"mockScope1" ]
|
[self configureMock:[mockUser stub]
|
||||||
presentingViewController:OCMOCK_ANY
|
forAddScopes:@[ @"mockScope1" ]
|
||||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
completion:[OCMArg invokeBlockWithArgs:[NSNull null], sdkError, nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin requestScopes:@[ @"mockScope1" ]
|
[self.plugin requestScopes:@[ @"mockScope1" ]
|
||||||
@ -551,12 +557,12 @@
|
|||||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||||
|
|
||||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||||
code:kGIDSignInErrorCodeMismatchWithCurrentUser
|
code:kGIDSignInErrorCodeMismatchWithCurrentUser
|
||||||
userInfo:nil];
|
userInfo:nil];
|
||||||
[[mockUser stub] addScopes:@[ @"mockScope1" ]
|
[self configureMock:[mockUser stub]
|
||||||
presentingViewController:OCMOCK_ANY
|
forAddScopes:@[ @"mockScope1" ]
|
||||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
completion:[OCMArg invokeBlockWithArgs:[NSNull null], sdkError, nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin requestScopes:@[ @"mockScope1" ]
|
[self.plugin requestScopes:@[ @"mockScope1" ]
|
||||||
@ -572,10 +578,10 @@
|
|||||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||||
|
|
||||||
NSError *error = [NSError errorWithDomain:@"BogusDomain" code:42 userInfo:nil];
|
NSError *sdkError = [NSError errorWithDomain:@"BogusDomain" code:42 userInfo:nil];
|
||||||
[[mockUser stub] addScopes:@[ @"mockScope1" ]
|
[self configureMock:[mockUser stub]
|
||||||
presentingViewController:OCMOCK_ANY
|
forAddScopes:@[ @"mockScope1" ]
|
||||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
completion:[OCMArg invokeBlockWithArgs:[NSNull null], sdkError, nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin requestScopes:@[ @"mockScope1" ]
|
[self.plugin requestScopes:@[ @"mockScope1" ]
|
||||||
@ -591,7 +597,7 @@
|
|||||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||||
|
|
||||||
OCMExpect([mockUser addScopes:@[] presentingViewController:OCMOCK_ANY completion:OCMOCK_ANY])
|
OCMExpect([self configureMock:mockUser forAddScopes:@[] completion:OCMOCK_ANY])
|
||||||
.andThrow([NSException exceptionWithName:@"MockName" reason:@"MockReason" userInfo:nil]);
|
.andThrow([NSException exceptionWithName:@"MockName" reason:@"MockReason" userInfo:nil]);
|
||||||
|
|
||||||
[self.plugin requestScopes:@[]
|
[self.plugin requestScopes:@[]
|
||||||
@ -613,9 +619,9 @@
|
|||||||
OCMStub([mockUser grantedScopes]).andReturn(@[ @"mockScope1" ]);
|
OCMStub([mockUser grantedScopes]).andReturn(@[ @"mockScope1" ]);
|
||||||
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
||||||
|
|
||||||
[[mockUser stub] addScopes:requestedScopes
|
[self configureMock:[mockUser stub]
|
||||||
presentingViewController:OCMOCK_ANY
|
forAddScopes:requestedScopes
|
||||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin requestScopes:requestedScopes
|
[self.plugin requestScopes:requestedScopes
|
||||||
@ -635,9 +641,9 @@
|
|||||||
hostedDomain:nil
|
hostedDomain:nil
|
||||||
clientId:nil
|
clientId:nil
|
||||||
serverClientId:nil];
|
serverClientId:nil];
|
||||||
FlutterError *error;
|
FlutterError *initializationError;
|
||||||
[self.plugin initializeSignInWithParameters:params error:&error];
|
[self.plugin initializeSignInWithParameters:params error:&initializationError];
|
||||||
XCTAssertNil(error);
|
XCTAssertNil(initializationError);
|
||||||
|
|
||||||
// Include one of the initially requested scopes.
|
// Include one of the initially requested scopes.
|
||||||
NSArray<NSString *> *addedScopes = @[ @"initial1", @"addScope1", @"addScope2" ];
|
NSArray<NSString *> *addedScopes = @[ @"initial1", @"addScope1", @"addScope2" ];
|
||||||
@ -647,13 +653,13 @@
|
|||||||
}];
|
}];
|
||||||
|
|
||||||
// All four scopes are requested.
|
// All four scopes are requested.
|
||||||
[[mockUser verify] addScopes:[OCMArg checkWithBlock:^BOOL(NSArray<NSString *> *scopes) {
|
[self configureMock:[mockUser verify]
|
||||||
return [[NSSet setWithArray:scopes]
|
forAddScopes:[OCMArg checkWithBlock:^BOOL(NSArray<NSString *> *scopes) {
|
||||||
isEqualToSet:[NSSet setWithObjects:@"initial1", @"initial2",
|
return [[NSSet setWithArray:scopes]
|
||||||
@"addScope1", @"addScope2", nil]];
|
isEqualToSet:[NSSet setWithObjects:@"initial1", @"initial2", @"addScope1",
|
||||||
}]
|
@"addScope2", nil]];
|
||||||
presentingViewController:OCMOCK_ANY
|
}]
|
||||||
completion:OCMOCK_ANY];
|
completion:OCMOCK_ANY];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)testRequestScopesReturnsTrueIfGranted {
|
- (void)testRequestScopesReturnsTrueIfGranted {
|
||||||
@ -666,9 +672,9 @@
|
|||||||
OCMStub([mockUser grantedScopes]).andReturn(requestedScopes);
|
OCMStub([mockUser grantedScopes]).andReturn(requestedScopes);
|
||||||
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
||||||
|
|
||||||
[[mockUser stub] addScopes:requestedScopes
|
[self configureMock:[mockUser stub]
|
||||||
presentingViewController:OCMOCK_ANY
|
forAddScopes:requestedScopes
|
||||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
||||||
|
|
||||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||||
[self.plugin requestScopes:requestedScopes
|
[self.plugin requestScopes:requestedScopes
|
||||||
@ -680,4 +686,34 @@
|
|||||||
[self waitForExpectationsWithTimeout:5.0 handler:nil];
|
[self waitForExpectationsWithTimeout:5.0 handler:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#pragma mark - Utils
|
||||||
|
|
||||||
|
- (void)configureMock:(id)mock
|
||||||
|
forAddScopes:(NSArray<NSString *> *)scopes
|
||||||
|
completion:(nullable void (^)(GIDSignInResult *_Nullable signInResult,
|
||||||
|
NSError *_Nullable error))completion {
|
||||||
|
#if TARGET_OS_OSX
|
||||||
|
[mock addScopes:scopes presentingWindow:OCMOCK_ANY completion:completion];
|
||||||
|
#else
|
||||||
|
[mock addScopes:scopes presentingViewController:OCMOCK_ANY completion:completion];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
- (void)configureMock:(id)mock
|
||||||
|
forSignInWithHint:(NSString *)hint
|
||||||
|
additionalScopes:(NSArray<NSString *> *)additionalScopes
|
||||||
|
completion:(nullable void (^)(GIDSignInResult *_Nullable signInResult,
|
||||||
|
NSError *_Nullable error))completion {
|
||||||
|
#if TARGET_OS_OSX
|
||||||
|
[mock signInWithPresentingWindow:OCMOCK_ANY
|
||||||
|
hint:hint
|
||||||
|
additionalScopes:additionalScopes
|
||||||
|
completion:completion];
|
||||||
|
#else
|
||||||
|
[mock signInWithPresentingViewController:[OCMArg isKindOfClass:[FlutterViewController class]]
|
||||||
|
hint:hint
|
||||||
|
additionalScopes:additionalScopes
|
||||||
|
completion:completion];
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
@ -15,9 +15,11 @@ Enables Google Sign-In in Flutter apps.
|
|||||||
s.source_files = 'Classes/**/*.{h,m}'
|
s.source_files = 'Classes/**/*.{h,m}'
|
||||||
s.public_header_files = 'Classes/**/*.h'
|
s.public_header_files = 'Classes/**/*.h'
|
||||||
s.module_map = 'Classes/FLTGoogleSignInPlugin.modulemap'
|
s.module_map = 'Classes/FLTGoogleSignInPlugin.modulemap'
|
||||||
s.dependency 'Flutter'
|
|
||||||
s.dependency 'GoogleSignIn', '~> 7.0'
|
s.dependency 'GoogleSignIn', '~> 7.0'
|
||||||
s.static_framework = true
|
s.static_framework = true
|
||||||
s.platform = :ios, '11.0'
|
s.ios.dependency 'Flutter'
|
||||||
|
s.osx.dependency 'FlutterMacOS'
|
||||||
|
s.ios.deployment_target = '11.0'
|
||||||
|
s.osx.deployment_target = '10.15'
|
||||||
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
|
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
|
||||||
end
|
end
|
@ -59,7 +59,7 @@
|
|||||||
5A76713E622F06379AEDEBFA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
|
5A76713E622F06379AEDEBFA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
5C6F5A6C1EC3B4CB008D64B5 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
5C6F5A6C1EC3B4CB008D64B5 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
|
||||||
5C6F5A6D1EC3B4CB008D64B5 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
5C6F5A6D1EC3B4CB008D64B5 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
|
||||||
7A303C2D1E89D76400B1F19E /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
7A303C2D1E89D76400B1F19E /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../../darwin/Tests/GoogleService-Info.plist"; sourceTree = SOURCE_ROOT; };
|
||||||
7ACDFB0D1E8944C400BE2D00 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
7ACDFB0D1E8944C400BE2D00 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
|
||||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
|
||||||
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
||||||
@ -74,7 +74,7 @@
|
|||||||
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
F582639B44581540871D9BB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
|
F582639B44581540871D9BB0 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
F76AC1A22666D0540040C8BC /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
F76AC1A22666D0540040C8BC /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
F76AC1A42666D0540040C8BC /* GoogleSignInTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GoogleSignInTests.m; sourceTree = "<group>"; };
|
F76AC1A42666D0540040C8BC /* GoogleSignInTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = GoogleSignInTests.m; path = ../../darwin/Tests/GoogleSignInTests.m; sourceTree = SOURCE_ROOT; };
|
||||||
F76AC1A62666D0540040C8BC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
F76AC1A62666D0540040C8BC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
F76AC1B02666D0610040C8BC /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
F76AC1B02666D0610040C8BC /* RunnerUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
F76AC1B22666D0610040C8BC /* GoogleSignInUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GoogleSignInUITests.m; sourceTree = "<group>"; };
|
F76AC1B22666D0610040C8BC /* GoogleSignInUITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = GoogleSignInUITests.m; sourceTree = "<group>"; };
|
||||||
@ -189,8 +189,8 @@
|
|||||||
F76AC1A32666D0540040C8BC /* RunnerTests */ = {
|
F76AC1A32666D0540040C8BC /* RunnerTests */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
F76AC1A42666D0540040C8BC /* GoogleSignInTests.m */,
|
|
||||||
7A303C2D1E89D76400B1F19E /* GoogleService-Info.plist */,
|
7A303C2D1E89D76400B1F19E /* GoogleService-Info.plist */,
|
||||||
|
F76AC1A42666D0540040C8BC /* GoogleSignInTests.m */,
|
||||||
F76AC1A62666D0540040C8BC /* Info.plist */,
|
F76AC1A62666D0540040C8BC /* Info.plist */,
|
||||||
);
|
);
|
||||||
path = RunnerTests;
|
path = RunnerTests;
|
||||||
@ -611,7 +611,10 @@
|
|||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
@ -632,7 +635,10 @@
|
|||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
);
|
);
|
||||||
INFOPLIST_FILE = Runner/Info.plist;
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
);
|
||||||
LIBRARY_SEARCH_PATHS = (
|
LIBRARY_SEARCH_PATHS = (
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"$(PROJECT_DIR)/Flutter",
|
"$(PROJECT_DIR)/Flutter",
|
||||||
@ -649,7 +655,11 @@
|
|||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
INFOPLIST_FILE = RunnerTests/Info.plist;
|
INFOPLIST_FILE = RunnerTests/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests;
|
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
|
||||||
@ -663,7 +673,11 @@
|
|||||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
INFOPLIST_FILE = RunnerTests/Info.plist;
|
INFOPLIST_FILE = RunnerTests/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests;
|
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerTests;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
|
||||||
@ -675,7 +689,11 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
INFOPLIST_FILE = RunnerUITests/Info.plist;
|
INFOPLIST_FILE = RunnerUITests/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerUITests;
|
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerUITests;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
TEST_TARGET_NAME = Runner;
|
TEST_TARGET_NAME = Runner;
|
||||||
@ -687,7 +705,11 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
INFOPLIST_FILE = RunnerUITests/Info.plist;
|
INFOPLIST_FILE = RunnerUITests/Info.plist;
|
||||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@loader_path/Frameworks",
|
||||||
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerUITests;
|
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.RunnerUITests;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
TEST_TARGET_NAME = Runner;
|
TEST_TARGET_NAME = Runner;
|
||||||
|
@ -1,116 +1,121 @@
|
|||||||
{
|
{
|
||||||
"images" : [
|
"images" : [
|
||||||
{
|
{
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-20x20@2x.png",
|
"filename" : "Icon-App-20x20@2x.png",
|
||||||
"scale" : "2x"
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "20x20"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-20x20@3x.png",
|
"filename" : "Icon-App-20x20@3x.png",
|
||||||
"scale" : "3x"
|
"idiom" : "iphone",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "20x20"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-29x29@1x.png",
|
"filename" : "Icon-App-29x29@1x.png",
|
||||||
"scale" : "1x"
|
"idiom" : "iphone",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "29x29"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-29x29@2x.png",
|
"filename" : "Icon-App-29x29@2x.png",
|
||||||
"scale" : "2x"
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "29x29"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-29x29@3x.png",
|
"filename" : "Icon-App-29x29@3x.png",
|
||||||
"scale" : "3x"
|
"idiom" : "iphone",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "29x29"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-40x40@2x.png",
|
"filename" : "Icon-App-40x40@2x.png",
|
||||||
"scale" : "2x"
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "40x40"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-40x40@3x.png",
|
"filename" : "Icon-App-40x40@3x.png",
|
||||||
"scale" : "3x"
|
"idiom" : "iphone",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "40x40"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "60x60",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-60x60@2x.png",
|
"filename" : "Icon-App-60x60@2x.png",
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "60x60",
|
|
||||||
"idiom" : "iphone",
|
"idiom" : "iphone",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "60x60"
|
||||||
|
},
|
||||||
|
{
|
||||||
"filename" : "Icon-App-60x60@3x.png",
|
"filename" : "Icon-App-60x60@3x.png",
|
||||||
"scale" : "3x"
|
"idiom" : "iphone",
|
||||||
|
"scale" : "3x",
|
||||||
|
"size" : "60x60"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-20x20@1x.png",
|
"filename" : "Icon-App-20x20@1x.png",
|
||||||
"scale" : "1x"
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "20x20"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-20x20@2x.png",
|
"filename" : "Icon-App-20x20@2x.png",
|
||||||
"scale" : "2x"
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "20x20"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-29x29@1x.png",
|
"filename" : "Icon-App-29x29@1x.png",
|
||||||
"scale" : "1x"
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "29x29"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-29x29@2x.png",
|
"filename" : "Icon-App-29x29@2x.png",
|
||||||
"scale" : "2x"
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "29x29"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-40x40@1x.png",
|
"filename" : "Icon-App-40x40@1x.png",
|
||||||
"scale" : "1x"
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "40x40"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-40x40@2x.png",
|
"filename" : "Icon-App-40x40@2x.png",
|
||||||
"scale" : "2x"
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "40x40"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "76x76",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-76x76@1x.png",
|
"filename" : "Icon-App-76x76@1x.png",
|
||||||
"scale" : "1x"
|
"idiom" : "ipad",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "76x76"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "76x76",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-76x76@2x.png",
|
"filename" : "Icon-App-76x76@2x.png",
|
||||||
"scale" : "2x"
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "76x76"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"size" : "83.5x83.5",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-83.5x83.5@2x.png",
|
"filename" : "Icon-App-83.5x83.5@2x.png",
|
||||||
"scale" : "2x"
|
"idiom" : "ipad",
|
||||||
|
"scale" : "2x",
|
||||||
|
"size" : "83.5x83.5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idiom" : "ios-marketing",
|
||||||
|
"scale" : "1x",
|
||||||
|
"size" : "1024x1024"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"info" : {
|
"info" : {
|
||||||
"version" : 1,
|
"author" : "xcode",
|
||||||
"author" : "xcode"
|
"version" : 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
7
packages/google_sign_in/google_sign_in_ios/example/macos/.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Flutter-related
|
||||||
|
**/Flutter/ephemeral/
|
||||||
|
**/Pods/
|
||||||
|
|
||||||
|
# Xcode-related
|
||||||
|
**/dgph
|
||||||
|
**/xcuserdata/
|
@ -0,0 +1,2 @@
|
|||||||
|
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
|
||||||
|
#include "ephemeral/Flutter-Generated.xcconfig"
|
@ -0,0 +1,2 @@
|
|||||||
|
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
|
||||||
|
#include "ephemeral/Flutter-Generated.xcconfig"
|
@ -0,0 +1,45 @@
|
|||||||
|
platform :osx, '10.15'
|
||||||
|
|
||||||
|
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
||||||
|
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
||||||
|
|
||||||
|
project 'Runner', {
|
||||||
|
'Debug' => :debug,
|
||||||
|
'Profile' => :release,
|
||||||
|
'Release' => :release,
|
||||||
|
}
|
||||||
|
|
||||||
|
def flutter_root
|
||||||
|
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
|
||||||
|
unless File.exist?(generated_xcode_build_settings_path)
|
||||||
|
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
|
||||||
|
end
|
||||||
|
|
||||||
|
File.foreach(generated_xcode_build_settings_path) do |line|
|
||||||
|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
|
||||||
|
return matches[1].strip if matches
|
||||||
|
end
|
||||||
|
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
|
||||||
|
end
|
||||||
|
|
||||||
|
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
|
||||||
|
|
||||||
|
flutter_macos_podfile_setup
|
||||||
|
|
||||||
|
target 'Runner' do
|
||||||
|
use_frameworks!
|
||||||
|
use_modular_headers!
|
||||||
|
|
||||||
|
flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
|
||||||
|
target 'RunnerTests' do
|
||||||
|
inherit! :search_paths
|
||||||
|
end
|
||||||
|
|
||||||
|
pod 'OCMock','3.5'
|
||||||
|
end
|
||||||
|
|
||||||
|
post_install do |installer|
|
||||||
|
installer.pods_project.targets.each do |target|
|
||||||
|
flutter_additional_macos_build_settings(target)
|
||||||
|
end
|
||||||
|
end
|
@ -0,0 +1,795 @@
|
|||||||
|
// !$*UTF8*$!
|
||||||
|
{
|
||||||
|
archiveVersion = 1;
|
||||||
|
classes = {
|
||||||
|
};
|
||||||
|
objectVersion = 54;
|
||||||
|
objects = {
|
||||||
|
|
||||||
|
/* Begin PBXAggregateTarget section */
|
||||||
|
33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {
|
||||||
|
isa = PBXAggregateTarget;
|
||||||
|
buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */;
|
||||||
|
buildPhases = (
|
||||||
|
33CC111E2044C6BF0003C045 /* ShellScript */,
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = "Flutter Assemble";
|
||||||
|
productName = FLX;
|
||||||
|
};
|
||||||
|
/* End PBXAggregateTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXBuildFile section */
|
||||||
|
330B3F8D2B1E2A5800E6DC3F /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 330B3F8C2B1E2A5800E6DC3F /* GoogleService-Info.plist */; };
|
||||||
|
331C80D8294CF71000263BE5 /* GoogleSignInTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* GoogleSignInTests.m */; };
|
||||||
|
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
|
||||||
|
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
|
||||||
|
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
|
||||||
|
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
|
||||||
|
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
|
||||||
|
D7B8415A3D20001DE212873D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A19720E5189178660264EC3F /* Pods_Runner.framework */; };
|
||||||
|
F107B1B7E4ECB85727EC4286 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BD1DCE969A7E7C76D9CF93C /* Pods_RunnerTests.framework */; };
|
||||||
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
|
/* Begin PBXContainerItemProxy section */
|
||||||
|
331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = 33CC10EC2044A3C60003C045;
|
||||||
|
remoteInfo = Runner;
|
||||||
|
};
|
||||||
|
33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = 33CC111A2044C6BA0003C045;
|
||||||
|
remoteInfo = FLX;
|
||||||
|
};
|
||||||
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
33CC110E2044A8840003C045 /* Bundle Framework */ = {
|
||||||
|
isa = PBXCopyFilesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
dstPath = "";
|
||||||
|
dstSubfolderSpec = 10;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
name = "Bundle Framework";
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXCopyFilesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXFileReference section */
|
||||||
|
0BD1DCE969A7E7C76D9CF93C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
0E1002C336EBB758B6DD1BE4 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
330B3F8C2B1E2A5800E6DC3F /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "../../../darwin/Tests/GoogleService-Info.plist"; sourceTree = "<group>"; };
|
||||||
|
331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
331C80D7294CF71000263BE5 /* GoogleSignInTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = GoogleSignInTests.m; path = ../../darwin/Tests/GoogleSignInTests.m; sourceTree = SOURCE_ROOT; };
|
||||||
|
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
|
||||||
|
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
|
||||||
|
33CC10ED2044A3C60003C045 /* google_sign_in_ios_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = google_sign_in_ios_example.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
|
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
|
||||||
|
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||||
|
33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = "<group>"; };
|
||||||
|
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = "<group>"; };
|
||||||
|
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
|
||||||
|
33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
|
||||||
|
33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
|
||||||
|
4626AA70E7BDF77ABE2E7DB0 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
|
||||||
|
8403A54CFF539C6D4BFB2536 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
|
||||||
|
A031586E267538A14E77F28E /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
A19720E5189178660264EC3F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
B2C32822D6302E2419819672 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
C3173B998667B2AD47F260FE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
331C80D2294CF70F00263BE5 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
F107B1B7E4ECB85727EC4286 /* Pods_RunnerTests.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
33CC10EA2044A3C60003C045 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
D7B8415A3D20001DE212873D /* Pods_Runner.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXGroup section */
|
||||||
|
330B3F8A2B1E27D300E6DC3F /* RunnerTests */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
330B3F8C2B1E2A5800E6DC3F /* GoogleService-Info.plist */,
|
||||||
|
331C80D7294CF71000263BE5 /* GoogleSignInTests.m */,
|
||||||
|
);
|
||||||
|
name = RunnerTests;
|
||||||
|
path = Runner;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
33BA886A226E78AF003329D5 /* Configs */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
33E5194F232828860026EE4D /* AppInfo.xcconfig */,
|
||||||
|
9740EEB21CF90195004384FC /* Debug.xcconfig */,
|
||||||
|
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
|
||||||
|
333000ED22D3DE5D00554162 /* Warnings.xcconfig */,
|
||||||
|
);
|
||||||
|
path = Configs;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
33CC10E42044A3C60003C045 = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
33FAB671232836740065AC1E /* Runner */,
|
||||||
|
33CEB47122A05771004F2AC0 /* Flutter */,
|
||||||
|
330B3F8A2B1E27D300E6DC3F /* RunnerTests */,
|
||||||
|
33CC10EE2044A3C60003C045 /* Products */,
|
||||||
|
D73912EC22F37F3D000D13A0 /* Frameworks */,
|
||||||
|
A5245CE44A722A1081437B5D /* Pods */,
|
||||||
|
);
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
33CC10EE2044A3C60003C045 /* Products */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
33CC10ED2044A3C60003C045 /* google_sign_in_ios_example.app */,
|
||||||
|
331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
|
||||||
|
);
|
||||||
|
name = Products;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
33CC11242044D66E0003C045 /* Resources */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
33CC10F22044A3C60003C045 /* Assets.xcassets */,
|
||||||
|
33CC10F42044A3C60003C045 /* MainMenu.xib */,
|
||||||
|
33CC10F72044A3C60003C045 /* Info.plist */,
|
||||||
|
);
|
||||||
|
name = Resources;
|
||||||
|
path = ..;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
33CEB47122A05771004F2AC0 /* Flutter */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
|
||||||
|
33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
|
||||||
|
33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
|
||||||
|
33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
|
||||||
|
);
|
||||||
|
path = Flutter;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
33FAB671232836740065AC1E /* Runner */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
33CC10F02044A3C60003C045 /* AppDelegate.swift */,
|
||||||
|
33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
|
||||||
|
33E51913231747F40026EE4D /* DebugProfile.entitlements */,
|
||||||
|
33E51914231749380026EE4D /* Release.entitlements */,
|
||||||
|
33CC11242044D66E0003C045 /* Resources */,
|
||||||
|
33BA886A226E78AF003329D5 /* Configs */,
|
||||||
|
);
|
||||||
|
path = Runner;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
A5245CE44A722A1081437B5D /* Pods */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
8403A54CFF539C6D4BFB2536 /* Pods-Runner.debug.xcconfig */,
|
||||||
|
A031586E267538A14E77F28E /* Pods-Runner.release.xcconfig */,
|
||||||
|
C3173B998667B2AD47F260FE /* Pods-Runner.profile.xcconfig */,
|
||||||
|
B2C32822D6302E2419819672 /* Pods-RunnerTests.debug.xcconfig */,
|
||||||
|
0E1002C336EBB758B6DD1BE4 /* Pods-RunnerTests.release.xcconfig */,
|
||||||
|
4626AA70E7BDF77ABE2E7DB0 /* Pods-RunnerTests.profile.xcconfig */,
|
||||||
|
);
|
||||||
|
path = Pods;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
D73912EC22F37F3D000D13A0 /* Frameworks */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
A19720E5189178660264EC3F /* Pods_Runner.framework */,
|
||||||
|
0BD1DCE969A7E7C76D9CF93C /* Pods_RunnerTests.framework */,
|
||||||
|
);
|
||||||
|
name = Frameworks;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXGroup section */
|
||||||
|
|
||||||
|
/* Begin PBXNativeTarget section */
|
||||||
|
331C80D4294CF70F00263BE5 /* RunnerTests */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
|
||||||
|
buildPhases = (
|
||||||
|
829BC609B118D03CC2221D87 /* [CP] Check Pods Manifest.lock */,
|
||||||
|
331C80D1294CF70F00263BE5 /* Sources */,
|
||||||
|
331C80D2294CF70F00263BE5 /* Frameworks */,
|
||||||
|
331C80D3294CF70F00263BE5 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
331C80DA294CF71000263BE5 /* PBXTargetDependency */,
|
||||||
|
);
|
||||||
|
name = RunnerTests;
|
||||||
|
productName = RunnerTests;
|
||||||
|
productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */;
|
||||||
|
productType = "com.apple.product-type.bundle.unit-test";
|
||||||
|
};
|
||||||
|
33CC10EC2044A3C60003C045 /* Runner */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
|
||||||
|
buildPhases = (
|
||||||
|
728CBB3DC3D62D9A33FE9D0E /* [CP] Check Pods Manifest.lock */,
|
||||||
|
33CC10E92044A3C60003C045 /* Sources */,
|
||||||
|
33CC10EA2044A3C60003C045 /* Frameworks */,
|
||||||
|
33CC10EB2044A3C60003C045 /* Resources */,
|
||||||
|
33CC110E2044A8840003C045 /* Bundle Framework */,
|
||||||
|
3399D490228B24CF009A79C7 /* ShellScript */,
|
||||||
|
71BCCDB30AA132D041139429 /* [CP] Embed Pods Frameworks */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
33CC11202044C79F0003C045 /* PBXTargetDependency */,
|
||||||
|
);
|
||||||
|
name = Runner;
|
||||||
|
productName = Runner;
|
||||||
|
productReference = 33CC10ED2044A3C60003C045 /* google_sign_in_ios_example.app */;
|
||||||
|
productType = "com.apple.product-type.application";
|
||||||
|
};
|
||||||
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
|
/* Begin PBXProject section */
|
||||||
|
33CC10E52044A3C60003C045 /* Project object */ = {
|
||||||
|
isa = PBXProject;
|
||||||
|
attributes = {
|
||||||
|
LastSwiftUpdateCheck = 0920;
|
||||||
|
LastUpgradeCheck = 1430;
|
||||||
|
ORGANIZATIONNAME = "";
|
||||||
|
TargetAttributes = {
|
||||||
|
331C80D4294CF70F00263BE5 = {
|
||||||
|
CreatedOnToolsVersion = 14.0;
|
||||||
|
TestTargetID = 33CC10EC2044A3C60003C045;
|
||||||
|
};
|
||||||
|
33CC10EC2044A3C60003C045 = {
|
||||||
|
CreatedOnToolsVersion = 9.2;
|
||||||
|
LastSwiftMigration = 1100;
|
||||||
|
ProvisioningStyle = Automatic;
|
||||||
|
SystemCapabilities = {
|
||||||
|
com.apple.Sandbox = {
|
||||||
|
enabled = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
33CC111A2044C6BA0003C045 = {
|
||||||
|
CreatedOnToolsVersion = 9.2;
|
||||||
|
ProvisioningStyle = Manual;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
|
||||||
|
compatibilityVersion = "Xcode 9.3";
|
||||||
|
developmentRegion = en;
|
||||||
|
hasScannedForEncodings = 0;
|
||||||
|
knownRegions = (
|
||||||
|
en,
|
||||||
|
Base,
|
||||||
|
);
|
||||||
|
mainGroup = 33CC10E42044A3C60003C045;
|
||||||
|
productRefGroup = 33CC10EE2044A3C60003C045 /* Products */;
|
||||||
|
projectDirPath = "";
|
||||||
|
projectRoot = "";
|
||||||
|
targets = (
|
||||||
|
33CC10EC2044A3C60003C045 /* Runner */,
|
||||||
|
331C80D4294CF70F00263BE5 /* RunnerTests */,
|
||||||
|
33CC111A2044C6BA0003C045 /* Flutter Assemble */,
|
||||||
|
);
|
||||||
|
};
|
||||||
|
/* End PBXProject section */
|
||||||
|
|
||||||
|
/* Begin PBXResourcesBuildPhase section */
|
||||||
|
331C80D3294CF70F00263BE5 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
330B3F8D2B1E2A5800E6DC3F /* GoogleService-Info.plist in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
33CC10EB2044A3C60003C045 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
|
||||||
|
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
|
3399D490228B24CF009A79C7 /* ShellScript */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
alwaysOutOfDate = 1;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
|
||||||
|
};
|
||||||
|
33CC111E2044C6BF0003C045 /* ShellScript */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
Flutter/ephemeral/FlutterInputs.xcfilelist,
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
Flutter/ephemeral/tripwire,
|
||||||
|
);
|
||||||
|
outputFileListPaths = (
|
||||||
|
Flutter/ephemeral/FlutterOutputs.xcfilelist,
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
|
||||||
|
};
|
||||||
|
71BCCDB30AA132D041139429 /* [CP] Embed Pods Frameworks */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
|
);
|
||||||
|
name = "[CP] Embed Pods Frameworks";
|
||||||
|
outputFileListPaths = (
|
||||||
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
728CBB3DC3D62D9A33FE9D0E /* [CP] Check Pods Manifest.lock */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||||
|
"${PODS_ROOT}/Manifest.lock",
|
||||||
|
);
|
||||||
|
name = "[CP] Check Pods Manifest.lock";
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
829BC609B118D03CC2221D87 /* [CP] Check Pods Manifest.lock */ = {
|
||||||
|
isa = PBXShellScriptBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
);
|
||||||
|
inputFileListPaths = (
|
||||||
|
);
|
||||||
|
inputPaths = (
|
||||||
|
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
||||||
|
"${PODS_ROOT}/Manifest.lock",
|
||||||
|
);
|
||||||
|
name = "[CP] Check Pods Manifest.lock";
|
||||||
|
outputFileListPaths = (
|
||||||
|
);
|
||||||
|
outputPaths = (
|
||||||
|
"$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
shellPath = /bin/sh;
|
||||||
|
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||||
|
showEnvVarsInLog = 0;
|
||||||
|
};
|
||||||
|
/* End PBXShellScriptBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXSourcesBuildPhase section */
|
||||||
|
331C80D1294CF70F00263BE5 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
331C80D8294CF71000263BE5 /* GoogleSignInTests.m in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
33CC10E92044A3C60003C045 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
|
||||||
|
33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
|
||||||
|
335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
|
/* Begin PBXTargetDependency section */
|
||||||
|
331C80DA294CF71000263BE5 /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
target = 33CC10EC2044A3C60003C045 /* Runner */;
|
||||||
|
targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
|
33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
|
||||||
|
targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
|
/* End PBXTargetDependency section */
|
||||||
|
|
||||||
|
/* Begin PBXVariantGroup section */
|
||||||
|
33CC10F42044A3C60003C045 /* MainMenu.xib */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
33CC10F52044A3C60003C045 /* Base */,
|
||||||
|
);
|
||||||
|
name = MainMenu.xib;
|
||||||
|
path = Runner;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
/* End PBXVariantGroup section */
|
||||||
|
|
||||||
|
/* Begin XCBuildConfiguration section */
|
||||||
|
331C80DB294CF71000263BE5 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = B2C32822D6302E2419819672 /* Pods-RunnerTests.debug.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.googleSignInIosExample.RunnerTests;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/google_sign_in_ios_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/google_sign_in_ios_example";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
331C80DC294CF71000263BE5 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 0E1002C336EBB758B6DD1BE4 /* Pods-RunnerTests.release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.googleSignInIosExample.RunnerTests;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/google_sign_in_ios_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/google_sign_in_ios_example";
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
331C80DD294CF71000263BE5 /* Profile */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 4626AA70E7BDF77ABE2E7DB0 /* Pods-RunnerTests.profile.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.googleSignInIosExample.RunnerTests;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/google_sign_in_ios_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/google_sign_in_ios_example";
|
||||||
|
};
|
||||||
|
name = Profile;
|
||||||
|
};
|
||||||
|
338D0CE9231458BD00FA5F75 /* Profile */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "-";
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = macosx;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
};
|
||||||
|
name = Profile;
|
||||||
|
};
|
||||||
|
338D0CEA231458BD00FA5F75 /* Profile */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/../Frameworks",
|
||||||
|
);
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
};
|
||||||
|
name = Profile;
|
||||||
|
};
|
||||||
|
338D0CEB231458BD00FA5F75 /* Profile */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CODE_SIGN_STYLE = Manual;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
};
|
||||||
|
name = Profile;
|
||||||
|
};
|
||||||
|
33CC10F92044A3C60003C045 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "-";
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
ENABLE_TESTABILITY = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
|
"DEBUG=1",
|
||||||
|
"$(inherited)",
|
||||||
|
);
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = YES;
|
||||||
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
|
SDKROOT = macosx;
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
33CC10FA2044A3C60003C045 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
|
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||||
|
CODE_SIGN_IDENTITY = "-";
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GCC_NO_COMMON_BLOCKS = YES;
|
||||||
|
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||||
|
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||||
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.15;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
|
SDKROOT = macosx;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
33CC10FC2044A3C60003C045 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/../Frameworks",
|
||||||
|
);
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
33CC10FD2044A3C60003C045 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
|
CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
INFOPLIST_FILE = Runner/Info.plist;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/../Frameworks",
|
||||||
|
);
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
33CC111C2044C6BA0003C045 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CODE_SIGN_STYLE = Manual;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
33CC111D2044C6BA0003C045 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
|
/* Begin XCConfigurationList section */
|
||||||
|
331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
331C80DB294CF71000263BE5 /* Debug */,
|
||||||
|
331C80DC294CF71000263BE5 /* Release */,
|
||||||
|
331C80DD294CF71000263BE5 /* Profile */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
33CC10F92044A3C60003C045 /* Debug */,
|
||||||
|
33CC10FA2044A3C60003C045 /* Release */,
|
||||||
|
338D0CE9231458BD00FA5F75 /* Profile */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
33CC10FC2044A3C60003C045 /* Debug */,
|
||||||
|
33CC10FD2044A3C60003C045 /* Release */,
|
||||||
|
338D0CEA231458BD00FA5F75 /* Profile */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
33CC111C2044C6BA0003C045 /* Debug */,
|
||||||
|
33CC111D2044C6BA0003C045 /* Release */,
|
||||||
|
338D0CEB231458BD00FA5F75 /* Profile */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
|
/* End XCConfigurationList section */
|
||||||
|
};
|
||||||
|
rootObject = 33CC10E52044A3C60003C045 /* Project object */;
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -0,0 +1,98 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1430"
|
||||||
|
version = "1.3">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||||
|
BuildableName = "google_sign_in_ios_example.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||||
|
BuildableName = "google_sign_in_ios_example.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
|
<Testables>
|
||||||
|
<TestableReference
|
||||||
|
skipped = "NO"
|
||||||
|
parallelizable = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "331C80D4294CF70F00263BE5"
|
||||||
|
BuildableName = "RunnerTests.xctest"
|
||||||
|
BlueprintName = "RunnerTests"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</TestableReference>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
launchStyle = "0"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||||
|
BuildableName = "google_sign_in_ios_example.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Profile"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||||
|
BuildableName = "google_sign_in_ios_example.app"
|
||||||
|
BlueprintName = "Runner"
|
||||||
|
ReferencedContainer = "container:Runner.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
10
packages/google_sign_in/google_sign_in_ios/example/macos/Runner.xcworkspace/contents.xcworkspacedata
generated
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Workspace
|
||||||
|
version = "1.0">
|
||||||
|
<FileRef
|
||||||
|
location = "group:Runner.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
<FileRef
|
||||||
|
location = "group:Pods/Pods.xcodeproj">
|
||||||
|
</FileRef>
|
||||||
|
</Workspace>
|
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -0,0 +1,13 @@
|
|||||||
|
// Copyright 2013 The Flutter Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
import Cocoa
|
||||||
|
import FlutterMacOS
|
||||||
|
|
||||||
|
@NSApplicationMain
|
||||||
|
class AppDelegate: FlutterAppDelegate {
|
||||||
|
override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"size" : "16x16",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"filename" : "app_icon_16.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "16x16",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"filename" : "app_icon_32.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "32x32",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"filename" : "app_icon_32.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "32x32",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"filename" : "app_icon_64.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "128x128",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"filename" : "app_icon_128.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "128x128",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"filename" : "app_icon_256.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "256x256",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"filename" : "app_icon_256.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "256x256",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"filename" : "app_icon_512.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "512x512",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"filename" : "app_icon_512.png",
|
||||||
|
"scale" : "1x"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"size" : "512x512",
|
||||||
|
"idiom" : "mac",
|
||||||
|
"filename" : "app_icon_1024.png",
|
||||||
|
"scale" : "2x"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"version" : 1,
|
||||||
|
"author" : "xcode"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 520 B |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 1.0 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 2.2 KiB |
@ -0,0 +1,343 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
|
||||||
|
<dependencies>
|
||||||
|
<deployment identifier="macosx"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
|
||||||
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
|
</dependencies>
|
||||||
|
<objects>
|
||||||
|
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
|
||||||
|
<connections>
|
||||||
|
<outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
|
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Runner" customModuleProvider="target">
|
||||||
|
<connections>
|
||||||
|
<outlet property="applicationMenu" destination="uQy-DD-JDr" id="XBo-yE-nKs"/>
|
||||||
|
<outlet property="mainFlutterWindow" destination="QvC-M9-y7g" id="gIp-Ho-8D9"/>
|
||||||
|
</connections>
|
||||||
|
</customObject>
|
||||||
|
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||||
|
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||||
|
<items>
|
||||||
|
<menuItem title="APP_NAME" id="1Xt-HY-uBw">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="APP_NAME" systemMenu="apple" id="uQy-DD-JDr">
|
||||||
|
<items>
|
||||||
|
<menuItem title="About APP_NAME" id="5kV-Vb-QxS">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
||||||
|
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
|
||||||
|
<menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
|
||||||
|
<menuItem title="Services" id="NMo-om-nkz">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
|
||||||
|
<menuItem title="Hide APP_NAME" keyEquivalent="h" id="Olw-nP-bQN">
|
||||||
|
<connections>
|
||||||
|
<action selector="hide:" target="-1" id="PnN-Uc-m68"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Show All" id="Kd2-mp-pUS">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
|
||||||
|
<menuItem title="Quit APP_NAME" keyEquivalent="q" id="4sb-4s-VLi">
|
||||||
|
<connections>
|
||||||
|
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Edit" id="5QF-Oa-p0T">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Edit" id="W48-6f-4Dl">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
|
||||||
|
<connections>
|
||||||
|
<action selector="undo:" target="-1" id="M6e-cu-g7V"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
|
||||||
|
<connections>
|
||||||
|
<action selector="redo:" target="-1" id="oIA-Rs-6OD"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
|
||||||
|
<menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
|
||||||
|
<connections>
|
||||||
|
<action selector="cut:" target="-1" id="YJe-68-I9s"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
|
||||||
|
<connections>
|
||||||
|
<action selector="copy:" target="-1" id="G1f-GL-Joy"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
|
||||||
|
<connections>
|
||||||
|
<action selector="paste:" target="-1" id="UvS-8e-Qdg"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Delete" id="pa3-QI-u2k">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="delete:" target="-1" id="0Mk-Ml-PaM"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
|
||||||
|
<connections>
|
||||||
|
<action selector="selectAll:" target="-1" id="VNm-Mi-diN"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
|
||||||
|
<menuItem title="Find" id="4EN-yA-p0u">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Find" id="1b7-l0-nxx">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
|
||||||
|
<connections>
|
||||||
|
<action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
|
||||||
|
<connections>
|
||||||
|
<action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
|
||||||
|
<connections>
|
||||||
|
<action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
|
||||||
|
<connections>
|
||||||
|
<action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
|
||||||
|
<connections>
|
||||||
|
<action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
|
||||||
|
<connections>
|
||||||
|
<action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
|
||||||
|
<connections>
|
||||||
|
<action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
|
||||||
|
<menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Substitutions" id="9ic-FL-obx">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Show Substitutions" id="z6F-FW-3nz">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
|
||||||
|
<menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Smart Quotes" id="hQb-2v-fYv">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Smart Dashes" id="rgM-f4-ycn">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Smart Links" id="cwL-P1-jid">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Data Detectors" id="tRr-pd-1PS">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Text Replacement" id="HFQ-gK-NFA">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Transformations" id="2oI-Rn-ZJC">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Transformations" id="c8a-y6-VQd">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Make Upper Case" id="vmV-6d-7jI">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Make Lower Case" id="d9M-CD-aMd">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Capitalize" id="UEZ-Bs-lqG">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Speech" id="xrE-MZ-jX0">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Speech" id="3rS-ZA-NoH">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Start Speaking" id="Ynk-f8-cLZ">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Stop Speaking" id="Oyz-dy-DGm">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="View" id="H8h-7b-M4v">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="View" id="HyV-fh-RgO">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="toggleFullScreen:" target="-1" id="dU3-MA-1Rq"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Window" id="aUF-d1-5bR">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
|
||||||
|
<items>
|
||||||
|
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
|
||||||
|
<connections>
|
||||||
|
<action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Zoom" id="R4o-n2-Eq4">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
|
||||||
|
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<connections>
|
||||||
|
<action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
|
||||||
|
</connections>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
</menu>
|
||||||
|
</menuItem>
|
||||||
|
<menuItem title="Help" id="EPT-qC-fAb">
|
||||||
|
<modifierMask key="keyEquivalentModifierMask"/>
|
||||||
|
<menu key="submenu" title="Help" systemMenu="help" id="rJ0-wn-3NY"/>
|
||||||
|
</menuItem>
|
||||||
|
</items>
|
||||||
|
<point key="canvasLocation" x="142" y="-258"/>
|
||||||
|
</menu>
|
||||||
|
<window title="APP_NAME" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="MainFlutterWindow" customModule="Runner" customModuleProvider="target">
|
||||||
|
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
|
||||||
|
<rect key="contentRect" x="335" y="390" width="800" height="600"/>
|
||||||
|
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1577"/>
|
||||||
|
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
|
||||||
|
<rect key="frame" x="0.0" y="0.0" width="800" height="600"/>
|
||||||
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
</view>
|
||||||
|
</window>
|
||||||
|
</objects>
|
||||||
|
</document>
|
@ -0,0 +1,14 @@
|
|||||||
|
// Application-level settings for the Runner target.
|
||||||
|
//
|
||||||
|
// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
|
||||||
|
// future. If not, the values below would default to using the project name when this becomes a
|
||||||
|
// 'flutter create' template.
|
||||||
|
|
||||||
|
// The application's name. By default this is also the title of the Flutter window.
|
||||||
|
PRODUCT_NAME = google_sign_in_ios_example
|
||||||
|
|
||||||
|
// The application's bundle identifier
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.plugins.googleSignInIosExample
|
||||||
|
|
||||||
|
// The copyright displayed in application information
|
||||||
|
PRODUCT_COPYRIGHT = Copyright © 2023 dev.flutter.plugins. All rights reserved.
|
@ -0,0 +1,2 @@
|
|||||||
|
#include "../../Flutter/Flutter-Debug.xcconfig"
|
||||||
|
#include "Warnings.xcconfig"
|
@ -0,0 +1,2 @@
|
|||||||
|
#include "../../Flutter/Flutter-Release.xcconfig"
|
||||||
|
#include "Warnings.xcconfig"
|
@ -0,0 +1,13 @@
|
|||||||
|
WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
|
||||||
|
GCC_WARN_UNDECLARED_SELECTOR = YES
|
||||||
|
CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
|
||||||
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
|
||||||
|
CLANG_WARN_PRAGMA_PACK = YES
|
||||||
|
CLANG_WARN_STRICT_PROTOTYPES = YES
|
||||||
|
CLANG_WARN_COMMA = YES
|
||||||
|
GCC_WARN_STRICT_SELECTOR_MATCH = YES
|
||||||
|
CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
|
||||||
|
GCC_WARN_SHADOW = YES
|
||||||
|
CLANG_WARN_UNREACHABLE_CODE = YES
|
@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>com.apple.security.app-sandbox</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.cs.allow-jit</key>
|
||||||
|
<true/>
|
||||||
|
<key>com.apple.security.network.server</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>$(EXECUTABLE_NAME)</string>
|
||||||
|
<key>CFBundleIconFile</key>
|
||||||
|
<string></string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>$(PRODUCT_NAME)</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>$(FLUTTER_BUILD_NAME)</string>
|
||||||
|
<key>CFBundleURLTypes</key>
|
||||||
|
<array>
|
||||||
|
<dict>
|
||||||
|
<key>CFBundleTypeRole</key>
|
||||||
|
<string>Editor</string>
|
||||||
|
<key>CFBundleURLSchemes</key>
|
||||||
|
<array>
|
||||||
|
<string>com.googleusercontent.apps.479882132969-9i9aqik3jfjd7qhci1nqf0bm2g71rm1u</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>$(FLUTTER_BUILD_NUMBER)</string>
|
||||||
|
<key>GIDClientID</key>
|
||||||
|
<string>479882132969-9i9aqik3jfjd7qhci1nqf0bm2g71rm1u.apps.googleusercontent.com</string>
|
||||||
|
<key>GIDServerClientID</key>
|
||||||
|
<string>YOUR_SERVER_CLIENT_ID</string>
|
||||||
|
<key>LSMinimumSystemVersion</key>
|
||||||
|
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||||
|
<key>NSHumanReadableCopyright</key>
|
||||||
|
<string>$(PRODUCT_COPYRIGHT)</string>
|
||||||
|
<key>NSMainNibFile</key>
|
||||||
|
<string>MainMenu</string>
|
||||||
|
<key>NSPrincipalClass</key>
|
||||||
|
<string>NSApplication</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -0,0 +1,19 @@
|
|||||||
|
// Copyright 2013 The Flutter Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
import Cocoa
|
||||||
|
import FlutterMacOS
|
||||||
|
|
||||||
|
class MainFlutterWindow: NSWindow {
|
||||||
|
override func awakeFromNib() {
|
||||||
|
let flutterViewController = FlutterViewController()
|
||||||
|
let windowFrame = self.frame
|
||||||
|
self.contentViewController = flutterViewController
|
||||||
|
self.setFrame(windowFrame, display: true)
|
||||||
|
|
||||||
|
RegisterGeneratedPlugins(registry: flutterViewController)
|
||||||
|
|
||||||
|
super.awakeFromNib()
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>com.apple.security.app-sandbox</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -3,8 +3,8 @@ description: Example of Google Sign-In plugin.
|
|||||||
publish_to: none
|
publish_to: none
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=3.0.0 <4.0.0"
|
sdk: ">=3.2.0 <4.0.0"
|
||||||
flutter: ">=3.10.0"
|
flutter: ">=3.16.0"
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
|
@ -7,8 +7,8 @@ import 'package:pigeon/pigeon.dart';
|
|||||||
@ConfigurePigeon(PigeonOptions(
|
@ConfigurePigeon(PigeonOptions(
|
||||||
dartOut: 'lib/src/messages.g.dart',
|
dartOut: 'lib/src/messages.g.dart',
|
||||||
objcOptions: ObjcOptions(prefix: 'FSI'),
|
objcOptions: ObjcOptions(prefix: 'FSI'),
|
||||||
objcHeaderOut: 'ios/Classes/messages.g.h',
|
objcHeaderOut: 'darwin/Classes/messages.g.h',
|
||||||
objcSourceOut: 'ios/Classes/messages.g.m',
|
objcSourceOut: 'darwin/Classes/messages.g.m',
|
||||||
copyrightHeader: 'pigeons/copyright.txt',
|
copyrightHeader: 'pigeons/copyright.txt',
|
||||||
))
|
))
|
||||||
|
|
||||||
|
@ -2,11 +2,11 @@ name: google_sign_in_ios
|
|||||||
description: iOS implementation of the google_sign_in plugin.
|
description: iOS implementation of the google_sign_in plugin.
|
||||||
repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in_ios
|
repository: https://github.com/flutter/packages/tree/main/packages/google_sign_in/google_sign_in_ios
|
||||||
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22
|
issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+google_sign_in%22
|
||||||
version: 5.6.5
|
version: 5.7.0
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=3.0.0 <4.0.0"
|
sdk: ">=3.2.0 <4.0.0"
|
||||||
flutter: ">=3.10.0"
|
flutter: ">=3.16.0"
|
||||||
|
|
||||||
flutter:
|
flutter:
|
||||||
plugin:
|
plugin:
|
||||||
@ -15,6 +15,11 @@ flutter:
|
|||||||
ios:
|
ios:
|
||||||
dartPluginClass: GoogleSignInIOS
|
dartPluginClass: GoogleSignInIOS
|
||||||
pluginClass: FLTGoogleSignInPlugin
|
pluginClass: FLTGoogleSignInPlugin
|
||||||
|
sharedDarwinSource: true
|
||||||
|
macos:
|
||||||
|
dartPluginClass: GoogleSignInIOS
|
||||||
|
pluginClass: FLTGoogleSignInPlugin
|
||||||
|
sharedDarwinSource: true
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
@ -36,7 +41,8 @@ topics:
|
|||||||
|
|
||||||
# The example deliberately includes limited-use secrets.
|
# The example deliberately includes limited-use secrets.
|
||||||
false_secrets:
|
false_secrets:
|
||||||
|
- /darwin/Tests/GoogleService-Info.plist
|
||||||
|
- /darwin/Tests/GoogleSignInTests.m
|
||||||
- /example/ios/Runner/Info.plist
|
- /example/ios/Runner/Info.plist
|
||||||
- /example/ios/RunnerTests/GoogleService-Info.plist
|
|
||||||
- /example/ios/RunnerTests/GoogleSignInTests.m
|
|
||||||
- /example/lib/main.dart
|
- /example/lib/main.dart
|
||||||
|
- /example/macos/Runner/Info.plist
|
||||||
|