diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 64df7398..a3c6f565 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -15,11 +15,15 @@ jobs: runs-on: macOS-latest strategy: matrix: - flags: [ - '', - '--use-libraries', - '--use-static-frameworks' + podspec: [GoogleSignIn.podspec, GoogleSignInSwift.podspec] + flag: [ + "", + "--use-libraries", + "--use-static-frameworks" ] + include: + - podspec: GoogleSignInSwift.podspec + includePodspecFlag: "--include-podspecs='GoogleSignIn.podspec'" steps: - uses: actions/checkout@v2 - name: Update Bundler @@ -27,7 +31,9 @@ jobs: - name: Install Ruby gems with Bundler run: bundle install - name: Lint podspec using local source - run: pod lib lint --verbose ${{ matrix.flags }} + run: | + pod lib lint ${{ matrix.podspec }} --verbose \ + ${{ matrix.includePodspecFlag }} ${{ matrix.flag }} spm-build-test: runs-on: macOS-latest @@ -44,14 +50,14 @@ jobs: - name: Build unit test target run: | xcodebuild \ - -scheme GoogleSignIn \ + -scheme GoogleSignIn-Package \ -sdk ${{ matrix.sdk }} \ -destination ${{ matrix.destination }} \ build-for-testing - name: Run unit test target run: | xcodebuild \ - -scheme GoogleSignIn \ + -scheme GoogleSignIn-Package \ -sdk ${{ matrix.sdk }} \ -destination ${{ matrix.destination }} \ test-without-building diff --git a/GoogleSignIn.podspec b/GoogleSignIn.podspec index 83a9861a..51433847 100644 --- a/GoogleSignIn.podspec +++ b/GoogleSignIn.podspec @@ -41,7 +41,8 @@ The Google Sign-In SDK allows users to sign in with their Google account from th s.pod_target_xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => 'GID_SDK_VERSION=' + s.version.to_s, 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"', - 'DEFINES_MODULE' => 'YES' + 'DEFINES_MODULE' => 'YES', + 'COMBINE_HIDPI_IMAGES' => 'NO' } s.test_spec 'unit' do |unit_tests| unit_tests.platforms = { diff --git a/GoogleSignInSwift.podspec b/GoogleSignInSwift.podspec new file mode 100644 index 00000000..0609a01e --- /dev/null +++ b/GoogleSignInSwift.podspec @@ -0,0 +1,27 @@ +Pod::Spec.new do |s| + s.name = 'GoogleSignInSwift' + s.version = '6.2.0' + s.swift_version = '4.0' + s.summary = 'Adds Swift-focused support for Google Sign-In.' + s.description = 'Additional Swift support for the Google Sign-In SDK.' + s.homepage = 'https://developers.google.com/identity/sign-in/ios/' + s.license = { :type => 'Apache', :file => 'LICENSE' } + s.authors = 'Google LLC' + s.source = { + :git => 'https://github.com/google/GoogleSignIn-iOS.git', + :tag => s.version.to_s + } + ios_deployment_target = '13.0' + macos_deployment_target = '10.15' + s.ios.deployment_target = ios_deployment_target + s.osx.deployment_target = macos_deployment_target + s.prefix_header_file = false + s.source_files = [ + 'GoogleSignInSwift/Sources/*.swift', + ] + s.frameworks = [ + 'CoreGraphics', + 'SwiftUI', + ] + s.dependency 'GoogleSignIn', '~> 6.2' +end diff --git a/GoogleSignInSwift/Sources/GoogleSignInButton.swift b/GoogleSignInSwift/Sources/GoogleSignInButton.swift new file mode 100644 index 00000000..22489bbc --- /dev/null +++ b/GoogleSignInSwift/Sources/GoogleSignInButton.swift @@ -0,0 +1,161 @@ +/* + * 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 CoreGraphics + +// MARK: - Sign-In Button + +/// A Google Sign In button to be used in SwiftUI. +@available(iOS 13.0, macOS 10.15, *) +public struct GoogleSignInButton: View { + @ObservedObject var viewModel: GoogleSignInButtonViewModel + private let action: () -> Void + private let fontLoaded: Bool + + /// Creates an instance of the Google Sign-In button for use in SwiftUI + /// - parameter viewModel: An instance of `GoogleSignInButtonViewModel` + /// containing information on the button's scheme, style, and state. + /// - parameter action: A closure to use as the button's action upon press. + public init( + viewModel: GoogleSignInButtonViewModel, + action: @escaping () -> Void + ) { + self.viewModel = viewModel + self.action = action + self.fontLoaded = Font.loadCGFont() + } + + public var body: some View { + Button(action: action) { + switch viewModel.style { + case .icon: + ZStack { + RoundedRectangle(cornerRadius: googleCornerRadius) + .fill(viewModel.buttonStyle.colors.iconColor) + .border(viewModel.buttonStyle.colors.iconBorderColor) + Image.signInButtonImage + } + case .standard, .wide: + HStack(alignment: .center) { + ZStack { + RoundedRectangle(cornerRadius: googleCornerRadius) + .fill( + viewModel.state == .disabled ? + .clear : viewModel.buttonStyle.colors.iconColor + ) + .frame( + width: iconWidth - iconPadding, + height: iconWidth - iconPadding + ) + Image.signInButtonImage + } + .padding(.leading, 1) + Text(viewModel.style.buttonText) + .padding(.trailing, textPadding) + Spacer() + } + } + } + .font(signInButtonFont) + .buttonStyle(viewModel.buttonStyle) + .disabled(viewModel.state == .disabled) + .simultaneousGesture( + DragGesture(minimumDistance: 0) + .onChanged { _ in + guard viewModel.state != .disabled, + viewModel.state != .pressed else { return } + viewModel.state = .pressed + } + .onEnded { _ in + guard viewModel.state != .disabled else { return } + viewModel.state = .normal + } + ) + } +} + +// MARK: - Google Icon Image + +@available(iOS 13.0, macOS 10.15, *) +private extension Image { + static var signInButtonImage: Image { + guard let iconURL = Bundle.urlForGoogleResource( + name: googleImageName, + withExtension: "png" + ) else { + fatalError("Unable to load Google icon image url: \(Image.Error.unableToLoadGoogleIcon(name: googleImageName))") + } +#if os(iOS) || targetEnvironment(macCatalyst) + guard let uiImage = UIImage(contentsOfFile: iconURL.path) else { + fatalError("Unable to load Google icon image url: \(Image.Error.unableToLoadGoogleIcon(name: googleImageName))") + } + return Image(uiImage: uiImage) +#elseif os(macOS) + guard let nsImage = NSImage(contentsOfFile: iconURL.path) else { + fatalError("Unable to load Google icon image url: \(Image.Error.unableToLoadGoogleIcon(name: googleImageName))") + } + return Image(nsImage: nsImage) +#else + fatalError("Unrecognized platform for SwiftUI sign in button image") +#endif + } + + enum Error: Swift.Error { + case unableToLoadGoogleIcon(name: String) + } +} + + +// MARK: - Google Font + +@available(iOS 13.0, macOS 10.15, *) +private extension GoogleSignInButton { + var signInButtonFont: Font { + guard fontLoaded else { + return .system(size: fontSize, weight: .bold) + } + return .custom(fontNameRobotoBold, size: fontSize) + } +} + +@available(iOS 13.0, macOS 10.15, *) +private extension Font { + /// Load the font for the button. + /// - returns A `Bool` indicating whether or not the font was loaded. + static func loadCGFont() -> Bool { + // Check to see if the font has already been loaded +#if os(iOS) || targetEnvironment(macCatalyst) + if let _ = UIFont(name: fontNameRobotoBold, size: fontSize) { + return true + } +#elseif os(macOS) + if let _ = NSFont(name: fontNameRobotoBold, size: fontSize) { + return true + } +#else + fatalError("Unrecognized platform for SwiftUI sign in button font") +#endif + guard let fontURL = Bundle.urlForGoogleResource( + name: fontNameRobotoBold, + withExtension: "ttf" + ), let dataProvider = CGDataProvider(filename: fontURL.path), + let newFont = CGFont(dataProvider) else { + return false + } + return CTFontManagerRegisterGraphicsFont(newFont, nil) + } +} diff --git a/GoogleSignInSwift/Sources/GoogleSignInButtonBundleExtensions.swift b/GoogleSignInSwift/Sources/GoogleSignInButtonBundleExtensions.swift new file mode 100644 index 00000000..73e29692 --- /dev/null +++ b/GoogleSignInSwift/Sources/GoogleSignInButtonBundleExtensions.swift @@ -0,0 +1,64 @@ +/* + * 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 Foundation + +// MARK: - Bundle Extensions + +#if SWIFT_PACKAGE +let GoogleSignInBundleName = "GoogleSignIn_GoogleSignIn" +#else +let GoogleSignInBundleName = "GoogleSignIn" +#endif + +@available(iOS 13.0, macOS 10.15, *) +extension Bundle { + /// Gets the bundle for the SDK framework. + /// - returns An optional instance of `Bundle`. + /// - note If the main `Bundle` cannot be found, or if the `Bundle` cannot be + /// found via a class, then this will return nil. + static func gidFrameworkBundle() -> Bundle? { + if let mainPath = Bundle.main.path( + forResource: GoogleSignInBundleName, + ofType: "bundle" + ) { + return Bundle(path: mainPath) + } + + let classBundle = Bundle(for: GoogleSignInButtonViewModel.self) + + if let classPath = classBundle.path( + forResource: GoogleSignInBundleName, + ofType: "bundle" + ) { + return Bundle(path: classPath) + } else { + return nil + } + } + + /// Retrieves the Google icon URL from the bundle. + /// - parameter name: The `String` name for the resource to look up. + /// - parameter ext: The `String` extension for the resource to look up. + /// - returns An optional `URL` if the resource is found, nil otherwise. + static func urlForGoogleResource( + name: String, + withExtension ext: String + ) -> URL? { + let bundle = Bundle.gidFrameworkBundle() + return bundle?.url(forResource: name, withExtension: ext) + } +} diff --git a/GoogleSignInSwift/Sources/GoogleSignInButtonStrings.swift b/GoogleSignInSwift/Sources/GoogleSignInButtonStrings.swift new file mode 100644 index 00000000..88a1f05e --- /dev/null +++ b/GoogleSignInSwift/Sources/GoogleSignInButtonStrings.swift @@ -0,0 +1,58 @@ +/* + * 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 Foundation + +/// A type retrieving the localized strings for the sign-in button text. +@available(iOS 13.0, macOS 10.15, *) +struct GoogleSignInButtonString { + /// Button text used as both key in localized strings files and default value + /// for the standard button. + private let standardButtonText = "Sign in" + /// Button text used as both key in localized strings files and default value + /// for the wide button. + private let wideButtonText = "Sign in with Google" + + /// The table name for localized strings (i.e. file name before .strings + /// suffix). + private let stringsTableName = "GoogleSignIn" + + /// Returns the localized string for the key if available, or the supplied + /// default text if not. + /// - parameter key: A `String` key to look up. + /// - parameter text: The default `String` text. + /// - returns Either the found `String` or the provided default text. + private func localizedString(key: String, text: String) -> String { + guard let frameworkBundle = Bundle.gidFrameworkBundle() else { return text } + return frameworkBundle.localizedString( + forKey: key, + value: text, + table: stringsTableName + ) + } + + /// Localized text for the standard button. + @available(iOS 13.0, macOS 10.15, *) + var localizedStandardButtonText: String { + return localizedString(key: standardButtonText, text: "No translation") + } + + /// Localized text for the wide button. + @available(iOS 13.0, macOS 10.15, *) + var localizedWideButtonText: String { + return localizedString(key: wideButtonText, text: "No translation") + } +} diff --git a/GoogleSignInSwift/Sources/GoogleSignInButtonStyling.swift b/GoogleSignInSwift/Sources/GoogleSignInButtonStyling.swift new file mode 100644 index 00000000..fcfc9c58 --- /dev/null +++ b/GoogleSignInSwift/Sources/GoogleSignInButtonStyling.swift @@ -0,0 +1,254 @@ +/* + * 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 + +// MARK: - Sizing Constants + +/// The corner radius of the button +let googleCornerRadius: CGFloat = 2 + +/// The standard height of the sign in button. +let buttonHeight: CGFloat = 48 + +/// The width of the icon part of the button in points. +let iconWidth: CGFloat = 48 + +/// The padding to be applied to the Google icon image. +let iconPadding: CGFloat = 2 + +/// Left and right text padding. +let textPadding: CGFloat = 14 + +// MARK: - Font + +/// The name of the font for button text. +let fontNameRobotoBold = "Roboto-Bold" + +/// Sign-in button text font size. +let fontSize: CGFloat = 14 + +// MARK: - Icon Image + +let googleImageName = "google" + +// MARK: - Button Style + +/// The layout styles supported by the sign-in button. +/// +/// The minimum size of the button depends on the language used for text. +/// The following dimensions (in points) fit for all languages: +/// - standard: 230 x 48 +/// - wide: 312 x 48 +/// - icon: 48 x 48 (no text, fixed size) +@available(iOS 13.0, macOS 10.15, *) +public enum GoogleSignInButtonStyle { + case standard + case wide + case icon +} + +// MARK: - Button Color Scheme + +/// The color schemes supported by the sign-in button. +@available(iOS 13.0, macOS 10.15, *) +public enum GoogleSignInButtonColorScheme { + case dark + case light +} + +// MARK: - Button State + +/// The state of the sign-in button. +@available(iOS 13.0, macOS 10.15, *) +public enum GoogleSignInButtonState { + case normal + case disabled + case pressed +} + +// MARK: - Colors + +// All colors in hex RGBA format (0xRRGGBBAA) + +let googleBlue = 0x4285f4ff; +let googleDarkBlue = 0x3367d6ff; +let white = 0xffffffff; +let lightestGrey = 0x00000014; +let lightGrey = 0xeeeeeeff; +let disabledGrey = 0x00000066; +let darkestGrey = 0x00000089; + +/// Helper type to calculate foreground color for text. +@available(iOS 13.0, macOS 10.15, *) +private struct ForegroundColor { + let scheme: GoogleSignInButtonColorScheme + let state: GoogleSignInButtonState + + var color: Color { + switch (scheme, state) { + case (.dark, .normal): + return Color(hex: white) + case (.light, .normal): + return Color(hex: darkestGrey) + case (_, .disabled): + return Color(hex: disabledGrey) + case (.dark, .pressed): + return Color(hex: white) + case (.light, .pressed): + return Color(hex: darkestGrey) + } + } +} + +/// Helper type to calculate background color for view. +@available(iOS 13.0, macOS 10.15, *) +private struct BackgroundColor { + let scheme: GoogleSignInButtonColorScheme + let state: GoogleSignInButtonState + + var color: Color { + switch (scheme, state) { + case (.dark, .normal): + return Color(hex: googleBlue) + case (.light, .normal): + return Color(hex: white) + case (_, .disabled): + return Color(hex: lightestGrey) + case (.dark, .pressed): + return Color(hex: googleDarkBlue) + case (.light, .pressed): + return Color(hex: lightGrey) + } + } +} + +/// Helper type to calculate background color for the icon. +@available(iOS 13.0, macOS 10.15, *) +private struct IconBackgroundColor { + let scheme: GoogleSignInButtonColorScheme + let state: GoogleSignInButtonState + + var color: Color { + switch (scheme, state) { + case (.light, .pressed), (_, .disabled): + return Color(hex: lightGrey) + default: + return Color(hex: white) + } + } +} + +/// A type calculating the background and foreground (text) colors of the +/// sign-in button. +@available(iOS 13.0, macOS 10.15, *) +struct SignInButtonColor { + let scheme: GoogleSignInButtonColorScheme + let state: GoogleSignInButtonState + + var iconColor: Color { + let ibc = IconBackgroundColor(scheme: scheme, state: state) + return ibc.color + } + + // Icon's border should always match background regardless of state + var iconBorderColor: Color { + return backgroundColor + } + + var foregroundColor: Color { + let fc = ForegroundColor(scheme: scheme, state: state) + return fc.color + } + + var backgroundColor: Color { + let bc = BackgroundColor(scheme: scheme, state: state) + return bc.color + } +} + +@available(iOS 13.0, macOS 10.15, *) +extension Color { + init(hex: Int) { + self.init( + red: Double((hex & 0xff000000) >> 24) / 255, + green: Double((hex & 0x00ff0000) >> 16) / 255, + blue: Double((hex & 0x0000ff00) >> 8) / 255, + opacity: Double((hex & 0x000000ff) >> 0) / 255 + ) + } +} + +// MARK: - Custom Width + +@available(iOS 13.0, macOS 10.15, *) +fileprivate struct Width { + let min, max: CGFloat +} + +// MARK: - Width and Text By Button Style + +@available(iOS 13.0, macOS 10.15, *) +extension GoogleSignInButtonStyle { + fileprivate var width: Width { + switch self { + case .icon: return Width(min: iconWidth, max: iconWidth) + case .standard: return Width(min: 90, max: .infinity) + case .wide: return Width(min: 170, max: .infinity) + } + } + + private var buttonStrings: GoogleSignInButtonString { + return GoogleSignInButtonString() + } + + var buttonText: String { + switch self { + case .wide: return buttonStrings.localizedWideButtonText + case .standard: return buttonStrings.localizedStandardButtonText + case .icon: return "" + } + } +} + +// MARK: - Button Style + +@available(iOS 13.0, macOS 10.15, *) +struct SwiftUIButtonStyle: ButtonStyle { + let style: GoogleSignInButtonStyle + let state: GoogleSignInButtonState + let scheme: GoogleSignInButtonColorScheme + + /// A computed property vending the button's foreground and background colors. + var colors: SignInButtonColor { + return SignInButtonColor(scheme: scheme, state: state) + } + + func makeBody(configuration: Configuration) -> some View { + configuration.label + .frame(minWidth: style.width.min, + maxWidth: style.width.max, + minHeight: buttonHeight, + maxHeight: buttonHeight) + .background(colors.backgroundColor) + .foregroundColor(colors.foregroundColor) + .cornerRadius(googleCornerRadius) + .shadow( + color: state == .disabled ? .clear : .gray, + radius: googleCornerRadius, x: 0, y: 2 + ) + } +} diff --git a/GoogleSignInSwift/Sources/GoogleSignInButtonViewModel.swift b/GoogleSignInSwift/Sources/GoogleSignInButtonViewModel.swift new file mode 100644 index 00000000..3bc3b1a2 --- /dev/null +++ b/GoogleSignInSwift/Sources/GoogleSignInButtonViewModel.swift @@ -0,0 +1,47 @@ +/* + * 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 Combine + +/// A view model for the SwiftUI sign-in button publishing changes for the +/// button scheme, style, and state. +@available(iOS 13.0, macOS 10.15, *) +public class GoogleSignInButtonViewModel: ObservableObject { + @Published public var scheme: GoogleSignInButtonColorScheme + @Published public var style: GoogleSignInButtonStyle + @Published public var state: GoogleSignInButtonState + + /// A computed property providing the button's size, colors, corner radius, + /// and shadow based on this current view model's `SignInButtonStyle`. + var buttonStyle: SwiftUIButtonStyle { + return SwiftUIButtonStyle(style: style, state: state, scheme: scheme) + } + + /// Creates instances of the SwiftUI sign-in button. + /// - parameter scheme: An instance of `GoogleSignInButtonColorScheme`. + /// - parameter style: An instance of `GoogleSignInButtonStyle`. + /// - parameter state: An instance of `GoogleSignInButtonState`. Defaults to + /// `.normal`. + @available(iOS 13.0, macOS 10.15, *) + public init( + scheme: GoogleSignInButtonColorScheme, + style: GoogleSignInButtonStyle, + state: GoogleSignInButtonState = .normal) { + self.scheme = scheme + self.style = style + self.state = state + } +} diff --git a/Package.swift b/Package.swift index e1d4a50a..b1b0e0fd 100644 --- a/Package.swift +++ b/Package.swift @@ -29,7 +29,15 @@ let package = Package( products: [ .library( name: "GoogleSignIn", - targets: ["GoogleSignIn"] + targets: [ + "GoogleSignIn", + ] + ), + .library( + name: "GoogleSignInSwift", + targets: [ + "GoogleSignInSwift", + ] ), ], dependencies: [ @@ -82,6 +90,13 @@ let package = Package( .linkedFramework("UIKit", .when(platforms: [.iOS])), ] ), + .target( + name: "GoogleSignInSwift", + dependencies: [ + "GoogleSignIn", + ], + path: "GoogleSignInSwift/Sources" + ), .testTarget( name: "GoogleSignIn-UnitTests", dependencies: [ diff --git a/Samples/Swift/DaysUntilBirthday/DaysUntilBirthday.xcodeproj/project.pbxproj b/Samples/Swift/DaysUntilBirthday/DaysUntilBirthday.xcodeproj/project.pbxproj index df646c0f..b5a3962d 100644 --- a/Samples/Swift/DaysUntilBirthday/DaysUntilBirthday.xcodeproj/project.pbxproj +++ b/Samples/Swift/DaysUntilBirthday/DaysUntilBirthday.xcodeproj/project.pbxproj @@ -12,33 +12,32 @@ 7345AD072703D9480020AFB1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7345AD062703D9480020AFB1 /* Assets.xcassets */; }; 7345AD0A2703D9480020AFB1 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7345AD092703D9480020AFB1 /* Preview Assets.xcassets */; }; 7345AD1B2703D9C30020AFB1 /* SignInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD112703D9C30020AFB1 /* SignInView.swift */; }; - 7345AD1D2703D9C30020AFB1 /* GoogleSignInButtonWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD132703D9C30020AFB1 /* GoogleSignInButtonWrapper.swift */; }; 7345AD1E2703D9C30020AFB1 /* UserProfileImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD142703D9C30020AFB1 /* UserProfileImageView.swift */; }; 7345AD202703D9C30020AFB1 /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD162703D9C30020AFB1 /* AuthenticationViewModel.swift */; }; 7345AD212703D9C30020AFB1 /* GoogleSignInAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD172703D9C30020AFB1 /* GoogleSignInAuthenticator.swift */; }; 7345AD232703D9C30020AFB1 /* UserProfileImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD192703D9C30020AFB1 /* UserProfileImageLoader.swift */; }; 7345AD242703D9C30020AFB1 /* UserProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD1A2703D9C30020AFB1 /* UserProfileView.swift */; }; - 7345AD272703DA3E0020AFB1 /* GoogleSignIn in Frameworks */ = {isa = PBXBuildFile; productRef = 7345AD262703DA3E0020AFB1 /* GoogleSignIn */; }; 736F49BA270E05E200580053 /* BirthdayLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736F49B9270E05E200580053 /* BirthdayLoader.swift */; }; 736F49BC270E102C00580053 /* BirthdayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736F49BB270E102C00580053 /* BirthdayViewModel.swift */; }; 739FCC46270E467600C92042 /* BirthdayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739FCC45270E467600C92042 /* BirthdayView.swift */; }; 739FCC48270E659A00C92042 /* Birthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739FCC47270E659A00C92042 /* Birthday.swift */; }; - FE71738A27ECFAF600910319 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FE71738927ECFAF600910319 /* Preview Assets.xcassets */; }; - FE71739127ECFB3300910319 /* GoogleSignIn in Frameworks */ = {isa = PBXBuildFile; productRef = FE71739027ECFB3300910319 /* GoogleSignIn */; }; - FE71739227ED135C00910319 /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD162703D9C30020AFB1 /* AuthenticationViewModel.swift */; }; - FE71739327ED138B00910319 /* GoogleSignInAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD172703D9C30020AFB1 /* GoogleSignInAuthenticator.swift */; }; - FE71739427ED15F700910319 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD042703D9470020AFB1 /* ContentView.swift */; }; - FE71739527ED17C200910319 /* SignInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD112703D9C30020AFB1 /* SignInView.swift */; }; - FE71739827EE2DE000910319 /* DaysUntilBirthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD022703D9470020AFB1 /* DaysUntilBirthday.swift */; }; - FE71739C27F248E100910319 /* UserProfileImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD192703D9C30020AFB1 /* UserProfileImageLoader.swift */; }; - FE71739D27F248E600910319 /* UserProfileImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD142703D9C30020AFB1 /* UserProfileImageView.swift */; }; - FE71739E27F2525900910319 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7345AD062703D9480020AFB1 /* Assets.xcassets */; }; - FE71739F27F3AA9E00910319 /* BirthdayLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736F49B9270E05E200580053 /* BirthdayLoader.swift */; }; - FE7173A027F3AAA400910319 /* Birthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739FCC47270E659A00C92042 /* Birthday.swift */; }; - FE7173A127F3AB0900910319 /* BirthdayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736F49BB270E102C00580053 /* BirthdayViewModel.swift */; }; - FE7173A227F3AB5000910319 /* BirthdayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739FCC45270E467600C92042 /* BirthdayView.swift */; }; - FE7173A427F5106900910319 /* GoogleSignInButtonWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7173A327F5106900910319 /* GoogleSignInButtonWrapper.swift */; }; - FE7173A627F5110F00910319 /* UserProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7173A527F5110F00910319 /* UserProfileView.swift */; }; + 73DB41802805FA0D0028B8D3 /* GoogleSignIn in Frameworks */ = {isa = PBXBuildFile; productRef = 73DB417F2805FA0D0028B8D3 /* GoogleSignIn */; }; + 73DB41822805FA120028B8D3 /* GoogleSignInSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 73DB41812805FA120028B8D3 /* GoogleSignInSwift */; }; + 73DB41842805FA190028B8D3 /* GoogleSignIn in Frameworks */ = {isa = PBXBuildFile; productRef = 73DB41832805FA190028B8D3 /* GoogleSignIn */; }; + 73DB41882805FAA70028B8D3 /* GoogleSignInSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 73DB41872805FAA70028B8D3 /* GoogleSignInSwift */; }; + 73DB41892805FBA90028B8D3 /* DaysUntilBirthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD022703D9470020AFB1 /* DaysUntilBirthday.swift */; }; + 73DB418A2805FBC00028B8D3 /* GoogleSignInAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD172703D9C30020AFB1 /* GoogleSignInAuthenticator.swift */; }; + 73DB418B2805FBC40028B8D3 /* BirthdayLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736F49B9270E05E200580053 /* BirthdayLoader.swift */; }; + 73DB418C2805FBC80028B8D3 /* UserProfileImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD192703D9C30020AFB1 /* UserProfileImageLoader.swift */; }; + 73DB418D2805FBD00028B8D3 /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD162703D9C30020AFB1 /* AuthenticationViewModel.swift */; }; + 73DB418E2805FBD40028B8D3 /* BirthdayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736F49BB270E102C00580053 /* BirthdayViewModel.swift */; }; + 73DB418F2805FBF50028B8D3 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD042703D9470020AFB1 /* ContentView.swift */; }; + 73DB41902805FBF90028B8D3 /* BirthdayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739FCC45270E467600C92042 /* BirthdayView.swift */; }; + 73DB41912805FBFD0028B8D3 /* SignInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD112703D9C30020AFB1 /* SignInView.swift */; }; + 73DB41922805FC010028B8D3 /* UserProfileImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD142703D9C30020AFB1 /* UserProfileImageView.swift */; }; + 73DB41932805FC3B0028B8D3 /* UserProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7173A527F5110F00910319 /* UserProfileView.swift */; }; + 73DB41952805FC5F0028B8D3 /* Birthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739FCC47270E659A00C92042 /* Birthday.swift */; }; + 73DB419628060A9A0028B8D3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7345AD062703D9480020AFB1 /* Assets.xcassets */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -49,7 +48,6 @@ 7345AD092703D9480020AFB1 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 7345AD0B2703D9480020AFB1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 7345AD112703D9C30020AFB1 /* SignInView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignInView.swift; sourceTree = ""; }; - 7345AD132703D9C30020AFB1 /* GoogleSignInButtonWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GoogleSignInButtonWrapper.swift; sourceTree = ""; }; 7345AD142703D9C30020AFB1 /* UserProfileImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserProfileImageView.swift; sourceTree = ""; }; 7345AD162703D9C30020AFB1 /* AuthenticationViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthenticationViewModel.swift; sourceTree = ""; }; 7345AD172703D9C30020AFB1 /* GoogleSignInAuthenticator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GoogleSignInAuthenticator.swift; sourceTree = ""; }; @@ -59,12 +57,11 @@ 736F49BB270E102C00580053 /* BirthdayViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BirthdayViewModel.swift; sourceTree = ""; }; 739FCC45270E467600C92042 /* BirthdayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BirthdayView.swift; sourceTree = ""; }; 739FCC47270E659A00C92042 /* Birthday.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Birthday.swift; sourceTree = ""; }; + 73DB417E2805F9850028B8D3 /* GoogleSignIn-iOS */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "GoogleSignIn-iOS"; path = ../../..; sourceTree = ""; }; FE2F2ABC2800D9C1005EA17F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FE71737B27ECFA5600910319 /* GoogleSignIn-iOS */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "GoogleSignIn-iOS"; path = ../../..; sourceTree = ""; }; FE71738027ECFAF400910319 /* DaysUntilBirthday(macOS).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DaysUntilBirthday(macOS).app"; sourceTree = BUILT_PRODUCTS_DIR; }; FE71738927ECFAF600910319 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; FE71738B27ECFAF600910319 /* DaysUntilBirthdayOnMac.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DaysUntilBirthdayOnMac.entitlements; sourceTree = ""; }; - FE7173A327F5106900910319 /* GoogleSignInButtonWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GoogleSignInButtonWrapper.swift; sourceTree = ""; }; FE7173A527F5110F00910319 /* UserProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileView.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -73,7 +70,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7345AD272703DA3E0020AFB1 /* GoogleSignIn in Frameworks */, + 73DB41802805FA0D0028B8D3 /* GoogleSignIn in Frameworks */, + 73DB41822805FA120028B8D3 /* GoogleSignInSwift in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -81,7 +79,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FE71739127ECFB3300910319 /* GoogleSignIn in Frameworks */, + 73DB41842805FA190028B8D3 /* GoogleSignIn in Frameworks */, + 73DB41882805FAA70028B8D3 /* GoogleSignInSwift in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -91,7 +90,7 @@ 7345ACF62703D9470020AFB1 = { isa = PBXGroup; children = ( - FE71737B27ECFA5600910319 /* GoogleSignIn-iOS */, + 73DB417E2805F9850028B8D3 /* GoogleSignIn-iOS */, 7345AD012703D9470020AFB1 /* Shared */, FE7173A927F656AF00910319 /* iOS */, FE71738127ECFAF400910319 /* macOS */, @@ -133,7 +132,6 @@ FE71738127ECFAF400910319 /* macOS */ = { isa = PBXGroup; children = ( - FE7173A327F5106900910319 /* GoogleSignInButtonWrapper.swift */, FE7173A527F5110F00910319 /* UserProfileView.swift */, FE2F2ABC2800D9C1005EA17F /* Info.plist */, FE71738B27ECFAF600910319 /* DaysUntilBirthdayOnMac.entitlements */, @@ -160,7 +158,6 @@ FE7173A927F656AF00910319 /* iOS */ = { isa = PBXGroup; children = ( - 7345AD132703D9C30020AFB1 /* GoogleSignInButtonWrapper.swift */, 7345AD1A2703D9C30020AFB1 /* UserProfileView.swift */, 7345AD0B2703D9480020AFB1 /* Info.plist */, 7345AD082703D9480020AFB1 /* Preview Content */, @@ -223,7 +220,8 @@ ); name = "DaysUntilBirthday(iOS)"; packageProductDependencies = ( - 7345AD262703DA3E0020AFB1 /* GoogleSignIn */, + 73DB417F2805FA0D0028B8D3 /* GoogleSignIn */, + 73DB41812805FA120028B8D3 /* GoogleSignInSwift */, ); productName = "GSI-Swift-Sample"; productReference = 7345ACFF2703D9470020AFB1 /* DaysUntilBirthday(iOS).app */; @@ -243,7 +241,8 @@ ); name = "DaysUntilBirthday(macOS)"; packageProductDependencies = ( - FE71739027ECFB3300910319 /* GoogleSignIn */, + 73DB41832805FA190028B8D3 /* GoogleSignIn */, + 73DB41872805FAA70028B8D3 /* GoogleSignInSwift */, ); productName = DaysUntilBirthdayOnMac; productReference = FE71738027ECFAF400910319 /* DaysUntilBirthday(macOS).app */; @@ -276,7 +275,6 @@ ); mainGroup = 7345ACF62703D9470020AFB1; packageReferences = ( - 7345AD252703DA3E0020AFB1 /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */, ); productRefGroup = 7345AD002703D9470020AFB1 /* Products */; projectDirPath = ""; @@ -302,8 +300,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - FE71738A27ECFAF600910319 /* Preview Assets.xcassets in Resources */, - FE71739E27F2525900910319 /* Assets.xcassets in Resources */, + 73DB419628060A9A0028B8D3 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -325,7 +322,6 @@ 7345AD242703D9C30020AFB1 /* UserProfileView.swift in Sources */, 7345AD202703D9C30020AFB1 /* AuthenticationViewModel.swift in Sources */, 7345AD052703D9470020AFB1 /* ContentView.swift in Sources */, - 7345AD1D2703D9C30020AFB1 /* GoogleSignInButtonWrapper.swift in Sources */, 7345AD032703D9470020AFB1 /* DaysUntilBirthday.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -334,19 +330,18 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FE71739F27F3AA9E00910319 /* BirthdayLoader.swift in Sources */, - FE71739C27F248E100910319 /* UserProfileImageLoader.swift in Sources */, - FE7173A027F3AAA400910319 /* Birthday.swift in Sources */, - FE71739827EE2DE000910319 /* DaysUntilBirthday.swift in Sources */, - FE71739227ED135C00910319 /* AuthenticationViewModel.swift in Sources */, - FE7173A427F5106900910319 /* GoogleSignInButtonWrapper.swift in Sources */, - FE7173A227F3AB5000910319 /* BirthdayView.swift in Sources */, - FE71739427ED15F700910319 /* ContentView.swift in Sources */, - FE71739327ED138B00910319 /* GoogleSignInAuthenticator.swift in Sources */, - FE7173A127F3AB0900910319 /* BirthdayViewModel.swift in Sources */, - FE71739D27F248E600910319 /* UserProfileImageView.swift in Sources */, - FE7173A627F5110F00910319 /* UserProfileView.swift in Sources */, - FE71739527ED17C200910319 /* SignInView.swift in Sources */, + 73DB41912805FBFD0028B8D3 /* SignInView.swift in Sources */, + 73DB418B2805FBC40028B8D3 /* BirthdayLoader.swift in Sources */, + 73DB418D2805FBD00028B8D3 /* AuthenticationViewModel.swift in Sources */, + 73DB418F2805FBF50028B8D3 /* ContentView.swift in Sources */, + 73DB418C2805FBC80028B8D3 /* UserProfileImageLoader.swift in Sources */, + 73DB418E2805FBD40028B8D3 /* BirthdayViewModel.swift in Sources */, + 73DB41952805FC5F0028B8D3 /* Birthday.swift in Sources */, + 73DB418A2805FBC00028B8D3 /* GoogleSignInAuthenticator.swift in Sources */, + 73DB41932805FC3B0028B8D3 /* UserProfileView.swift in Sources */, + 73DB41892805FBA90028B8D3 /* DaysUntilBirthday.swift in Sources */, + 73DB41902805FBF90028B8D3 /* BirthdayView.swift in Sources */, + 73DB41922805FC010028B8D3 /* UserProfileImageView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -605,27 +600,23 @@ }; /* End XCConfigurationList section */ -/* Begin XCRemoteSwiftPackageReference section */ - 7345AD252703DA3E0020AFB1 /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/google/GoogleSignIn-iOS.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 6.0.2; - }; - }; -/* End XCRemoteSwiftPackageReference section */ - /* Begin XCSwiftPackageProductDependency section */ - 7345AD262703DA3E0020AFB1 /* GoogleSignIn */ = { + 73DB417F2805FA0D0028B8D3 /* GoogleSignIn */ = { isa = XCSwiftPackageProductDependency; - package = 7345AD252703DA3E0020AFB1 /* XCRemoteSwiftPackageReference "GoogleSignIn-iOS" */; productName = GoogleSignIn; }; - FE71739027ECFB3300910319 /* GoogleSignIn */ = { + 73DB41812805FA120028B8D3 /* GoogleSignInSwift */ = { + isa = XCSwiftPackageProductDependency; + productName = GoogleSignInSwift; + }; + 73DB41832805FA190028B8D3 /* GoogleSignIn */ = { isa = XCSwiftPackageProductDependency; productName = GoogleSignIn; }; + 73DB41872805FAA70028B8D3 /* GoogleSignInSwift */ = { + isa = XCSwiftPackageProductDependency; + productName = GoogleSignInSwift; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = 7345ACF72703D9470020AFB1 /* Project object */; diff --git a/Samples/Swift/DaysUntilBirthday/DaysUntilBirthdayForPod.xcodeproj/project.pbxproj b/Samples/Swift/DaysUntilBirthday/DaysUntilBirthdayForPod.xcodeproj/project.pbxproj index aea51bb5..341b05b2 100644 --- a/Samples/Swift/DaysUntilBirthday/DaysUntilBirthdayForPod.xcodeproj/project.pbxproj +++ b/Samples/Swift/DaysUntilBirthday/DaysUntilBirthdayForPod.xcodeproj/project.pbxproj @@ -3,322 +3,320 @@ archiveVersion = 1; classes = { }; - objectVersion = 55; + objectVersion = 50; objects = { /* Begin PBXBuildFile section */ - A0027D4EA9FC9C3320D2CB6C /* libPods-DaysUntilBirthdayForPod (iOS).a in Frameworks */ = {isa = PBXBuildFile; fileRef = 61F4ED33051343907BD064C7 /* libPods-DaysUntilBirthdayForPod (iOS).a */; }; - FC5D406670D7A548AFC4E510 /* libPods-DaysUntilBirthdayForPod (macOS).a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E7FF39A72A801922A879753 /* libPods-DaysUntilBirthdayForPod (macOS).a */; }; - FE2ED0762800FF54006007BA /* DaysUntilBirthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0702800FF54006007BA /* DaysUntilBirthday.swift */; }; - FE2ED0772800FF54006007BA /* DaysUntilBirthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0702800FF54006007BA /* DaysUntilBirthday.swift */; }; - FE2ED0782800FF54006007BA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FE2ED0712800FF54006007BA /* Assets.xcassets */; }; - FE2ED0792800FF54006007BA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FE2ED0712800FF54006007BA /* Assets.xcassets */; }; - FE2ED0872800FF74006007BA /* Preview Content in Resources */ = {isa = PBXBuildFile; fileRef = FE2ED0822800FF74006007BA /* Preview Content */; }; - FE2ED0882800FF74006007BA /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = FE2ED0832800FF74006007BA /* Info.plist */; }; - FE2ED0892800FF74006007BA /* UserProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0842800FF74006007BA /* UserProfileView.swift */; }; - FE2ED08A2800FF74006007BA /* GoogleSignInButtonWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0852800FF74006007BA /* GoogleSignInButtonWrapper.swift */; }; - FE2ED09428010015006007BA /* GoogleSignInButtonWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED09028010015006007BA /* GoogleSignInButtonWrapper.swift */; }; - FE2ED09528010015006007BA /* UserProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED09128010015006007BA /* UserProfileView.swift */; }; - FE2ED09628010015006007BA /* Preview Content in Resources */ = {isa = PBXBuildFile; fileRef = FE2ED09228010015006007BA /* Preview Content */; }; - FE2ED09828010096006007BA /* Podfile in Resources */ = {isa = PBXBuildFile; fileRef = FE2ED09728010096006007BA /* Podfile */; }; - FE2ED09928010096006007BA /* Podfile in Resources */ = {isa = PBXBuildFile; fileRef = FE2ED09728010096006007BA /* Podfile */; }; - FE2ED0AA28010508006007BA /* BirthdayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED09D28010507006007BA /* BirthdayViewModel.swift */; }; - FE2ED0AB28010508006007BA /* BirthdayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED09D28010507006007BA /* BirthdayViewModel.swift */; }; - FE2ED0AC28010508006007BA /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED09E28010507006007BA /* AuthenticationViewModel.swift */; }; - FE2ED0AD28010508006007BA /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED09E28010507006007BA /* AuthenticationViewModel.swift */; }; - FE2ED0AE28010508006007BA /* Birthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A028010507006007BA /* Birthday.swift */; }; - FE2ED0AF28010508006007BA /* Birthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A028010507006007BA /* Birthday.swift */; }; - FE2ED0B028010508006007BA /* UserProfileImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A228010507006007BA /* UserProfileImageLoader.swift */; }; - FE2ED0B128010508006007BA /* UserProfileImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A228010507006007BA /* UserProfileImageLoader.swift */; }; - FE2ED0B228010508006007BA /* GoogleSignInAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A328010507006007BA /* GoogleSignInAuthenticator.swift */; }; - FE2ED0B328010508006007BA /* GoogleSignInAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A328010507006007BA /* GoogleSignInAuthenticator.swift */; }; - FE2ED0B428010508006007BA /* BirthdayLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A428010507006007BA /* BirthdayLoader.swift */; }; - FE2ED0B528010508006007BA /* BirthdayLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A428010507006007BA /* BirthdayLoader.swift */; }; - FE2ED0B628010508006007BA /* BirthdayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A628010508006007BA /* BirthdayView.swift */; }; - FE2ED0B728010508006007BA /* BirthdayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A628010508006007BA /* BirthdayView.swift */; }; - FE2ED0B828010508006007BA /* SignInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A728010508006007BA /* SignInView.swift */; }; - FE2ED0B928010508006007BA /* SignInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A728010508006007BA /* SignInView.swift */; }; - FE2ED0BA28010508006007BA /* UserProfileImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A828010508006007BA /* UserProfileImageView.swift */; }; - FE2ED0BB28010508006007BA /* UserProfileImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A828010508006007BA /* UserProfileImageView.swift */; }; - FE2ED0BC28010508006007BA /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A928010508006007BA /* ContentView.swift */; }; - FE2ED0BD28010508006007BA /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE2ED0A928010508006007BA /* ContentView.swift */; }; + 7345AD032703D9470020AFB1 /* DaysUntilBirthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD022703D9470020AFB1 /* DaysUntilBirthday.swift */; }; + 7345AD052703D9470020AFB1 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD042703D9470020AFB1 /* ContentView.swift */; }; + 7345AD072703D9480020AFB1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7345AD062703D9480020AFB1 /* Assets.xcassets */; }; + 7345AD0A2703D9480020AFB1 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7345AD092703D9480020AFB1 /* Preview Assets.xcassets */; }; + 7345AD1B2703D9C30020AFB1 /* SignInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD112703D9C30020AFB1 /* SignInView.swift */; }; + 7345AD1E2703D9C30020AFB1 /* UserProfileImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD142703D9C30020AFB1 /* UserProfileImageView.swift */; }; + 7345AD202703D9C30020AFB1 /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD162703D9C30020AFB1 /* AuthenticationViewModel.swift */; }; + 7345AD212703D9C30020AFB1 /* GoogleSignInAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD172703D9C30020AFB1 /* GoogleSignInAuthenticator.swift */; }; + 7345AD232703D9C30020AFB1 /* UserProfileImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD192703D9C30020AFB1 /* UserProfileImageLoader.swift */; }; + 7345AD242703D9C30020AFB1 /* UserProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD1A2703D9C30020AFB1 /* UserProfileView.swift */; }; + 736F49BA270E05E200580053 /* BirthdayLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736F49B9270E05E200580053 /* BirthdayLoader.swift */; }; + 736F49BC270E102C00580053 /* BirthdayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736F49BB270E102C00580053 /* BirthdayViewModel.swift */; }; + 739FCC46270E467600C92042 /* BirthdayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739FCC45270E467600C92042 /* BirthdayView.swift */; }; + 739FCC48270E659A00C92042 /* Birthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739FCC47270E659A00C92042 /* Birthday.swift */; }; + 73DB41892805FBA90028B8D3 /* DaysUntilBirthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD022703D9470020AFB1 /* DaysUntilBirthday.swift */; }; + 73DB418A2805FBC00028B8D3 /* GoogleSignInAuthenticator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD172703D9C30020AFB1 /* GoogleSignInAuthenticator.swift */; }; + 73DB418B2805FBC40028B8D3 /* BirthdayLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736F49B9270E05E200580053 /* BirthdayLoader.swift */; }; + 73DB418C2805FBC80028B8D3 /* UserProfileImageLoader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD192703D9C30020AFB1 /* UserProfileImageLoader.swift */; }; + 73DB418D2805FBD00028B8D3 /* AuthenticationViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD162703D9C30020AFB1 /* AuthenticationViewModel.swift */; }; + 73DB418E2805FBD40028B8D3 /* BirthdayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736F49BB270E102C00580053 /* BirthdayViewModel.swift */; }; + 73DB418F2805FBF50028B8D3 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD042703D9470020AFB1 /* ContentView.swift */; }; + 73DB41902805FBF90028B8D3 /* BirthdayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739FCC45270E467600C92042 /* BirthdayView.swift */; }; + 73DB41912805FBFD0028B8D3 /* SignInView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD112703D9C30020AFB1 /* SignInView.swift */; }; + 73DB41922805FC010028B8D3 /* UserProfileImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7345AD142703D9C30020AFB1 /* UserProfileImageView.swift */; }; + 73DB41932805FC3B0028B8D3 /* UserProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE7173A527F5110F00910319 /* UserProfileView.swift */; }; + 73DB41952805FC5F0028B8D3 /* Birthday.swift in Sources */ = {isa = PBXBuildFile; fileRef = 739FCC47270E659A00C92042 /* Birthday.swift */; }; + 73DB419628060A9A0028B8D3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7345AD062703D9480020AFB1 /* Assets.xcassets */; }; + B78F2ACC272DB0B739278C99 /* libPods-DaysUntilBirthdayForPod(macOS).a in Frameworks */ = {isa = PBXBuildFile; fileRef = FCA8D6DF3A60C3036567A4D4 /* libPods-DaysUntilBirthdayForPod(macOS).a */; }; + F7C9BA02AE8475788182654C /* libPods-DaysUntilBirthdayForPod(iOS).a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A8D6148C8033E96F4B51A51 /* libPods-DaysUntilBirthdayForPod(iOS).a */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 0B08EF288921DB186EA58624 /* Pods-DaysUntilBirthdayForPod (iOS).debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DaysUntilBirthdayForPod (iOS).debug.xcconfig"; path = "Target Support Files/Pods-DaysUntilBirthdayForPod (iOS)/Pods-DaysUntilBirthdayForPod (iOS).debug.xcconfig"; sourceTree = ""; }; - 11B3DE96F8E9E52403BA1C30 /* Pods-DaysUntilBirthdayForPod (iOS).release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DaysUntilBirthdayForPod (iOS).release.xcconfig"; path = "Target Support Files/Pods-DaysUntilBirthdayForPod (iOS)/Pods-DaysUntilBirthdayForPod (iOS).release.xcconfig"; sourceTree = ""; }; - 54C0CE39088F529ED3F7DB46 /* Pods-DaysUntilBirthdayForPod (macOS).release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DaysUntilBirthdayForPod (macOS).release.xcconfig"; path = "Target Support Files/Pods-DaysUntilBirthdayForPod (macOS)/Pods-DaysUntilBirthdayForPod (macOS).release.xcconfig"; sourceTree = ""; }; - 61F4ED33051343907BD064C7 /* libPods-DaysUntilBirthdayForPod (iOS).a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DaysUntilBirthdayForPod (iOS).a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 6E7FF39A72A801922A879753 /* libPods-DaysUntilBirthdayForPod (macOS).a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DaysUntilBirthdayForPod (macOS).a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 752CE6A223C1E34534585077 /* Pods-DaysUntilBirthdayForPod (macOS).debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DaysUntilBirthdayForPod (macOS).debug.xcconfig"; path = "Target Support Files/Pods-DaysUntilBirthdayForPod (macOS)/Pods-DaysUntilBirthdayForPod (macOS).debug.xcconfig"; sourceTree = ""; }; - FE2ED0592800FE0F006007BA /* DaysUntilBirthdayForPod.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DaysUntilBirthdayForPod.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FE2ED05F2800FE0F006007BA /* DaysUntilBirthdayForPod.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DaysUntilBirthdayForPod.app; sourceTree = BUILT_PRODUCTS_DIR; }; - FE2ED0702800FF54006007BA /* DaysUntilBirthday.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DaysUntilBirthday.swift; sourceTree = ""; }; - FE2ED0712800FF54006007BA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - FE2ED0822800FF74006007BA /* Preview Content */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "Preview Content"; sourceTree = ""; }; - FE2ED0832800FF74006007BA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - FE2ED0842800FF74006007BA /* UserProfileView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserProfileView.swift; sourceTree = ""; }; - FE2ED0852800FF74006007BA /* GoogleSignInButtonWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GoogleSignInButtonWrapper.swift; sourceTree = ""; }; - FE2ED0862800FF74006007BA /* DaysUntilBirthdayOnMac.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = DaysUntilBirthdayOnMac.entitlements; sourceTree = ""; }; - FE2ED08F28010015006007BA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = iOS/Info.plist; sourceTree = ""; }; - FE2ED09028010015006007BA /* GoogleSignInButtonWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = GoogleSignInButtonWrapper.swift; path = iOS/GoogleSignInButtonWrapper.swift; sourceTree = ""; }; - FE2ED09128010015006007BA /* UserProfileView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = UserProfileView.swift; path = iOS/UserProfileView.swift; sourceTree = ""; }; - FE2ED09228010015006007BA /* Preview Content */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "Preview Content"; path = "iOS/Preview Content"; sourceTree = ""; }; - FE2ED09728010096006007BA /* Podfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Podfile; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - FE2ED09D28010507006007BA /* BirthdayViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BirthdayViewModel.swift; sourceTree = ""; }; - FE2ED09E28010507006007BA /* AuthenticationViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthenticationViewModel.swift; sourceTree = ""; }; - FE2ED0A028010507006007BA /* Birthday.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Birthday.swift; sourceTree = ""; }; - FE2ED0A228010507006007BA /* UserProfileImageLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserProfileImageLoader.swift; sourceTree = ""; }; - FE2ED0A328010507006007BA /* GoogleSignInAuthenticator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GoogleSignInAuthenticator.swift; sourceTree = ""; }; - FE2ED0A428010507006007BA /* BirthdayLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BirthdayLoader.swift; sourceTree = ""; }; - FE2ED0A628010508006007BA /* BirthdayView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BirthdayView.swift; sourceTree = ""; }; - FE2ED0A728010508006007BA /* SignInView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignInView.swift; sourceTree = ""; }; - FE2ED0A828010508006007BA /* UserProfileImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserProfileImageView.swift; sourceTree = ""; }; - FE2ED0A928010508006007BA /* ContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 0E95D3C3CE4B0FA47CC9B1B6 /* Pods-DaysUntilBirthdayForPod(iOS).release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DaysUntilBirthdayForPod(iOS).release.xcconfig"; path = "Target Support Files/Pods-DaysUntilBirthdayForPod(iOS)/Pods-DaysUntilBirthdayForPod(iOS).release.xcconfig"; sourceTree = ""; }; + 1A129363EBB5DF1F41FAAB14 /* Pods-DaysUntilBirthdayForPod(macOS).release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DaysUntilBirthdayForPod(macOS).release.xcconfig"; path = "Target Support Files/Pods-DaysUntilBirthdayForPod(macOS)/Pods-DaysUntilBirthdayForPod(macOS).release.xcconfig"; sourceTree = ""; }; + 29BEB027A694593FA0450863 /* Pods-DaysUntilBirthdayForPod(iOS).debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DaysUntilBirthdayForPod(iOS).debug.xcconfig"; path = "Target Support Files/Pods-DaysUntilBirthdayForPod(iOS)/Pods-DaysUntilBirthdayForPod(iOS).debug.xcconfig"; sourceTree = ""; }; + 2A8D6148C8033E96F4B51A51 /* libPods-DaysUntilBirthdayForPod(iOS).a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DaysUntilBirthdayForPod(iOS).a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7345ACFF2703D9470020AFB1 /* DaysUntilBirthdayForPod(iOS).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DaysUntilBirthdayForPod(iOS).app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7345AD022703D9470020AFB1 /* DaysUntilBirthday.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DaysUntilBirthday.swift; sourceTree = ""; }; + 7345AD042703D9470020AFB1 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 7345AD062703D9480020AFB1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 7345AD092703D9480020AFB1 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 7345AD0B2703D9480020AFB1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7345AD112703D9C30020AFB1 /* SignInView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SignInView.swift; sourceTree = ""; }; + 7345AD142703D9C30020AFB1 /* UserProfileImageView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserProfileImageView.swift; sourceTree = ""; }; + 7345AD162703D9C30020AFB1 /* AuthenticationViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuthenticationViewModel.swift; sourceTree = ""; }; + 7345AD172703D9C30020AFB1 /* GoogleSignInAuthenticator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GoogleSignInAuthenticator.swift; sourceTree = ""; }; + 7345AD192703D9C30020AFB1 /* UserProfileImageLoader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserProfileImageLoader.swift; sourceTree = ""; }; + 7345AD1A2703D9C30020AFB1 /* UserProfileView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserProfileView.swift; sourceTree = ""; }; + 736F49B9270E05E200580053 /* BirthdayLoader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BirthdayLoader.swift; sourceTree = ""; }; + 736F49BB270E102C00580053 /* BirthdayViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BirthdayViewModel.swift; sourceTree = ""; }; + 739FCC45270E467600C92042 /* BirthdayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BirthdayView.swift; sourceTree = ""; }; + 739FCC47270E659A00C92042 /* Birthday.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Birthday.swift; sourceTree = ""; }; + B7CC09BA1B68EB1881A08E87 /* Pods-DaysUntilBirthdayForPod(macOS).debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DaysUntilBirthdayForPod(macOS).debug.xcconfig"; path = "Target Support Files/Pods-DaysUntilBirthdayForPod(macOS)/Pods-DaysUntilBirthdayForPod(macOS).debug.xcconfig"; sourceTree = ""; }; + FCA8D6DF3A60C3036567A4D4 /* libPods-DaysUntilBirthdayForPod(macOS).a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DaysUntilBirthdayForPod(macOS).a"; sourceTree = BUILT_PRODUCTS_DIR; }; + FE2F2ABC2800D9C1005EA17F /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + FE71738027ECFAF400910319 /* DaysUntilBirthdayForPod(macOS).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DaysUntilBirthdayForPod(macOS).app"; sourceTree = BUILT_PRODUCTS_DIR; }; + FE71738927ECFAF600910319 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + FE71738B27ECFAF600910319 /* DaysUntilBirthdayOnMac.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DaysUntilBirthdayOnMac.entitlements; sourceTree = ""; }; + FE7173A527F5110F00910319 /* UserProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - FE2ED0562800FE0F006007BA /* Frameworks */ = { + 7345ACFC2703D9470020AFB1 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A0027D4EA9FC9C3320D2CB6C /* libPods-DaysUntilBirthdayForPod (iOS).a in Frameworks */, + F7C9BA02AE8475788182654C /* libPods-DaysUntilBirthdayForPod(iOS).a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FE2ED05C2800FE0F006007BA /* Frameworks */ = { + FE71737D27ECFAF400910319 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FC5D406670D7A548AFC4E510 /* libPods-DaysUntilBirthdayForPod (macOS).a in Frameworks */, + B78F2ACC272DB0B739278C99 /* libPods-DaysUntilBirthdayForPod(macOS).a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2D587383CDC18F70FA2636BF /* Frameworks */ = { + 1595AE063BAE425413C82340 /* Pods */ = { isa = PBXGroup; children = ( - 61F4ED33051343907BD064C7 /* libPods-DaysUntilBirthdayForPod (iOS).a */, - 6E7FF39A72A801922A879753 /* libPods-DaysUntilBirthdayForPod (macOS).a */, + 29BEB027A694593FA0450863 /* Pods-DaysUntilBirthdayForPod(iOS).debug.xcconfig */, + 0E95D3C3CE4B0FA47CC9B1B6 /* Pods-DaysUntilBirthdayForPod(iOS).release.xcconfig */, + B7CC09BA1B68EB1881A08E87 /* Pods-DaysUntilBirthdayForPod(macOS).debug.xcconfig */, + 1A129363EBB5DF1F41FAAB14 /* Pods-DaysUntilBirthdayForPod(macOS).release.xcconfig */, ); - name = Frameworks; + name = Pods; + path = Pods; sourceTree = ""; }; - 606AFE1D7495419E24EF0F63 /* Pods */ = { + 7345ACF62703D9470020AFB1 = { isa = PBXGroup; children = ( - 0B08EF288921DB186EA58624 /* Pods-DaysUntilBirthdayForPod (iOS).debug.xcconfig */, - 11B3DE96F8E9E52403BA1C30 /* Pods-DaysUntilBirthdayForPod (iOS).release.xcconfig */, - 752CE6A223C1E34534585077 /* Pods-DaysUntilBirthdayForPod (macOS).debug.xcconfig */, - 54C0CE39088F529ED3F7DB46 /* Pods-DaysUntilBirthdayForPod (macOS).release.xcconfig */, + 7345AD012703D9470020AFB1 /* Shared */, + FE7173A927F656AF00910319 /* iOS */, + FE71738127ECFAF400910319 /* macOS */, + 7345AD002703D9470020AFB1 /* Products */, + FE71738F27ECFB3300910319 /* Frameworks */, + 1595AE063BAE425413C82340 /* Pods */, ); - path = Pods; sourceTree = ""; }; - FE2ED04C2800FE0D006007BA = { + 7345AD002703D9470020AFB1 /* Products */ = { isa = PBXGroup; children = ( - FE2ED09728010096006007BA /* Podfile */, - FE2ED0512800FE0D006007BA /* Shared */, - FE2ED08E28010002006007BA /* iOS */, - FE2ED0602800FE0F006007BA /* macOS */, - FE2ED05A2800FE0F006007BA /* Products */, - 606AFE1D7495419E24EF0F63 /* Pods */, - 2D587383CDC18F70FA2636BF /* Frameworks */, + 7345ACFF2703D9470020AFB1 /* DaysUntilBirthdayForPod(iOS).app */, + FE71738027ECFAF400910319 /* DaysUntilBirthdayForPod(macOS).app */, ); + name = Products; sourceTree = ""; }; - FE2ED0512800FE0D006007BA /* Shared */ = { + 7345AD012703D9470020AFB1 /* Shared */ = { isa = PBXGroup; children = ( - FE2ED09F28010507006007BA /* Models */, - FE2ED0A128010507006007BA /* Services */, - FE2ED09C28010507006007BA /* ViewModels */, - FE2ED0A528010508006007BA /* Views */, - FE2ED0712800FF54006007BA /* Assets.xcassets */, - FE2ED0702800FF54006007BA /* DaysUntilBirthday.swift */, + 7345AD022703D9470020AFB1 /* DaysUntilBirthday.swift */, + FE7173AF27F6633900910319 /* Services */, + FE7173AE27F6632E00910319 /* ViewModels */, + FE7173AD27F65B8500910319 /* Models */, + FE7173AA27F6578E00910319 /* Views */, + 7345AD062703D9480020AFB1 /* Assets.xcassets */, ); path = Shared; sourceTree = ""; }; - FE2ED05A2800FE0F006007BA /* Products */ = { + 7345AD082703D9480020AFB1 /* Preview Content */ = { isa = PBXGroup; children = ( - FE2ED0592800FE0F006007BA /* DaysUntilBirthdayForPod.app */, - FE2ED05F2800FE0F006007BA /* DaysUntilBirthdayForPod.app */, + 7345AD092703D9480020AFB1 /* Preview Assets.xcassets */, ); - name = Products; + path = "Preview Content"; sourceTree = ""; }; - FE2ED0602800FE0F006007BA /* macOS */ = { + FE71738127ECFAF400910319 /* macOS */ = { isa = PBXGroup; children = ( - FE2ED0862800FF74006007BA /* DaysUntilBirthdayOnMac.entitlements */, - FE2ED0852800FF74006007BA /* GoogleSignInButtonWrapper.swift */, - FE2ED0832800FF74006007BA /* Info.plist */, - FE2ED0822800FF74006007BA /* Preview Content */, - FE2ED0842800FF74006007BA /* UserProfileView.swift */, + FE7173A527F5110F00910319 /* UserProfileView.swift */, + FE2F2ABC2800D9C1005EA17F /* Info.plist */, + FE71738B27ECFAF600910319 /* DaysUntilBirthdayOnMac.entitlements */, + FE71738827ECFAF600910319 /* Preview Content */, ); path = macOS; sourceTree = ""; }; - FE2ED08E28010002006007BA /* iOS */ = { + FE71738827ECFAF600910319 /* Preview Content */ = { isa = PBXGroup; children = ( - FE2ED09028010015006007BA /* GoogleSignInButtonWrapper.swift */, - FE2ED08F28010015006007BA /* Info.plist */, - FE2ED09228010015006007BA /* Preview Content */, - FE2ED09128010015006007BA /* UserProfileView.swift */, + FE71738927ECFAF600910319 /* Preview Assets.xcassets */, ); - name = iOS; + path = "Preview Content"; sourceTree = ""; }; - FE2ED09C28010507006007BA /* ViewModels */ = { + FE71738F27ECFB3300910319 /* Frameworks */ = { isa = PBXGroup; children = ( - FE2ED09D28010507006007BA /* BirthdayViewModel.swift */, - FE2ED09E28010507006007BA /* AuthenticationViewModel.swift */, + 2A8D6148C8033E96F4B51A51 /* libPods-DaysUntilBirthdayForPod(iOS).a */, + FCA8D6DF3A60C3036567A4D4 /* libPods-DaysUntilBirthdayForPod(macOS).a */, ); - path = ViewModels; + name = Frameworks; + sourceTree = ""; + }; + FE7173A927F656AF00910319 /* iOS */ = { + isa = PBXGroup; + children = ( + 7345AD1A2703D9C30020AFB1 /* UserProfileView.swift */, + 7345AD0B2703D9480020AFB1 /* Info.plist */, + 7345AD082703D9480020AFB1 /* Preview Content */, + ); + path = iOS; sourceTree = ""; }; - FE2ED09F28010507006007BA /* Models */ = { + FE7173AA27F6578E00910319 /* Views */ = { isa = PBXGroup; children = ( - FE2ED0A028010507006007BA /* Birthday.swift */, + 7345AD042703D9470020AFB1 /* ContentView.swift */, + 739FCC45270E467600C92042 /* BirthdayView.swift */, + 7345AD112703D9C30020AFB1 /* SignInView.swift */, + 7345AD142703D9C30020AFB1 /* UserProfileImageView.swift */, + ); + path = Views; + sourceTree = ""; + }; + FE7173AD27F65B8500910319 /* Models */ = { + isa = PBXGroup; + children = ( + 739FCC47270E659A00C92042 /* Birthday.swift */, ); path = Models; sourceTree = ""; }; - FE2ED0A128010507006007BA /* Services */ = { + FE7173AE27F6632E00910319 /* ViewModels */ = { isa = PBXGroup; children = ( - FE2ED0A228010507006007BA /* UserProfileImageLoader.swift */, - FE2ED0A328010507006007BA /* GoogleSignInAuthenticator.swift */, - FE2ED0A428010507006007BA /* BirthdayLoader.swift */, + 7345AD162703D9C30020AFB1 /* AuthenticationViewModel.swift */, + 736F49BB270E102C00580053 /* BirthdayViewModel.swift */, ); - path = Services; + path = ViewModels; sourceTree = ""; }; - FE2ED0A528010508006007BA /* Views */ = { + FE7173AF27F6633900910319 /* Services */ = { isa = PBXGroup; children = ( - FE2ED0A628010508006007BA /* BirthdayView.swift */, - FE2ED0A728010508006007BA /* SignInView.swift */, - FE2ED0A828010508006007BA /* UserProfileImageView.swift */, - FE2ED0A928010508006007BA /* ContentView.swift */, + 7345AD172703D9C30020AFB1 /* GoogleSignInAuthenticator.swift */, + 736F49B9270E05E200580053 /* BirthdayLoader.swift */, + 7345AD192703D9C30020AFB1 /* UserProfileImageLoader.swift */, ); - path = Views; + path = Services; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - FE2ED0582800FE0F006007BA /* DaysUntilBirthdayForPod (iOS) */ = { + 7345ACFE2703D9470020AFB1 /* DaysUntilBirthdayForPod(iOS) */ = { isa = PBXNativeTarget; - buildConfigurationList = FE2ED06A2800FE0F006007BA /* Build configuration list for PBXNativeTarget "DaysUntilBirthdayForPod (iOS)" */; + buildConfigurationList = 7345AD0E2703D9480020AFB1 /* Build configuration list for PBXNativeTarget "DaysUntilBirthdayForPod(iOS)" */; buildPhases = ( - E5281C4FB6891AEEF4D98F34 /* [CP] Check Pods Manifest.lock */, - FE2ED0552800FE0F006007BA /* Sources */, - FE2ED0562800FE0F006007BA /* Frameworks */, - FE2ED0572800FE0F006007BA /* Resources */, - 3C2AF50DEF579CD4D20D7FB4 /* [CP] Copy Pods Resources */, + 2103D758B586F141DA8039D6 /* [CP] Check Pods Manifest.lock */, + 7345ACFB2703D9470020AFB1 /* Sources */, + 7345ACFC2703D9470020AFB1 /* Frameworks */, + 7345ACFD2703D9470020AFB1 /* Resources */, + 6D82046AD9FB6398BEEE6E1E /* [CP] Copy Pods Resources */, ); buildRules = ( ); dependencies = ( ); - name = "DaysUntilBirthdayForPod (iOS)"; - productName = "DaysUntilBirthdayForPod (iOS)"; - productReference = FE2ED0592800FE0F006007BA /* DaysUntilBirthdayForPod.app */; + name = "DaysUntilBirthdayForPod(iOS)"; + productName = "GSI-Swift-Sample"; + productReference = 7345ACFF2703D9470020AFB1 /* DaysUntilBirthdayForPod(iOS).app */; productType = "com.apple.product-type.application"; }; - FE2ED05E2800FE0F006007BA /* DaysUntilBirthdayForPod (macOS) */ = { + FE71737F27ECFAF400910319 /* DaysUntilBirthdayForPod(macOS) */ = { isa = PBXNativeTarget; - buildConfigurationList = FE2ED06D2800FE0F006007BA /* Build configuration list for PBXNativeTarget "DaysUntilBirthdayForPod (macOS)" */; + buildConfigurationList = FE71738C27ECFAF600910319 /* Build configuration list for PBXNativeTarget "DaysUntilBirthdayForPod(macOS)" */; buildPhases = ( - 09125C10B78DB2C9C3CDD745 /* [CP] Check Pods Manifest.lock */, - FE2ED05B2800FE0F006007BA /* Sources */, - FE2ED05C2800FE0F006007BA /* Frameworks */, - FE2ED05D2800FE0F006007BA /* Resources */, - 695CEEB6F1EA80C63A6FBE3D /* [CP] Copy Pods Resources */, + CCB20D28DCF2C72343E30583 /* [CP] Check Pods Manifest.lock */, + FE71737C27ECFAF400910319 /* Sources */, + FE71737D27ECFAF400910319 /* Frameworks */, + FE71737E27ECFAF400910319 /* Resources */, + 33C73C0F02D22A5D08069738 /* [CP] Copy Pods Resources */, ); buildRules = ( ); dependencies = ( ); - name = "DaysUntilBirthdayForPod (macOS)"; - productName = "DaysUntilBirthdayForPod (macOS)"; - productReference = FE2ED05F2800FE0F006007BA /* DaysUntilBirthdayForPod.app */; + name = "DaysUntilBirthdayForPod(macOS)"; + productName = DaysUntilBirthdayOnMac; + productReference = FE71738027ECFAF400910319 /* DaysUntilBirthdayForPod(macOS).app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ - FE2ED04D2800FE0D006007BA /* Project object */ = { + 7345ACF72703D9470020AFB1 /* Project object */ = { isa = PBXProject; attributes = { - BuildIndependentTargetsInParallel = 1; LastSwiftUpdateCheck = 1310; - LastUpgradeCheck = 1310; + LastUpgradeCheck = 1250; TargetAttributes = { - FE2ED0582800FE0F006007BA = { - CreatedOnToolsVersion = 13.1; - LastSwiftMigration = 1310; + 7345ACFE2703D9470020AFB1 = { + CreatedOnToolsVersion = 12.5.1; }; - FE2ED05E2800FE0F006007BA = { + FE71737F27ECFAF400910319 = { CreatedOnToolsVersion = 13.1; - LastSwiftMigration = 1310; }; }; }; - buildConfigurationList = FE2ED0502800FE0D006007BA /* Build configuration list for PBXProject "DaysUntilBirthdayForPod" */; - compatibilityVersion = "Xcode 13.0"; + buildConfigurationList = 7345ACFA2703D9470020AFB1 /* Build configuration list for PBXProject "DaysUntilBirthdayForPod" */; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); - mainGroup = FE2ED04C2800FE0D006007BA; - productRefGroup = FE2ED05A2800FE0F006007BA /* Products */; + mainGroup = 7345ACF62703D9470020AFB1; + productRefGroup = 7345AD002703D9470020AFB1 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - FE2ED0582800FE0F006007BA /* DaysUntilBirthdayForPod (iOS) */, - FE2ED05E2800FE0F006007BA /* DaysUntilBirthdayForPod (macOS) */, + 7345ACFE2703D9470020AFB1 /* DaysUntilBirthdayForPod(iOS) */, + FE71737F27ECFAF400910319 /* DaysUntilBirthdayForPod(macOS) */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ - FE2ED0572800FE0F006007BA /* Resources */ = { + 7345ACFD2703D9470020AFB1 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - FE2ED09828010096006007BA /* Podfile in Resources */, - FE2ED09628010015006007BA /* Preview Content in Resources */, - FE2ED0782800FF54006007BA /* Assets.xcassets in Resources */, + 7345AD0A2703D9480020AFB1 /* Preview Assets.xcassets in Resources */, + 7345AD072703D9480020AFB1 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FE2ED05D2800FE0F006007BA /* Resources */ = { + FE71737E27ECFAF400910319 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - FE2ED0872800FF74006007BA /* Preview Content in Resources */, - FE2ED09928010096006007BA /* Podfile in Resources */, - FE2ED0792800FF54006007BA /* Assets.xcassets in Resources */, - FE2ED0882800FF74006007BA /* Info.plist in Resources */, + 73DB419628060A9A0028B8D3 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 09125C10B78DB2C9C3CDD745 /* [CP] Check Pods Manifest.lock */ = { + 2103D758B586F141DA8039D6 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -333,48 +331,48 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-DaysUntilBirthdayForPod (macOS)-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-DaysUntilBirthdayForPod(iOS)-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; }; - 3C2AF50DEF579CD4D20D7FB4 /* [CP] Copy Pods Resources */ = { + 33C73C0F02D22A5D08069738 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-DaysUntilBirthdayForPod (iOS)/Pods-DaysUntilBirthdayForPod (iOS)-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-DaysUntilBirthdayForPod(macOS)/Pods-DaysUntilBirthdayForPod(macOS)-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-DaysUntilBirthdayForPod (iOS)/Pods-DaysUntilBirthdayForPod (iOS)-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-DaysUntilBirthdayForPod(macOS)/Pods-DaysUntilBirthdayForPod(macOS)-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-DaysUntilBirthdayForPod (iOS)/Pods-DaysUntilBirthdayForPod (iOS)-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-DaysUntilBirthdayForPod(macOS)/Pods-DaysUntilBirthdayForPod(macOS)-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 695CEEB6F1EA80C63A6FBE3D /* [CP] Copy Pods Resources */ = { + 6D82046AD9FB6398BEEE6E1E /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-DaysUntilBirthdayForPod (macOS)/Pods-DaysUntilBirthdayForPod (macOS)-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-DaysUntilBirthdayForPod(iOS)/Pods-DaysUntilBirthdayForPod(iOS)-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-DaysUntilBirthdayForPod (macOS)/Pods-DaysUntilBirthdayForPod (macOS)-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-DaysUntilBirthdayForPod(iOS)/Pods-DaysUntilBirthdayForPod(iOS)-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-DaysUntilBirthdayForPod (macOS)/Pods-DaysUntilBirthdayForPod (macOS)-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-DaysUntilBirthdayForPod(iOS)/Pods-DaysUntilBirthdayForPod(iOS)-resources.sh\"\n"; showEnvVarsInLog = 0; }; - E5281C4FB6891AEEF4D98F34 /* [CP] Check Pods Manifest.lock */ = { + CCB20D28DCF2C72343E30583 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -389,7 +387,7 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-DaysUntilBirthdayForPod (iOS)-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-DaysUntilBirthdayForPod(macOS)-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -399,56 +397,56 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ - FE2ED0552800FE0F006007BA /* Sources */ = { + 7345ACFB2703D9470020AFB1 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FE2ED0B428010508006007BA /* BirthdayLoader.swift in Sources */, - FE2ED09428010015006007BA /* GoogleSignInButtonWrapper.swift in Sources */, - FE2ED0AC28010508006007BA /* AuthenticationViewModel.swift in Sources */, - FE2ED0B228010508006007BA /* GoogleSignInAuthenticator.swift in Sources */, - FE2ED0AE28010508006007BA /* Birthday.swift in Sources */, - FE2ED0B628010508006007BA /* BirthdayView.swift in Sources */, - FE2ED0AA28010508006007BA /* BirthdayViewModel.swift in Sources */, - FE2ED0BA28010508006007BA /* UserProfileImageView.swift in Sources */, - FE2ED09528010015006007BA /* UserProfileView.swift in Sources */, - FE2ED0B028010508006007BA /* UserProfileImageLoader.swift in Sources */, - FE2ED0BC28010508006007BA /* ContentView.swift in Sources */, - FE2ED0B828010508006007BA /* SignInView.swift in Sources */, - FE2ED0762800FF54006007BA /* DaysUntilBirthday.swift in Sources */, + 739FCC48270E659A00C92042 /* Birthday.swift in Sources */, + 739FCC46270E467600C92042 /* BirthdayView.swift in Sources */, + 7345AD1B2703D9C30020AFB1 /* SignInView.swift in Sources */, + 7345AD212703D9C30020AFB1 /* GoogleSignInAuthenticator.swift in Sources */, + 7345AD232703D9C30020AFB1 /* UserProfileImageLoader.swift in Sources */, + 7345AD1E2703D9C30020AFB1 /* UserProfileImageView.swift in Sources */, + 736F49BC270E102C00580053 /* BirthdayViewModel.swift in Sources */, + 736F49BA270E05E200580053 /* BirthdayLoader.swift in Sources */, + 7345AD242703D9C30020AFB1 /* UserProfileView.swift in Sources */, + 7345AD202703D9C30020AFB1 /* AuthenticationViewModel.swift in Sources */, + 7345AD052703D9470020AFB1 /* ContentView.swift in Sources */, + 7345AD032703D9470020AFB1 /* DaysUntilBirthday.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FE2ED05B2800FE0F006007BA /* Sources */ = { + FE71737C27ECFAF400910319 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FE2ED0B528010508006007BA /* BirthdayLoader.swift in Sources */, - FE2ED08A2800FF74006007BA /* GoogleSignInButtonWrapper.swift in Sources */, - FE2ED0AD28010508006007BA /* AuthenticationViewModel.swift in Sources */, - FE2ED0B328010508006007BA /* GoogleSignInAuthenticator.swift in Sources */, - FE2ED0AF28010508006007BA /* Birthday.swift in Sources */, - FE2ED0B728010508006007BA /* BirthdayView.swift in Sources */, - FE2ED0AB28010508006007BA /* BirthdayViewModel.swift in Sources */, - FE2ED0BB28010508006007BA /* UserProfileImageView.swift in Sources */, - FE2ED0772800FF54006007BA /* DaysUntilBirthday.swift in Sources */, - FE2ED0B128010508006007BA /* UserProfileImageLoader.swift in Sources */, - FE2ED0BD28010508006007BA /* ContentView.swift in Sources */, - FE2ED0B928010508006007BA /* SignInView.swift in Sources */, - FE2ED0892800FF74006007BA /* UserProfileView.swift in Sources */, + 73DB41912805FBFD0028B8D3 /* SignInView.swift in Sources */, + 73DB418B2805FBC40028B8D3 /* BirthdayLoader.swift in Sources */, + 73DB418D2805FBD00028B8D3 /* AuthenticationViewModel.swift in Sources */, + 73DB418F2805FBF50028B8D3 /* ContentView.swift in Sources */, + 73DB418C2805FBC80028B8D3 /* UserProfileImageLoader.swift in Sources */, + 73DB418E2805FBD40028B8D3 /* BirthdayViewModel.swift in Sources */, + 73DB41952805FC5F0028B8D3 /* Birthday.swift in Sources */, + 73DB418A2805FBC00028B8D3 /* GoogleSignInAuthenticator.swift in Sources */, + 73DB41932805FC3B0028B8D3 /* UserProfileView.swift in Sources */, + 73DB41892805FBA90028B8D3 /* DaysUntilBirthday.swift in Sources */, + 73DB41902805FBF90028B8D3 /* BirthdayView.swift in Sources */, + 73DB41922805FC010028B8D3 /* UserProfileImageView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - FE2ED0682800FE0F006007BA /* Debug */ = { + 7345AD0C2703D9480020AFB1 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = ""; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -493,21 +491,25 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.5; 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; }; - FE2ED0692800FE0F006007BA /* Release */ = { + 7345AD0D2703D9480020AFB1 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_APPICON_NAME = ""; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -546,90 +548,72 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.5; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; + SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; }; name = Release; }; - FE2ED06B2800FE0F006007BA /* Debug */ = { + 7345AD0F2703D9480020AFB1 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0B08EF288921DB186EA58624 /* Pods-DaysUntilBirthdayForPod (iOS).debug.xcconfig */; + baseConfigurationReference = 29BEB027A694593FA0450863 /* Pods-DaysUntilBirthdayForPod(iOS).debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"iOS/Preview Content\""; ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = iOS/Info.plist; - 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 = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.google.DaysUntilBirthday; - PRODUCT_NAME = DaysUntilBirthdayForPod; - SDKROOT = iphoneos; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; - FE2ED06C2800FE0F006007BA /* Release */ = { + 7345AD102703D9480020AFB1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 11B3DE96F8E9E52403BA1C30 /* Pods-DaysUntilBirthdayForPod (iOS).release.xcconfig */; + baseConfigurationReference = 0E95D3C3CE4B0FA47CC9B1B6 /* Pods-DaysUntilBirthdayForPod(iOS).release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"iOS/Preview Content\""; ENABLE_PREVIEWS = YES; - GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = iOS/Info.plist; - 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 = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.google.DaysUntilBirthday; - PRODUCT_NAME = DaysUntilBirthdayForPod; - SDKROOT = iphoneos; - SWIFT_EMIT_LOC_STRINGS = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; }; name = Release; }; - FE2ED06E2800FE0F006007BA /* Debug */ = { + FE71738D27ECFAF600910319 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 752CE6A223C1E34534585077 /* Pods-DaysUntilBirthdayForPod (macOS).debug.xcconfig */; + baseConfigurationReference = B7CC09BA1B68EB1881A08E87 /* Pods-DaysUntilBirthdayForPod(macOS).debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CODE_SIGN_ENTITLEMENTS = macOS/DaysUntilBirthdayOnMac.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"macOS/Preview Content\""; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = macOS/Info.plist; @@ -641,25 +625,25 @@ MACOSX_DEPLOYMENT_TARGET = 12.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = Google.DaysUntilBirthdayOnMac; - PRODUCT_NAME = DaysUntilBirthdayForPod; + PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; }; name = Debug; }; - FE2ED06F2800FE0F006007BA /* Release */ = { + FE71738E27ECFAF600910319 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 54C0CE39088F529ED3F7DB46 /* Pods-DaysUntilBirthdayForPod (macOS).release.xcconfig */; + baseConfigurationReference = 1A129363EBB5DF1F41FAAB14 /* Pods-DaysUntilBirthdayForPod(macOS).release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; - CLANG_ENABLE_MODULES = YES; - CODE_SIGN_ENTITLEMENTS = macOS/macOS.entitlements; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CODE_SIGN_ENTITLEMENTS = macOS/DaysUntilBirthdayOnMac.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"macOS/Preview Content\""; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = macOS/Info.plist; @@ -671,7 +655,7 @@ MACOSX_DEPLOYMENT_TARGET = 12.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = Google.DaysUntilBirthdayOnMac; - PRODUCT_NAME = DaysUntilBirthdayForPod; + PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -681,34 +665,34 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - FE2ED0502800FE0D006007BA /* Build configuration list for PBXProject "DaysUntilBirthdayForPod" */ = { + 7345ACFA2703D9470020AFB1 /* Build configuration list for PBXProject "DaysUntilBirthdayForPod" */ = { isa = XCConfigurationList; buildConfigurations = ( - FE2ED0682800FE0F006007BA /* Debug */, - FE2ED0692800FE0F006007BA /* Release */, + 7345AD0C2703D9480020AFB1 /* Debug */, + 7345AD0D2703D9480020AFB1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FE2ED06A2800FE0F006007BA /* Build configuration list for PBXNativeTarget "DaysUntilBirthdayForPod (iOS)" */ = { + 7345AD0E2703D9480020AFB1 /* Build configuration list for PBXNativeTarget "DaysUntilBirthdayForPod(iOS)" */ = { isa = XCConfigurationList; buildConfigurations = ( - FE2ED06B2800FE0F006007BA /* Debug */, - FE2ED06C2800FE0F006007BA /* Release */, + 7345AD0F2703D9480020AFB1 /* Debug */, + 7345AD102703D9480020AFB1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FE2ED06D2800FE0F006007BA /* Build configuration list for PBXNativeTarget "DaysUntilBirthdayForPod (macOS)" */ = { + FE71738C27ECFAF600910319 /* Build configuration list for PBXNativeTarget "DaysUntilBirthdayForPod(macOS)" */ = { isa = XCConfigurationList; buildConfigurations = ( - FE2ED06E2800FE0F006007BA /* Debug */, - FE2ED06F2800FE0F006007BA /* Release */, + FE71738D27ECFAF600910319 /* Debug */, + FE71738E27ECFAF600910319 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = FE2ED04D2800FE0D006007BA /* Project object */; + rootObject = 7345ACF72703D9470020AFB1 /* Project object */; } diff --git a/Samples/Swift/DaysUntilBirthday/Podfile b/Samples/Swift/DaysUntilBirthday/Podfile index d62ba681..1a69ec28 100644 --- a/Samples/Swift/DaysUntilBirthday/Podfile +++ b/Samples/Swift/DaysUntilBirthday/Podfile @@ -1,10 +1,11 @@ pod 'GoogleSignIn', :path => '../../../', :testspecs => ['unit'] +pod 'GoogleSignInSwift', :path => '../../../' project 'DaysUntilBirthdayForPod.xcodeproj' -target 'DaysUntilBirthdayForPod (iOS)' do - platform :ios, '9.0' +target 'DaysUntilBirthdayForPod(iOS)' do + platform :ios, '13.0' end -target 'DaysUntilBirthdayForPod (macOS)' do +target 'DaysUntilBirthdayForPod(macOS)' do platform :osx, '10.15' end diff --git a/Samples/Swift/DaysUntilBirthday/Shared/Views/SignInView.swift b/Samples/Swift/DaysUntilBirthday/Shared/Views/SignInView.swift index e840e433..48bab51c 100644 --- a/Samples/Swift/DaysUntilBirthday/Shared/Views/SignInView.swift +++ b/Samples/Swift/DaysUntilBirthday/Shared/Views/SignInView.swift @@ -15,14 +15,26 @@ */ import SwiftUI +import GoogleSignInSwift struct SignInView: View { - @EnvironmentObject var viewModel: AuthenticationViewModel + @EnvironmentObject var authViewModel: AuthenticationViewModel var body: some View { - VStack { - GoogleSignInButtonWrapper(handler: viewModel.signIn) + VStack { + HStack { + let buttonViewModel = GoogleSignInButtonViewModel( + scheme: .light, + style: .standard + ) + GoogleSignInButton( + viewModel: buttonViewModel, + action: authViewModel.signIn + ) .accessibility(hint: Text("Sign in with Google button.")) + .padding() + } + Spacer() } } } diff --git a/Samples/Swift/DaysUntilBirthday/iOS/GoogleSignInButtonWrapper.swift b/Samples/Swift/DaysUntilBirthday/iOS/GoogleSignInButtonWrapper.swift deleted file mode 100644 index d3d12f8c..00000000 --- a/Samples/Swift/DaysUntilBirthday/iOS/GoogleSignInButtonWrapper.swift +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2021 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 GoogleSignIn - -/// A wrapper for `GIDSignInButton` so that it can be used in SwiftUI. -struct GoogleSignInButtonWrapper: UIViewRepresentable { - let handler: () -> Void - - init(handler: @escaping () -> Void) { - self.handler = handler - } - - func makeCoordinator() -> Coordinator { - return Coordinator() - } - - func makeUIView(context: Context) -> GIDSignInButton { - let signInButton = GIDSignInButton() - signInButton.addTarget(context.coordinator, - action: #selector(Coordinator.callHandler), - for: .touchUpInside) - return signInButton - } - - func updateUIView(_ uiView: UIViewType, context: Context) { - context.coordinator.handler = handler - } -} - -extension GoogleSignInButtonWrapper { - class Coordinator { - var handler: (() -> Void)? - - @objc func callHandler() { - handler?() - } - } -} diff --git a/Samples/Swift/DaysUntilBirthday/iOS/Info.plist b/Samples/Swift/DaysUntilBirthday/iOS/Info.plist index 4582a8ab..6d7f2245 100644 --- a/Samples/Swift/DaysUntilBirthday/iOS/Info.plist +++ b/Samples/Swift/DaysUntilBirthday/iOS/Info.plist @@ -2,6 +2,8 @@ + CFBundleAllowMixedLocalizations + CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable diff --git a/Samples/Swift/DaysUntilBirthday/macOS/GoogleSignInButtonWrapper.swift b/Samples/Swift/DaysUntilBirthday/macOS/GoogleSignInButtonWrapper.swift deleted file mode 100644 index 2858f845..00000000 --- a/Samples/Swift/DaysUntilBirthday/macOS/GoogleSignInButtonWrapper.swift +++ /dev/null @@ -1,17 +0,0 @@ -import SwiftUI - -struct GoogleSignInButtonWrapper: View { - let handler: () -> Void - - var body: some View { - Button(action: { - handler() - }) { - Text("SIGN IN") - .frame(width: 100 , height: 50, alignment: .center) - } - .background(Color.blue) - .foregroundColor(Color.white) - .cornerRadius(5) - } -}