From 663b4754e2a638e95106caabbf34ef2810c84cf2 Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Wed, 17 Apr 2024 11:03:48 -0700 Subject: [PATCH] [google_sign_in_ios] Upgrade GoogleSignIn iOS SDK to 7.1 (#6404) 1. Update GoogleSignIn iOS SDK dependency to [7.1](https://github.com/google/GoogleSignIn-iOS/releases/tag/7.1.0), which supports privacy manifests. 1. Update "fetch deps step" to run `pod repo update` every time to avoid missing spec failure. Also added a fetch deps step to the all_packages builds, since those could also use a `pod repo update` but I didn't want to add more logic to those bash scripts. ``` [!] CocoaPods could not find compatible versions for pod "GoogleSignIn": In Podfile: google_sign_in_ios (from `Flutter/ephemeral/.symlinks/plugins/google_sign_in_ios/darwin`) was resolved to 0.0.1, which depends on GoogleSignIn (~> 7.1) None of your spec sources contain a spec satisfying the dependency: `GoogleSignIn (~> 7.1)`. ``` https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8752192509749702705/+/u/Run_package_tests/download_Dart_and_iOS_deps/stdout 3. Looks like the new versions of [`GTMSessionFetcher`](https://github.com/CocoaPods/Specs/blob/master/Specs/c/e/3/GTMSessionFetcher/3.3.2/GTMSessionFetcher.podspec.json) and [`AppAuth`](https://github.com/CocoaPods/Specs/blob/master/Specs/b/b/9/AppAuth/1.7.3/AppAuth.podspec.json) don't define modules, so there's an error building it statically: ``` [!] The following Swift pods cannot yet be integrated as static libraries: The Swift pod `GTMAppAuth` depends upon `GTMSessionFetcher` and `AppAuth`, which do not define modules. To opt into those targets generating module maps (which is necessary to import them from Swift when building as static libraries), you may set `use_modular_headers!` globally in your Podfile, or specify `:modular_headers => true` for particular dependencies. ``` I filed https://github.com/google/gtm-session-fetcher/issues/384 and https://github.com/openid/AppAuth-iOS/issues/844. In the meantime, I updated the example apps to `use_frameworks!`, which would be on for Flutter Swift apps, but not Objective-C ones. We could add something to the tool to detect this case, and suggest `use_frameworks!` be added? 4. Even though google_sign_in_ios does not contain Swift files, for some reason, there is a "pod lib lint" warning complaining `swift_version` isn't set. This seems related to `GTMAppAuth` dependency constraint that went from an Objective-C-only to Swift pod. So I set `swift_version` since it's harmless. ``` - WARN | swift: The validator used Swift `4.0` by default because no Swift version was specified. To specify a Swift version during validation, add the `swift_versions` attribute in your podspec. Note that usage of a `.swift-version` file is now deprecated. ``` https://logs.chromium.org/logs/flutter/buildbucket/cr-buildbucket/8752100979634945505/+/u/Run_package_tests/validate_iOS_and_macOS_podspecs/stdout ## Issues * Fixes https://github.com/flutter/flutter/issues/145777 * Fixes https://github.com/flutter/flutter/issues/145866 * See also https://github.com/flutter/flutter/issues/137140 --- .ci/targets/ios_build_all_packages.yaml | 4 +++ .ci/targets/macos_build_all_packages.yaml | 4 +++ .../google_sign_in_ios/CHANGELOG.md | 4 +++ .../darwin/google_sign_in_ios.podspec | 13 ++++++++- .../ios/Runner.xcodeproj/project.pbxproj | 10 ++++++- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- .../google_sign_in_ios/pubspec.yaml | 2 +- script/tool/lib/src/fetch_deps_command.dart | 29 ++++++++++++------- script/tool/test/fetch_deps_command_test.dart | 12 ++++++++ 9 files changed, 65 insertions(+), 15 deletions(-) diff --git a/.ci/targets/ios_build_all_packages.yaml b/.ci/targets/ios_build_all_packages.yaml index c85ec5c1f7cb..cae80e605d3e 100644 --- a/.ci/targets/ios_build_all_packages.yaml +++ b/.ci/targets/ios_build_all_packages.yaml @@ -2,6 +2,10 @@ tasks: - name: prepare tool script: .ci/scripts/prepare_tool.sh infra_step: true # Note infra steps failing prevents "always" from running. + - name: download Dart and iOS deps + script: .ci/scripts/tool_runner.sh + args: ["fetch-deps", "--ios", "--supporting-target-platforms-only"] + infra_step: true - name: create all_packages app script: .ci/scripts/create_all_packages_app.sh infra_step: true # Note infra steps failing prevents "always" from running. diff --git a/.ci/targets/macos_build_all_packages.yaml b/.ci/targets/macos_build_all_packages.yaml index 6cc476559593..b576457a1eef 100644 --- a/.ci/targets/macos_build_all_packages.yaml +++ b/.ci/targets/macos_build_all_packages.yaml @@ -2,6 +2,10 @@ tasks: - name: prepare tool script: .ci/scripts/prepare_tool.sh infra_step: true # Note infra steps failing prevents "always" from running. + - name: download Dart and macOS deps + script: .ci/scripts/tool_runner.sh + args: ["fetch-deps", "--macos", "--supporting-target-platforms-only"] + infra_step: true - name: create all_packages app script: .ci/scripts/create_all_packages_app.sh infra_step: true # Note infra steps failing prevents "always" from running. diff --git a/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md b/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md index dd958dfb6d36..1b4a673e7695 100644 --- a/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md +++ b/packages/google_sign_in/google_sign_in_ios/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.7.6 + +* Upgrades GoogleSignIn iOS SDK to 7.1. + ## 5.7.5 * Pins GoogleSignIn to iOS SDK "7.0.0" while preparing the update to 7.1. diff --git a/packages/google_sign_in/google_sign_in_ios/darwin/google_sign_in_ios.podspec b/packages/google_sign_in/google_sign_in_ios/darwin/google_sign_in_ios.podspec index 10c0b64a69b8..4b3749d4f86f 100644 --- a/packages/google_sign_in/google_sign_in_ios/darwin/google_sign_in_ios.podspec +++ b/packages/google_sign_in/google_sign_in_ios/darwin/google_sign_in_ios.podspec @@ -15,12 +15,23 @@ Enables Google Sign-In in Flutter apps. s.source_files = 'Classes/**/*.{h,m}' s.public_header_files = 'Classes/**/*.h' s.module_map = 'Classes/FLTGoogleSignInPlugin.modulemap' - s.dependency 'GoogleSignIn', '~> 7.0.0' + + # AppAuth and GTMSessionFetcher are GoogleSignIn transitive dependencies. + # Depend on versions which defines modules. + s.dependency 'AppAuth', '>= 1.7.4' + s.dependency 'GTMSessionFetcher', '>= 3.4.0' + s.dependency 'GoogleSignIn', '~> 7.1' s.static_framework = true s.ios.dependency 'Flutter' s.osx.dependency 'FlutterMacOS' s.ios.deployment_target = '12.0' s.osx.deployment_target = '10.15' s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' } + + # google_sign_in_ios does not contain Swift files. For some reason, there + # is a "pod lib lint" warning unless swift_version is set. This seems related to + # GoogleSignIn depending a Swift pod (GTMAppAuth). + s.swift_version = '5.0' + s.resource_bundles = {'google_sign_in_ios_privacy' => ['Resources/PrivacyInfo.xcprivacy']} end diff --git a/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/project.pbxproj b/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/project.pbxproj index a577c5de44e0..03e7451a827f 100644 --- a/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/project.pbxproj @@ -273,7 +273,7 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = "The Flutter Authors"; TargetAttributes = { 97C146ED1CF9000F007C117D = { @@ -386,11 +386,19 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh", + "${PODS_CONFIGURATION_BUILD_DIR}/AppAuth/AppAuthCore_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GTMAppAuth/GTMAppAuth_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher_Core_Privacy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/GTMSessionFetcher/GTMSessionFetcher_Full_Privacy.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/GoogleSignIn/GoogleSignIn.bundle", "${PODS_CONFIGURATION_BUILD_DIR}/google_sign_in_ios/google_sign_in_ios_privacy.bundle", ); name = "[CP] Copy Pods Resources"; outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppAuthCore_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GTMAppAuth_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GTMSessionFetcher_Core_Privacy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GTMSessionFetcher_Full_Privacy.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleSignIn.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/google_sign_in_ios_privacy.bundle", ); diff --git a/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 8e83ef7194ee..a937250e8c07 100644 --- a/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/packages/google_sign_in/google_sign_in_ios/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ ['precache', '--ios'], + [ + 'precache', + if (precacheIOS) + '--ios', + if (precacheMacOS) + '--macos', + ], ); - if (exitCode != 0) { + if (precacheExitCode != 0) { throw ToolExit(_exitPrecacheFailed); } - } - if (getBoolArg(platformMacOS)) { - final int exitCode = await processRunner.runAndStream( - flutterCommand, - ['precache', '--macos'], + final int updateUpdateExitCode = await processRunner.runAndStream( + 'pod', + ['repo', 'update'], ); - if (exitCode != 0) { - throw ToolExit(_exitPrecacheFailed); + if (updateUpdateExitCode != 0) { + throw ToolExit(_exitPodUpdateFailed); } } } diff --git a/script/tool/test/fetch_deps_command_test.dart b/script/tool/test/fetch_deps_command_test.dart index f0696e0977c2..e3acecc234d8 100644 --- a/script/tool/test/fetch_deps_command_test.dart +++ b/script/tool/test/fetch_deps_command_test.dart @@ -409,6 +409,11 @@ void main() { ['precache', '--ios'], null, ), + const ProcessCall( + 'pod', + ['repo', 'update'], + null, + ), for (final Directory directory in exampleDirs) ProcessCall( 'flutter', @@ -436,6 +441,7 @@ void main() { .mockProcessesForExecutable[getFlutterCommand(mockPlatform)] = [ FakeProcessInfo(MockProcess(), ['precache']), + FakeProcessInfo(MockProcess(), ['repo', 'update']), FakeProcessInfo(MockProcess(exitCode: 1), ['build', 'ios', '--config-only']), ]; @@ -516,6 +522,11 @@ void main() { ['precache', '--macos'], null, ), + const ProcessCall( + 'pod', + ['repo', 'update'], + null, + ), for (final Directory directory in exampleDirs) ProcessCall( 'flutter', @@ -543,6 +554,7 @@ void main() { .mockProcessesForExecutable[getFlutterCommand(mockPlatform)] = [ FakeProcessInfo(MockProcess(), ['precache']), + FakeProcessInfo(MockProcess(), ['repo', 'update']), FakeProcessInfo(MockProcess(exitCode: 1), ['build', 'macos', '--config-only']), ];