Просмотр исходного кода

Set up example app for UI automation testing

Matthew Mathias 4 лет назад
Родитель
Сommit
0468d8300e
12 измененных файлов с 931 добавлено и 0 удалено
  1. 31 0
      .github/workflows/tests.yml
  2. 510 0
      GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample.xcodeproj/project.pbxproj
  3. 11 0
      GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample/Assets.xcassets/AccentColor.colorset/Contents.json
  4. 98 0
      GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample/Assets.xcassets/AppIcon.appiconset/Contents.json
  5. 6 0
      GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample/Assets.xcassets/Contents.json
  6. 32 0
      GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample/ContentView.swift
  7. 26 0
      GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExampleApp.swift
  8. 6 0
      GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample/Preview Content/Preview Assets.xcassets/Contents.json
  9. 37 0
      GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExampleUITests/GoogleSignInSwiftButtonExampleUITests.swift
  10. 18 0
      GoogleSignInSwift/Tests/Functional/TestApp/README.md
  11. 78 0
      Samples/Swift/DaysUntilBirthday/DaysUntilBirthdayForPod.xcodeproj/xcshareddata/xcschemes/DaysUntilBirthday(iOS).xcscheme
  12. 78 0
      Samples/Swift/DaysUntilBirthday/DaysUntilBirthdayForPod.xcodeproj/xcshareddata/xcschemes/DaysUntilBirthday(macOS).xcscheme

+ 31 - 0
.github/workflows/tests.yml

@@ -65,3 +65,34 @@ jobs:
           -sdk ${{ matrix.sdk }} \
           -destination ${{ matrix.destination }} \
           test-without-building
+
+  swift-button-functional-test:
+    runs-on: macOS-latest
+    strategy:
+      matrix:
+        sdk: ['macosx', 'iphonesimulator']
+        include:
+          - sdk: 'macosx'
+            destination: '"platform=OS X,arch=x86_64"'
+          - sdk: 'iphonesimulator'
+            destination: '"platform=iOS Simulator,name=iPhone 11"'
+    defaults:
+      run:
+        working-directory: GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample
+    steps:
+    - name: Checkout
+      uses: actions/checkout@v2
+    - name: Build test target for Google Sign-in button for Swift
+      run: |
+        xcodebuild \
+          build-for-testing \
+          -scheme GoogleSignInSwiftButtonExample \
+          -sdk iphonesimulator \
+          -destination 'platform=iOS Simulator,name=iPhone 11'
+    - name: Run test target for Google Sign-in button for Swift
+      run: |
+        xcodebuild \
+          test-without-building \
+          -scheme GoogleSignInSwiftButtonExample \
+          -sdk iphonesimulator \
+          -destination 'platform=iOS Simulator,name=iPhone 11'

+ 510 - 0
GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample.xcodeproj/project.pbxproj

