[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
|
||||
script: .ci/scripts/prepare_tool.sh
|
||||
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
|
||||
script: script/tool_runner.sh
|
||||
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
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# google\_sign\_in\_ios
|
||||
|
||||
The iOS implementation of [`google_sign_in`][1].
|
||||
The iOS and macOS implementation of [`google_sign_in`][1].
|
||||
|
||||
## 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
|
||||
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
|
||||
[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
|
||||
// found in the LICENSE file.
|
||||
|
||||
#if TARGET_OS_OSX
|
||||
#import <FlutterMacOS/FlutterMacOS.h>
|
||||
#else
|
||||
#import <Flutter/Flutter.h>
|
||||
#endif
|
||||
|
||||
#import "messages.g.h"
|
||||
|
||||
@interface FLTGoogleSignInPlugin : NSObject <FlutterPlugin, FSIGoogleSignInApi>
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
@end
|
@ -50,32 +50,37 @@ static FlutterError *getFlutterError(NSError *error) {
|
||||
// The contents of GoogleService-Info.plist, if it exists.
|
||||
@property(strong, nullable) NSDictionary<NSString *, id> *googleServiceProperties;
|
||||
|
||||
// Redeclared as not a designated initializer.
|
||||
- (instancetype)init;
|
||||
// The plugin registrar, for querying views.
|
||||
@property(strong, nonnull) id<FlutterPluginRegistrar> registrar;
|
||||
|
||||
@end
|
||||
|
||||
@implementation FLTGoogleSignInPlugin
|
||||
|
||||
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar {
|
||||
FLTGoogleSignInPlugin *instance = [[FLTGoogleSignInPlugin alloc] init];
|
||||
FLTGoogleSignInPlugin *instance = [[FLTGoogleSignInPlugin alloc] initWithRegistrar:registrar];
|
||||
[registrar addApplicationDelegate:instance];
|
||||
FSIGoogleSignInApiSetup(registrar.messenger, instance);
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
return [self initWithSignIn:GIDSignIn.sharedInstance];
|
||||
}
|
||||
|
||||
- (instancetype)initWithSignIn:(GIDSignIn *)signIn {
|
||||
return [self initWithSignIn:signIn withGoogleServiceProperties:loadGoogleServiceInfo()];
|
||||
- (instancetype)initWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar {
|
||||
return [self initWithSignIn:GIDSignIn.sharedInstance registrar:registrar];
|
||||
}
|
||||
|
||||
- (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];
|
||||
if (self) {
|
||||
_signIn = signIn;
|
||||
_registrar = registrar;
|
||||
_googleServiceProperties = googleServiceProperties;
|
||||
|
||||
// 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
|
||||
|
||||
#if TARGET_OS_IOS
|
||||
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options {
|
||||
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
|
||||
|
||||
@ -134,23 +149,21 @@ static FlutterError *getFlutterError(NSError *error) {
|
||||
self.signIn.configuration = self.configuration;
|
||||
}
|
||||
|
||||
[self.signIn signInWithPresentingViewController:[self topViewController]
|
||||
hint:nil
|
||||
additionalScopes:self.requestedScopes.allObjects
|
||||
completion:^(GIDSignInResult *_Nullable signInResult,
|
||||
NSError *_Nullable error) {
|
||||
GIDGoogleUser *user;
|
||||
NSString *serverAuthCode;
|
||||
if (signInResult) {
|
||||
user = signInResult.user;
|
||||
serverAuthCode = signInResult.serverAuthCode;
|
||||
}
|
||||
[self signInWithHint:nil
|
||||
additionalScopes:self.requestedScopes.allObjects
|
||||
completion:^(GIDSignInResult *_Nullable signInResult, NSError *_Nullable error) {
|
||||
GIDGoogleUser *user;
|
||||
NSString *serverAuthCode;
|
||||
if (signInResult) {
|
||||
user = signInResult.user;
|
||||
serverAuthCode = signInResult.serverAuthCode;
|
||||
}
|
||||
|
||||
[self didSignInForUser:user
|
||||
withServerAuthCode:serverAuthCode
|
||||
completion:completion
|
||||
error:error];
|
||||
}];
|
||||
[self didSignInForUser:user
|
||||
withServerAuthCode:serverAuthCode
|
||||
completion:completion
|
||||
error:error];
|
||||
}];
|
||||
} @catch (NSException *e) {
|
||||
completion(nil, [FlutterError errorWithCode:@"google_sign_in" message:e.reason details:e.name]);
|
||||
[e raise];
|
||||
@ -196,51 +209,67 @@ static FlutterError *getFlutterError(NSError *error) {
|
||||
message:@"No account to grant scopes."
|
||||
details:nil]);
|
||||
}
|
||||
[currentUser addScopes:requestedScopes.allObjects
|
||||
presentingViewController:[self topViewController]
|
||||
completion:^(GIDSignInResult *_Nullable signInResult,
|
||||
NSError *_Nullable addedScopeError) {
|
||||
BOOL granted = NO;
|
||||
FlutterError *error = nil;
|
||||
[self addScopes:requestedScopes.allObjects
|
||||
completion:^(GIDSignInResult *_Nullable signInResult, NSError *_Nullable addedScopeError) {
|
||||
BOOL granted = NO;
|
||||
FlutterError *error = nil;
|
||||
|
||||
if ([addedScopeError.domain isEqualToString:kGIDSignInErrorDomain] &&
|
||||
addedScopeError.code == kGIDSignInErrorCodeMismatchWithCurrentUser) {
|
||||
error =
|
||||
[FlutterError errorWithCode:@"mismatch_user"
|
||||
message:@"There is an operation on a previous "
|
||||
@"user. Try signing in again."
|
||||
details:nil];
|
||||
} else if ([addedScopeError.domain isEqualToString:kGIDSignInErrorDomain] &&
|
||||
addedScopeError.code ==
|
||||
kGIDSignInErrorCodeScopesAlreadyGranted) {
|
||||
// Scopes already granted, report success.
|
||||
granted = YES;
|
||||
} else if (signInResult.user) {
|
||||
NSSet<NSString *> *grantedScopes =
|
||||
[NSSet setWithArray:signInResult.user.grantedScopes];
|
||||
granted = [requestedScopes isSubsetOfSet:grantedScopes];
|
||||
}
|
||||
completion(error == nil ? @(granted) : nil, error);
|
||||
}];
|
||||
if ([addedScopeError.domain isEqualToString:kGIDSignInErrorDomain] &&
|
||||
addedScopeError.code == kGIDSignInErrorCodeMismatchWithCurrentUser) {
|
||||
error = [FlutterError errorWithCode:@"mismatch_user"
|
||||
message:@"There is an operation on a previous "
|
||||
@"user. Try signing in again."
|
||||
details:nil];
|
||||
} else if ([addedScopeError.domain isEqualToString:kGIDSignInErrorDomain] &&
|
||||
addedScopeError.code == kGIDSignInErrorCodeScopesAlreadyGranted) {
|
||||
// Scopes already granted, report success.
|
||||
granted = YES;
|
||||
} else if (signInResult.user) {
|
||||
NSSet<NSString *> *grantedScopes =
|
||||
[NSSet setWithArray:signInResult.user.grantedScopes];
|
||||
granted = [requestedScopes isSubsetOfSet:grantedScopes];
|
||||
}
|
||||
completion(error == nil ? @(granted) : nil, error);
|
||||
}];
|
||||
} @catch (NSException *e) {
|
||||
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
|
||||
|
||||
// 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.
|
||||
- (GIDConfiguration *)configurationWithClientIdArgument:(id)clientIDArg
|
||||
serverClientIdArgument:(id)serverClientIDArg
|
||||
@ -299,6 +328,8 @@ static FlutterError *getFlutterError(NSError *error) {
|
||||
}
|
||||
}
|
||||
|
||||
#if TARGET_OS_IOS
|
||||
|
||||
- (UIViewController *)topViewController {
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
@ -337,4 +368,6 @@ static FlutterError *getFlutterError(NSError *error) {
|
||||
return viewController;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@end
|
@ -29,12 +29,17 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
// sign in, sign out, and requesting additional scopes.
|
||||
@property(strong, readonly) GIDSignIn *signIn;
|
||||
|
||||
/// Inject @c FlutterPluginRegistrar for testing.
|
||||
- (instancetype)initWithRegistrar:(NSObject<FlutterPluginRegistrar> *)registrar;
|
||||
|
||||
/// 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.
|
||||
- (instancetype)initWithSignIn:(GIDSignIn *)signIn
|
||||
withGoogleServiceProperties:(nullable NSDictionary<NSString *, id> *)googleServiceProperties
|
||||
registrar:(NSObject<FlutterPluginRegistrar> *)registrar
|
||||
googleServiceProperties:(nullable NSDictionary<NSString *, id> *)googleServiceProperties
|
||||
NS_DESIGNATED_INITIALIZER;
|
||||
|
||||
@end
|
@ -2,7 +2,12 @@
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include <TargetConditionals.h>
|
||||
#if TARGET_OS_OSX
|
||||
@import FlutterMacOS;
|
||||
#else
|
||||
@import Flutter;
|
||||
#endif
|
||||
|
||||
@import XCTest;
|
||||
@import google_sign_in_ios;
|
||||
@ -33,7 +38,8 @@
|
||||
self.mockSignIn = mockSignIn;
|
||||
|
||||
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];
|
||||
|
||||
NSString *plistPath =
|
||||
@ -52,7 +58,8 @@
|
||||
}
|
||||
|
||||
- (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"];
|
||||
[self.plugin disconnectWithCompletion:^(FlutterError *error) {
|
||||
@ -63,10 +70,11 @@
|
||||
}
|
||||
|
||||
- (void)testDisconnectIgnoresError {
|
||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeHasNoAuthInKeychain
|
||||
userInfo:nil];
|
||||
[[self.mockSignIn stub] disconnectWithCompletion:[OCMArg invokeBlockWithArgs:error, nil]];
|
||||
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeHasNoAuthInKeychain
|
||||
userInfo:nil];
|
||||
[(GIDSignIn *)[self.mockSignIn stub]
|
||||
disconnectWithCompletion:[OCMArg invokeBlockWithArgs:sdkError, nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"expect result returns true"];
|
||||
[self.plugin disconnectWithCompletion:^(FlutterError *error) {
|
||||
@ -81,7 +89,8 @@
|
||||
- (void)testInitNoClientIdNoError {
|
||||
// Init plugin without GoogleService-Info.plist.
|
||||
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
||||
withGoogleServiceProperties:nil];
|
||||
registrar:self.mockPluginRegistrar
|
||||
googleServiceProperties:nil];
|
||||
|
||||
// init call does not provide a clientId.
|
||||
FSIInitParams *params = [FSIInitParams makeWithScopes:@[]
|
||||
@ -96,24 +105,24 @@
|
||||
|
||||
- (void)testInitGoogleServiceInfoPlist {
|
||||
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
||||
withGoogleServiceProperties:self.googleServiceInfo];
|
||||
registrar:self.mockPluginRegistrar
|
||||
googleServiceProperties:self.googleServiceInfo];
|
||||
FSIInitParams *params = [FSIInitParams makeWithScopes:@[]
|
||||
hostedDomain:@"example.com"
|
||||
clientId:nil
|
||||
serverClientId:nil];
|
||||
|
||||
FlutterError *error;
|
||||
[self.plugin initializeSignInWithParameters:params error:&error];
|
||||
XCTAssertNil(error);
|
||||
FlutterError *initializationError;
|
||||
[self.plugin initializeSignInWithParameters:params error:&initializationError];
|
||||
XCTAssertNil(initializationError);
|
||||
|
||||
// Initialization values used in the next sign in request.
|
||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error){
|
||||
}];
|
||||
OCMVerify([self.mockSignIn
|
||||
signInWithPresentingViewController:[OCMArg isKindOfClass:[FlutterViewController class]]
|
||||
hint:nil
|
||||
additionalScopes:OCMOCK_ANY
|
||||
completion:OCMOCK_ANY]);
|
||||
OCMVerify([self configureMock:self.mockSignIn
|
||||
forSignInWithHint:nil
|
||||
additionalScopes:OCMOCK_ANY
|
||||
completion:OCMOCK_ANY]);
|
||||
|
||||
XCTAssertEqualObjects(self.plugin.configuration.hostedDomain, @"example.com");
|
||||
// Set in example app GoogleService-Info.plist.
|
||||
@ -126,25 +135,25 @@
|
||||
- (void)testInitDynamicClientIdNullDomain {
|
||||
// Init plugin without GoogleService-Info.plist.
|
||||
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
||||
withGoogleServiceProperties:nil];
|
||||
registrar:self.mockPluginRegistrar
|
||||
googleServiceProperties:nil];
|
||||
|
||||
FSIInitParams *params = [FSIInitParams makeWithScopes:@[]
|
||||
hostedDomain:nil
|
||||
clientId:@"mockClientId"
|
||||
serverClientId:nil];
|
||||
|
||||
FlutterError *error;
|
||||
[self.plugin initializeSignInWithParameters:params error:&error];
|
||||
XCTAssertNil(error);
|
||||
FlutterError *initializationError;
|
||||
[self.plugin initializeSignInWithParameters:params error:&initializationError];
|
||||
XCTAssertNil(initializationError);
|
||||
|
||||
// Initialization values used in the next sign in request.
|
||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error){
|
||||
}];
|
||||
OCMVerify([self.mockSignIn
|
||||
signInWithPresentingViewController:[OCMArg isKindOfClass:[FlutterViewController class]]
|
||||
hint:nil
|
||||
additionalScopes:OCMOCK_ANY
|
||||
completion:OCMOCK_ANY]);
|
||||
OCMVerify([self configureMock:self.mockSignIn
|
||||
forSignInWithHint:nil
|
||||
additionalScopes:OCMOCK_ANY
|
||||
completion:OCMOCK_ANY]);
|
||||
|
||||
XCTAssertEqualObjects(self.plugin.configuration.hostedDomain, nil);
|
||||
XCTAssertEqualObjects(self.plugin.configuration.clientID, @"mockClientId");
|
||||
@ -153,23 +162,23 @@
|
||||
|
||||
- (void)testInitDynamicServerClientIdNullDomain {
|
||||
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
||||
withGoogleServiceProperties:self.googleServiceInfo];
|
||||
registrar:self.mockPluginRegistrar
|
||||
googleServiceProperties:self.googleServiceInfo];
|
||||
FSIInitParams *params = [FSIInitParams makeWithScopes:@[]
|
||||
hostedDomain:nil
|
||||
clientId:nil
|
||||
serverClientId:@"mockServerClientId"];
|
||||
FlutterError *error;
|
||||
[self.plugin initializeSignInWithParameters:params error:&error];
|
||||
XCTAssertNil(error);
|
||||
FlutterError *initializationError;
|
||||
[self.plugin initializeSignInWithParameters:params error:&initializationError];
|
||||
XCTAssertNil(initializationError);
|
||||
|
||||
// Initialization values used in the next sign in request.
|
||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error){
|
||||
}];
|
||||
OCMVerify([self.mockSignIn
|
||||
signInWithPresentingViewController:[OCMArg isKindOfClass:[FlutterViewController class]]
|
||||
hint:nil
|
||||
additionalScopes:OCMOCK_ANY
|
||||
completion:OCMOCK_ANY]);
|
||||
OCMVerify([self configureMock:self.mockSignIn
|
||||
forSignInWithHint:nil
|
||||
additionalScopes:OCMOCK_ANY
|
||||
completion:OCMOCK_ANY]);
|
||||
|
||||
XCTAssertEqualObjects(self.plugin.configuration.hostedDomain, nil);
|
||||
// Set in example app GoogleService-Info.plist.
|
||||
@ -186,7 +195,7 @@
|
||||
serverClientId:nil];
|
||||
|
||||
FlutterError *error;
|
||||
self.plugin = [[FLTGoogleSignInPlugin alloc] init];
|
||||
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithRegistrar:self.mockPluginRegistrar];
|
||||
[self.plugin initializeSignInWithParameters:params error:&error];
|
||||
XCTAssertNil(error);
|
||||
XCTAssertNil(self.plugin.configuration);
|
||||
@ -243,12 +252,13 @@
|
||||
}
|
||||
|
||||
- (void)testSignInSilentlyWithError {
|
||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeHasNoAuthInKeychain
|
||||
userInfo:nil];
|
||||
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeHasNoAuthInKeychain
|
||||
userInfo:nil];
|
||||
|
||||
[[self.mockSignIn stub]
|
||||
restorePreviousSignInWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
||||
restorePreviousSignInWithCompletion:[OCMArg
|
||||
invokeBlockWithArgs:[NSNull null], sdkError, nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin signInSilentlyWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
||||
@ -263,7 +273,8 @@
|
||||
|
||||
- (void)testSignIn {
|
||||
self.plugin = [[FLTGoogleSignInPlugin alloc] initWithSignIn:self.mockSignIn
|
||||
withGoogleServiceProperties:self.googleServiceInfo];
|
||||
registrar:self.mockPluginRegistrar
|
||||
googleServiceProperties:self.googleServiceInfo];
|
||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||
id mockUserProfile = OCMClassMock([GIDProfileData class]);
|
||||
OCMStub([mockUserProfile name]).andReturn(@"mockDisplay");
|
||||
@ -279,12 +290,10 @@
|
||||
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
||||
OCMStub([mockSignInResult serverAuthCode]).andReturn(@"mockAuthCode");
|
||||
|
||||
[[self.mockSignIn expect]
|
||||
signInWithPresentingViewController:[OCMArg isKindOfClass:[FlutterViewController class]]
|
||||
hint:nil
|
||||
additionalScopes:@[]
|
||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult,
|
||||
[NSNull null], nil]];
|
||||
[self configureMock:[self.mockSignIn expect]
|
||||
forSignInWithHint:nil
|
||||
additionalScopes:@[]
|
||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
||||
@ -307,28 +316,26 @@
|
||||
}
|
||||
|
||||
- (void)testSignInWithInitializedScopes {
|
||||
FlutterError *error;
|
||||
FlutterError *initializationError;
|
||||
[self.plugin
|
||||
initializeSignInWithParameters:[FSIInitParams makeWithScopes:@[ @"initial1", @"initial2" ]
|
||||
hostedDomain:nil
|
||||
clientId:nil
|
||||
serverClientId:nil]
|
||||
error:&error];
|
||||
error:&initializationError];
|
||||
|
||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||
OCMStub([mockUser userID]).andReturn(@"mockID");
|
||||
id mockSignInResult = OCMClassMock([GIDSignInResult class]);
|
||||
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
||||
|
||||
[[self.mockSignIn expect]
|
||||
signInWithPresentingViewController:OCMOCK_ANY
|
||||
hint:nil
|
||||
additionalScopes:[OCMArg checkWithBlock:^BOOL(NSArray<NSString *> *scopes) {
|
||||
return [[NSSet setWithArray:scopes]
|
||||
isEqualToSet:[NSSet setWithObjects:@"initial1", @"initial2", nil]];
|
||||
}]
|
||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult,
|
||||
[NSNull null], nil]];
|
||||
[self configureMock:[self.mockSignIn expect]
|
||||
forSignInWithHint:nil
|
||||
additionalScopes:[OCMArg checkWithBlock:^BOOL(NSArray<NSString *> *scopes) {
|
||||
return [[NSSet setWithArray:scopes]
|
||||
isEqualToSet:[NSSet setWithObjects:@"initial1", @"initial2", nil]];
|
||||
}]
|
||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
||||
@ -347,19 +354,17 @@
|
||||
id mockSignInResult = OCMClassMock([GIDSignInResult class]);
|
||||
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
||||
|
||||
[[self.mockSignIn stub]
|
||||
signInWithPresentingViewController:OCMOCK_ANY
|
||||
hint:nil
|
||||
additionalScopes:OCMOCK_ANY
|
||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult,
|
||||
[NSNull null], nil]];
|
||||
[self configureMock:[self.mockSignIn stub]
|
||||
forSignInWithHint:nil
|
||||
additionalScopes:OCMOCK_ANY
|
||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
||||
|
||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeScopesAlreadyGranted
|
||||
userInfo:nil];
|
||||
[[self.mockSignIn currentUser] addScopes:OCMOCK_ANY
|
||||
presentingViewController:OCMOCK_ANY
|
||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
||||
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeScopesAlreadyGranted
|
||||
userInfo:nil];
|
||||
[self configureMock:mockUser
|
||||
forAddScopes:OCMOCK_ANY
|
||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], sdkError, nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
||||
@ -371,14 +376,13 @@
|
||||
}
|
||||
|
||||
- (void)testSignInError {
|
||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeCanceled
|
||||
userInfo:nil];
|
||||
[[self.mockSignIn stub]
|
||||
signInWithPresentingViewController:OCMOCK_ANY
|
||||
hint:nil
|
||||
additionalScopes:OCMOCK_ANY
|
||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
||||
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeCanceled
|
||||
userInfo:nil];
|
||||
[self configureMock:[self.mockSignIn stub]
|
||||
forSignInWithHint:nil
|
||||
additionalScopes:OCMOCK_ANY
|
||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], sdkError, nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin signInWithCompletion:^(FSIUserData *user, FlutterError *error) {
|
||||
@ -390,10 +394,10 @@
|
||||
}
|
||||
|
||||
- (void)testSignInException {
|
||||
OCMExpect([self.mockSignIn signInWithPresentingViewController:OCMOCK_ANY
|
||||
hint:OCMOCK_ANY
|
||||
additionalScopes:OCMOCK_ANY
|
||||
completion:OCMOCK_ANY])
|
||||
OCMExpect([self configureMock:self.mockSignIn
|
||||
forSignInWithHint:OCMOCK_ANY
|
||||
additionalScopes:OCMOCK_ANY
|
||||
completion:OCMOCK_ANY])
|
||||
.andThrow([NSException exceptionWithName:@"MockName" reason:@"MockReason" userInfo:nil]);
|
||||
|
||||
__block FlutterError *error;
|
||||
@ -441,11 +445,11 @@
|
||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||
|
||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeHasNoAuthInKeychain
|
||||
userInfo:nil];
|
||||
[[mockUser stub]
|
||||
refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
||||
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeHasNoAuthInKeychain
|
||||
userInfo:nil];
|
||||
[[mockUser stub] refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null],
|
||||
sdkError, nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin getAccessTokenWithCompletion:^(FSITokenData *token, FlutterError *error) {
|
||||
@ -461,11 +465,11 @@
|
||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||
|
||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeCanceled
|
||||
userInfo:nil];
|
||||
[[mockUser stub]
|
||||
refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
||||
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeCanceled
|
||||
userInfo:nil];
|
||||
[[mockUser stub] refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null],
|
||||
sdkError, nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin getAccessTokenWithCompletion:^(FSITokenData *token, FlutterError *error) {
|
||||
@ -481,9 +485,11 @@
|
||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||
|
||||
NSError *error = [NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorTimedOut userInfo:nil];
|
||||
[[mockUser stub]
|
||||
refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
||||
NSError *sdkError = [NSError errorWithDomain:NSURLErrorDomain
|
||||
code:NSURLErrorTimedOut
|
||||
userInfo:nil];
|
||||
[[mockUser stub] refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null],
|
||||
sdkError, nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin getAccessTokenWithCompletion:^(FSITokenData *token, FlutterError *error) {
|
||||
@ -499,9 +505,9 @@
|
||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||
|
||||
NSError *error = [NSError errorWithDomain:@"BogusDomain" code:42 userInfo:nil];
|
||||
[[mockUser stub]
|
||||
refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
||||
NSError *sdkError = [NSError errorWithDomain:@"BogusDomain" code:42 userInfo:nil];
|
||||
[[mockUser stub] refreshTokensIfNeededWithCompletion:[OCMArg invokeBlockWithArgs:[NSNull null],
|
||||
sdkError, nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin getAccessTokenWithCompletion:^(FSITokenData *token, FlutterError *error) {
|
||||
@ -530,12 +536,12 @@
|
||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||
|
||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeScopesAlreadyGranted
|
||||
userInfo:nil];
|
||||
[[mockUser stub] addScopes:@[ @"mockScope1" ]
|
||||
presentingViewController:OCMOCK_ANY
|
||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
||||
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeScopesAlreadyGranted
|
||||
userInfo:nil];
|
||||
[self configureMock:[mockUser stub]
|
||||
forAddScopes:@[ @"mockScope1" ]
|
||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], sdkError, nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin requestScopes:@[ @"mockScope1" ]
|
||||
@ -551,12 +557,12 @@
|
||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||
|
||||
NSError *error = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeMismatchWithCurrentUser
|
||||
userInfo:nil];
|
||||
[[mockUser stub] addScopes:@[ @"mockScope1" ]
|
||||
presentingViewController:OCMOCK_ANY
|
||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
||||
NSError *sdkError = [NSError errorWithDomain:kGIDSignInErrorDomain
|
||||
code:kGIDSignInErrorCodeMismatchWithCurrentUser
|
||||
userInfo:nil];
|
||||
[self configureMock:[mockUser stub]
|
||||
forAddScopes:@[ @"mockScope1" ]
|
||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], sdkError, nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin requestScopes:@[ @"mockScope1" ]
|
||||
@ -572,10 +578,10 @@
|
||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||
OCMStub([self.mockSignIn currentUser]).andReturn(mockUser);
|
||||
|
||||
NSError *error = [NSError errorWithDomain:@"BogusDomain" code:42 userInfo:nil];
|
||||
[[mockUser stub] addScopes:@[ @"mockScope1" ]
|
||||
presentingViewController:OCMOCK_ANY
|
||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], error, nil]];
|
||||
NSError *sdkError = [NSError errorWithDomain:@"BogusDomain" code:42 userInfo:nil];
|
||||
[self configureMock:[mockUser stub]
|
||||
forAddScopes:@[ @"mockScope1" ]
|
||||
completion:[OCMArg invokeBlockWithArgs:[NSNull null], sdkError, nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin requestScopes:@[ @"mockScope1" ]
|
||||
@ -591,7 +597,7 @@
|
||||
id mockUser = OCMClassMock([GIDGoogleUser class]);
|
||||
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]);
|
||||
|
||||
[self.plugin requestScopes:@[]
|
||||
@ -613,9 +619,9 @@
|
||||
OCMStub([mockUser grantedScopes]).andReturn(@[ @"mockScope1" ]);
|
||||
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
||||
|
||||
[[mockUser stub] addScopes:requestedScopes
|
||||
presentingViewController:OCMOCK_ANY
|
||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
||||
[self configureMock:[mockUser stub]
|
||||
forAddScopes:requestedScopes
|
||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin requestScopes:requestedScopes
|
||||
@ -635,9 +641,9 @@
|
||||
hostedDomain:nil
|
||||
clientId:nil
|
||||
serverClientId:nil];
|
||||
FlutterError *error;
|
||||
[self.plugin initializeSignInWithParameters:params error:&error];
|
||||
XCTAssertNil(error);
|
||||
FlutterError *initializationError;
|
||||
[self.plugin initializeSignInWithParameters:params error:&initializationError];
|
||||
XCTAssertNil(initializationError);
|
||||
|
||||
// Include one of the initially requested scopes.
|
||||
NSArray<NSString *> *addedScopes = @[ @"initial1", @"addScope1", @"addScope2" ];
|
||||
@ -647,13 +653,13 @@
|
||||
}];
|
||||
|
||||
// All four scopes are requested.
|
||||
[[mockUser verify] addScopes:[OCMArg checkWithBlock:^BOOL(NSArray<NSString *> *scopes) {
|
||||
return [[NSSet setWithArray:scopes]
|
||||
isEqualToSet:[NSSet setWithObjects:@"initial1", @"initial2",
|
||||
@"addScope1", @"addScope2", nil]];
|
||||
}]
|
||||
presentingViewController:OCMOCK_ANY
|
||||
completion:OCMOCK_ANY];
|
||||
[self configureMock:[mockUser verify]
|
||||
forAddScopes:[OCMArg checkWithBlock:^BOOL(NSArray<NSString *> *scopes) {
|
||||
return [[NSSet setWithArray:scopes]
|
||||
isEqualToSet:[NSSet setWithObjects:@"initial1", @"initial2", @"addScope1",
|
||||
@"addScope2", nil]];
|
||||
}]
|
||||
completion:OCMOCK_ANY];
|
||||
}
|
||||
|
||||
- (void)testRequestScopesReturnsTrueIfGranted {
|
||||
@ -666,9 +672,9 @@
|
||||
OCMStub([mockUser grantedScopes]).andReturn(requestedScopes);
|
||||
OCMStub([mockSignInResult user]).andReturn(mockUser);
|
||||
|
||||
[[mockUser stub] addScopes:requestedScopes
|
||||
presentingViewController:OCMOCK_ANY
|
||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
||||
[self configureMock:[mockUser stub]
|
||||
forAddScopes:requestedScopes
|
||||
completion:[OCMArg invokeBlockWithArgs:mockSignInResult, [NSNull null], nil]];
|
||||
|
||||
XCTestExpectation *expectation = [self expectationWithDescription:@"completion called"];
|
||||
[self.plugin requestScopes:requestedScopes
|
||||
@ -680,4 +686,34 @@
|
||||
[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
|
@ -15,9 +15,11 @@ Enables Google Sign-In in Flutter apps.
|
||||
s.source_files = 'Classes/**/*.{h,m}'
|
||||
s.public_header_files = 'Classes/**/*.h'
|
||||
s.module_map = 'Classes/FLTGoogleSignInPlugin.modulemap'
|
||||
s.dependency 'Flutter'
|
||||
s.dependency 'GoogleSignIn', '~> 7.0'
|
||||
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' }
|
||||
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>"; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
@ -74,7 +74,7 @@
|
||||
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>"; };
|
||||
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>"; };
|
||||
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>"; };
|
||||
@ -189,8 +189,8 @@
|
||||
F76AC1A32666D0540040C8BC /* RunnerTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F76AC1A42666D0540040C8BC /* GoogleSignInTests.m */,
|
||||
7A303C2D1E89D76400B1F19E /* GoogleService-Info.plist */,
|
||||
F76AC1A42666D0540040C8BC /* GoogleSignInTests.m */,
|
||||
F76AC1A62666D0540040C8BC /* Info.plist */,
|
||||
);
|
||||
path = RunnerTests;
|
||||
@ -611,7 +611,10 @@
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
@ -632,7 +635,10 @@
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
);
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
LIBRARY_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"$(PROJECT_DIR)/Flutter",
|
||||
@ -649,7 +655,11 @@
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
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_NAME = "$(TARGET_NAME)";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
|
||||
@ -663,7 +673,11 @@
|
||||
BUNDLE_LOADER = "$(TEST_HOST)";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
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_NAME = "$(TARGET_NAME)";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/Runner";
|
||||
@ -675,7 +689,11 @@
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
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_NAME = "$(TARGET_NAME)";
|
||||
TEST_TARGET_NAME = Runner;
|
||||
@ -687,7 +705,11 @@
|
||||
buildSettings = {
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
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_NAME = "$(TARGET_NAME)";
|
||||
TEST_TARGET_NAME = Runner;
|
||||
|
@ -1,116 +1,121 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
"idiom" : "iphone",
|
||||
"scale" : "2x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-20x20@3x.png",
|
||||
"scale" : "3x"
|
||||
"idiom" : "iphone",
|
||||
"scale" : "3x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"scale" : "1x"
|
||||
"idiom" : "iphone",
|
||||
"scale" : "1x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
"idiom" : "iphone",
|
||||
"scale" : "2x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-29x29@3x.png",
|
||||
"scale" : "3x"
|
||||
"idiom" : "iphone",
|
||||
"scale" : "3x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
"idiom" : "iphone",
|
||||
"scale" : "2x",
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-40x40@3x.png",
|
||||
"scale" : "3x"
|
||||
"idiom" : "iphone",
|
||||
"scale" : "3x",
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"filename" : "Icon-App-60x60@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"size" : "60x60",
|
||||
"idiom" : "iphone",
|
||||
"scale" : "2x",
|
||||
"size" : "60x60"
|
||||
},
|
||||
{
|
||||
"filename" : "Icon-App-60x60@3x.png",
|
||||
"scale" : "3x"
|
||||
"idiom" : "iphone",
|
||||
"scale" : "3x",
|
||||
"size" : "60x60"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-20x20@1x.png",
|
||||
"scale" : "1x"
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"size" : "20x20",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-20x20@2x.png",
|
||||
"scale" : "2x"
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "20x20"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-29x29@1x.png",
|
||||
"scale" : "1x"
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"size" : "29x29",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-29x29@2x.png",
|
||||
"scale" : "2x"
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "29x29"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-40x40@1x.png",
|
||||
"scale" : "1x"
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"size" : "40x40",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-40x40@2x.png",
|
||||
"scale" : "2x"
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "40x40"
|
||||
},
|
||||
{
|
||||
"size" : "76x76",
|
||||
"idiom" : "ipad",
|
||||
"filename" : "Icon-App-76x76@1x.png",
|
||||
"scale" : "1x"
|
||||
"idiom" : "ipad",
|
||||
"scale" : "1x",
|
||||
"size" : "76x76"
|
||||
},
|
||||
{
|
||||
"size" : "76x76",
|
||||
"idiom" : "ipad",
|
||||
"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",
|
||||
"scale" : "2x"
|
||||
"idiom" : "ipad",
|
||||
"scale" : "2x",
|
||||
"size" : "83.5x83.5"
|
||||
},
|
||||
{
|
||||
"idiom" : "ios-marketing",
|
||||
"scale" : "1x",
|
||||
"size" : "1024x1024"
|
||||
}
|
||||
],
|
||||
"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
|
||||
|
||||
environment:
|
||||
sdk: ">=3.0.0 <4.0.0"
|
||||
flutter: ">=3.10.0"
|
||||
sdk: ">=3.2.0 <4.0.0"
|
||||
flutter: ">=3.16.0"
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
|
@ -7,8 +7,8 @@ import 'package:pigeon/pigeon.dart';
|
||||
@ConfigurePigeon(PigeonOptions(
|
||||
dartOut: 'lib/src/messages.g.dart',
|
||||
objcOptions: ObjcOptions(prefix: 'FSI'),
|
||||
objcHeaderOut: 'ios/Classes/messages.g.h',
|
||||
objcSourceOut: 'ios/Classes/messages.g.m',
|
||||
objcHeaderOut: 'darwin/Classes/messages.g.h',
|
||||
objcSourceOut: 'darwin/Classes/messages.g.m',
|
||||
copyrightHeader: 'pigeons/copyright.txt',
|
||||
))
|
||||
|
||||
|
@ -2,11 +2,11 @@ name: google_sign_in_ios
|
||||
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
|
||||
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:
|
||||
sdk: ">=3.0.0 <4.0.0"
|
||||
flutter: ">=3.10.0"
|
||||
sdk: ">=3.2.0 <4.0.0"
|
||||
flutter: ">=3.16.0"
|
||||
|
||||
flutter:
|
||||
plugin:
|
||||
@ -15,6 +15,11 @@ flutter:
|
||||
ios:
|
||||
dartPluginClass: GoogleSignInIOS
|
||||
pluginClass: FLTGoogleSignInPlugin
|
||||
sharedDarwinSource: true
|
||||
macos:
|
||||
dartPluginClass: GoogleSignInIOS
|
||||
pluginClass: FLTGoogleSignInPlugin
|
||||
sharedDarwinSource: true
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
@ -36,7 +41,8 @@ topics:
|
||||
|
||||
# The example deliberately includes limited-use secrets.
|
||||
false_secrets:
|
||||
- /darwin/Tests/GoogleService-Info.plist
|
||||
- /darwin/Tests/GoogleSignInTests.m
|
||||
- /example/ios/Runner/Info.plist
|
||||
- /example/ios/RunnerTests/GoogleService-Info.plist
|
||||
- /example/ios/RunnerTests/GoogleSignInTests.m
|
||||
- /example/lib/main.dart
|
||||
- /example/macos/Runner/Info.plist
|
||||
|