diff --git a/.github/workflows/flutter-ci.yml b/.github/workflows/flutter-ci.yml index a148ca5cde..391aa83157 100644 --- a/.github/workflows/flutter-ci.yml +++ b/.github/workflows/flutter-ci.yml @@ -23,7 +23,7 @@ jobs: strategy: fail-fast: false matrix: - flutter_version: [stable, beta, master] + flutter_version: [stable, beta, main] os: [ubuntu-latest, macos-latest, windows-latest] steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 diff --git a/adaptive_app/codelab_rebuild.yaml b/adaptive_app/codelab_rebuild.yaml index 454bd5d349..f52b5740de 100644 --- a/adaptive_app/codelab_rebuild.yaml +++ b/adaptive_app/codelab_rebuild.yaml @@ -1314,9 +1314,9 @@ steps: - name: flutter pub get path: adaptive_app flutter: pub get - - name: Add googleapis_auth google_sign_in extension_google_sign_in_as_googleapis_auth + - name: Add googleapis_auth google_sign_in extension_google_sign_in_as_googleapis_auth logging path: adaptive_app - flutter: pub add googleapis_auth google_sign_in:^6.3.0 extension_google_sign_in_as_googleapis_auth:^2.0.13 + flutter: pub add googleapis_auth google_sign_in extension_google_sign_in_as_googleapis_auth logging - name: Patch .gitignore path: adaptive_app/.gitignore patch-u: | @@ -1336,6 +1336,7 @@ steps: // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. + import 'dart:async'; import 'dart:io' show Platform; import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart'; @@ -1344,11 +1345,14 @@ steps: import 'package:go_router/go_router.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:googleapis_auth/auth_io.dart'; + import 'package:logging/logging.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/link.dart'; import 'app_state.dart'; + final _log = Logger('AdaptiveLogin'); + typedef _AdaptiveLoginButtonWidget = Widget Function({required VoidCallback? onPressed}); @@ -1395,21 +1399,44 @@ steps: @override initState() { super.initState(); - _googleSignIn = GoogleSignIn(scopes: widget.scopes); - _googleSignIn.onCurrentUserChanged.listen((account) { - if (account != null) { - _googleSignIn.authenticatedClient().then((authClient) { - final context = this.context; - if (authClient != null && context.mounted) { - context.read().authClient = authClient; - context.go('/'); - } - }); + _googleSignIn = GoogleSignIn.instance; + _googleSignIn.initialize(); + _authEventsSubscription = _googleSignIn.authenticationEvents.listen(( + event, + ) async { + _log.fine('Google Sign-In authentication event: $event'); + if (event is GoogleSignInAuthenticationEventSignIn) { + final googleSignInClientAuthorization = await event + .user + .authorizationClient + .authorizationForScopes(widget.scopes); + if (googleSignInClientAuthorization == null) { + _log.warning('Google Sign-In authenticated client creation failed'); + return; + } + _log.fine('Google Sign-In authenticated client created'); + final context = this.context; + if (context.mounted) { + context.read().authClient = + googleSignInClientAuthorization.authClient(scopes: widget.scopes); + context.go('/'); + } } }); + + // Check if user is already authenticated + _log.fine('Attempting lightweight authentication'); + _googleSignIn.attemptLightweightAuthentication(); + } + + @override + dispose() { + _authEventsSubscription.cancel(); + super.dispose(); } late final GoogleSignIn _googleSignIn; + late final StreamSubscription _authEventsSubscription; @override Widget build(BuildContext context) { @@ -1417,7 +1444,7 @@ steps: body: Center( child: widget.button( onPressed: () { - _googleSignIn.signIn(); + _googleSignIn.authenticate(); }, ), ), diff --git a/adaptive_app/step_03/pubspec.yaml b/adaptive_app/step_03/pubspec.yaml index ff1c884cf7..7ea8efeea2 100644 --- a/adaptive_app/step_03/pubspec.yaml +++ b/adaptive_app/step_03/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj index 90b81ddee4..f8db371388 100644 --- a/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_04/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 4E0716EAC83F2D0C1CC400CF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 053DDB0D6035D5D73AEA7735 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D919CBDEA8199BF7F3037A0F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BAD4B0D9B4AF560DF64D9263 /* Pods_Runner.framework */; }; - EE4E0321C6D207299A309F85 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D54E47CD81DC1ACCE65DE836 /* Pods_RunnerTests.framework */; }; + EE6BE03F70791DBB6599A696 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F7CA32DC3716304057C34EF /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,16 +42,22 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 053DDB0D6035D5D73AEA7735 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0E47D2D6372F1EA1479545C3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2A67537E1535AA793826B3DF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 265CD2E608F3A3444F4E5A45 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 40686FFCE5908685B6BBA593 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3FE0C414BF043FD99099BC46 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4853E61045FC0FE33293C2EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5980A8F215CF08A2FC8BA49C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6F7CA32DC3716304057C34EF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7EEEC62B0BCF9081BC5B2100 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -59,28 +65,22 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - BAD4B0D9B4AF560DF64D9263 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C8A8B46A8A11BC12852BCCC3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D54E47CD81DC1ACCE65DE836 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E0B57B214410ED2D0D1B4F65 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - ECD5DBF924B10E098CD32513 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FAF26331C8E9E35EF24B441F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 12F33DDBDEEA8B4B36AF936F /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EE4E0321C6D207299A309F85 /* Pods_RunnerTests.framework in Frameworks */, + 4E0716EAC83F2D0C1CC400CF /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + ED7B18733E2AA1806F4D3AEB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D919CBDEA8199BF7F3037A0F /* Pods_Runner.framework in Frameworks */, + EE6BE03F70791DBB6599A696 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,29 @@ path = RunnerTests; sourceTree = ""; }; + 3E0F511CACC70F89B3E97F8E /* Pods */ = { + isa = PBXGroup; + children = ( + 4853E61045FC0FE33293C2EF /* Pods-Runner.debug.xcconfig */, + 265CD2E608F3A3444F4E5A45 /* Pods-Runner.release.xcconfig */, + 3FE0C414BF043FD99099BC46 /* Pods-Runner.profile.xcconfig */, + 0E47D2D6372F1EA1479545C3 /* Pods-RunnerTests.debug.xcconfig */, + 5980A8F215CF08A2FC8BA49C /* Pods-RunnerTests.release.xcconfig */, + 7EEEC62B0BCF9081BC5B2100 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 95A17A214CCEB179E53F791F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 053DDB0D6035D5D73AEA7735 /* Pods_Runner.framework */, + 6F7CA32DC3716304057C34EF /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - DF41E4CC229A1E4D29531112 /* Pods */, - CD42BD1304B063555D1E6C1A /* Frameworks */, + 3E0F511CACC70F89B3E97F8E /* Pods */, + 95A17A214CCEB179E53F791F /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - CD42BD1304B063555D1E6C1A /* Frameworks */ = { - isa = PBXGroup; - children = ( - BAD4B0D9B4AF560DF64D9263 /* Pods_Runner.framework */, - D54E47CD81DC1ACCE65DE836 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - DF41E4CC229A1E4D29531112 /* Pods */ = { - isa = PBXGroup; - children = ( - E0B57B214410ED2D0D1B4F65 /* Pods-Runner.debug.xcconfig */, - 40686FFCE5908685B6BBA593 /* Pods-Runner.release.xcconfig */, - ECD5DBF924B10E098CD32513 /* Pods-Runner.profile.xcconfig */, - FAF26331C8E9E35EF24B441F /* Pods-RunnerTests.debug.xcconfig */, - 2A67537E1535AA793826B3DF /* Pods-RunnerTests.release.xcconfig */, - C8A8B46A8A11BC12852BCCC3 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 13BDD1348EFEB68B9E4F8FAC /* [CP] Check Pods Manifest.lock */, + B9C040D6F471FDE4CEF27713 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 12F33DDBDEEA8B4B36AF936F /* Frameworks */, + ED7B18733E2AA1806F4D3AEB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 32BA1ACDB39011AE658B75F8 /* [CP] Check Pods Manifest.lock */, + 8FC7F70C5C506C9A9B61EEBE /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 92F74D0528FD4EFF565C7283 /* [CP] Embed Pods Frameworks */, + 768DBB09ADB07F7178D01711 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,29 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13BDD1348EFEB68B9E4F8FAC /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 768DBB09ADB07F7178D01711 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 32BA1ACDB39011AE658B75F8 /* [CP] Check Pods Manifest.lock */ = { + 8FC7F70C5C506C9A9B61EEBE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -314,53 +325,42 @@ 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; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 92F74D0528FD4EFF565C7283 /* [CP] Embed Pods Frameworks */ = { + B9C040D6F471FDE4CEF27713 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FAF26331C8E9E35EF24B441F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0E47D2D6372F1EA1479545C3 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A67537E1535AA793826B3DF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5980A8F215CF08A2FC8BA49C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C8A8B46A8A11BC12852BCCC3 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 7EEEC62B0BCF9081BC5B2100 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj index ece5a83eaa..ba9c2dcab0 100644 --- a/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_04/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E65984B92F9DA1700D464B4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAE39E0772F19B8E21506327 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7BDB475EAE12196F47FFEACF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A76F6D0F9A9ECF5F372C2225 /* Pods_Runner.framework */; }; - E9B346FCCB84F4EA1D68C334 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 730B02D05566FDB3B0AEDB76 /* Pods_RunnerTests.framework */; }; + F52EB5165F1C7C2D38209D93 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD697A023332DDE3CA43AA09 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14895E96298C624464DBFB8C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 29C543CCDB05C79A3F587798 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5FD9945727C4F1E36849A9F7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 730B02D05566FDB3B0AEDB76 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4C6A8B679BEF4A510B37469B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 744086562EDCD1381D9EDE4E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 88BE8072AAD162173C43127D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 93D3EFDC14627833E7B468BE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9B72268C6ED12489C79A9053 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A76F6D0F9A9ECF5F372C2225 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E0BA8669BFAF0D7D3530D231 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A4BAFE7543A8448A363D4CD4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + BD697A023332DDE3CA43AA09 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CC7975920D9F98F8D5464A5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D134F95F7D3E78CF95754E69 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FAE39E0772F19B8E21506327 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B346FCCB84F4EA1D68C334 /* Pods_RunnerTests.framework in Frameworks */, + F52EB5165F1C7C2D38209D93 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7BDB475EAE12196F47FFEACF /* Pods_Runner.framework in Frameworks */, + 2E65984B92F9DA1700D464B4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 224712E10B6605416B0937C0 /* Pods */ = { + isa = PBXGroup; + children = ( + 744086562EDCD1381D9EDE4E /* Pods-Runner.debug.xcconfig */, + D134F95F7D3E78CF95754E69 /* Pods-Runner.release.xcconfig */, + CC7975920D9F98F8D5464A5D /* Pods-Runner.profile.xcconfig */, + 93D3EFDC14627833E7B468BE /* Pods-RunnerTests.debug.xcconfig */, + 4C6A8B679BEF4A510B37469B /* Pods-RunnerTests.release.xcconfig */, + A4BAFE7543A8448A363D4CD4 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D9486C6BFEBDC468325B5CA3 /* Pods */, + 224712E10B6605416B0937C0 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A76F6D0F9A9ECF5F372C2225 /* Pods_Runner.framework */, - 730B02D05566FDB3B0AEDB76 /* Pods_RunnerTests.framework */, + FAE39E0772F19B8E21506327 /* Pods_Runner.framework */, + BD697A023332DDE3CA43AA09 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D9486C6BFEBDC468325B5CA3 /* Pods */ = { - isa = PBXGroup; - children = ( - 29C543CCDB05C79A3F587798 /* Pods-Runner.debug.xcconfig */, - E0BA8669BFAF0D7D3530D231 /* Pods-Runner.release.xcconfig */, - 5FD9945727C4F1E36849A9F7 /* Pods-Runner.profile.xcconfig */, - 14895E96298C624464DBFB8C /* Pods-RunnerTests.debug.xcconfig */, - 9B72268C6ED12489C79A9053 /* Pods-RunnerTests.release.xcconfig */, - 88BE8072AAD162173C43127D /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C174CBC3E8D2724091838EDC /* [CP] Check Pods Manifest.lock */, + 1A3629794040C6C9B1130F43 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FA3DA86855CBE4C6E115CE10 /* [CP] Check Pods Manifest.lock */, + 6163615AE6F29DED3B8F08B5 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - D76E5D624E19B5A423D1EBD9 /* [CP] Embed Pods Frameworks */, + 4EEF651504F28267374266AC /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 1A3629794040C6C9B1130F43 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + 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; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - C174CBC3E8D2724091838EDC /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D76E5D624E19B5A423D1EBD9 /* [CP] Embed Pods Frameworks */ = { + 4EEF651504F28267374266AC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FA3DA86855CBE4C6E115CE10 /* [CP] Check Pods Manifest.lock */ = { + 6163615AE6F29DED3B8F08B5 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 14895E96298C624464DBFB8C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 93D3EFDC14627833E7B468BE /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9B72268C6ED12489C79A9053 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4C6A8B679BEF4A510B37469B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 88BE8072AAD162173C43127D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = A4BAFE7543A8448A363D4CD4 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_04/pubspec.yaml b/adaptive_app/step_04/pubspec.yaml index 1d84aafe7f..9297094680 100644 --- a/adaptive_app/step_04/pubspec.yaml +++ b/adaptive_app/step_04/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj index 90b81ddee4..f8db371388 100644 --- a/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_05/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 4E0716EAC83F2D0C1CC400CF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 053DDB0D6035D5D73AEA7735 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D919CBDEA8199BF7F3037A0F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BAD4B0D9B4AF560DF64D9263 /* Pods_Runner.framework */; }; - EE4E0321C6D207299A309F85 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D54E47CD81DC1ACCE65DE836 /* Pods_RunnerTests.framework */; }; + EE6BE03F70791DBB6599A696 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F7CA32DC3716304057C34EF /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,16 +42,22 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 053DDB0D6035D5D73AEA7735 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0E47D2D6372F1EA1479545C3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2A67537E1535AA793826B3DF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 265CD2E608F3A3444F4E5A45 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 40686FFCE5908685B6BBA593 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3FE0C414BF043FD99099BC46 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4853E61045FC0FE33293C2EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5980A8F215CF08A2FC8BA49C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6F7CA32DC3716304057C34EF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7EEEC62B0BCF9081BC5B2100 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -59,28 +65,22 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - BAD4B0D9B4AF560DF64D9263 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C8A8B46A8A11BC12852BCCC3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D54E47CD81DC1ACCE65DE836 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E0B57B214410ED2D0D1B4F65 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - ECD5DBF924B10E098CD32513 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FAF26331C8E9E35EF24B441F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 12F33DDBDEEA8B4B36AF936F /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EE4E0321C6D207299A309F85 /* Pods_RunnerTests.framework in Frameworks */, + 4E0716EAC83F2D0C1CC400CF /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + ED7B18733E2AA1806F4D3AEB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D919CBDEA8199BF7F3037A0F /* Pods_Runner.framework in Frameworks */, + EE6BE03F70791DBB6599A696 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,29 @@ path = RunnerTests; sourceTree = ""; }; + 3E0F511CACC70F89B3E97F8E /* Pods */ = { + isa = PBXGroup; + children = ( + 4853E61045FC0FE33293C2EF /* Pods-Runner.debug.xcconfig */, + 265CD2E608F3A3444F4E5A45 /* Pods-Runner.release.xcconfig */, + 3FE0C414BF043FD99099BC46 /* Pods-Runner.profile.xcconfig */, + 0E47D2D6372F1EA1479545C3 /* Pods-RunnerTests.debug.xcconfig */, + 5980A8F215CF08A2FC8BA49C /* Pods-RunnerTests.release.xcconfig */, + 7EEEC62B0BCF9081BC5B2100 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 95A17A214CCEB179E53F791F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 053DDB0D6035D5D73AEA7735 /* Pods_Runner.framework */, + 6F7CA32DC3716304057C34EF /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - DF41E4CC229A1E4D29531112 /* Pods */, - CD42BD1304B063555D1E6C1A /* Frameworks */, + 3E0F511CACC70F89B3E97F8E /* Pods */, + 95A17A214CCEB179E53F791F /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - CD42BD1304B063555D1E6C1A /* Frameworks */ = { - isa = PBXGroup; - children = ( - BAD4B0D9B4AF560DF64D9263 /* Pods_Runner.framework */, - D54E47CD81DC1ACCE65DE836 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - DF41E4CC229A1E4D29531112 /* Pods */ = { - isa = PBXGroup; - children = ( - E0B57B214410ED2D0D1B4F65 /* Pods-Runner.debug.xcconfig */, - 40686FFCE5908685B6BBA593 /* Pods-Runner.release.xcconfig */, - ECD5DBF924B10E098CD32513 /* Pods-Runner.profile.xcconfig */, - FAF26331C8E9E35EF24B441F /* Pods-RunnerTests.debug.xcconfig */, - 2A67537E1535AA793826B3DF /* Pods-RunnerTests.release.xcconfig */, - C8A8B46A8A11BC12852BCCC3 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 13BDD1348EFEB68B9E4F8FAC /* [CP] Check Pods Manifest.lock */, + B9C040D6F471FDE4CEF27713 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 12F33DDBDEEA8B4B36AF936F /* Frameworks */, + ED7B18733E2AA1806F4D3AEB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 32BA1ACDB39011AE658B75F8 /* [CP] Check Pods Manifest.lock */, + 8FC7F70C5C506C9A9B61EEBE /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 92F74D0528FD4EFF565C7283 /* [CP] Embed Pods Frameworks */, + 768DBB09ADB07F7178D01711 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,29 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13BDD1348EFEB68B9E4F8FAC /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 768DBB09ADB07F7178D01711 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 32BA1ACDB39011AE658B75F8 /* [CP] Check Pods Manifest.lock */ = { + 8FC7F70C5C506C9A9B61EEBE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -314,53 +325,42 @@ 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; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 92F74D0528FD4EFF565C7283 /* [CP] Embed Pods Frameworks */ = { + B9C040D6F471FDE4CEF27713 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FAF26331C8E9E35EF24B441F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0E47D2D6372F1EA1479545C3 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A67537E1535AA793826B3DF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5980A8F215CF08A2FC8BA49C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C8A8B46A8A11BC12852BCCC3 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 7EEEC62B0BCF9081BC5B2100 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj index ece5a83eaa..ba9c2dcab0 100644 --- a/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_05/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E65984B92F9DA1700D464B4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAE39E0772F19B8E21506327 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7BDB475EAE12196F47FFEACF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A76F6D0F9A9ECF5F372C2225 /* Pods_Runner.framework */; }; - E9B346FCCB84F4EA1D68C334 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 730B02D05566FDB3B0AEDB76 /* Pods_RunnerTests.framework */; }; + F52EB5165F1C7C2D38209D93 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD697A023332DDE3CA43AA09 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14895E96298C624464DBFB8C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 29C543CCDB05C79A3F587798 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5FD9945727C4F1E36849A9F7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 730B02D05566FDB3B0AEDB76 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4C6A8B679BEF4A510B37469B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 744086562EDCD1381D9EDE4E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 88BE8072AAD162173C43127D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 93D3EFDC14627833E7B468BE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9B72268C6ED12489C79A9053 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A76F6D0F9A9ECF5F372C2225 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E0BA8669BFAF0D7D3530D231 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A4BAFE7543A8448A363D4CD4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + BD697A023332DDE3CA43AA09 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CC7975920D9F98F8D5464A5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D134F95F7D3E78CF95754E69 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FAE39E0772F19B8E21506327 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B346FCCB84F4EA1D68C334 /* Pods_RunnerTests.framework in Frameworks */, + F52EB5165F1C7C2D38209D93 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7BDB475EAE12196F47FFEACF /* Pods_Runner.framework in Frameworks */, + 2E65984B92F9DA1700D464B4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 224712E10B6605416B0937C0 /* Pods */ = { + isa = PBXGroup; + children = ( + 744086562EDCD1381D9EDE4E /* Pods-Runner.debug.xcconfig */, + D134F95F7D3E78CF95754E69 /* Pods-Runner.release.xcconfig */, + CC7975920D9F98F8D5464A5D /* Pods-Runner.profile.xcconfig */, + 93D3EFDC14627833E7B468BE /* Pods-RunnerTests.debug.xcconfig */, + 4C6A8B679BEF4A510B37469B /* Pods-RunnerTests.release.xcconfig */, + A4BAFE7543A8448A363D4CD4 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D9486C6BFEBDC468325B5CA3 /* Pods */, + 224712E10B6605416B0937C0 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A76F6D0F9A9ECF5F372C2225 /* Pods_Runner.framework */, - 730B02D05566FDB3B0AEDB76 /* Pods_RunnerTests.framework */, + FAE39E0772F19B8E21506327 /* Pods_Runner.framework */, + BD697A023332DDE3CA43AA09 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D9486C6BFEBDC468325B5CA3 /* Pods */ = { - isa = PBXGroup; - children = ( - 29C543CCDB05C79A3F587798 /* Pods-Runner.debug.xcconfig */, - E0BA8669BFAF0D7D3530D231 /* Pods-Runner.release.xcconfig */, - 5FD9945727C4F1E36849A9F7 /* Pods-Runner.profile.xcconfig */, - 14895E96298C624464DBFB8C /* Pods-RunnerTests.debug.xcconfig */, - 9B72268C6ED12489C79A9053 /* Pods-RunnerTests.release.xcconfig */, - 88BE8072AAD162173C43127D /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C174CBC3E8D2724091838EDC /* [CP] Check Pods Manifest.lock */, + 1A3629794040C6C9B1130F43 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FA3DA86855CBE4C6E115CE10 /* [CP] Check Pods Manifest.lock */, + 6163615AE6F29DED3B8F08B5 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - D76E5D624E19B5A423D1EBD9 /* [CP] Embed Pods Frameworks */, + 4EEF651504F28267374266AC /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 1A3629794040C6C9B1130F43 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + 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; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - C174CBC3E8D2724091838EDC /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D76E5D624E19B5A423D1EBD9 /* [CP] Embed Pods Frameworks */ = { + 4EEF651504F28267374266AC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FA3DA86855CBE4C6E115CE10 /* [CP] Check Pods Manifest.lock */ = { + 6163615AE6F29DED3B8F08B5 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 14895E96298C624464DBFB8C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 93D3EFDC14627833E7B468BE /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9B72268C6ED12489C79A9053 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4C6A8B679BEF4A510B37469B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 88BE8072AAD162173C43127D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = A4BAFE7543A8448A363D4CD4 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_05/pubspec.yaml b/adaptive_app/step_05/pubspec.yaml index e2d5767245..09de8d36aa 100644 --- a/adaptive_app/step_05/pubspec.yaml +++ b/adaptive_app/step_05/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj index 90b81ddee4..f8db371388 100644 --- a/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_06/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 4E0716EAC83F2D0C1CC400CF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 053DDB0D6035D5D73AEA7735 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D919CBDEA8199BF7F3037A0F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BAD4B0D9B4AF560DF64D9263 /* Pods_Runner.framework */; }; - EE4E0321C6D207299A309F85 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D54E47CD81DC1ACCE65DE836 /* Pods_RunnerTests.framework */; }; + EE6BE03F70791DBB6599A696 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F7CA32DC3716304057C34EF /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,16 +42,22 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 053DDB0D6035D5D73AEA7735 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0E47D2D6372F1EA1479545C3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2A67537E1535AA793826B3DF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 265CD2E608F3A3444F4E5A45 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 40686FFCE5908685B6BBA593 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3FE0C414BF043FD99099BC46 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4853E61045FC0FE33293C2EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5980A8F215CF08A2FC8BA49C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6F7CA32DC3716304057C34EF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7EEEC62B0BCF9081BC5B2100 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -59,28 +65,22 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - BAD4B0D9B4AF560DF64D9263 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C8A8B46A8A11BC12852BCCC3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D54E47CD81DC1ACCE65DE836 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E0B57B214410ED2D0D1B4F65 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - ECD5DBF924B10E098CD32513 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FAF26331C8E9E35EF24B441F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 12F33DDBDEEA8B4B36AF936F /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EE4E0321C6D207299A309F85 /* Pods_RunnerTests.framework in Frameworks */, + 4E0716EAC83F2D0C1CC400CF /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + ED7B18733E2AA1806F4D3AEB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D919CBDEA8199BF7F3037A0F /* Pods_Runner.framework in Frameworks */, + EE6BE03F70791DBB6599A696 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,29 @@ path = RunnerTests; sourceTree = ""; }; + 3E0F511CACC70F89B3E97F8E /* Pods */ = { + isa = PBXGroup; + children = ( + 4853E61045FC0FE33293C2EF /* Pods-Runner.debug.xcconfig */, + 265CD2E608F3A3444F4E5A45 /* Pods-Runner.release.xcconfig */, + 3FE0C414BF043FD99099BC46 /* Pods-Runner.profile.xcconfig */, + 0E47D2D6372F1EA1479545C3 /* Pods-RunnerTests.debug.xcconfig */, + 5980A8F215CF08A2FC8BA49C /* Pods-RunnerTests.release.xcconfig */, + 7EEEC62B0BCF9081BC5B2100 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 95A17A214CCEB179E53F791F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 053DDB0D6035D5D73AEA7735 /* Pods_Runner.framework */, + 6F7CA32DC3716304057C34EF /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - DF41E4CC229A1E4D29531112 /* Pods */, - CD42BD1304B063555D1E6C1A /* Frameworks */, + 3E0F511CACC70F89B3E97F8E /* Pods */, + 95A17A214CCEB179E53F791F /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - CD42BD1304B063555D1E6C1A /* Frameworks */ = { - isa = PBXGroup; - children = ( - BAD4B0D9B4AF560DF64D9263 /* Pods_Runner.framework */, - D54E47CD81DC1ACCE65DE836 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - DF41E4CC229A1E4D29531112 /* Pods */ = { - isa = PBXGroup; - children = ( - E0B57B214410ED2D0D1B4F65 /* Pods-Runner.debug.xcconfig */, - 40686FFCE5908685B6BBA593 /* Pods-Runner.release.xcconfig */, - ECD5DBF924B10E098CD32513 /* Pods-Runner.profile.xcconfig */, - FAF26331C8E9E35EF24B441F /* Pods-RunnerTests.debug.xcconfig */, - 2A67537E1535AA793826B3DF /* Pods-RunnerTests.release.xcconfig */, - C8A8B46A8A11BC12852BCCC3 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 13BDD1348EFEB68B9E4F8FAC /* [CP] Check Pods Manifest.lock */, + B9C040D6F471FDE4CEF27713 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 12F33DDBDEEA8B4B36AF936F /* Frameworks */, + ED7B18733E2AA1806F4D3AEB /* Frameworks */, ); buildRules = ( ); @@ -191,14 +191,14 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 32BA1ACDB39011AE658B75F8 /* [CP] Check Pods Manifest.lock */, + 8FC7F70C5C506C9A9B61EEBE /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 92F74D0528FD4EFF565C7283 /* [CP] Embed Pods Frameworks */, + 768DBB09ADB07F7178D01711 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -270,29 +270,40 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13BDD1348EFEB68B9E4F8FAC /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 768DBB09ADB07F7178D01711 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 32BA1ACDB39011AE658B75F8 /* [CP] Check Pods Manifest.lock */ = { + 8FC7F70C5C506C9A9B61EEBE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -314,53 +325,42 @@ 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; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Thin Binary"; + name = "Run Script"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 92F74D0528FD4EFF565C7283 /* [CP] Embed Pods Frameworks */ = { + B9C040D6F471FDE4CEF27713 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - 9740EEB61CF901F6004384FC /* Run Script */ = { - isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; - buildActionMask = 2147483647; - files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Run Script"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -487,7 +487,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FAF26331C8E9E35EF24B441F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0E47D2D6372F1EA1479545C3 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -505,7 +505,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A67537E1535AA793826B3DF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5980A8F215CF08A2FC8BA49C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -521,7 +521,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C8A8B46A8A11BC12852BCCC3 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 7EEEC62B0BCF9081BC5B2100 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj index ece5a83eaa..ba9c2dcab0 100644 --- a/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_06/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E65984B92F9DA1700D464B4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAE39E0772F19B8E21506327 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7BDB475EAE12196F47FFEACF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A76F6D0F9A9ECF5F372C2225 /* Pods_Runner.framework */; }; - E9B346FCCB84F4EA1D68C334 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 730B02D05566FDB3B0AEDB76 /* Pods_RunnerTests.framework */; }; + F52EB5165F1C7C2D38209D93 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD697A023332DDE3CA43AA09 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14895E96298C624464DBFB8C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 29C543CCDB05C79A3F587798 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5FD9945727C4F1E36849A9F7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 730B02D05566FDB3B0AEDB76 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4C6A8B679BEF4A510B37469B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 744086562EDCD1381D9EDE4E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 88BE8072AAD162173C43127D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 93D3EFDC14627833E7B468BE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9B72268C6ED12489C79A9053 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A76F6D0F9A9ECF5F372C2225 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E0BA8669BFAF0D7D3530D231 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A4BAFE7543A8448A363D4CD4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + BD697A023332DDE3CA43AA09 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CC7975920D9F98F8D5464A5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D134F95F7D3E78CF95754E69 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FAE39E0772F19B8E21506327 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B346FCCB84F4EA1D68C334 /* Pods_RunnerTests.framework in Frameworks */, + F52EB5165F1C7C2D38209D93 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7BDB475EAE12196F47FFEACF /* Pods_Runner.framework in Frameworks */, + 2E65984B92F9DA1700D464B4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 224712E10B6605416B0937C0 /* Pods */ = { + isa = PBXGroup; + children = ( + 744086562EDCD1381D9EDE4E /* Pods-Runner.debug.xcconfig */, + D134F95F7D3E78CF95754E69 /* Pods-Runner.release.xcconfig */, + CC7975920D9F98F8D5464A5D /* Pods-Runner.profile.xcconfig */, + 93D3EFDC14627833E7B468BE /* Pods-RunnerTests.debug.xcconfig */, + 4C6A8B679BEF4A510B37469B /* Pods-RunnerTests.release.xcconfig */, + A4BAFE7543A8448A363D4CD4 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D9486C6BFEBDC468325B5CA3 /* Pods */, + 224712E10B6605416B0937C0 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A76F6D0F9A9ECF5F372C2225 /* Pods_Runner.framework */, - 730B02D05566FDB3B0AEDB76 /* Pods_RunnerTests.framework */, + FAE39E0772F19B8E21506327 /* Pods_Runner.framework */, + BD697A023332DDE3CA43AA09 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D9486C6BFEBDC468325B5CA3 /* Pods */ = { - isa = PBXGroup; - children = ( - 29C543CCDB05C79A3F587798 /* Pods-Runner.debug.xcconfig */, - E0BA8669BFAF0D7D3530D231 /* Pods-Runner.release.xcconfig */, - 5FD9945727C4F1E36849A9F7 /* Pods-Runner.profile.xcconfig */, - 14895E96298C624464DBFB8C /* Pods-RunnerTests.debug.xcconfig */, - 9B72268C6ED12489C79A9053 /* Pods-RunnerTests.release.xcconfig */, - 88BE8072AAD162173C43127D /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C174CBC3E8D2724091838EDC /* [CP] Check Pods Manifest.lock */, + 1A3629794040C6C9B1130F43 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,13 +234,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FA3DA86855CBE4C6E115CE10 /* [CP] Check Pods Manifest.lock */, + 6163615AE6F29DED3B8F08B5 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - D76E5D624E19B5A423D1EBD9 /* [CP] Embed Pods Frameworks */, + 4EEF651504F28267374266AC /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -323,67 +323,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 1A3629794040C6C9B1130F43 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + 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; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - C174CBC3E8D2724091838EDC /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - D76E5D624E19B5A423D1EBD9 /* [CP] Embed Pods Frameworks */ = { + 4EEF651504F28267374266AC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -400,7 +400,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FA3DA86855CBE4C6E115CE10 /* [CP] Check Pods Manifest.lock */ = { + 6163615AE6F29DED3B8F08B5 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -473,7 +473,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 14895E96298C624464DBFB8C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 93D3EFDC14627833E7B468BE /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -488,7 +488,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9B72268C6ED12489C79A9053 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4C6A8B679BEF4A510B37469B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -503,7 +503,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 88BE8072AAD162173C43127D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = A4BAFE7543A8448A363D4CD4 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_06/pubspec.yaml b/adaptive_app/step_06/pubspec.yaml index e2d5767245..09de8d36aa 100644 --- a/adaptive_app/step_06/pubspec.yaml +++ b/adaptive_app/step_06/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions diff --git a/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml b/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml index a0c6704f27..cddd653720 100644 --- a/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml +++ b/adaptive_app/step_06/yt_cors_proxy/pubspec.yaml @@ -3,7 +3,7 @@ description: A YouTube CORS Proxy Server. version: 1.0.0 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: shelf: ^1.4.2 diff --git a/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj index 41079d2162..dafe584694 100644 --- a/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_07/ios/Runner.xcodeproj/project.pbxproj @@ -10,12 +10,12 @@ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 4E0716EAC83F2D0C1CC400CF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 053DDB0D6035D5D73AEA7735 /* Pods_Runner.framework */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; - D919CBDEA8199BF7F3037A0F /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BAD4B0D9B4AF560DF64D9263 /* Pods_Runner.framework */; }; - EE4E0321C6D207299A309F85 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D54E47CD81DC1ACCE65DE836 /* Pods_RunnerTests.framework */; }; + EE6BE03F70791DBB6599A696 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F7CA32DC3716304057C34EF /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -42,16 +42,22 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 053DDB0D6035D5D73AEA7735 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0E47D2D6372F1EA1479545C3 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 2A67537E1535AA793826B3DF /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 265CD2E608F3A3444F4E5A45 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 40686FFCE5908685B6BBA593 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 3FE0C414BF043FD99099BC46 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 4853E61045FC0FE33293C2EF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 5980A8F215CF08A2FC8BA49C /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 6F7CA32DC3716304057C34EF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7EEEC62B0BCF9081BC5B2100 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -59,28 +65,22 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - BAD4B0D9B4AF560DF64D9263 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C8A8B46A8A11BC12852BCCC3 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; - D54E47CD81DC1ACCE65DE836 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E0B57B214410ED2D0D1B4F65 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - ECD5DBF924B10E098CD32513 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - FAF26331C8E9E35EF24B441F /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 12F33DDBDEEA8B4B36AF936F /* Frameworks */ = { + 97C146EB1CF9000F007C117D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EE4E0321C6D207299A309F85 /* Pods_RunnerTests.framework in Frameworks */, + 4E0716EAC83F2D0C1CC400CF /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97C146EB1CF9000F007C117D /* Frameworks */ = { + ED7B18733E2AA1806F4D3AEB /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D919CBDEA8199BF7F3037A0F /* Pods_Runner.framework in Frameworks */, + EE6BE03F70791DBB6599A696 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -95,6 +95,29 @@ path = RunnerTests; sourceTree = ""; }; + 3E0F511CACC70F89B3E97F8E /* Pods */ = { + isa = PBXGroup; + children = ( + 4853E61045FC0FE33293C2EF /* Pods-Runner.debug.xcconfig */, + 265CD2E608F3A3444F4E5A45 /* Pods-Runner.release.xcconfig */, + 3FE0C414BF043FD99099BC46 /* Pods-Runner.profile.xcconfig */, + 0E47D2D6372F1EA1479545C3 /* Pods-RunnerTests.debug.xcconfig */, + 5980A8F215CF08A2FC8BA49C /* Pods-RunnerTests.release.xcconfig */, + 7EEEC62B0BCF9081BC5B2100 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 95A17A214CCEB179E53F791F /* Frameworks */ = { + isa = PBXGroup; + children = ( + 053DDB0D6035D5D73AEA7735 /* Pods_Runner.framework */, + 6F7CA32DC3716304057C34EF /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -113,8 +136,8 @@ 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, 331C8082294A63A400263BE5 /* RunnerTests */, - DF41E4CC229A1E4D29531112 /* Pods */, - CD42BD1304B063555D1E6C1A /* Frameworks */, + 3E0F511CACC70F89B3E97F8E /* Pods */, + 95A17A214CCEB179E53F791F /* Frameworks */, ); sourceTree = ""; }; @@ -142,29 +165,6 @@ path = Runner; sourceTree = ""; }; - CD42BD1304B063555D1E6C1A /* Frameworks */ = { - isa = PBXGroup; - children = ( - BAD4B0D9B4AF560DF64D9263 /* Pods_Runner.framework */, - D54E47CD81DC1ACCE65DE836 /* Pods_RunnerTests.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - DF41E4CC229A1E4D29531112 /* Pods */ = { - isa = PBXGroup; - children = ( - E0B57B214410ED2D0D1B4F65 /* Pods-Runner.debug.xcconfig */, - 40686FFCE5908685B6BBA593 /* Pods-Runner.release.xcconfig */, - ECD5DBF924B10E098CD32513 /* Pods-Runner.profile.xcconfig */, - FAF26331C8E9E35EF24B441F /* Pods-RunnerTests.debug.xcconfig */, - 2A67537E1535AA793826B3DF /* Pods-RunnerTests.release.xcconfig */, - C8A8B46A8A11BC12852BCCC3 /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -172,10 +172,10 @@ isa = PBXNativeTarget; buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - 13BDD1348EFEB68B9E4F8FAC /* [CP] Check Pods Manifest.lock */, + B9C040D6F471FDE4CEF27713 /* [CP] Check Pods Manifest.lock */, 331C807D294A63A400263BE5 /* Sources */, 331C807F294A63A400263BE5 /* Resources */, - 12F33DDBDEEA8B4B36AF936F /* Frameworks */, + ED7B18733E2AA1806F4D3AEB /* Frameworks */, ); buildRules = ( ); @@ -191,15 +191,15 @@ isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 32BA1ACDB39011AE658B75F8 /* [CP] Check Pods Manifest.lock */, + 8FC7F70C5C506C9A9B61EEBE /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - 92F74D0528FD4EFF565C7283 /* [CP] Embed Pods Frameworks */, - 9CF24DDA76AD46B3C373ED4A /* [CP] Copy Pods Resources */, + 768DBB09ADB07F7178D01711 /* [CP] Embed Pods Frameworks */, + 41CD54B19C427A4CE2C79BDE /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -271,81 +271,76 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 13BDD1348EFEB68B9E4F8FAC /* [CP] Check Pods Manifest.lock */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputFileListPaths = ( - ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); + name = "Thin Binary"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 32BA1ACDB39011AE658B75F8 /* [CP] Check Pods Manifest.lock */ = { + 41CD54B19C427A4CE2C79BDE /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", ); 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"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 768DBB09ADB07F7178D01711 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); - inputPaths = ( - "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "Thin Binary"; - outputPaths = ( + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; }; - 92F74D0528FD4EFF565C7283 /* [CP] Embed Pods Frameworks */ = { + 8FC7F70C5C506C9A9B61EEBE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + 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; }; 9740EEB61CF901F6004384FC /* Run Script */ = { @@ -363,21 +358,26 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9CF24DDA76AD46B3C373ED4A /* [CP] Copy Pods Resources */ = { + B9C040D6F471FDE4CEF27713 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -505,7 +505,7 @@ }; 331C8088294A63A400263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FAF26331C8E9E35EF24B441F /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 0E47D2D6372F1EA1479545C3 /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -523,7 +523,7 @@ }; 331C8089294A63A400263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 2A67537E1535AA793826B3DF /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 5980A8F215CF08A2FC8BA49C /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; @@ -539,7 +539,7 @@ }; 331C808A294A63A400263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C8A8B46A8A11BC12852BCCC3 /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = 7EEEC62B0BCF9081BC5B2100 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; diff --git a/adaptive_app/step_07/lib/src/adaptive_login.dart b/adaptive_app/step_07/lib/src/adaptive_login.dart index 0a002a0625..06538363c8 100644 --- a/adaptive_app/step_07/lib/src/adaptive_login.dart +++ b/adaptive_app/step_07/lib/src/adaptive_login.dart @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:async'; import 'dart:io' show Platform; import 'package:extension_google_sign_in_as_googleapis_auth/extension_google_sign_in_as_googleapis_auth.dart'; @@ -10,11 +11,14 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:google_sign_in/google_sign_in.dart'; import 'package:googleapis_auth/auth_io.dart'; +import 'package:logging/logging.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/link.dart'; import 'app_state.dart'; +final _log = Logger('AdaptiveLogin'); + typedef _AdaptiveLoginButtonWidget = Widget Function({required VoidCallback? onPressed}); @@ -61,21 +65,44 @@ class _GoogleSignInLoginState extends State<_GoogleSignInLogin> { @override initState() { super.initState(); - _googleSignIn = GoogleSignIn(scopes: widget.scopes); - _googleSignIn.onCurrentUserChanged.listen((account) { - if (account != null) { - _googleSignIn.authenticatedClient().then((authClient) { - final context = this.context; - if (authClient != null && context.mounted) { - context.read().authClient = authClient; - context.go('/'); - } - }); + _googleSignIn = GoogleSignIn.instance; + _googleSignIn.initialize(); + _authEventsSubscription = _googleSignIn.authenticationEvents.listen(( + event, + ) async { + _log.fine('Google Sign-In authentication event: $event'); + if (event is GoogleSignInAuthenticationEventSignIn) { + final googleSignInClientAuthorization = await event + .user + .authorizationClient + .authorizationForScopes(widget.scopes); + if (googleSignInClientAuthorization == null) { + _log.warning('Google Sign-In authenticated client creation failed'); + return; + } + _log.fine('Google Sign-In authenticated client created'); + final context = this.context; + if (context.mounted) { + context.read().authClient = + googleSignInClientAuthorization.authClient(scopes: widget.scopes); + context.go('/'); + } } }); + + // Check if user is already authenticated + _log.fine('Attempting lightweight authentication'); + _googleSignIn.attemptLightweightAuthentication(); + } + + @override + dispose() { + _authEventsSubscription.cancel(); + super.dispose(); } late final GoogleSignIn _googleSignIn; + late final StreamSubscription _authEventsSubscription; @override Widget build(BuildContext context) { @@ -83,7 +110,7 @@ class _GoogleSignInLoginState extends State<_GoogleSignInLogin> { body: Center( child: widget.button( onPressed: () { - _googleSignIn.signIn(); + _googleSignIn.authenticate(); }, ), ), diff --git a/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj b/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj index 1fb76e038e..5ae0374690 100644 --- a/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj +++ b/adaptive_app/step_07/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,14 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2E65984B92F9DA1700D464B4 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAE39E0772F19B8E21506327 /* Pods_Runner.framework */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 7BDB475EAE12196F47FFEACF /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A76F6D0F9A9ECF5F372C2225 /* Pods_Runner.framework */; }; - E9B346FCCB84F4EA1D68C334 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 730B02D05566FDB3B0AEDB76 /* Pods_RunnerTests.framework */; }; + F52EB5165F1C7C2D38209D93 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD697A023332DDE3CA43AA09 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -62,8 +62,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 14895E96298C624464DBFB8C /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; - 29C543CCDB05C79A3F587798 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; @@ -80,14 +78,16 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 5FD9945727C4F1E36849A9F7 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - 730B02D05566FDB3B0AEDB76 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4C6A8B679BEF4A510B37469B /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 744086562EDCD1381D9EDE4E /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 88BE8072AAD162173C43127D /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 93D3EFDC14627833E7B468BE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9B72268C6ED12489C79A9053 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; - A76F6D0F9A9ECF5F372C2225 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E0BA8669BFAF0D7D3530D231 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + A4BAFE7543A8448A363D4CD4 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + BD697A023332DDE3CA43AA09 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CC7975920D9F98F8D5464A5D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + D134F95F7D3E78CF95754E69 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + FAE39E0772F19B8E21506327 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -95,7 +95,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - E9B346FCCB84F4EA1D68C334 /* Pods_RunnerTests.framework in Frameworks */, + F52EB5165F1C7C2D38209D93 /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -103,13 +103,27 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7BDB475EAE12196F47FFEACF /* Pods_Runner.framework in Frameworks */, + 2E65984B92F9DA1700D464B4 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 224712E10B6605416B0937C0 /* Pods */ = { + isa = PBXGroup; + children = ( + 744086562EDCD1381D9EDE4E /* Pods-Runner.debug.xcconfig */, + D134F95F7D3E78CF95754E69 /* Pods-Runner.release.xcconfig */, + CC7975920D9F98F8D5464A5D /* Pods-Runner.profile.xcconfig */, + 93D3EFDC14627833E7B468BE /* Pods-RunnerTests.debug.xcconfig */, + 4C6A8B679BEF4A510B37469B /* Pods-RunnerTests.release.xcconfig */, + A4BAFE7543A8448A363D4CD4 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( @@ -137,7 +151,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - D9486C6BFEBDC468325B5CA3 /* Pods */, + 224712E10B6605416B0937C0 /* Pods */, ); sourceTree = ""; }; @@ -188,26 +202,12 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - A76F6D0F9A9ECF5F372C2225 /* Pods_Runner.framework */, - 730B02D05566FDB3B0AEDB76 /* Pods_RunnerTests.framework */, + FAE39E0772F19B8E21506327 /* Pods_Runner.framework */, + BD697A023332DDE3CA43AA09 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; }; - D9486C6BFEBDC468325B5CA3 /* Pods */ = { - isa = PBXGroup; - children = ( - 29C543CCDB05C79A3F587798 /* Pods-Runner.debug.xcconfig */, - E0BA8669BFAF0D7D3530D231 /* Pods-Runner.release.xcconfig */, - 5FD9945727C4F1E36849A9F7 /* Pods-Runner.profile.xcconfig */, - 14895E96298C624464DBFB8C /* Pods-RunnerTests.debug.xcconfig */, - 9B72268C6ED12489C79A9053 /* Pods-RunnerTests.release.xcconfig */, - 88BE8072AAD162173C43127D /* Pods-RunnerTests.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -215,7 +215,7 @@ isa = PBXNativeTarget; buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; buildPhases = ( - C174CBC3E8D2724091838EDC /* [CP] Check Pods Manifest.lock */, + 1A3629794040C6C9B1130F43 /* [CP] Check Pods Manifest.lock */, 331C80D1294CF70F00263BE5 /* Sources */, 331C80D2294CF70F00263BE5 /* Frameworks */, 331C80D3294CF70F00263BE5 /* Resources */, @@ -234,14 +234,14 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - FA3DA86855CBE4C6E115CE10 /* [CP] Check Pods Manifest.lock */, + 6163615AE6F29DED3B8F08B5 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - D76E5D624E19B5A423D1EBD9 /* [CP] Embed Pods Frameworks */, - 385658418FA376D11E21F59C /* [CP] Copy Pods Resources */, + 4EEF651504F28267374266AC /* [CP] Embed Pods Frameworks */, + 45877B661FE5EC1AB8C427BF /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -324,6 +324,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 1A3629794040C6C9B1130F43 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -362,7 +384,7 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 385658418FA376D11E21F59C /* [CP] Copy Pods Resources */ = { + 45877B661FE5EC1AB8C427BF /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -379,29 +401,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; showEnvVarsInLog = 0; }; - C174CBC3E8D2724091838EDC /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - D76E5D624E19B5A423D1EBD9 /* [CP] Embed Pods Frameworks */ = { + 4EEF651504F28267374266AC /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -418,7 +418,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - FA3DA86855CBE4C6E115CE10 /* [CP] Check Pods Manifest.lock */ = { + 6163615AE6F29DED3B8F08B5 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -491,7 +491,7 @@ /* Begin XCBuildConfiguration section */ 331C80DB294CF71000263BE5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 14895E96298C624464DBFB8C /* Pods-RunnerTests.debug.xcconfig */; + baseConfigurationReference = 93D3EFDC14627833E7B468BE /* Pods-RunnerTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -506,7 +506,7 @@ }; 331C80DC294CF71000263BE5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9B72268C6ED12489C79A9053 /* Pods-RunnerTests.release.xcconfig */; + baseConfigurationReference = 4C6A8B679BEF4A510B37469B /* Pods-RunnerTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; @@ -521,7 +521,7 @@ }; 331C80DD294CF71000263BE5 /* Profile */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 88BE8072AAD162173C43127D /* Pods-RunnerTests.profile.xcconfig */; + baseConfigurationReference = A4BAFE7543A8448A363D4CD4 /* Pods-RunnerTests.profile.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CURRENT_PROJECT_VERSION = 1; diff --git a/adaptive_app/step_07/pubspec.yaml b/adaptive_app/step_07/pubspec.yaml index 33c36f09a5..712d6d745a 100644 --- a/adaptive_app/step_07/pubspec.yaml +++ b/adaptive_app/step_07/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -42,8 +42,9 @@ dependencies: go_router: ^16.1.0 split_view: ^3.2.1 googleapis_auth: ^2.0.0 - google_sign_in: ^6.3.0 - extension_google_sign_in_as_googleapis_auth: ^2.0.13 + google_sign_in: ^7.1.1 + extension_google_sign_in_as_googleapis_auth: ^3.0.0 + logging: ^1.3.0 dev_dependencies: flutter_test: diff --git a/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml b/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml index a0c6704f27..cddd653720 100644 --- a/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml +++ b/adaptive_app/step_07/yt_cors_proxy/pubspec.yaml @@ -3,7 +3,7 @@ description: A YouTube CORS Proxy Server. version: 1.0.0 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: shelf: ^1.4.2 diff --git a/flutter_ci_script_master.sh b/flutter_ci_script_main.sh similarity index 83% rename from flutter_ci_script_master.sh rename to flutter_ci_script_main.sh index 003b874234..b52d735fd2 100755 --- a/flutter_ci_script_master.sh +++ b/flutter_ci_script_main.sh @@ -6,8 +6,7 @@ DIR="${BASH_SOURCE%/*}" source "$DIR/flutter_ci_script_shared.sh" declare -a CODELABS=( - # TODO(DomesticMouse): Re-introduce once `flex_color_scheme` is updated for Flutter 3.33 - # Tracking bug: https://github.com/rydmike/flex_color_scheme/issues/283 + # TODO(DomesticMouse): Enable once https://github.com/flutter/flutter/issues/173904 is fixed # "adaptive_app" "animated-responsive-layout" "animations" diff --git a/in_app_purchases/codelab_rebuild.yaml b/in_app_purchases/codelab_rebuild.yaml index 7bad681769..bc79d46d96 100644 --- a/in_app_purchases/codelab_rebuild.yaml +++ b/in_app_purchases/codelab_rebuild.yaml @@ -43,7 +43,7 @@ steps: } - name: Add app dependencies path: steps/app - flutter: pub add cloud_firestore cupertino_icons firebase_auth firebase_core google_sign_in:^6.3.0 http intl provider + flutter: pub add cloud_firestore cupertino_icons firebase_auth firebase_core google_sign_in http intl provider logging - name: Patch app/pubspec.yaml path: steps/app/pubspec.yaml patch-u: | @@ -56,7 +56,7 @@ steps: publish_to: 'none' version: 0.1.0 - @@ -25,3 +25,6 @@ dev_dependencies: + @@ -26,3 +26,6 @@ dev_dependencies: flutter: uses-material-design: true @@ -16126,19 +16126,31 @@ steps: import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:google_sign_in/google_sign_in.dart'; + import 'package:logging/logging.dart'; import '../firebase_options.dart'; import '../model/firebase_state.dart'; + final _log = Logger('FirebaseNotifier'); + class FirebaseNotifier extends ChangeNotifier { bool loggedIn = false; FirebaseState state = FirebaseState.loading; bool isLoggingIn = false; + late final GoogleSignIn _googleSignIn; + StreamSubscription? _authSubscription; FirebaseNotifier() { + _googleSignIn = GoogleSignIn.instance; load(); } + @override + void dispose() { + _authSubscription?.cancel(); + super.dispose(); + } + late final Completer _isInitialized = Completer(); Future get firestore async { @@ -16150,15 +16162,42 @@ steps: } Future load() async { + _log.info('Starting Firebase initialization'); try { + _log.fine('Initializing Firebase app'); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); + + _log.fine('Initializing Google Sign-In'); + await _googleSignIn.initialize(); + + // Set up auth state listener before attempting authentication + _log.fine('Setting up auth state listener'); + _authSubscription = FirebaseAuth.instance.authStateChanges().listen(( + user, + ) { + _log.fine( + 'Auth state changed: user is ${user != null ? 'logged in' : 'logged out'}', + ); + loggedIn = user != null; + notifyListeners(); + }); + + // Check if user is already authenticated + _log.fine('Attempting lightweight authentication'); + final lightweightAuth = _googleSignIn.attemptLightweightAuthentication(); + if (lightweightAuth is Future) { + await lightweightAuth; + } + loggedIn = FirebaseAuth.instance.currentUser != null; state = FirebaseState.available; _isInitialized.complete(true); + _log.info('Firebase initialization completed successfully'); notifyListeners(); } catch (e) { + _log.severe('Firebase initialization failed', e); state = FirebaseState.notAvailable; _isInitialized.complete(false); notifyListeners(); @@ -16166,36 +16205,48 @@ steps: } Future login() async { + _log.info('Starting login process'); isLoggingIn = true; notifyListeners(); - // Trigger the authentication flow + try { - final googleUser = await GoogleSignIn().signIn(); - if (googleUser == null) { + _log.fine('Authenticating with Google Sign-In'); + await _googleSignIn.authenticate(); + + _log.fine('Requesting server authorization'); + final serverAuth = await _googleSignIn.authorizationClient + .authorizeServer(['email', 'profile']); + + if (serverAuth == null) { + _log.warning('Server authorization returned null'); isLoggingIn = false; notifyListeners(); return; } - // Obtain the auth details from the request - final googleAuth = await googleUser.authentication; - - // Create a new credential + _log.fine('Creating Firebase credential'); final credential = GoogleAuthProvider.credential( - accessToken: googleAuth.accessToken, - idToken: googleAuth.idToken, + idToken: serverAuth.serverAuthCode, ); - // Once signed in, return the UserCredential + _log.fine('Signing in to Firebase'); await FirebaseAuth.instance.signInWithCredential(credential); - loggedIn = true; - isLoggingIn = false; - notifyListeners(); + _log.info('Login completed successfully'); + } on GoogleSignInException catch (e) { + _log.info('Google Sign-In exception: ${e.code}'); + if (e.code == GoogleSignInExceptionCode.canceled) { + _log.fine('User canceled sign-in'); + } else { + _log.warning('Google Sign-In failed', e); + } + return; } catch (e) { + _log.severe('Login failed with unexpected error', e); + return; + } finally { isLoggingIn = false; notifyListeners(); - return; } } } @@ -17616,15 +17667,15 @@ steps: patch-u: | --- b/in_app_purchases/step_10/app/lib/logic/firebase_notifier.dart +++ a/in_app_purchases/step_10/app/lib/logic/firebase_notifier.dart - @@ -29,6 +29,8 @@ class FirebaseNotifier extends ChangeNotifier { + @@ -41,6 +41,8 @@ class FirebaseNotifier extends ChangeNotifier { return FirebaseFirestore.instance; } + User? get user => FirebaseAuth.instance.currentUser; + Future load() async { + _log.info('Starting Firebase initialization'); try { - await Firebase.initializeApp( - name: Patch app/lib/pages/purchase_page.dart path: steps/app/lib/pages/purchase_page.dart patch-u: | diff --git a/in_app_purchases/complete/app/lib/logic/firebase_notifier.dart b/in_app_purchases/complete/app/lib/logic/firebase_notifier.dart index 6c3e66d1be..132be9020b 100644 --- a/in_app_purchases/complete/app/lib/logic/firebase_notifier.dart +++ b/in_app_purchases/complete/app/lib/logic/firebase_notifier.dart @@ -6,19 +6,31 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:google_sign_in/google_sign_in.dart'; +import 'package:logging/logging.dart'; import '../firebase_options.dart'; import '../model/firebase_state.dart'; +final _log = Logger('FirebaseNotifier'); + class FirebaseNotifier extends ChangeNotifier { bool loggedIn = false; FirebaseState state = FirebaseState.loading; bool isLoggingIn = false; + late final GoogleSignIn _googleSignIn; + StreamSubscription? _authSubscription; FirebaseNotifier() { + _googleSignIn = GoogleSignIn.instance; load(); } + @override + void dispose() { + _authSubscription?.cancel(); + super.dispose(); + } + late final Completer _isInitialized = Completer(); Future get firestore async { @@ -32,15 +44,42 @@ class FirebaseNotifier extends ChangeNotifier { User? get user => FirebaseAuth.instance.currentUser; Future load() async { + _log.info('Starting Firebase initialization'); try { + _log.fine('Initializing Firebase app'); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); + + _log.fine('Initializing Google Sign-In'); + await _googleSignIn.initialize(); + + // Set up auth state listener before attempting authentication + _log.fine('Setting up auth state listener'); + _authSubscription = FirebaseAuth.instance.authStateChanges().listen(( + user, + ) { + _log.fine( + 'Auth state changed: user is ${user != null ? 'logged in' : 'logged out'}', + ); + loggedIn = user != null; + notifyListeners(); + }); + + // Check if user is already authenticated + _log.fine('Attempting lightweight authentication'); + final lightweightAuth = _googleSignIn.attemptLightweightAuthentication(); + if (lightweightAuth is Future) { + await lightweightAuth; + } + loggedIn = FirebaseAuth.instance.currentUser != null; state = FirebaseState.available; _isInitialized.complete(true); + _log.info('Firebase initialization completed successfully'); notifyListeners(); } catch (e) { + _log.severe('Firebase initialization failed', e); state = FirebaseState.notAvailable; _isInitialized.complete(false); notifyListeners(); @@ -48,36 +87,48 @@ class FirebaseNotifier extends ChangeNotifier { } Future login() async { + _log.info('Starting login process'); isLoggingIn = true; notifyListeners(); - // Trigger the authentication flow + try { - final googleUser = await GoogleSignIn().signIn(); - if (googleUser == null) { + _log.fine('Authenticating with Google Sign-In'); + await _googleSignIn.authenticate(); + + _log.fine('Requesting server authorization'); + final serverAuth = await _googleSignIn.authorizationClient + .authorizeServer(['email', 'profile']); + + if (serverAuth == null) { + _log.warning('Server authorization returned null'); isLoggingIn = false; notifyListeners(); return; } - // Obtain the auth details from the request - final googleAuth = await googleUser.authentication; - - // Create a new credential + _log.fine('Creating Firebase credential'); final credential = GoogleAuthProvider.credential( - accessToken: googleAuth.accessToken, - idToken: googleAuth.idToken, + idToken: serverAuth.serverAuthCode, ); - // Once signed in, return the UserCredential + _log.fine('Signing in to Firebase'); await FirebaseAuth.instance.signInWithCredential(credential); - loggedIn = true; - isLoggingIn = false; - notifyListeners(); + _log.info('Login completed successfully'); + } on GoogleSignInException catch (e) { + _log.info('Google Sign-In exception: ${e.code}'); + if (e.code == GoogleSignInExceptionCode.canceled) { + _log.fine('User canceled sign-in'); + } else { + _log.warning('Google Sign-In failed', e); + } + return; } catch (e) { + _log.severe('Login failed with unexpected error', e); + return; + } finally { isLoggingIn = false; notifyListeners(); - return; } } } diff --git a/in_app_purchases/complete/app/pubspec.yaml b/in_app_purchases/complete/app/pubspec.yaml index dd1c31a0cd..5ef2308c84 100644 --- a/in_app_purchases/complete/app/pubspec.yaml +++ b/in_app_purchases/complete/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: flutter: @@ -13,10 +13,11 @@ dependencies: cupertino_icons: ^1.0.8 firebase_auth: ^6.0.1 firebase_core: ^4.0.0 - google_sign_in: ^6.3.0 + google_sign_in: ^7.1.1 http: ^1.5.0 intl: ^0.20.2 provider: ^6.1.5 + logging: ^1.3.0 in_app_purchase: ^3.2.3 dev_dependencies: diff --git a/in_app_purchases/complete/dart-backend/pubspec.yaml b/in_app_purchases/complete/dart-backend/pubspec.yaml index 44b89c4e2c..fd157f1ff2 100644 --- a/in_app_purchases/complete/dart-backend/pubspec.yaml +++ b/in_app_purchases/complete/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # repository: https://github.com/my_org/my_repo environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: app_store_server_sdk: ^1.2.10 diff --git a/in_app_purchases/step_00/app/lib/logic/firebase_notifier.dart b/in_app_purchases/step_00/app/lib/logic/firebase_notifier.dart index 72c140d0d2..ab827cde57 100644 --- a/in_app_purchases/step_00/app/lib/logic/firebase_notifier.dart +++ b/in_app_purchases/step_00/app/lib/logic/firebase_notifier.dart @@ -6,19 +6,31 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:google_sign_in/google_sign_in.dart'; +import 'package:logging/logging.dart'; import '../firebase_options.dart'; import '../model/firebase_state.dart'; +final _log = Logger('FirebaseNotifier'); + class FirebaseNotifier extends ChangeNotifier { bool loggedIn = false; FirebaseState state = FirebaseState.loading; bool isLoggingIn = false; + late final GoogleSignIn _googleSignIn; + StreamSubscription? _authSubscription; FirebaseNotifier() { + _googleSignIn = GoogleSignIn.instance; load(); } + @override + void dispose() { + _authSubscription?.cancel(); + super.dispose(); + } + late final Completer _isInitialized = Completer(); Future get firestore async { @@ -30,15 +42,42 @@ class FirebaseNotifier extends ChangeNotifier { } Future load() async { + _log.info('Starting Firebase initialization'); try { + _log.fine('Initializing Firebase app'); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); + + _log.fine('Initializing Google Sign-In'); + await _googleSignIn.initialize(); + + // Set up auth state listener before attempting authentication + _log.fine('Setting up auth state listener'); + _authSubscription = FirebaseAuth.instance.authStateChanges().listen(( + user, + ) { + _log.fine( + 'Auth state changed: user is ${user != null ? 'logged in' : 'logged out'}', + ); + loggedIn = user != null; + notifyListeners(); + }); + + // Check if user is already authenticated + _log.fine('Attempting lightweight authentication'); + final lightweightAuth = _googleSignIn.attemptLightweightAuthentication(); + if (lightweightAuth is Future) { + await lightweightAuth; + } + loggedIn = FirebaseAuth.instance.currentUser != null; state = FirebaseState.available; _isInitialized.complete(true); + _log.info('Firebase initialization completed successfully'); notifyListeners(); } catch (e) { + _log.severe('Firebase initialization failed', e); state = FirebaseState.notAvailable; _isInitialized.complete(false); notifyListeners(); @@ -46,36 +85,48 @@ class FirebaseNotifier extends ChangeNotifier { } Future login() async { + _log.info('Starting login process'); isLoggingIn = true; notifyListeners(); - // Trigger the authentication flow + try { - final googleUser = await GoogleSignIn().signIn(); - if (googleUser == null) { + _log.fine('Authenticating with Google Sign-In'); + await _googleSignIn.authenticate(); + + _log.fine('Requesting server authorization'); + final serverAuth = await _googleSignIn.authorizationClient + .authorizeServer(['email', 'profile']); + + if (serverAuth == null) { + _log.warning('Server authorization returned null'); isLoggingIn = false; notifyListeners(); return; } - // Obtain the auth details from the request - final googleAuth = await googleUser.authentication; - - // Create a new credential + _log.fine('Creating Firebase credential'); final credential = GoogleAuthProvider.credential( - accessToken: googleAuth.accessToken, - idToken: googleAuth.idToken, + idToken: serverAuth.serverAuthCode, ); - // Once signed in, return the UserCredential + _log.fine('Signing in to Firebase'); await FirebaseAuth.instance.signInWithCredential(credential); - loggedIn = true; - isLoggingIn = false; - notifyListeners(); + _log.info('Login completed successfully'); + } on GoogleSignInException catch (e) { + _log.info('Google Sign-In exception: ${e.code}'); + if (e.code == GoogleSignInExceptionCode.canceled) { + _log.fine('User canceled sign-in'); + } else { + _log.warning('Google Sign-In failed', e); + } + return; } catch (e) { + _log.severe('Login failed with unexpected error', e); + return; + } finally { isLoggingIn = false; notifyListeners(); - return; } } } diff --git a/in_app_purchases/step_00/app/pubspec.yaml b/in_app_purchases/step_00/app/pubspec.yaml index 72a47fe459..6bb57119eb 100644 --- a/in_app_purchases/step_00/app/pubspec.yaml +++ b/in_app_purchases/step_00/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: flutter: @@ -13,10 +13,11 @@ dependencies: cupertino_icons: ^1.0.8 firebase_auth: ^6.0.1 firebase_core: ^4.0.0 - google_sign_in: ^6.3.0 + google_sign_in: ^7.1.1 http: ^1.5.0 intl: ^0.20.2 provider: ^6.1.5 + logging: ^1.3.0 dev_dependencies: flutter_test: diff --git a/in_app_purchases/step_00/dart-backend/pubspec.yaml b/in_app_purchases/step_00/dart-backend/pubspec.yaml index 44b89c4e2c..fd157f1ff2 100644 --- a/in_app_purchases/step_00/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_00/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # repository: https://github.com/my_org/my_repo environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: app_store_server_sdk: ^1.2.10 diff --git a/in_app_purchases/step_03/app/lib/logic/firebase_notifier.dart b/in_app_purchases/step_03/app/lib/logic/firebase_notifier.dart index 72c140d0d2..ab827cde57 100644 --- a/in_app_purchases/step_03/app/lib/logic/firebase_notifier.dart +++ b/in_app_purchases/step_03/app/lib/logic/firebase_notifier.dart @@ -6,19 +6,31 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:google_sign_in/google_sign_in.dart'; +import 'package:logging/logging.dart'; import '../firebase_options.dart'; import '../model/firebase_state.dart'; +final _log = Logger('FirebaseNotifier'); + class FirebaseNotifier extends ChangeNotifier { bool loggedIn = false; FirebaseState state = FirebaseState.loading; bool isLoggingIn = false; + late final GoogleSignIn _googleSignIn; + StreamSubscription? _authSubscription; FirebaseNotifier() { + _googleSignIn = GoogleSignIn.instance; load(); } + @override + void dispose() { + _authSubscription?.cancel(); + super.dispose(); + } + late final Completer _isInitialized = Completer(); Future get firestore async { @@ -30,15 +42,42 @@ class FirebaseNotifier extends ChangeNotifier { } Future load() async { + _log.info('Starting Firebase initialization'); try { + _log.fine('Initializing Firebase app'); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); + + _log.fine('Initializing Google Sign-In'); + await _googleSignIn.initialize(); + + // Set up auth state listener before attempting authentication + _log.fine('Setting up auth state listener'); + _authSubscription = FirebaseAuth.instance.authStateChanges().listen(( + user, + ) { + _log.fine( + 'Auth state changed: user is ${user != null ? 'logged in' : 'logged out'}', + ); + loggedIn = user != null; + notifyListeners(); + }); + + // Check if user is already authenticated + _log.fine('Attempting lightweight authentication'); + final lightweightAuth = _googleSignIn.attemptLightweightAuthentication(); + if (lightweightAuth is Future) { + await lightweightAuth; + } + loggedIn = FirebaseAuth.instance.currentUser != null; state = FirebaseState.available; _isInitialized.complete(true); + _log.info('Firebase initialization completed successfully'); notifyListeners(); } catch (e) { + _log.severe('Firebase initialization failed', e); state = FirebaseState.notAvailable; _isInitialized.complete(false); notifyListeners(); @@ -46,36 +85,48 @@ class FirebaseNotifier extends ChangeNotifier { } Future login() async { + _log.info('Starting login process'); isLoggingIn = true; notifyListeners(); - // Trigger the authentication flow + try { - final googleUser = await GoogleSignIn().signIn(); - if (googleUser == null) { + _log.fine('Authenticating with Google Sign-In'); + await _googleSignIn.authenticate(); + + _log.fine('Requesting server authorization'); + final serverAuth = await _googleSignIn.authorizationClient + .authorizeServer(['email', 'profile']); + + if (serverAuth == null) { + _log.warning('Server authorization returned null'); isLoggingIn = false; notifyListeners(); return; } - // Obtain the auth details from the request - final googleAuth = await googleUser.authentication; - - // Create a new credential + _log.fine('Creating Firebase credential'); final credential = GoogleAuthProvider.credential( - accessToken: googleAuth.accessToken, - idToken: googleAuth.idToken, + idToken: serverAuth.serverAuthCode, ); - // Once signed in, return the UserCredential + _log.fine('Signing in to Firebase'); await FirebaseAuth.instance.signInWithCredential(credential); - loggedIn = true; - isLoggingIn = false; - notifyListeners(); + _log.info('Login completed successfully'); + } on GoogleSignInException catch (e) { + _log.info('Google Sign-In exception: ${e.code}'); + if (e.code == GoogleSignInExceptionCode.canceled) { + _log.fine('User canceled sign-in'); + } else { + _log.warning('Google Sign-In failed', e); + } + return; } catch (e) { + _log.severe('Login failed with unexpected error', e); + return; + } finally { isLoggingIn = false; notifyListeners(); - return; } } } diff --git a/in_app_purchases/step_03/app/pubspec.yaml b/in_app_purchases/step_03/app/pubspec.yaml index dd1c31a0cd..5ef2308c84 100644 --- a/in_app_purchases/step_03/app/pubspec.yaml +++ b/in_app_purchases/step_03/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: flutter: @@ -13,10 +13,11 @@ dependencies: cupertino_icons: ^1.0.8 firebase_auth: ^6.0.1 firebase_core: ^4.0.0 - google_sign_in: ^6.3.0 + google_sign_in: ^7.1.1 http: ^1.5.0 intl: ^0.20.2 provider: ^6.1.5 + logging: ^1.3.0 in_app_purchase: ^3.2.3 dev_dependencies: diff --git a/in_app_purchases/step_03/dart-backend/pubspec.yaml b/in_app_purchases/step_03/dart-backend/pubspec.yaml index 44b89c4e2c..fd157f1ff2 100644 --- a/in_app_purchases/step_03/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_03/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # repository: https://github.com/my_org/my_repo environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: app_store_server_sdk: ^1.2.10 diff --git a/in_app_purchases/step_07/app/lib/logic/firebase_notifier.dart b/in_app_purchases/step_07/app/lib/logic/firebase_notifier.dart index 72c140d0d2..ab827cde57 100644 --- a/in_app_purchases/step_07/app/lib/logic/firebase_notifier.dart +++ b/in_app_purchases/step_07/app/lib/logic/firebase_notifier.dart @@ -6,19 +6,31 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:google_sign_in/google_sign_in.dart'; +import 'package:logging/logging.dart'; import '../firebase_options.dart'; import '../model/firebase_state.dart'; +final _log = Logger('FirebaseNotifier'); + class FirebaseNotifier extends ChangeNotifier { bool loggedIn = false; FirebaseState state = FirebaseState.loading; bool isLoggingIn = false; + late final GoogleSignIn _googleSignIn; + StreamSubscription? _authSubscription; FirebaseNotifier() { + _googleSignIn = GoogleSignIn.instance; load(); } + @override + void dispose() { + _authSubscription?.cancel(); + super.dispose(); + } + late final Completer _isInitialized = Completer(); Future get firestore async { @@ -30,15 +42,42 @@ class FirebaseNotifier extends ChangeNotifier { } Future load() async { + _log.info('Starting Firebase initialization'); try { + _log.fine('Initializing Firebase app'); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); + + _log.fine('Initializing Google Sign-In'); + await _googleSignIn.initialize(); + + // Set up auth state listener before attempting authentication + _log.fine('Setting up auth state listener'); + _authSubscription = FirebaseAuth.instance.authStateChanges().listen(( + user, + ) { + _log.fine( + 'Auth state changed: user is ${user != null ? 'logged in' : 'logged out'}', + ); + loggedIn = user != null; + notifyListeners(); + }); + + // Check if user is already authenticated + _log.fine('Attempting lightweight authentication'); + final lightweightAuth = _googleSignIn.attemptLightweightAuthentication(); + if (lightweightAuth is Future) { + await lightweightAuth; + } + loggedIn = FirebaseAuth.instance.currentUser != null; state = FirebaseState.available; _isInitialized.complete(true); + _log.info('Firebase initialization completed successfully'); notifyListeners(); } catch (e) { + _log.severe('Firebase initialization failed', e); state = FirebaseState.notAvailable; _isInitialized.complete(false); notifyListeners(); @@ -46,36 +85,48 @@ class FirebaseNotifier extends ChangeNotifier { } Future login() async { + _log.info('Starting login process'); isLoggingIn = true; notifyListeners(); - // Trigger the authentication flow + try { - final googleUser = await GoogleSignIn().signIn(); - if (googleUser == null) { + _log.fine('Authenticating with Google Sign-In'); + await _googleSignIn.authenticate(); + + _log.fine('Requesting server authorization'); + final serverAuth = await _googleSignIn.authorizationClient + .authorizeServer(['email', 'profile']); + + if (serverAuth == null) { + _log.warning('Server authorization returned null'); isLoggingIn = false; notifyListeners(); return; } - // Obtain the auth details from the request - final googleAuth = await googleUser.authentication; - - // Create a new credential + _log.fine('Creating Firebase credential'); final credential = GoogleAuthProvider.credential( - accessToken: googleAuth.accessToken, - idToken: googleAuth.idToken, + idToken: serverAuth.serverAuthCode, ); - // Once signed in, return the UserCredential + _log.fine('Signing in to Firebase'); await FirebaseAuth.instance.signInWithCredential(credential); - loggedIn = true; - isLoggingIn = false; - notifyListeners(); + _log.info('Login completed successfully'); + } on GoogleSignInException catch (e) { + _log.info('Google Sign-In exception: ${e.code}'); + if (e.code == GoogleSignInExceptionCode.canceled) { + _log.fine('User canceled sign-in'); + } else { + _log.warning('Google Sign-In failed', e); + } + return; } catch (e) { + _log.severe('Login failed with unexpected error', e); + return; + } finally { isLoggingIn = false; notifyListeners(); - return; } } } diff --git a/in_app_purchases/step_07/app/pubspec.yaml b/in_app_purchases/step_07/app/pubspec.yaml index dd1c31a0cd..5ef2308c84 100644 --- a/in_app_purchases/step_07/app/pubspec.yaml +++ b/in_app_purchases/step_07/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: flutter: @@ -13,10 +13,11 @@ dependencies: cupertino_icons: ^1.0.8 firebase_auth: ^6.0.1 firebase_core: ^4.0.0 - google_sign_in: ^6.3.0 + google_sign_in: ^7.1.1 http: ^1.5.0 intl: ^0.20.2 provider: ^6.1.5 + logging: ^1.3.0 in_app_purchase: ^3.2.3 dev_dependencies: diff --git a/in_app_purchases/step_07/dart-backend/pubspec.yaml b/in_app_purchases/step_07/dart-backend/pubspec.yaml index 44b89c4e2c..fd157f1ff2 100644 --- a/in_app_purchases/step_07/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_07/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # repository: https://github.com/my_org/my_repo environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: app_store_server_sdk: ^1.2.10 diff --git a/in_app_purchases/step_08/app/lib/logic/firebase_notifier.dart b/in_app_purchases/step_08/app/lib/logic/firebase_notifier.dart index 72c140d0d2..ab827cde57 100644 --- a/in_app_purchases/step_08/app/lib/logic/firebase_notifier.dart +++ b/in_app_purchases/step_08/app/lib/logic/firebase_notifier.dart @@ -6,19 +6,31 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:google_sign_in/google_sign_in.dart'; +import 'package:logging/logging.dart'; import '../firebase_options.dart'; import '../model/firebase_state.dart'; +final _log = Logger('FirebaseNotifier'); + class FirebaseNotifier extends ChangeNotifier { bool loggedIn = false; FirebaseState state = FirebaseState.loading; bool isLoggingIn = false; + late final GoogleSignIn _googleSignIn; + StreamSubscription? _authSubscription; FirebaseNotifier() { + _googleSignIn = GoogleSignIn.instance; load(); } + @override + void dispose() { + _authSubscription?.cancel(); + super.dispose(); + } + late final Completer _isInitialized = Completer(); Future get firestore async { @@ -30,15 +42,42 @@ class FirebaseNotifier extends ChangeNotifier { } Future load() async { + _log.info('Starting Firebase initialization'); try { + _log.fine('Initializing Firebase app'); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); + + _log.fine('Initializing Google Sign-In'); + await _googleSignIn.initialize(); + + // Set up auth state listener before attempting authentication + _log.fine('Setting up auth state listener'); + _authSubscription = FirebaseAuth.instance.authStateChanges().listen(( + user, + ) { + _log.fine( + 'Auth state changed: user is ${user != null ? 'logged in' : 'logged out'}', + ); + loggedIn = user != null; + notifyListeners(); + }); + + // Check if user is already authenticated + _log.fine('Attempting lightweight authentication'); + final lightweightAuth = _googleSignIn.attemptLightweightAuthentication(); + if (lightweightAuth is Future) { + await lightweightAuth; + } + loggedIn = FirebaseAuth.instance.currentUser != null; state = FirebaseState.available; _isInitialized.complete(true); + _log.info('Firebase initialization completed successfully'); notifyListeners(); } catch (e) { + _log.severe('Firebase initialization failed', e); state = FirebaseState.notAvailable; _isInitialized.complete(false); notifyListeners(); @@ -46,36 +85,48 @@ class FirebaseNotifier extends ChangeNotifier { } Future login() async { + _log.info('Starting login process'); isLoggingIn = true; notifyListeners(); - // Trigger the authentication flow + try { - final googleUser = await GoogleSignIn().signIn(); - if (googleUser == null) { + _log.fine('Authenticating with Google Sign-In'); + await _googleSignIn.authenticate(); + + _log.fine('Requesting server authorization'); + final serverAuth = await _googleSignIn.authorizationClient + .authorizeServer(['email', 'profile']); + + if (serverAuth == null) { + _log.warning('Server authorization returned null'); isLoggingIn = false; notifyListeners(); return; } - // Obtain the auth details from the request - final googleAuth = await googleUser.authentication; - - // Create a new credential + _log.fine('Creating Firebase credential'); final credential = GoogleAuthProvider.credential( - accessToken: googleAuth.accessToken, - idToken: googleAuth.idToken, + idToken: serverAuth.serverAuthCode, ); - // Once signed in, return the UserCredential + _log.fine('Signing in to Firebase'); await FirebaseAuth.instance.signInWithCredential(credential); - loggedIn = true; - isLoggingIn = false; - notifyListeners(); + _log.info('Login completed successfully'); + } on GoogleSignInException catch (e) { + _log.info('Google Sign-In exception: ${e.code}'); + if (e.code == GoogleSignInExceptionCode.canceled) { + _log.fine('User canceled sign-in'); + } else { + _log.warning('Google Sign-In failed', e); + } + return; } catch (e) { + _log.severe('Login failed with unexpected error', e); + return; + } finally { isLoggingIn = false; notifyListeners(); - return; } } } diff --git a/in_app_purchases/step_08/app/pubspec.yaml b/in_app_purchases/step_08/app/pubspec.yaml index dd1c31a0cd..5ef2308c84 100644 --- a/in_app_purchases/step_08/app/pubspec.yaml +++ b/in_app_purchases/step_08/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: flutter: @@ -13,10 +13,11 @@ dependencies: cupertino_icons: ^1.0.8 firebase_auth: ^6.0.1 firebase_core: ^4.0.0 - google_sign_in: ^6.3.0 + google_sign_in: ^7.1.1 http: ^1.5.0 intl: ^0.20.2 provider: ^6.1.5 + logging: ^1.3.0 in_app_purchase: ^3.2.3 dev_dependencies: diff --git a/in_app_purchases/step_08/dart-backend/pubspec.yaml b/in_app_purchases/step_08/dart-backend/pubspec.yaml index 44b89c4e2c..fd157f1ff2 100644 --- a/in_app_purchases/step_08/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_08/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # repository: https://github.com/my_org/my_repo environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: app_store_server_sdk: ^1.2.10 diff --git a/in_app_purchases/step_10/app/lib/logic/firebase_notifier.dart b/in_app_purchases/step_10/app/lib/logic/firebase_notifier.dart index 6c3e66d1be..132be9020b 100644 --- a/in_app_purchases/step_10/app/lib/logic/firebase_notifier.dart +++ b/in_app_purchases/step_10/app/lib/logic/firebase_notifier.dart @@ -6,19 +6,31 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:google_sign_in/google_sign_in.dart'; +import 'package:logging/logging.dart'; import '../firebase_options.dart'; import '../model/firebase_state.dart'; +final _log = Logger('FirebaseNotifier'); + class FirebaseNotifier extends ChangeNotifier { bool loggedIn = false; FirebaseState state = FirebaseState.loading; bool isLoggingIn = false; + late final GoogleSignIn _googleSignIn; + StreamSubscription? _authSubscription; FirebaseNotifier() { + _googleSignIn = GoogleSignIn.instance; load(); } + @override + void dispose() { + _authSubscription?.cancel(); + super.dispose(); + } + late final Completer _isInitialized = Completer(); Future get firestore async { @@ -32,15 +44,42 @@ class FirebaseNotifier extends ChangeNotifier { User? get user => FirebaseAuth.instance.currentUser; Future load() async { + _log.info('Starting Firebase initialization'); try { + _log.fine('Initializing Firebase app'); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); + + _log.fine('Initializing Google Sign-In'); + await _googleSignIn.initialize(); + + // Set up auth state listener before attempting authentication + _log.fine('Setting up auth state listener'); + _authSubscription = FirebaseAuth.instance.authStateChanges().listen(( + user, + ) { + _log.fine( + 'Auth state changed: user is ${user != null ? 'logged in' : 'logged out'}', + ); + loggedIn = user != null; + notifyListeners(); + }); + + // Check if user is already authenticated + _log.fine('Attempting lightweight authentication'); + final lightweightAuth = _googleSignIn.attemptLightweightAuthentication(); + if (lightweightAuth is Future) { + await lightweightAuth; + } + loggedIn = FirebaseAuth.instance.currentUser != null; state = FirebaseState.available; _isInitialized.complete(true); + _log.info('Firebase initialization completed successfully'); notifyListeners(); } catch (e) { + _log.severe('Firebase initialization failed', e); state = FirebaseState.notAvailable; _isInitialized.complete(false); notifyListeners(); @@ -48,36 +87,48 @@ class FirebaseNotifier extends ChangeNotifier { } Future login() async { + _log.info('Starting login process'); isLoggingIn = true; notifyListeners(); - // Trigger the authentication flow + try { - final googleUser = await GoogleSignIn().signIn(); - if (googleUser == null) { + _log.fine('Authenticating with Google Sign-In'); + await _googleSignIn.authenticate(); + + _log.fine('Requesting server authorization'); + final serverAuth = await _googleSignIn.authorizationClient + .authorizeServer(['email', 'profile']); + + if (serverAuth == null) { + _log.warning('Server authorization returned null'); isLoggingIn = false; notifyListeners(); return; } - // Obtain the auth details from the request - final googleAuth = await googleUser.authentication; - - // Create a new credential + _log.fine('Creating Firebase credential'); final credential = GoogleAuthProvider.credential( - accessToken: googleAuth.accessToken, - idToken: googleAuth.idToken, + idToken: serverAuth.serverAuthCode, ); - // Once signed in, return the UserCredential + _log.fine('Signing in to Firebase'); await FirebaseAuth.instance.signInWithCredential(credential); - loggedIn = true; - isLoggingIn = false; - notifyListeners(); + _log.info('Login completed successfully'); + } on GoogleSignInException catch (e) { + _log.info('Google Sign-In exception: ${e.code}'); + if (e.code == GoogleSignInExceptionCode.canceled) { + _log.fine('User canceled sign-in'); + } else { + _log.warning('Google Sign-In failed', e); + } + return; } catch (e) { + _log.severe('Login failed with unexpected error', e); + return; + } finally { isLoggingIn = false; notifyListeners(); - return; } } } diff --git a/in_app_purchases/step_10/app/pubspec.yaml b/in_app_purchases/step_10/app/pubspec.yaml index dd1c31a0cd..5ef2308c84 100644 --- a/in_app_purchases/step_10/app/pubspec.yaml +++ b/in_app_purchases/step_10/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: flutter: @@ -13,10 +13,11 @@ dependencies: cupertino_icons: ^1.0.8 firebase_auth: ^6.0.1 firebase_core: ^4.0.0 - google_sign_in: ^6.3.0 + google_sign_in: ^7.1.1 http: ^1.5.0 intl: ^0.20.2 provider: ^6.1.5 + logging: ^1.3.0 in_app_purchase: ^3.2.3 dev_dependencies: diff --git a/in_app_purchases/step_10/dart-backend/pubspec.yaml b/in_app_purchases/step_10/dart-backend/pubspec.yaml index 44b89c4e2c..fd157f1ff2 100644 --- a/in_app_purchases/step_10/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_10/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # repository: https://github.com/my_org/my_repo environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: app_store_server_sdk: ^1.2.10 diff --git a/in_app_purchases/step_11/app/lib/logic/firebase_notifier.dart b/in_app_purchases/step_11/app/lib/logic/firebase_notifier.dart index 6c3e66d1be..132be9020b 100644 --- a/in_app_purchases/step_11/app/lib/logic/firebase_notifier.dart +++ b/in_app_purchases/step_11/app/lib/logic/firebase_notifier.dart @@ -6,19 +6,31 @@ import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:google_sign_in/google_sign_in.dart'; +import 'package:logging/logging.dart'; import '../firebase_options.dart'; import '../model/firebase_state.dart'; +final _log = Logger('FirebaseNotifier'); + class FirebaseNotifier extends ChangeNotifier { bool loggedIn = false; FirebaseState state = FirebaseState.loading; bool isLoggingIn = false; + late final GoogleSignIn _googleSignIn; + StreamSubscription? _authSubscription; FirebaseNotifier() { + _googleSignIn = GoogleSignIn.instance; load(); } + @override + void dispose() { + _authSubscription?.cancel(); + super.dispose(); + } + late final Completer _isInitialized = Completer(); Future get firestore async { @@ -32,15 +44,42 @@ class FirebaseNotifier extends ChangeNotifier { User? get user => FirebaseAuth.instance.currentUser; Future load() async { + _log.info('Starting Firebase initialization'); try { + _log.fine('Initializing Firebase app'); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); + + _log.fine('Initializing Google Sign-In'); + await _googleSignIn.initialize(); + + // Set up auth state listener before attempting authentication + _log.fine('Setting up auth state listener'); + _authSubscription = FirebaseAuth.instance.authStateChanges().listen(( + user, + ) { + _log.fine( + 'Auth state changed: user is ${user != null ? 'logged in' : 'logged out'}', + ); + loggedIn = user != null; + notifyListeners(); + }); + + // Check if user is already authenticated + _log.fine('Attempting lightweight authentication'); + final lightweightAuth = _googleSignIn.attemptLightweightAuthentication(); + if (lightweightAuth is Future) { + await lightweightAuth; + } + loggedIn = FirebaseAuth.instance.currentUser != null; state = FirebaseState.available; _isInitialized.complete(true); + _log.info('Firebase initialization completed successfully'); notifyListeners(); } catch (e) { + _log.severe('Firebase initialization failed', e); state = FirebaseState.notAvailable; _isInitialized.complete(false); notifyListeners(); @@ -48,36 +87,48 @@ class FirebaseNotifier extends ChangeNotifier { } Future login() async { + _log.info('Starting login process'); isLoggingIn = true; notifyListeners(); - // Trigger the authentication flow + try { - final googleUser = await GoogleSignIn().signIn(); - if (googleUser == null) { + _log.fine('Authenticating with Google Sign-In'); + await _googleSignIn.authenticate(); + + _log.fine('Requesting server authorization'); + final serverAuth = await _googleSignIn.authorizationClient + .authorizeServer(['email', 'profile']); + + if (serverAuth == null) { + _log.warning('Server authorization returned null'); isLoggingIn = false; notifyListeners(); return; } - // Obtain the auth details from the request - final googleAuth = await googleUser.authentication; - - // Create a new credential + _log.fine('Creating Firebase credential'); final credential = GoogleAuthProvider.credential( - accessToken: googleAuth.accessToken, - idToken: googleAuth.idToken, + idToken: serverAuth.serverAuthCode, ); - // Once signed in, return the UserCredential + _log.fine('Signing in to Firebase'); await FirebaseAuth.instance.signInWithCredential(credential); - loggedIn = true; - isLoggingIn = false; - notifyListeners(); + _log.info('Login completed successfully'); + } on GoogleSignInException catch (e) { + _log.info('Google Sign-In exception: ${e.code}'); + if (e.code == GoogleSignInExceptionCode.canceled) { + _log.fine('User canceled sign-in'); + } else { + _log.warning('Google Sign-In failed', e); + } + return; } catch (e) { + _log.severe('Login failed with unexpected error', e); + return; + } finally { isLoggingIn = false; notifyListeners(); - return; } } } diff --git a/in_app_purchases/step_11/app/pubspec.yaml b/in_app_purchases/step_11/app/pubspec.yaml index dd1c31a0cd..5ef2308c84 100644 --- a/in_app_purchases/step_11/app/pubspec.yaml +++ b/in_app_purchases/step_11/app/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 0.1.0 environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: flutter: @@ -13,10 +13,11 @@ dependencies: cupertino_icons: ^1.0.8 firebase_auth: ^6.0.1 firebase_core: ^4.0.0 - google_sign_in: ^6.3.0 + google_sign_in: ^7.1.1 http: ^1.5.0 intl: ^0.20.2 provider: ^6.1.5 + logging: ^1.3.0 in_app_purchase: ^3.2.3 dev_dependencies: diff --git a/in_app_purchases/step_11/dart-backend/pubspec.yaml b/in_app_purchases/step_11/dart-backend/pubspec.yaml index 44b89c4e2c..fd157f1ff2 100644 --- a/in_app_purchases/step_11/dart-backend/pubspec.yaml +++ b/in_app_purchases/step_11/dart-backend/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 # repository: https://github.com/my_org/my_repo environment: - sdk: ^3.9.0-0 + sdk: ^3.9.0 dependencies: app_store_server_sdk: ^1.2.10