@@ -0,0 +1,510 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 55;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		7311B788280F39F6002D0D8B /* GoogleSignInSwiftButtonExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7311B787280F39F6002D0D8B /* GoogleSignInSwiftButtonExampleApp.swift */; };
+		7311B78A280F39F6002D0D8B /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7311B789280F39F6002D0D8B /* ContentView.swift */; };
+		7311B78C280F39F7002D0D8B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7311B78B280F39F7002D0D8B /* Assets.xcassets */; };
+		7311B78F280F39F7002D0D8B /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7311B78E280F39F7002D0D8B /* Preview Assets.xcassets */; };
+		7311B7A3280F39F7002D0D8B /* GoogleSignInSwiftButtonExampleUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7311B7A2280F39F7002D0D8B /* GoogleSignInSwiftButtonExampleUITests.swift */; };
+		732F01DA280F42A200D1ACD1 /* GoogleSignIn in Frameworks */ = {isa = PBXBuildFile; productRef = 732F01D9280F42A200D1ACD1 /* GoogleSignIn */; };
+		732F01DC280F42A200D1ACD1 /* GoogleSignInSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 732F01DB280F42A200D1ACD1 /* GoogleSignInSwift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		7311B79F280F39F7002D0D8B /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 7311B77C280F39F6002D0D8B /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 7311B783280F39F6002D0D8B;
+			remoteInfo = GoogleSignInSwiftButtonExample;
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+		7311B784280F39F6002D0D8B /* GoogleSignInSwiftButtonExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GoogleSignInSwiftButtonExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		7311B787280F39F6002D0D8B /* GoogleSignInSwiftButtonExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoogleSignInSwiftButtonExampleApp.swift; sourceTree = "<group>"; };
+		7311B789280F39F6002D0D8B /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
+		7311B78B280F39F7002D0D8B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
+		7311B78E280F39F7002D0D8B /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
+		7311B79E280F39F7002D0D8B /* GoogleSignInSwiftButtonExampleUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoogleSignInSwiftButtonExampleUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+		7311B7A2280F39F7002D0D8B /* GoogleSignInSwiftButtonExampleUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoogleSignInSwiftButtonExampleUITests.swift; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		7311B781280F39F6002D0D8B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				732F01DA280F42A200D1ACD1 /* GoogleSignIn in Frameworks */,
+				732F01DC280F42A200D1ACD1 /* GoogleSignInSwift in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		7311B79B280F39F7002D0D8B /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		7311B77B280F39F6002D0D8B = {
+			isa = PBXGroup;
+			children = (
+				7311B786280F39F6002D0D8B /* GoogleSignInSwiftButtonExample */,
+				7311B7A1280F39F7002D0D8B /* GoogleSignInSwiftButtonExampleUITests */,
+				7311B785280F39F6002D0D8B /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		7311B785280F39F6002D0D8B /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				7311B784280F39F6002D0D8B /* GoogleSignInSwiftButtonExample.app */,
+				7311B79E280F39F7002D0D8B /* GoogleSignInSwiftButtonExampleUITests.xctest */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		7311B786280F39F6002D0D8B /* GoogleSignInSwiftButtonExample */ = {
+			isa = PBXGroup;
+			children = (
+				7311B787280F39F6002D0D8B /* GoogleSignInSwiftButtonExampleApp.swift */,
+				7311B789280F39F6002D0D8B /* ContentView.swift */,
+				7311B78B280F39F7002D0D8B /* Assets.xcassets */,
+				7311B78D280F39F7002D0D8B /* Preview Content */,
+			);
+			path = GoogleSignInSwiftButtonExample;
+			sourceTree = "<group>";
+		};
+		7311B78D280F39F7002D0D8B /* Preview Content */ = {
+			isa = PBXGroup;
+			children = (
+				7311B78E280F39F7002D0D8B /* Preview Assets.xcassets */,
+			);
+			path = "Preview Content";
+			sourceTree = "<group>";
+		};
+		7311B7A1280F39F7002D0D8B /* GoogleSignInSwiftButtonExampleUITests */ = {
+			isa = PBXGroup;
+			children = (
+				7311B7A2280F39F7002D0D8B /* GoogleSignInSwiftButtonExampleUITests.swift */,
+			);
+			path = GoogleSignInSwiftButtonExampleUITests;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		7311B783280F39F6002D0D8B /* GoogleSignInSwiftButtonExample */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 7311B7A8280F39F7002D0D8B /* Build configuration list for PBXNativeTarget "GoogleSignInSwiftButtonExample" */;
+			buildPhases = (
+				7311B780280F39F6002D0D8B /* Sources */,
+				7311B781280F39F6002D0D8B /* Frameworks */,
+				7311B782280F39F6002D0D8B /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = GoogleSignInSwiftButtonExample;
+			packageProductDependencies = (
+				732F01D9280F42A200D1ACD1 /* GoogleSignIn */,
+				732F01DB280F42A200D1ACD1 /* GoogleSignInSwift */,
+			);
+			productName = GoogleSignInSwiftButtonExample;
+			productReference = 7311B784280F39F6002D0D8B /* GoogleSignInSwiftButtonExample.app */;
+			productType = "com.apple.product-type.application";
+		};
+		7311B79D280F39F7002D0D8B /* GoogleSignInSwiftButtonExampleUITests */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 7311B7AE280F39F7002D0D8B /* Build configuration list for PBXNativeTarget "GoogleSignInSwiftButtonExampleUITests" */;
+			buildPhases = (
+				7311B79A280F39F7002D0D8B /* Sources */,
+				7311B79B280F39F7002D0D8B /* Frameworks */,
+				7311B79C280F39F7002D0D8B /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+				7311B7A0280F39F7002D0D8B /* PBXTargetDependency */,
+			);
+			name = GoogleSignInSwiftButtonExampleUITests;
+			productName = GoogleSignInSwiftButtonExampleUITests;
+			productReference = 7311B79E280F39F7002D0D8B /* GoogleSignInSwiftButtonExampleUITests.xctest */;
+			productType = "com.apple.product-type.bundle.ui-testing";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		7311B77C280F39F6002D0D8B /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				BuildIndependentTargetsInParallel = 1;
+				LastSwiftUpdateCheck = 1300;
+				LastUpgradeCheck = 1300;
+				TargetAttributes = {
+					7311B783280F39F6002D0D8B = {
+						CreatedOnToolsVersion = 13.0;
+					};
+					7311B79D280F39F7002D0D8B = {
+						CreatedOnToolsVersion = 13.0;
+						TestTargetID = 7311B783280F39F6002D0D8B;
+					};
+				};
+			};
+			buildConfigurationList = 7311B77F280F39F6002D0D8B /* Build configuration list for PBXProject "GoogleSignInSwiftButtonExample" */;
+			compatibilityVersion = "Xcode 13.0";
+			developmentRegion = en;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+				Base,
+			);
+			mainGroup = 7311B77B280F39F6002D0D8B;
+			packageReferences = (
+				732F01D8280F42A200D1ACD1 /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */,
+			);
+			productRefGroup = 7311B785280F39F6002D0D8B /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				7311B783280F39F6002D0D8B /* GoogleSignInSwiftButtonExample */,
+				7311B79D280F39F7002D0D8B /* GoogleSignInSwiftButtonExampleUITests */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		7311B782280F39F6002D0D8B /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				7311B78F280F39F7002D0D8B /* Preview Assets.xcassets in Resources */,
+				7311B78C280F39F7002D0D8B /* Assets.xcassets in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		7311B79C280F39F7002D0D8B /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		7311B780280F39F6002D0D8B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				7311B78A280F39F6002D0D8B /* ContentView.swift in Sources */,
+				7311B788280F39F6002D0D8B /* GoogleSignInSwiftButtonExampleApp.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		7311B79A280F39F7002D0D8B /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				7311B7A3280F39F7002D0D8B /* GoogleSignInSwiftButtonExampleUITests.swift in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		7311B7A0280F39F7002D0D8B /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 7311B783280F39F6002D0D8B /* GoogleSignInSwiftButtonExample */;
+			targetProxy = 7311B79F280F39F7002D0D8B /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+		7311B7A6280F39F7002D0D8B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = 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_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				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_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 15.0;
+				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+				MTL_FAST_MATH = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = iphoneos;
+				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+			};
+			name = Debug;
+		};
+		7311B7A7280F39F7002D0D8B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_ANALYZER_NONNULL = YES;
+				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_ENABLE_OBJC_WEAK = YES;
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_COMMA = 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_IMPLICIT_RETAIN_SELF = YES;
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				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_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				IPHONEOS_DEPLOYMENT_TARGET = 15.0;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				MTL_FAST_MATH = YES;
+				SDKROOT = iphoneos;
+				SWIFT_COMPILATION_MODE = wholemodule;
+				SWIFT_OPTIMIZATION_LEVEL = "-O";
+				VALIDATE_PRODUCT = YES;
+			};
+			name = Release;
+		};
+		7311B7A9280F39F7002D0D8B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				DEVELOPMENT_ASSET_PATHS = "\"GoogleSignInSwiftButtonExample/Preview Content\"";
+				ENABLE_PREVIEWS = YES;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
+				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+				INFOPLIST_KEY_UILaunchScreen_Generation = YES;
+				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_VERSION = 1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = com.google.GoogleSignInSwiftButtonExample;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_EMIT_LOC_STRINGS = YES;
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Debug;
+		};
+		7311B7AA280F39F7002D0D8B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				DEVELOPMENT_ASSET_PATHS = "\"GoogleSignInSwiftButtonExample/Preview Content\"";
+				ENABLE_PREVIEWS = YES;
+				GENERATE_INFOPLIST_FILE = YES;
+				INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
+				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
+				INFOPLIST_KEY_UILaunchScreen_Generation = YES;
+				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
+				IPHONEOS_DEPLOYMENT_TARGET = 14.0;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+				);
+				MARKETING_VERSION = 1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = com.google.GoogleSignInSwiftButtonExample;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_EMIT_LOC_STRINGS = YES;
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+			};
+			name = Release;
+		};
+		7311B7AF280F39F7002D0D8B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				GENERATE_INFOPLIST_FILE = YES;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				MARKETING_VERSION = 1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = com.google.GoogleSignInSwiftButtonExampleUITests;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_EMIT_LOC_STRINGS = NO;
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_TARGET_NAME = GoogleSignInSwiftButtonExample;
+			};
+			name = Debug;
+		};
+		7311B7B0280F39F7002D0D8B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+				CODE_SIGN_STYLE = Automatic;
+				CURRENT_PROJECT_VERSION = 1;
+				GENERATE_INFOPLIST_FILE = YES;
+				LD_RUNPATH_SEARCH_PATHS = (
+					"$(inherited)",
+					"@executable_path/Frameworks",
+					"@loader_path/Frameworks",
+				);
+				MARKETING_VERSION = 1.0;
+				PRODUCT_BUNDLE_IDENTIFIER = com.google.GoogleSignInSwiftButtonExampleUITests;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SWIFT_EMIT_LOC_STRINGS = NO;
+				SWIFT_VERSION = 5.0;
+				TARGETED_DEVICE_FAMILY = "1,2";
+				TEST_TARGET_NAME = GoogleSignInSwiftButtonExample;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		7311B77F280F39F6002D0D8B /* Build configuration list for PBXProject "GoogleSignInSwiftButtonExample" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				7311B7A6280F39F7002D0D8B /* Debug */,
+				7311B7A7280F39F7002D0D8B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		7311B7A8280F39F7002D0D8B /* Build configuration list for PBXNativeTarget "GoogleSignInSwiftButtonExample" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				7311B7A9280F39F7002D0D8B /* Debug */,
+				7311B7AA280F39F7002D0D8B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		7311B7AE280F39F7002D0D8B /* Build configuration list for PBXNativeTarget "GoogleSignInSwiftButtonExampleUITests" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				7311B7AF280F39F7002D0D8B /* Debug */,
+				7311B7B0280F39F7002D0D8B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+
+/* Begin XCRemoteSwiftPackageReference section */
+		732F01D8280F42A200D1ACD1 /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */ = {
+			isa = XCRemoteSwiftPackageReference;
+			repositoryURL = "https://github.com/google/GoogleSignIn-iOS";
+			requirement = {
+				branch = main;
+				kind = branch;
+			};
+		};
+/* End XCRemoteSwiftPackageReference section */
+
+/* Begin XCSwiftPackageProductDependency section */
+		732F01D9280F42A200D1ACD1 /* GoogleSignIn */ = {
+			isa = XCSwiftPackageProductDependency;
+			package = 732F01D8280F42A200D1ACD1 /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */;
+			productName = GoogleSignIn;
+		};
+		732F01DB280F42A200D1ACD1 /* GoogleSignInSwift */ = {
+			isa = XCSwiftPackageProductDependency;
+			package = 732F01D8280F42A200D1ACD1 /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */;
+			productName = GoogleSignInSwift;
+		};
+/* End XCSwiftPackageProductDependency section */
+	};
+	rootObject = 7311B77C280F39F6002D0D8B /* Project object */;
+}

+ 11 - 0
GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample/Assets.xcassets/AccentColor.colorset/Contents.json

@@ -0,0 +1,11 @@
+{
+  "colors" : [
+    {
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 98 - 0
GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample/Assets.xcassets/AppIcon.appiconset/Contents.json

@@ -0,0 +1,98 @@
+{
+  "images" : [
+    {
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "20x20"
+    },
+    {
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "20x20"
+    },
+    {
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "29x29"
+    },
+    {
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "29x29"
+    },
+    {
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "40x40"
+    },
+    {
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "40x40"
+    },
+    {
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "60x60"
+    },
+    {
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "60x60"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "20x20"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "20x20"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "29x29"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "29x29"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "40x40"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "40x40"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "76x76"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "76x76"
+    },
+    {
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "83.5x83.5"
+    },
+    {
+      "idiom" : "ios-marketing",
+      "scale" : "1x",
+      "size" : "1024x1024"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 6 - 0
GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample/Assets.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 32 - 0
GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample/ContentView.swift

@@ -0,0 +1,32 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import SwiftUI
+import GoogleSignInSwift
+
+struct ContentView: View {
+  let vm = GoogleSignInButtonViewModel(scheme: .light, style: .standard)
+  @State private var signInAttempts = 0
+
+  var body: some View {
+    Text("Sign In Button Taps: \(signInAttempts)")
+      .accessibilityIdentifier("SignInButtonTaps")
+    GoogleSignInButton(viewModel: vm) {
+      signInAttempts += 1
+    }
+    .accessibilityIdentifier("GoogleSignInButton")
+  }
+}

+ 26 - 0
GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExampleApp.swift

@@ -0,0 +1,26 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import SwiftUI
+
+@main
+struct GoogleSignInSwiftButtonExampleApp: App {
+    var body: some Scene {
+        WindowGroup {
+            ContentView()
+        }
+    }
+}

+ 6 - 0
GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExample/Preview Content/Preview Assets.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 37 - 0
GoogleSignInSwift/Tests/Functional/TestApp/GoogleSignInSwiftButtonExample/GoogleSignInSwiftButtonExampleUITests/GoogleSignInSwiftButtonExampleUITests.swift

@@ -0,0 +1,37 @@
+/*
+ * Copyright 2022 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import XCTest
+
+class GoogleSignInSwiftButtonExampleUITests: XCTestCase {
+  override func setUpWithError() throws {
+    try super.setUpWithError()
+    continueAfterFailure = false
+  }
+
+  func testGoogleSignInSwiftButton() throws {
+    let app = XCUIApplication()
+    app.launch()
+    let signInButton = app.buttons["GoogleSignInButton"]
+    XCTAssertTrue(signInButton.exists)
+    signInButton.tap()
+
+    let attemptsText = app.staticTexts["SignInButtonTaps"]
+    XCTAssertTrue(attemptsText.exists)
+    XCTAssertEqual(attemptsText.label, "Sign In Button Taps: 1")
+  }
+}
+

+ 18 - 0
GoogleSignInSwift/Tests/Functional/TestApp/README.md

@@ -0,0 +1,18 @@
+This application is in place to help test the SwiftUI Google Sign-in button.
+Tests are run via an example application, `GoogleSignInSwiftButtonExample`.
+These tests rely on an `XCUIApplication` instance that will launch the app.
+
+# Usage
+
+## Testing
+
+Open `GoogleSignInSwiftButtonExample.xcodeproj` and type "command-u" to
+execute the tests.
+
+## Running the App
+
+The app isn't very interesting right now; it simply displays an instance of
+`GoogleSignInButton` that increments a counter upon tap.
+Nonetheless, if you would like to run this app, all you need to do is open
+`GoogleSignInSwiftButtonExample.xcodeproj` and hit run.
+

+ 78 - 0
Samples/Swift/DaysUntilBirthday/DaysUntilBirthdayForPod.xcodeproj/xcshareddata/xcschemes/DaysUntilBirthday(iOS).xcscheme

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1310"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "7345ACFE2703D9470020AFB1"
+               BuildableName = "DaysUntilBirthday(iOS).app"
+               BlueprintName = "DaysUntilBirthday(iOS)"
+               ReferencedContainer = "container:DaysUntilBirthday.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </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 = "7345ACFE2703D9470020AFB1"
+            BuildableName = "DaysUntilBirthday(iOS).app"
+            BlueprintName = "DaysUntilBirthday(iOS)"
+            ReferencedContainer = "container:DaysUntilBirthday.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "7345ACFE2703D9470020AFB1"
+            BuildableName = "DaysUntilBirthday(iOS).app"
+            BlueprintName = "DaysUntilBirthday(iOS)"
+            ReferencedContainer = "container:DaysUntilBirthday.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>

+ 78 - 0
Samples/Swift/DaysUntilBirthday/DaysUntilBirthdayForPod.xcodeproj/xcshareddata/xcschemes/DaysUntilBirthday(macOS).xcscheme

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Scheme
+   LastUpgradeVersion = "1310"
+   version = "1.3">
+   <BuildAction
+      parallelizeBuildables = "YES"
+      buildImplicitDependencies = "YES">
+      <BuildActionEntries>
+         <BuildActionEntry
+            buildForTesting = "YES"
+            buildForRunning = "YES"
+            buildForProfiling = "YES"
+            buildForArchiving = "YES"
+            buildForAnalyzing = "YES">
+            <BuildableReference
+               BuildableIdentifier = "primary"
+               BlueprintIdentifier = "FE71737F27ECFAF400910319"
+               BuildableName = "DaysUntilBirthday(macOS).app"
+               BlueprintName = "DaysUntilBirthday(macOS)"
+               ReferencedContainer = "container:DaysUntilBirthday.xcodeproj">
+            </BuildableReference>
+         </BuildActionEntry>
+      </BuildActionEntries>
+   </BuildAction>
+   <TestAction
+      buildConfiguration = "Debug"
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
+      shouldUseLaunchSchemeArgsEnv = "YES">
+      <Testables>
+      </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 = "FE71737F27ECFAF400910319"
+            BuildableName = "DaysUntilBirthday(macOS).app"
+            BlueprintName = "DaysUntilBirthday(macOS)"
+            ReferencedContainer = "container:DaysUntilBirthday.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </LaunchAction>
+   <ProfileAction
+      buildConfiguration = "Release"
+      shouldUseLaunchSchemeArgsEnv = "YES"
+      savedToolIdentifier = ""
+      useCustomWorkingDirectory = "NO"
+      debugDocumentVersioning = "YES">
+      <BuildableProductRunnable
+         runnableDebuggingMode = "0">
+         <BuildableReference
+            BuildableIdentifier = "primary"
+            BlueprintIdentifier = "FE71737F27ECFAF400910319"
+            BuildableName = "DaysUntilBirthday(macOS).app"
+            BlueprintName = "DaysUntilBirthday(macOS)"
+            ReferencedContainer = "container:DaysUntilBirthday.xcodeproj">
+         </BuildableReference>
+      </BuildableProductRunnable>
+   </ProfileAction>
+   <AnalyzeAction
+      buildConfiguration = "Debug">
+   </AnalyzeAction>
+   <ArchiveAction
+      buildConfiguration = "Release"
+      revealArchiveInOrganizer = "YES">
+   </ArchiveAction>
+</Scheme>