From 54f1b881bdc9714630aaf7ad3bcfa8dfdcc83fd5 Mon Sep 17 00:00:00 2001 From: Kate Lovett Date: Thu, 7 Dec 2023 15:42:06 -0600 Subject: [PATCH 01/11] [CP] Gold fix for stable branch (#139764) Fixes https://github.com/flutter/flutter/issues/139673 Cherry picks https://github.com/flutter/flutter/pull/139706 to the stable branch to fix the tree. --- .../flutter_goldens/lib/flutter_goldens.dart | 15 +- .../test/flutter_goldens_test.dart | 139 +++++++++++++++++- 2 files changed, 147 insertions(+), 7 deletions(-) diff --git a/packages/flutter_goldens/lib/flutter_goldens.dart b/packages/flutter_goldens/lib/flutter_goldens.dart index d9b901e267027..5e4a26b411f60 100644 --- a/packages/flutter_goldens/lib/flutter_goldens.dart +++ b/packages/flutter_goldens/lib/flutter_goldens.dart @@ -19,6 +19,7 @@ export 'package:flutter_goldens_client/skia_client.dart'; // https://github.com/flutter/flutter/wiki/Writing-a-golden-file-test-for-package%3Aflutter const String _kFlutterRootKey = 'FLUTTER_ROOT'; +final RegExp _kMainBranch = RegExp(r'master|main'); /// Main method that can be used in a `flutter_test_config.dart` file to set /// [goldenFileComparator] to an instance of [FlutterGoldenFileComparator] that @@ -259,7 +260,9 @@ class FlutterPostSubmitFileComparator extends FlutterGoldenFileComparator { final bool luciPostSubmit = platform.environment.containsKey('SWARMING_TASK_ID') && platform.environment.containsKey('GOLDCTL') // Luci tryjob environments contain this value to inform the [FlutterPreSubmitComparator]. - && !platform.environment.containsKey('GOLD_TRYJOB'); + && !platform.environment.containsKey('GOLD_TRYJOB') + // Only run on main branch. + && _kMainBranch.hasMatch(platform.environment['GIT_BRANCH'] ?? ''); return luciPostSubmit; } @@ -346,7 +349,9 @@ class FlutterPreSubmitFileComparator extends FlutterGoldenFileComparator { static bool isAvailableForEnvironment(Platform platform) { final bool luciPreSubmit = platform.environment.containsKey('SWARMING_TASK_ID') && platform.environment.containsKey('GOLDCTL') - && platform.environment.containsKey('GOLD_TRYJOB'); + && platform.environment.containsKey('GOLD_TRYJOB') + // Only run on the main branch + && _kMainBranch.hasMatch(platform.environment['GIT_BRANCH'] ?? ''); return luciPreSubmit; } } @@ -413,9 +418,11 @@ class FlutterSkippingFileComparator extends FlutterGoldenFileComparator { /// If we are in a CI environment, LUCI or Cirrus, but are not using the other /// comparators, we skip. static bool isAvailableForEnvironment(Platform platform) { - return platform.environment.containsKey('SWARMING_TASK_ID') + return (platform.environment.containsKey('SWARMING_TASK_ID') // Some builds are still being run on Cirrus, we should skip these. - || platform.environment.containsKey('CIRRUS_CI'); + || platform.environment.containsKey('CIRRUS_CI')) + // If we are in CI, skip on branches that are not main. + && !_kMainBranch.hasMatch(platform.environment['GIT_BRANCH'] ?? ''); } } diff --git a/packages/flutter_goldens/test/flutter_goldens_test.dart b/packages/flutter_goldens/test/flutter_goldens_test.dart index e64198f0bc486..3e2c05ea9cfc1 100644 --- a/packages/flutter_goldens/test/flutter_goldens_test.dart +++ b/packages/flutter_goldens/test/flutter_goldens_test.dart @@ -716,6 +716,55 @@ void main() { 'FLUTTER_ROOT': _kFlutterRoot, 'SWARMING_TASK_ID' : '12345678990', 'GOLDCTL' : 'goldctl', + 'GIT_BRANCH' : 'master', + }, + operatingSystem: 'macos', + ); + expect( + FlutterPostSubmitFileComparator.isAvailableForEnvironment(platform), + isTrue, + ); + }); + + test('returns false on release branches in postsubmit', () { + platform = FakePlatform( + environment: { + 'FLUTTER_ROOT': _kFlutterRoot, + 'SWARMING_TASK_ID' : 'sweet task ID', + 'GOLDCTL' : 'some/path', + 'GIT_BRANCH' : 'flutter-3.16-candidate.0', + }, + operatingSystem: 'macos', + ); + expect( + FlutterPostSubmitFileComparator.isAvailableForEnvironment(platform), + isFalse, + ); + }); + + test('returns true on master branch in postsubmit', () { + platform = FakePlatform( + environment: { + 'FLUTTER_ROOT': _kFlutterRoot, + 'SWARMING_TASK_ID' : 'sweet task ID', + 'GOLDCTL' : 'some/path', + 'GIT_BRANCH' : 'master', + }, + operatingSystem: 'macos', + ); + expect( + FlutterPostSubmitFileComparator.isAvailableForEnvironment(platform), + isTrue, + ); + }); + + test('returns true on main branch in postsubmit', () { + platform = FakePlatform( + environment: { + 'FLUTTER_ROOT': _kFlutterRoot, + 'SWARMING_TASK_ID' : 'sweet task ID', + 'GOLDCTL' : 'some/path', + 'GIT_BRANCH' : 'main', }, operatingSystem: 'macos', ); @@ -828,6 +877,57 @@ void main() { }); group('correctly determines testing environment', () { + test('returns false on release branches in presubmit', () { + platform = FakePlatform( + environment: { + 'FLUTTER_ROOT': _kFlutterRoot, + 'SWARMING_TASK_ID' : 'sweet task ID', + 'GOLDCTL' : 'some/path', + 'GOLD_TRYJOB' : 'true', + 'GIT_BRANCH' : 'flutter-3.16-candidate.0', + }, + operatingSystem: 'macos', + ); + expect( + FlutterPreSubmitFileComparator.isAvailableForEnvironment(platform), + isFalse, + ); + }); + + test('returns true on master branch in presubmit', () { + platform = FakePlatform( + environment: { + 'FLUTTER_ROOT': _kFlutterRoot, + 'SWARMING_TASK_ID' : 'sweet task ID', + 'GOLDCTL' : 'some/path', + 'GOLD_TRYJOB' : 'true', + 'GIT_BRANCH' : 'master', + }, + operatingSystem: 'macos', + ); + expect( + FlutterPreSubmitFileComparator.isAvailableForEnvironment(platform), + isTrue, + ); + }); + + test('returns true on main branch in presubmit', () { + platform = FakePlatform( + environment: { + 'FLUTTER_ROOT': _kFlutterRoot, + 'SWARMING_TASK_ID' : 'sweet task ID', + 'GOLDCTL' : 'some/path', + 'GOLD_TRYJOB' : 'true', + 'GIT_BRANCH' : 'main', + }, + operatingSystem: 'macos', + ); + expect( + FlutterPreSubmitFileComparator.isAvailableForEnvironment(platform), + isTrue, + ); + }); + test('returns true for Luci', () { platform = FakePlatform( environment: { @@ -835,6 +935,7 @@ void main() { 'SWARMING_TASK_ID' : '12345678990', 'GOLDCTL' : 'goldctl', 'GOLD_TRYJOB' : 'git/ref/12345/head', + 'GIT_BRANCH' : 'master', }, operatingSystem: 'macos', ); @@ -908,6 +1009,39 @@ void main() { group('Skipping', () { group('correctly determines testing environment', () { + test('returns true on release branches in presubmit', () { + platform = FakePlatform( + environment: { + 'FLUTTER_ROOT': _kFlutterRoot, + 'SWARMING_TASK_ID' : 'sweet task ID', + 'GOLDCTL' : 'some/path', + 'GOLD_TRYJOB' : 'true', + 'GIT_BRANCH' : 'flutter-3.16-candidate.0', + }, + operatingSystem: 'macos', + ); + expect( + FlutterSkippingFileComparator.isAvailableForEnvironment(platform), + isTrue, + ); + }); + + test('returns true on release branches in postsubmit', () { + platform = FakePlatform( + environment: { + 'FLUTTER_ROOT': _kFlutterRoot, + 'SWARMING_TASK_ID' : 'sweet task ID', + 'GOLDCTL' : 'some/path', + 'GIT_BRANCH' : 'flutter-3.16-candidate.0', + }, + operatingSystem: 'macos', + ); + expect( + FlutterSkippingFileComparator.isAvailableForEnvironment(platform), + isTrue, + ); + }); + test('returns true on Cirrus builds', () { platform = FakePlatform( environment: { @@ -936,7 +1070,7 @@ void main() { ); }); - test('returns false - no CI', () { + test('returns false - not in CI', () { platform = FakePlatform( environment: { 'FLUTTER_ROOT': _kFlutterRoot, @@ -944,8 +1078,7 @@ void main() { operatingSystem: 'macos', ); expect( - FlutterSkippingFileComparator.isAvailableForEnvironment( - platform), + FlutterSkippingFileComparator.isAvailableForEnvironment(platform), isFalse, ); }); From 3b804f183b11680c3078ae4bfa92109ab34e3464 Mon Sep 17 00:00:00 2001 From: Chris Bracken Date: Sat, 9 Dec 2023 01:21:18 +0900 Subject: [PATCH 02/11] [macOS] Suppress Xcode 15 createItemModels warning (#138243) (#139782) As of Xcode 15 on macOS Sonoma, the following message is (repeatedly) output to stderr during builds (repros on non-Flutter apps). It is supppressed in xcode itself, but not when run from the command-line. ``` 2023-11-10 10:44:58.031 xcodebuild[61115:1017566] [MT] DVTAssertions: Warning in /System/Volumes/Data/SWE/Apps/DT/BuildRoots/BuildRoot11/ActiveBuildRoot/Library/Caches/com.apple.xbs/Sources/IDEFrameworks/IDEFrameworks-22267/IDEFoundation/Provisioning/Capabilities Infrastructure/IDECapabilityQuerySelection.swift:103 Details: createItemModels creation requirements should not create capability item model for a capability item model that already exists. Function: createItemModels(for:itemModelSource:) Thread: <_NSMainThread: 0x6000027c0280>{number = 1, name = main} Please file a bug at https://feedbackassistant.apple.com with this warning message and any useful information you can provide. ``` This suppresses this message from stderr in our macOS build logs. Issue: https://github.com/flutter/flutter/issues/135277 Cherry-pick: https://github.com/flutter/flutter/issues/139284 https://github.com/flutter/flutter/wiki/Tree-hygiene#overview [Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene [test-exempt]: https://github.com/flutter/flutter/wiki/Tree-hygiene#tests [Flutter Style Guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo [Features we expect every widget to implement]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/wiki/Chat *Replace this paragraph with a description of what this PR is changing or adding, and why. Consider including before/after screenshots.* *List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.* *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].* --- .../lib/src/macos/build_macos.dart | 20 ++++++++++++++++++- .../hermetic/build_macos_test.dart | 9 +++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/flutter_tools/lib/src/macos/build_macos.dart b/packages/flutter_tools/lib/src/macos/build_macos.dart index 174261af99061..626a9c0668327 100644 --- a/packages/flutter_tools/lib/src/macos/build_macos.dart +++ b/packages/flutter_tools/lib/src/macos/build_macos.dart @@ -27,9 +27,27 @@ import 'migrations/remove_macos_framework_link_and_embedding_migration.dart'; /// Filter out xcodebuild logging unrelated to macOS builds: /// ``` /// xcodebuild[2096:1927385] Requested but did not find extension point with identifier Xcode.IDEKit.ExtensionPointIdentifierToBundleIdentifier for extension Xcode.DebuggerFoundation.AppExtensionToBundleIdentifierMap.watchOS of plug-in com.apple.dt.IDEWatchSupportCore +/// /// note: Using new build system +/// +/// xcodebuild[61115:1017566] [MT] DVTAssertions: Warning in /System/Volumes/Data/SWE/Apps/DT/BuildRoots/BuildRoot11/ActiveBuildRoot/Library/Caches/com.apple.xbs/Sources/IDEFrameworks/IDEFrameworks-22267/IDEFoundation/Provisioning/Capabilities Infrastructure/IDECapabilityQuerySelection.swift:103 +/// Details: createItemModels creation requirements should not create capability item model for a capability item model that already exists. +/// Function: createItemModels(for:itemModelSource:) +/// Thread: <_NSMainThread: 0x6000027c0280>{number = 1, name = main} +/// Please file a bug at https://feedbackassistant.apple.com with this warning message and any useful information you can provide. + /// ``` -final RegExp _filteredOutput = RegExp(r'^((?!Requested but did not find extension point with identifier|note\:).)*$'); +final RegExp _filteredOutput = RegExp( + r'^((?!' + r'Requested but did not find extension point with identifier|' + r'note\:|' + r'\[MT\] DVTAssertions: Warning in /System/Volumes/Data/SWE/|' + r'Details\: createItemModels|' + r'Function\: createItemModels|' + r'Thread\: <_NSMainThread\:|' + r'Please file a bug at https\://feedbackassistant\.apple\.' + r').)*$' + ); /// Builds the macOS project through xcodebuild. // TODO(zanderso): refactor to share code with the existing iOS code. diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart index 014ae63b6e07a..3ba9dc7429c29 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart @@ -124,6 +124,11 @@ note: Building targets in dependency order stderr: ''' 2022-03-24 10:07:21.954 xcodebuild[2096:1927385] Requested but did not find extension point with identifier Xcode.IDEKit.ExtensionSentinelHostApplications for extension Xcode.DebuggerFoundation.AppExtensionHosts.watchOS of plug-in com.apple.dt.IDEWatchSupportCore 2022-03-24 10:07:21.954 xcodebuild[2096:1927385] Requested but did not find extension point with identifier Xcode.IDEKit.ExtensionPointIdentifierToBundleIdentifier for extension Xcode.DebuggerFoundation.AppExtensionToBundleIdentifierMap.watchOS of plug-in com.apple.dt.IDEWatchSupportCore +2023-11-10 10:44:58.030 xcodebuild[61115:1017566] [MT] DVTAssertions: Warning in /System/Volumes/Data/SWE/Apps/DT/BuildRoots/BuildRoot11/ActiveBuildRoot/Library/Caches/com.apple.xbs/Sources/IDEFrameworks/IDEFrameworks-22267/IDEFoundation/Provisioning/Capabilities Infrastructure/IDECapabilityQuerySelection.swift:103 +Details: createItemModels creation requirements should not create capability item model for a capability item model that already exists. +Function: createItemModels(for:itemModelSource:) +Thread: <_NSMainThread: 0x6000027c0280>{number = 1, name = main} +Please file a bug at https://feedbackassistant.apple.com with this warning message and any useful information you can provide. STDERR STUFF ''', onRun: () { @@ -247,6 +252,10 @@ STDERR STUFF expect(testLogger.errorText, isNot(contains('xcodebuild[2096:1927385]'))); expect(testLogger.errorText, isNot(contains('Using new build system'))); expect(testLogger.errorText, isNot(contains('Building targets in dependency order'))); + expect(testLogger.errorText, isNot(contains('DVTAssertions: Warning in'))); + expect(testLogger.errorText, isNot(contains('createItemModels'))); + expect(testLogger.errorText, isNot(contains('_NSMainThread:'))); + expect(testLogger.errorText, isNot(contains('Please file a bug at https://feedbackassistant'))); }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ From 7417c4eaeb6cb39dd5f8033b3e24c406a0acfac5 Mon Sep 17 00:00:00 2001 From: Andrew Kolos Date: Mon, 11 Dec 2023 10:28:18 -0800 Subject: [PATCH 03/11] [CP] have `Java.version` return null if `java --version` fails or cannot be run (#139698) cherry-picks changes from https://github.com/flutter/flutter/pull/139614 onto the stable channel --- .../flutter_tools/lib/src/android/java.dart | 5 +++++ .../test/general.shard/android/java_test.dart | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/flutter_tools/lib/src/android/java.dart b/packages/flutter_tools/lib/src/android/java.dart index 699fcfddfaaf8..f1e2934e365ff 100644 --- a/packages/flutter_tools/lib/src/android/java.dart +++ b/packages/flutter_tools/lib/src/android/java.dart @@ -136,6 +136,10 @@ class Java { /// Returns the version of java in the format \d(.\d)+(.\d)+ /// Returns null if version could not be determined. late final Version? version = (() { + if (!canRun()) { + return null; + } + final RunResult result = _processUtils.runSync( [binaryPath, '--version'], environment: environment, @@ -143,6 +147,7 @@ class Java { if (result.exitCode != 0) { _logger.printTrace('java --version failed: exitCode: ${result.exitCode}' ' stdout: ${result.stdout} stderr: ${result.stderr}'); + return null; } final String rawVersionOutput = result.stdout; final List versionLines = rawVersionOutput.split('\n'); diff --git a/packages/flutter_tools/test/general.shard/android/java_test.dart b/packages/flutter_tools/test/general.shard/android/java_test.dart index c7ff6786dae02..368f2565c5f1a 100644 --- a/packages/flutter_tools/test/general.shard/android/java_test.dart +++ b/packages/flutter_tools/test/general.shard/android/java_test.dart @@ -183,7 +183,7 @@ OpenJDK 64-Bit Server VM Zulu19.32+15-CA (build 19.0.2+7, mixed mode, sharing) }); }); - group('getVersionString', () { + group('version', () { late Java java; setUp(() { @@ -208,6 +208,23 @@ OpenJDK 64-Bit Server VM Zulu19.32+15-CA (build 19.0.2+7, mixed mode, sharing) ); } + testWithoutContext('is null when java binary cannot be run', () async { + addJavaVersionCommand(''); + processManager.excludedExecutables.add('java'); + + expect(java.version, null); + }); + + testWithoutContext('is null when java --version returns a non-zero exit code', () async { + processManager.addCommand( + FakeCommand( + command: [java.binaryPath, '--version'], + exitCode: 1, + ), + ); + expect(java.version, null); + }); + testWithoutContext('parses jdk 8', () { addJavaVersionCommand(''' java version "1.8.0_202" From 2e9cb0aa71a386a91f73f7088d115c0d96654829 Mon Sep 17 00:00:00 2001 From: Elias Yishak <42216813+eliasyishak@users.noreply.github.com> Date: Mon, 11 Dec 2023 14:35:13 -0700 Subject: [PATCH 04/11] [CP] Catch error for missing directory in `FontConfigManager` (#138496) (#139743) Closes: - https://github.com/flutter/flutter/issues/138434 We will catch any errors while attempting to clear the temp directories that don't exist for the `FontConfigManager` class --- .../lib/src/test/font_config_manager.dart | 6 +++++- .../general.shard/flutter_tester_device_test.dart | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/flutter_tools/lib/src/test/font_config_manager.dart b/packages/flutter_tools/lib/src/test/font_config_manager.dart index 92d641503590f..052de458a3627 100644 --- a/packages/flutter_tools/lib/src/test/font_config_manager.dart +++ b/packages/flutter_tools/lib/src/test/font_config_manager.dart @@ -34,7 +34,11 @@ class FontConfigManager { Future dispose() async { if (_fontsDirectory != null) { globals.printTrace('Deleting ${_fontsDirectory!.path}...'); - await _fontsDirectory!.delete(recursive: true); + try { + await _fontsDirectory!.delete(recursive: true); + } on FileSystemException { + // Silently exit + } _fontsDirectory = null; } } diff --git a/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart b/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart index 752100624f888..d3e035f4e7b3f 100644 --- a/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart +++ b/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart @@ -50,6 +50,18 @@ void main() { uriConverter: (String input) => '$input/converted', ); + testUsingContext('Missing dir error caught for FontConfigManger.dispose', () async { + final FontConfigManager fontConfigManager = FontConfigManager(); + + final Directory fontsDirectory = fileSystem.file(fontConfigManager.fontConfigFile).parent; + fontsDirectory.deleteSync(recursive: true); + + await fontConfigManager.dispose(); + }, overrides: { + FileSystem: () => fileSystem, + ProcessManager: () => processManager, + }); + group('The FLUTTER_TEST environment variable is passed to the test process', () { setUp(() { processManager = FakeProcessManager.list([]); From 78666c8dc57e9f7548ca9f8dd0740fbf0c658dc9 Mon Sep 17 00:00:00 2001 From: Xilai Zhang Date: Tue, 19 Dec 2023 16:14:14 -0800 Subject: [PATCH 05/11] =?UTF-8?q?[flutter=20release]=20Update=20Engine=20r?= =?UTF-8?q?evision=20to=203f3e560236539b7e2702f5ac790b2a4691b32d49=20fo?= =?UTF-8?q?=E2=80=A6=20(#140424)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …r stable release 3.16.5 roll engine version into framework. (for some reasons conductor didn't auto generate this PR) --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 05add3e5e8948..2d262497c8695 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -54a7145303f0dd9d0f93424a2e124eb4abef5091 +3f3e560236539b7e2702f5ac790b2a4691b32d49 From 5a21b628c3e44229ec58c0bc0b0a2e5e2c6b4beb Mon Sep 17 00:00:00 2001 From: Elliott Brooks <21270878+elliette@users.noreply.github.com> Date: Wed, 3 Jan 2024 09:33:07 -0800 Subject: [PATCH 06/11] CP: Manually update DWDS to 21.0.0+1 to fix null-cast error when debugging from VS Code (#140711) Update DWDS version on Flutter stable to a hotfix release to resolve https://github.com/dart-lang/webdev/issues/2297 See https://github.com/dart-lang/webdev/pull/2319 --- packages/flutter_tools/pubspec.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index e77573b019693..027601888c89e 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: args: 2.4.2 browser_launcher: 1.1.1 dds: 2.9.5 - dwds: 21.0.0 + dwds: 21.0.0+1 completion: 1.0.1 coverage: 1.6.3 crypto: 3.0.3 @@ -112,4 +112,4 @@ dartdoc: # Exclude this package from the hosted API docs. nodoc: true -# PUBSPEC CHECKSUM: 537c +# PUBSPEC CHECKSUM: 05d8 From 4476a6d138cffeaf2fda36c53d276df2947b5cdb Mon Sep 17 00:00:00 2001 From: Victoria Ashworth <15619084+vashworth@users.noreply.github.com> Date: Mon, 8 Jan 2024 16:51:36 -0600 Subject: [PATCH 07/11] [CP] Run tests on either macOS 12 or 13 (#140892) In preparation for migrating our fleet to macOS 13, we're updating tests to run on either macOS 12 or macOS 13. These tests have been running on master since Nov 28 and the change is already in 3.18 beta. We want to make this change to stable so we can upgrade more bots to macOS 13. Original PR: https://github.com/flutter/flutter/pull/137365 Fixes https://github.com/flutter/flutter/issues/140895 --- .ci.yaml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.ci.yaml b/.ci.yaml index 48874999b2155..8fb822e13d123 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -79,7 +79,7 @@ platform_properties: [ {"dependency": "apple_signing", "version": "version:to_2024"} ] - os: Mac-12 + os: Mac-12|Mac-13 device_type: none $flutter/osx_sdk : >- { @@ -91,7 +91,7 @@ platform_properties: [ {"dependency": "apple_signing", "version": "version:to_2024"} ] - os: Mac-12 + os: Mac-12|Mac-13 device_type: none cpu: arm64 $flutter/osx_sdk : >- @@ -106,7 +106,7 @@ platform_properties: ] device_type: none mac_model: "Macmini8,1" - os: Mac-12 + os: Mac-12|Mac-13 tags: > ["devicelab", "hostonly", "mac"] $flutter/osx_sdk : >- @@ -119,7 +119,7 @@ platform_properties: [ {"dependency": "apple_signing", "version": "version:to_2024"} ] - os: Mac-12 + os: Mac-12|Mac-13 device_type: none cpu: x86 $flutter/osx_sdk : >- @@ -133,7 +133,7 @@ platform_properties: {"dependency": "gems", "version": "v3.3.14"}, {"dependency": "apple_signing", "version": "version:to_2024"} ] - os: Mac-12 + os: Mac-12|Mac-13 device_type: none cpu: x86 $flutter/osx_sdk : >- @@ -148,7 +148,7 @@ platform_properties: {"dependency": "chrome_and_driver", "version": "version:117.0"}, {"dependency": "open_jdk", "version": "version:11"} ] - os: Mac-12 + os: Mac-12|Mac-13 cpu: x86 device_type: "msm8952" mac_arm64_android: @@ -158,7 +158,7 @@ platform_properties: {"dependency": "android_sdk", "version": "version:33v6"}, {"dependency": "open_jdk", "version": "version:11"} ] - os: Mac-12 + os: Mac-12|Mac-13 cpu: arm64 device_type: "msm8952" mac_ios: @@ -168,7 +168,7 @@ platform_properties: {"dependency": "gems", "version": "v3.3.14"}, {"dependency": "apple_signing", "version": "version:to_2024"} ] - os: Mac-12 + os: Mac-12|Mac-13 cpu: x86 device_os: iOS-16 $flutter/osx_sdk : >- @@ -182,7 +182,7 @@ platform_properties: {"dependency": "gems", "version": "v3.3.14"}, {"dependency": "apple_signing", "version": "none"} ] - os: Mac-12 + os: Mac-12|Mac-13 cpu: arm64 device_os: iOS-16 $flutter/osx_sdk : >- @@ -4337,7 +4337,7 @@ targets: ["devicelab", "ios", "mac"] task_name: flutter_gallery__transition_perf_e2e_ios drone_dimensions: > - ["device_os=iOS-16","os=Mac-12", "cpu=x86"] + ["device_os=iOS-16","os=Mac-12|Mac-13", "cpu=x86"] - name: Mac_ios animated_blur_backdrop_filter_perf_ios__timeline_summary recipe: devicelab/devicelab_drone From 4ec0689fa10c8b142911219cc979db6058fd50b3 Mon Sep 17 00:00:00 2001 From: Christopher Fujino Date: Mon, 8 Jan 2024 14:59:27 -0800 Subject: [PATCH 08/11] [CP] Fix tool crash while debugging an iOS device and deleting a temp directory fails (#140842) Original issue: https://github.com/flutter/flutter/issues/140416 Original PR: https://github.com/flutter/flutter/pull/140415 CP request issue: https://github.com/flutter/flutter/issues/140843 --- .../lib/src/ios/core_devices.dart | 3 +- .../base/error_handling_io_test.dart | 8 ++--- .../general.shard/ios/core_devices_test.dart | 35 ++++++++++++++++++- 3 files changed, 40 insertions(+), 6 deletions(-) diff --git a/packages/flutter_tools/lib/src/ios/core_devices.dart b/packages/flutter_tools/lib/src/ios/core_devices.dart index aa39adbf66cb3..0d3bcdd2a98be 100644 --- a/packages/flutter_tools/lib/src/ios/core_devices.dart +++ b/packages/flutter_tools/lib/src/ios/core_devices.dart @@ -5,6 +5,7 @@ import 'package:meta/meta.dart'; import 'package:process/process.dart'; +import '../base/error_handling_io.dart'; import '../base/file_system.dart'; import '../base/io.dart'; import '../base/logger.dart'; @@ -101,7 +102,7 @@ class IOSCoreDeviceControl { _logger.printError('Error executing devicectl: $err'); return []; } finally { - tempDirectory.deleteSync(recursive: true); + ErrorHandlingFileSystem.deleteIfExists(tempDirectory, recursive: true); } } diff --git a/packages/flutter_tools/test/general.shard/base/error_handling_io_test.dart b/packages/flutter_tools/test/general.shard/base/error_handling_io_test.dart index e6363ceb91b39..ef2752b60477d 100644 --- a/packages/flutter_tools/test/general.shard/base/error_handling_io_test.dart +++ b/packages/flutter_tools/test/general.shard/base/error_handling_io_test.dart @@ -111,7 +111,7 @@ void main() { exceptionHandler = FileExceptionHandler(); }); - testWithoutContext('bypasses error handling when withAllowedFailure is used', () { + testWithoutContext('bypasses error handling when noExitOnFailure is used', () { final ErrorHandlingFileSystem fileSystem = ErrorHandlingFileSystem( delegate: MemoryFileSystem.test(opHandle: exceptionHandler.opHandle), platform: windowsPlatform, @@ -123,9 +123,9 @@ void main() { FileSystemOp.write, FileSystemException('', file.path, const OSError('', kUserPermissionDenied)), ); - + final Matcher throwsNonToolExit = throwsA(isNot(isA())); expect(() => ErrorHandlingFileSystem.noExitOnFailure( - () => file.writeAsStringSync('')), throwsException); + () => file.writeAsStringSync('')), throwsNonToolExit); // nesting does not unconditionally re-enable errors. expect(() { @@ -133,7 +133,7 @@ void main() { ErrorHandlingFileSystem.noExitOnFailure(() { }); file.writeAsStringSync(''); }); - }, throwsException); + }, throwsNonToolExit); // Check that state does not leak. expect(() => file.writeAsStringSync(''), throwsToolExit()); diff --git a/packages/flutter_tools/test/general.shard/ios/core_devices_test.dart b/packages/flutter_tools/test/general.shard/ios/core_devices_test.dart index d820e1a13bcb2..a8aecf4540a2f 100644 --- a/packages/flutter_tools/test/general.shard/ios/core_devices_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/core_devices_test.dart @@ -5,6 +5,7 @@ import 'package:file/memory.dart'; import 'package:file_testing/file_testing.dart'; import 'package:flutter_tools/src/base/file_system.dart'; +import 'package:flutter_tools/src/base/io.dart'; import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/version.dart'; import 'package:flutter_tools/src/ios/core_devices.dart'; @@ -35,7 +36,7 @@ void main() { version: Version(14, 0, 0), ); xcode = Xcode.test( - processManager: FakeProcessManager.any(), + processManager: fakeProcessManager, xcodeProjectInterpreter: xcodeProjectInterpreter, ); deviceControl = IOSCoreDeviceControl( @@ -86,6 +87,7 @@ void main() { setUp(() { logger = BufferLogger.test(); fakeProcessManager = FakeProcessManager.empty(); + // TODO(fujino): make this FakeProcessManager.empty() xcode = Xcode.test(processManager: FakeProcessManager.any()); deviceControl = IOSCoreDeviceControl( logger: logger, @@ -1322,6 +1324,37 @@ invalid JSON }); group('list devices', () { + testWithoutContext('Handles FileSystemException deleting temp directory', () async { + final Directory tempDir = fileSystem.systemTempDirectory + .childDirectory('core_devices.rand0'); + final File tempFile = tempDir.childFile('core_device_list.json'); + final List args = [ + 'xcrun', + 'devicectl', + 'list', + 'devices', + '--timeout', + '5', + '--json-output', + tempFile.path, + ]; + fakeProcessManager.addCommand(FakeCommand( + command: args, + onRun: () { + // Simulate that this command threw and simulataneously the OS + // deleted the temp directory + expect(tempFile, exists); + tempDir.deleteSync(recursive: true); + expect(tempFile, isNot(exists)); + throw ProcessException(args.first, args.sublist(1)); + }, + )); + + await deviceControl.getCoreDevices(); + expect(logger.errorText, contains('Error executing devicectl: ProcessException')); + expect(fakeProcessManager, hasNoRemainingExpectations); + }); + testWithoutContext('No devices', () async { const String deviceControlOutput = ''' { From 019fc5d65f759f4a70ebdde8ec6a9c05cbb9724f Mon Sep 17 00:00:00 2001 From: Elias Yishak <42216813+eliasyishak@users.noreply.github.com> Date: Tue, 9 Jan 2024 15:21:10 -0500 Subject: [PATCH 09/11] [CP] Migrate command usage values (#139383) (#141019) Fixes: - https://github.com/flutter/flutter/issues/141017 --- .../lib/src/commands/assemble.dart | 38 ++--- .../lib/src/commands/build_aar.dart | 28 +++- .../lib/src/commands/build_apk.dart | 26 ++++ .../lib/src/commands/build_appbundle.dart | 25 ++++ .../lib/src/commands/build_bundle.dart | 14 ++ .../lib/src/commands/create.dart | 10 ++ .../lib/src/commands/packages.dart | 54 ++++++- .../flutter_tools/lib/src/commands/run.dart | 76 ++++++++-- .../flutter_tools/lib/src/context_runner.dart | 10 +- .../lib/src/reporting/unified_analytics.dart | 52 +++++++ .../lib/src/runner/flutter_command.dart | 29 +++- packages/flutter_tools/pubspec.yaml | 4 +- .../hermetic/assemble_test.dart | 34 +++++ .../commands.shard/hermetic/run_test.dart | 42 ++++++ .../permeable/build_aar_test.dart | 15 +- .../permeable/build_apk_test.dart | 21 +++ .../permeable/build_appbundle_test.dart | 18 +++ .../permeable/build_bundle_test.dart | 40 ++++- .../commands.shard/permeable/create_test.dart | 26 +++- .../permeable/packages_test.dart | 30 ++++ .../general.shard/unified_analytics_test.dart | 139 ++++++++++++++++++ packages/flutter_tools/test/src/common.dart | 77 ++++++++++ packages/flutter_tools/test/src/context.dart | 2 + packages/flutter_tools/test/src/fakes.dart | 2 +- 24 files changed, 748 insertions(+), 64 deletions(-) create mode 100644 packages/flutter_tools/lib/src/reporting/unified_analytics.dart create mode 100644 packages/flutter_tools/test/general.shard/unified_analytics_test.dart diff --git a/packages/flutter_tools/lib/src/commands/assemble.dart b/packages/flutter_tools/lib/src/commands/assemble.dart index 1f9a212c07679..a8728c20e4ddc 100644 --- a/packages/flutter_tools/lib/src/commands/assemble.dart +++ b/packages/flutter_tools/lib/src/commands/assemble.dart @@ -4,6 +4,7 @@ import 'package:args/args.dart'; import 'package:meta/meta.dart'; +import 'package:unified_analytics/unified_analytics.dart'; import '../artifacts.dart'; import '../base/common.dart'; @@ -126,6 +127,8 @@ class AssembleCommand extends FlutterCommand { final BuildSystem _buildSystem; + late final FlutterProject _flutterProject = FlutterProject.current(); + @override String get description => 'Assemble and build Flutter resources.'; @@ -136,18 +139,18 @@ class AssembleCommand extends FlutterCommand { String get category => FlutterCommandCategory.project; @override - Future get usageValues async { - final FlutterProject flutterProject = FlutterProject.current(); - try { - return CustomDimensions( - commandBuildBundleTargetPlatform: _environment.defines[kTargetPlatform], - commandBuildBundleIsModule: flutterProject.isModule, - ); - } on Exception { - // We've failed to send usage. - } - return const CustomDimensions(); - } + Future get usageValues async => CustomDimensions( + commandBuildBundleTargetPlatform: _environment.defines[kTargetPlatform], + commandBuildBundleIsModule: _flutterProject.isModule, + ); + + @override + Future unifiedAnalyticsUsageValues(String commandPath) async => Event.commandUsageValues( + workflow: commandPath, + commandHasTerminal: hasTerminal, + buildBundleTargetPlatform: _environment.defines[kTargetPlatform], + buildBundleIsModule: _flutterProject.isModule, + ); @override Future> get requiredArtifacts async { @@ -208,22 +211,21 @@ class AssembleCommand extends FlutterCommand { /// The environmental configuration for a build invocation. Environment _createEnvironment() { - final FlutterProject flutterProject = FlutterProject.current(); String? output = stringArg('output'); if (output == null) { throwToolExit('--output directory is required for assemble.'); } // If path is relative, make it absolute from flutter project. if (globals.fs.path.isRelative(output)) { - output = globals.fs.path.join(flutterProject.directory.path, output); + output = globals.fs.path.join(_flutterProject.directory.path, output); } final Artifacts artifacts = globals.artifacts!; final Environment result = Environment( outputDir: globals.fs.directory(output), - buildDir: flutterProject.directory + buildDir: _flutterProject.directory .childDirectory('.dart_tool') .childDirectory('flutter_build'), - projectDir: flutterProject.directory, + projectDir: _flutterProject.directory, defines: _parseDefines(stringsArg('define')), inputs: _parseDefines(stringsArg('input')), cacheDir: globals.cache.getRoot(), @@ -265,7 +267,7 @@ class AssembleCommand extends FlutterCommand { } results[kDeferredComponents] = 'false'; - if (FlutterProject.current().manifest.deferredComponents != null && isDeferredComponentsTargets() && !isDebug()) { + if (_flutterProject.manifest.deferredComponents != null && isDeferredComponentsTargets() && !isDebug()) { results[kDeferredComponents] = 'true'; } if (argumentResults.wasParsed(FlutterOptions.kExtraFrontEndOptions)) { @@ -296,7 +298,7 @@ class AssembleCommand extends FlutterCommand { "Try re-running 'flutter build ios' or the appropriate build command." ); } - if (FlutterProject.current().manifest.deferredComponents != null + if (_flutterProject.manifest.deferredComponents != null && decodedDefines.contains('validate-deferred-components=true') && deferredTargets.isNotEmpty && !isDebug()) { diff --git a/packages/flutter_tools/lib/src/commands/build_aar.dart b/packages/flutter_tools/lib/src/commands/build_aar.dart index 445620c7d1e1d..1096423bd4721 100644 --- a/packages/flutter_tools/lib/src/commands/build_aar.dart +++ b/packages/flutter_tools/lib/src/commands/build_aar.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:unified_analytics/unified_analytics.dart'; + import '../android/android_builder.dart'; import '../android/android_sdk.dart'; import '../android/gradle_utils.dart'; @@ -75,14 +77,15 @@ class BuildAarCommand extends BuildSubCommand { DevelopmentArtifact.androidGenSnapshot, }; + late final FlutterProject project = _getProject(); + @override Future get usageValues async { - final FlutterProject flutterProject = _getProject(); String projectType; - if (flutterProject.manifest.isModule) { + if (project.manifest.isModule) { projectType = 'module'; - } else if (flutterProject.manifest.isPlugin) { + } else if (project.manifest.isPlugin) { projectType = 'plugin'; } else { projectType = 'app'; @@ -94,6 +97,25 @@ class BuildAarCommand extends BuildSubCommand { ); } + @override + Future unifiedAnalyticsUsageValues(String commandPath) async { + final String projectType; + if (project.manifest.isModule) { + projectType = 'module'; + } else if (project.manifest.isPlugin) { + projectType = 'plugin'; + } else { + projectType = 'app'; + } + + return Event.commandUsageValues( + workflow: commandPath, + commandHasTerminal: hasTerminal, + buildAarProjectType: projectType, + buildAarTargetPlatform: stringsArg('target-platform').join(','), + ); + } + @override final String description = 'Build a repository containing an AAR and a POM file.\n\n' 'By default, AARs are built for `release`, `debug` and `profile`.\n' diff --git a/packages/flutter_tools/lib/src/commands/build_apk.dart b/packages/flutter_tools/lib/src/commands/build_apk.dart index d255d4dd68c2b..b9fb98c84a21d 100644 --- a/packages/flutter_tools/lib/src/commands/build_apk.dart +++ b/packages/flutter_tools/lib/src/commands/build_apk.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:unified_analytics/unified_analytics.dart'; + import '../android/android_builder.dart'; import '../android/build_validation.dart'; import '../android/gradle_utils.dart'; @@ -98,6 +100,30 @@ class BuildApkCommand extends BuildSubCommand { ); } + @override + Future unifiedAnalyticsUsageValues(String commandPath) async { + final String buildMode; + + if (boolArg('release')) { + buildMode = 'release'; + } else if (boolArg('debug')) { + buildMode = 'debug'; + } else if (boolArg('profile')) { + buildMode = 'profile'; + } else { + // The build defaults to release. + buildMode = 'release'; + } + + return Event.commandUsageValues( + workflow: commandPath, + commandHasTerminal: hasTerminal, + buildApkTargetPlatform: stringsArg('target-platform').join(','), + buildApkBuildMode: buildMode, + buildApkSplitPerAbi: boolArg('split-per-abi'), + ); + } + @override Future runCommand() async { if (globals.androidSdk == null) { diff --git a/packages/flutter_tools/lib/src/commands/build_appbundle.dart b/packages/flutter_tools/lib/src/commands/build_appbundle.dart index 000d2cc2f3c50..5ad613b2ddf32 100644 --- a/packages/flutter_tools/lib/src/commands/build_appbundle.dart +++ b/packages/flutter_tools/lib/src/commands/build_appbundle.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:unified_analytics/unified_analytics.dart'; + import '../android/android_builder.dart'; import '../android/build_validation.dart'; import '../android/deferred_components_prebuild_validator.dart'; @@ -105,6 +107,29 @@ class BuildAppBundleCommand extends BuildSubCommand { ); } + @override + Future unifiedAnalyticsUsageValues(String commandPath) async { + final String buildMode; + + if (boolArg('release')) { + buildMode = 'release'; + } else if (boolArg('debug')) { + buildMode = 'debug'; + } else if (boolArg('profile')) { + buildMode = 'profile'; + } else { + // The build defaults to release. + buildMode = 'release'; + } + + return Event.commandUsageValues( + workflow: commandPath, + commandHasTerminal: hasTerminal, + buildAppBundleTargetPlatform: stringsArg('target-platform').join(','), + buildAppBundleBuildMode: buildMode, + ); + } + @override Future runCommand() async { if (globals.androidSdk == null) { diff --git a/packages/flutter_tools/lib/src/commands/build_bundle.dart b/packages/flutter_tools/lib/src/commands/build_bundle.dart index 434ab774323ac..534498d8c7b29 100644 --- a/packages/flutter_tools/lib/src/commands/build_bundle.dart +++ b/packages/flutter_tools/lib/src/commands/build_bundle.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'package:unified_analytics/unified_analytics.dart'; + import '../base/common.dart'; import '../build_info.dart'; import '../bundle.dart'; @@ -83,6 +85,18 @@ class BuildBundleCommand extends BuildSubCommand { ); } + @override + Future unifiedAnalyticsUsageValues(String commandPath) async { + final String projectDir = globals.fs.file(targetFile).parent.parent.path; + final FlutterProject flutterProject = FlutterProject.fromDirectory(globals.fs.directory(projectDir)); + return Event.commandUsageValues( + workflow: commandPath, + commandHasTerminal: hasTerminal, + buildBundleTargetPlatform: stringArg('target-platform'), + buildBundleIsModule: flutterProject.isModule, + ); + } + @override Future validateCommand() async { if (boolArg('tree-shake-icons')) { diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart index 97d70b067288a..da9017a353bbe 100644 --- a/packages/flutter_tools/lib/src/commands/create.dart +++ b/packages/flutter_tools/lib/src/commands/create.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:meta/meta.dart'; +import 'package:unified_analytics/unified_analytics.dart'; import '../android/gradle_utils.dart' as gradle; import '../base/common.dart'; @@ -91,6 +92,15 @@ class CreateCommand extends CreateBase { ); } + @override + Future unifiedAnalyticsUsageValues(String commandPath) async => Event.commandUsageValues( + workflow: commandPath, + commandHasTerminal: hasTerminal, + createProjectType: stringArg('template'), + createAndroidLanguage: stringArg('android-language'), + createIosLanguage: stringArg('ios-language'), + ); + // Lazy-initialize the net utilities with values from the context. late final Net _net = Net( httpClientFactory: context.get(), diff --git a/packages/flutter_tools/lib/src/commands/packages.dart b/packages/flutter_tools/lib/src/commands/packages.dart index 824077cd8c9f2..7f57d8858e95a 100644 --- a/packages/flutter_tools/lib/src/commands/packages.dart +++ b/packages/flutter_tools/lib/src/commands/packages.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:args/args.dart'; +import 'package:unified_analytics/unified_analytics.dart'; import '../base/common.dart'; import '../base/os.dart'; @@ -372,6 +373,24 @@ class PackagesGetCommand extends FlutterCommand { return FlutterCommandResult.success(); } + late final Future> _pluginsFound = (() async { + final FlutterProject? rootProject = _rootProject; + if (rootProject == null) { + return []; + } + + return findPlugins(rootProject, throwOnError: false); + })(); + + late final String? _androidEmbeddingVersion = (() { + final FlutterProject? rootProject = _rootProject; + if (rootProject == null) { + return null; + } + + return rootProject.android.getEmbeddingVersion().toString().split('.').last; + })(); + /// The pub packages usage values are incorrect since these are calculated/sent /// before pub get completes. This needs to be performed after dependency resolution. @override @@ -388,7 +407,7 @@ class PackagesGetCommand extends FlutterCommand { if (hasPlugins) { // Do not fail pub get if package config files are invalid before pub has // had a chance to run. - final List plugins = await findPlugins(rootProject, throwOnError: false); + final List plugins = await _pluginsFound; numberPlugins = plugins.length; } else { numberPlugins = 0; @@ -397,7 +416,38 @@ class PackagesGetCommand extends FlutterCommand { return CustomDimensions( commandPackagesNumberPlugins: numberPlugins, commandPackagesProjectModule: rootProject.isModule, - commandPackagesAndroidEmbeddingVersion: rootProject.android.getEmbeddingVersion().toString().split('.').last, + commandPackagesAndroidEmbeddingVersion: _androidEmbeddingVersion, + ); + } + + /// The pub packages usage values are incorrect since these are calculated/sent + /// before pub get completes. This needs to be performed after dependency resolution. + @override + Future unifiedAnalyticsUsageValues(String commandPath) async { + final FlutterProject? rootProject = _rootProject; + if (rootProject == null) { + return Event.commandUsageValues(workflow: commandPath, commandHasTerminal: hasTerminal); + } + + final int numberPlugins; + // Do not send plugin analytics if pub has not run before. + final bool hasPlugins = rootProject.flutterPluginsDependenciesFile.existsSync() + && rootProject.packageConfigFile.existsSync(); + if (hasPlugins) { + // Do not fail pub get if package config files are invalid before pub has + // had a chance to run. + final List plugins = await _pluginsFound; + numberPlugins = plugins.length; + } else { + numberPlugins = 0; + } + + return Event.commandUsageValues( + workflow: commandPath, + commandHasTerminal: hasTerminal, + packagesNumberPlugins: numberPlugins, + packagesProjectModule: rootProject.isModule, + packagesAndroidEmbeddingVersion: _androidEmbeddingVersion, ); } } diff --git a/packages/flutter_tools/lib/src/commands/run.dart b/packages/flutter_tools/lib/src/commands/run.dart index bb6538fcf379f..d8d184b85caef 100644 --- a/packages/flutter_tools/lib/src/commands/run.dart +++ b/packages/flutter_tools/lib/src/commands/run.dart @@ -7,6 +7,7 @@ import 'dart:async'; import 'package:meta/meta.dart'; +import 'package:unified_analytics/unified_analytics.dart' as analytics; import 'package:vm_service/vm_service.dart'; import '../android/android_device.dart'; @@ -431,6 +432,43 @@ class RunCommand extends RunCommandBase { @override Future get usageValues async { + final AnalyticsUsageValuesRecord record = await _sharedAnalyticsUsageValues; + + return CustomDimensions( + commandRunIsEmulator: record.runIsEmulator, + commandRunTargetName: record.runTargetName, + commandRunTargetOsVersion: record.runTargetOsVersion, + commandRunModeName: record.runModeName, + commandRunProjectModule: record.runProjectModule, + commandRunProjectHostLanguage: record.runProjectHostLanguage, + commandRunAndroidEmbeddingVersion: record.runAndroidEmbeddingVersion, + commandRunEnableImpeller: record.runEnableImpeller, + commandRunIOSInterfaceType: record.runIOSInterfaceType, + commandRunIsTest: record.runIsTest, + ); + } + + @override + Future unifiedAnalyticsUsageValues(String commandPath) async { + final AnalyticsUsageValuesRecord record = await _sharedAnalyticsUsageValues; + + return analytics.Event.commandUsageValues( + workflow: commandPath, + commandHasTerminal: hasTerminal, + runIsEmulator: record.runIsEmulator, + runTargetName: record.runTargetName, + runTargetOsVersion: record.runTargetOsVersion, + runModeName: record.runModeName, + runProjectModule: record.runProjectModule, + runProjectHostLanguage: record.runProjectHostLanguage, + runAndroidEmbeddingVersion: record.runAndroidEmbeddingVersion, + runEnableImpeller: record.runEnableImpeller, + runIOSInterfaceType: record.runIOSInterfaceType, + runIsTest: record.runIsTest, + ); + } + + late final Future _sharedAnalyticsUsageValues = (() async { String deviceType, deviceOsVersion; bool isEmulator; bool anyAndroidDevices = false; @@ -496,19 +534,19 @@ class RunCommand extends RunCommandBase { final BuildInfo buildInfo = await getBuildInfo(); final String modeName = buildInfo.modeName; - return CustomDimensions( - commandRunIsEmulator: isEmulator, - commandRunTargetName: deviceType, - commandRunTargetOsVersion: deviceOsVersion, - commandRunModeName: modeName, - commandRunProjectModule: FlutterProject.current().isModule, - commandRunProjectHostLanguage: hostLanguage.join(','), - commandRunAndroidEmbeddingVersion: androidEmbeddingVersion, - commandRunEnableImpeller: enableImpeller.asBool, - commandRunIOSInterfaceType: iOSInterfaceType, - commandRunIsTest: targetFile.endsWith('_test.dart'), + return ( + runIsEmulator: isEmulator, + runTargetName: deviceType, + runTargetOsVersion: deviceOsVersion, + runModeName: modeName, + runProjectModule: FlutterProject.current().isModule, + runProjectHostLanguage: hostLanguage.join(','), + runAndroidEmbeddingVersion: androidEmbeddingVersion, + runEnableImpeller: enableImpeller.asBool, + runIOSInterfaceType: iOSInterfaceType, + runIsTest: targetFile.endsWith('_test.dart'), ); - } + })(); @override bool get shouldRunPub { @@ -783,3 +821,17 @@ class RunCommand extends RunCommandBase { ); } } + +/// Schema for the usage values to send for analytics reporting. +typedef AnalyticsUsageValuesRecord = ({ + String? runAndroidEmbeddingVersion, + bool? runEnableImpeller, + String? runIOSInterfaceType, + bool runIsEmulator, + bool runIsTest, + String runModeName, + String runProjectHostLanguage, + bool runProjectModule, + String runTargetName, + String runTargetOsVersion, +}); diff --git a/packages/flutter_tools/lib/src/context_runner.dart b/packages/flutter_tools/lib/src/context_runner.dart index a5a4f92c25048..1c412832016b3 100644 --- a/packages/flutter_tools/lib/src/context_runner.dart +++ b/packages/flutter_tools/lib/src/context_runner.dart @@ -61,6 +61,7 @@ import 'persistent_tool_state.dart'; import 'reporting/crash_reporting.dart'; import 'reporting/first_run.dart'; import 'reporting/reporting.dart'; +import 'reporting/unified_analytics.dart'; import 'resident_runner.dart'; import 'run_hot.dart'; import 'runner/local_engine.dart'; @@ -88,11 +89,10 @@ Future runInContext( body: runnerWrapper, overrides: overrides, fallbacks: { - Analytics: () => Analytics( - tool: DashTool.flutterTool, - flutterChannel: globals.flutterVersion.channel, - flutterVersion: globals.flutterVersion.frameworkVersion, - dartVersion: globals.flutterVersion.dartSdkVersion, + Analytics: () => getAnalytics( + runningOnBot: runningOnBot, + flutterVersion: globals.flutterVersion, + environment: globals.platform.environment, ), AndroidBuilder: () => AndroidGradleBuilder( java: globals.java, diff --git a/packages/flutter_tools/lib/src/reporting/unified_analytics.dart b/packages/flutter_tools/lib/src/reporting/unified_analytics.dart new file mode 100644 index 0000000000000..767397dbb7a10 --- /dev/null +++ b/packages/flutter_tools/lib/src/reporting/unified_analytics.dart @@ -0,0 +1,52 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:unified_analytics/unified_analytics.dart'; + +import '../version.dart'; + +/// This function is called from within the context runner to perform +/// checks that are necessary for determining if a no-op version of +/// [Analytics] gets returned. +/// +/// When [enableAsserts] is set to `true`, various assert statements +/// will be enabled to ensure usage of this class is within GA4 limitations. +/// +/// For testing purposes, pass in a [FakeAnalytics] instance initialized with +/// an in-memory [FileSystem] to prevent writing to disk. +Analytics getAnalytics({ + required bool runningOnBot, + required FlutterVersion flutterVersion, + required Map environment, + bool enableAsserts = false, + FakeAnalytics? analyticsOverride, +}) { + final String version = flutterVersion.getVersionString(redactUnknownBranches: true); + final bool suppressEnvFlag = environment['FLUTTER_SUPPRESS_ANALYTICS']?.toLowerCase() == 'true'; + + if (// Ignore local user branches. + version.startsWith('[user-branch]') || + // Many CI systems don't do a full git checkout. + version.endsWith('/unknown') || + // Ignore bots. + runningOnBot || + // Ignore when suppressed by FLUTTER_SUPPRESS_ANALYTICS. + suppressEnvFlag) { + return NoOpAnalytics(); + } + + // Providing an override of the [Analytics] instance is preferred when + // running tests for this function to prevent writing to the filesystem + if (analyticsOverride != null) { + return analyticsOverride; + } + + return Analytics( + tool: DashTool.flutterTool, + flutterChannel: flutterVersion.channel, + flutterVersion: flutterVersion.frameworkVersion, + dartVersion: flutterVersion.dartSdkVersion, + enableAsserts: enableAsserts, + ); +} diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index 1d99c9a29e450..19a1c66aef810 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart @@ -7,6 +7,7 @@ import 'package:args/command_runner.dart'; import 'package:file/file.dart'; import 'package:meta/meta.dart'; import 'package:package_config/package_config_types.dart'; +import 'package:unified_analytics/unified_analytics.dart'; import '../application_package.dart'; import '../base/common.dart'; @@ -213,6 +214,11 @@ abstract class FlutterCommand extends Command { bool _excludeDebug = false; bool _excludeRelease = false; + /// Grabs the [Analytics] instance from the global context. It is defined + /// at the [FlutterCommand] level to enable any classes that extend it to + /// easily reference it or overwrite as necessary. + Analytics get analytics => globals.analytics; + void requiresPubspecYaml() { _requiresPubspecYaml = true; } @@ -327,6 +333,9 @@ abstract class FlutterCommand extends Command { return bundle.defaultMainPath; } + /// Indicates if the currenet command running has a terminal attached. + bool get hasTerminal => globals.stdio.hasTerminal; + /// Path to the Dart's package config file. /// /// This can be overridden by some of its subclasses. @@ -1321,6 +1330,14 @@ abstract class FlutterCommand extends Command { /// Additional usage values to be sent with the usage ping. Future get usageValues async => const CustomDimensions(); + /// Additional usage values to be sent with the usage ping for + /// package:unified_analytics. + /// + /// Implementations of [FlutterCommand] can override this getter in order + /// to add additional parameters in the [Event.commandUsageValues] constructor. + Future unifiedAnalyticsUsageValues(String commandPath) async => + Event.commandUsageValues(workflow: commandPath, commandHasTerminal: hasTerminal); + /// Runs this command. /// /// Rather than overriding this method, subclasses should override @@ -1654,9 +1671,17 @@ Run 'flutter -h' (or 'flutter -h') for available flutter commands and setupApplicationPackages(); if (commandPath != null) { + // Until the GA4 migration is complete, we will continue to send to the GA3 instance + // as well as GA4. Once migration is complete, we will only make a call for GA4 values + final List pairOfUsageValues = await Future.wait(>[ + usageValues, + unifiedAnalyticsUsageValues(commandPath), + ]); + Usage.command(commandPath, parameters: CustomDimensions( - commandHasTerminal: globals.stdio.hasTerminal, - ).merge(await usageValues)); + commandHasTerminal: hasTerminal, + ).merge(pairOfUsageValues[0] as CustomDimensions)); + analytics.send(pairOfUsageValues[1] as Event); } return runCommand(); diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index 027601888c89e..fa69407aceeee 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -48,7 +48,7 @@ dependencies: http_multi_server: 3.2.1 convert: 3.1.1 async: 2.11.0 - unified_analytics: 4.0.0 + unified_analytics: 5.8.0 cli_config: 0.1.1 graphs: 2.3.1 @@ -112,4 +112,4 @@ dartdoc: # Exclude this package from the hosted API docs. nodoc: true -# PUBSPEC CHECKSUM: 05d8 +# PUBSPEC CHECKSUM: e7e1 diff --git a/packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart index 4e302df9b8033..e6ac57507d39f 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/assemble_test.dart @@ -13,6 +13,7 @@ import 'package:flutter_tools/src/commands/assemble.dart'; import 'package:flutter_tools/src/convert.dart'; import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/globals.dart' as globals; +import 'package:unified_analytics/unified_analytics.dart'; import '../../src/common.dart'; import '../../src/context.dart'; @@ -24,6 +25,14 @@ void main() { Cache.disableLocking(); Cache.flutterRoot = ''; final StackTrace stackTrace = StackTrace.current; + late FakeAnalytics fakeAnalytics; + + setUp(() { + fakeAnalytics = getInitializedFakeAnalyticsInstance( + fs: MemoryFileSystem.test(), + fakeFlutterVersion: FakeFlutterVersion(), + ); + }); testUsingContext('flutter assemble can run a build', () async { final CommandRunner commandRunner = createTestCommandRunner(AssembleCommand( @@ -85,6 +94,31 @@ void main() { FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true), }); + testUsingContext('flutter assemble sends usage values correctly with platform', () async { + final AssembleCommand command = AssembleCommand( + buildSystem: TestBuildSystem.all(BuildResult(success: true))); + final CommandRunner commandRunner = createTestCommandRunner(command); + await commandRunner.run(['assemble', '-o Output', '-dTargetPlatform=darwin', '-dDarwinArchs=x86_64', 'debug_macos_bundle_flutter_assets']); + + expect( + fakeAnalytics.sentEvents, + contains( + Event.commandUsageValues( + workflow: 'assemble', + commandHasTerminal: false, + buildBundleTargetPlatform: 'darwin', + buildBundleIsModule: false, + ), + ), + ); + }, overrides: { + Cache: () => Cache.test(processManager: FakeProcessManager.any()), + FileSystem: () => MemoryFileSystem.test(), + ProcessManager: () => FakeProcessManager.any(), + FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true), + Analytics: () => fakeAnalytics, + }); + testUsingContext('flutter assemble throws ToolExit if not provided with output', () async { final CommandRunner commandRunner = createTestCommandRunner(AssembleCommand( buildSystem: TestBuildSystem.all(BuildResult(success: true)), diff --git a/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart index 2a5a644a85c07..94c5be88b712b 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/run_test.dart @@ -33,6 +33,7 @@ import 'package:flutter_tools/src/runner/flutter_command.dart'; import 'package:flutter_tools/src/vmservice.dart'; import 'package:flutter_tools/src/web/compile.dart'; import 'package:test/fake.dart'; +import 'package:unified_analytics/unified_analytics.dart' as analytics; import 'package:vm_service/vm_service.dart'; import '../../src/common.dart'; @@ -192,6 +193,7 @@ void main() { late Artifacts artifacts; late TestUsage usage; late FakeAnsiTerminal fakeTerminal; + late analytics.FakeAnalytics fakeAnalytics; setUpAll(() { Cache.disableLocking(); @@ -211,6 +213,10 @@ void main() { libDir.createSync(); final File mainFile = libDir.childFile('main.dart'); mainFile.writeAsStringSync('void main() {}'); + fakeAnalytics = getInitializedFakeAnalyticsInstance( + fs: fs, + fakeFlutterVersion: FakeFlutterVersion(), + ); }); testUsingContext('exits with a user message when no supported devices attached', () async { @@ -478,6 +484,23 @@ void main() { 'cd58': 'false', }) ))); + expect( + fakeAnalytics.sentEvents, + contains( + analytics.Event.commandUsageValues( + workflow: 'run', + commandHasTerminal: globals.stdio.hasTerminal, + runIsEmulator: false, + runTargetName: 'ios', + runTargetOsVersion: 'iOS 13', + runModeName: 'debug', + runProjectModule: false, + runProjectHostLanguage: 'swift', + runIOSInterfaceType: 'usb', + runIsTest: false, + ), + ), + ); }, overrides: { AnsiTerminal: () => fakeTerminal, Artifacts: () => artifacts, @@ -487,6 +510,7 @@ void main() { ProcessManager: () => FakeProcessManager.any(), Stdio: () => FakeStdio(), Usage: () => usage, + analytics.Analytics: () => fakeAnalytics, }); testUsingContext('correctly reports tests to usage', () async { @@ -513,6 +537,23 @@ void main() { 'cd58': 'true', })), )); + expect( + fakeAnalytics.sentEvents, + contains( + analytics.Event.commandUsageValues( + workflow: 'run', + commandHasTerminal: globals.stdio.hasTerminal, + runIsEmulator: false, + runTargetName: 'ios', + runTargetOsVersion: 'iOS 13', + runModeName: 'debug', + runProjectModule: false, + runProjectHostLanguage: 'swift', + runIOSInterfaceType: 'usb', + runIsTest: true, + ), + ), + ); }, overrides: { AnsiTerminal: () => fakeTerminal, Artifacts: () => artifacts, @@ -522,6 +563,7 @@ void main() { ProcessManager: () => FakeProcessManager.any(), Stdio: () => FakeStdio(), Usage: () => usage, + analytics.Analytics: () => fakeAnalytics, }); group('--machine', () { diff --git a/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart b/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart index 8fdbac1efc4e7..34bd5039bd1fd 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart @@ -69,17 +69,6 @@ void main() { AndroidBuilder: () => FakeAndroidBuilder(), }); - testUsingContext('indicate that project is a plugin', () async { - final String projectPath = await createProject(tempDir, - arguments: ['--no-pub', '--template=plugin', '--project-name=aar_test']); - - final BuildAarCommand command = await runCommandIn(projectPath); - expect((await command.usageValues).commandBuildAarProjectType, 'plugin'); - - }, overrides: { - AndroidBuilder: () => FakeAndroidBuilder(), - }); - testUsingContext('indicate the target platform', () async { final String projectPath = await createProject(tempDir, arguments: ['--no-pub', '--template=module']); @@ -128,7 +117,7 @@ void main() { testUsingContext('defaults', () async { final String projectPath = await createProject(tempDir, - arguments: ['--no-pub']); + arguments: ['--no-pub', '--template=module']); await runCommandIn(projectPath); expect(fakeAndroidBuilder.buildNumber, '1.0'); @@ -158,7 +147,7 @@ void main() { testUsingContext('parses flags', () async { final String projectPath = await createProject(tempDir, - arguments: ['--no-pub']); + arguments: ['--no-pub', '--template=module']); await runCommandIn( projectPath, arguments: [ diff --git a/packages/flutter_tools/test/commands.shard/permeable/build_apk_test.dart b/packages/flutter_tools/test/commands.shard/permeable/build_apk_test.dart index 8e82ff48702fc..521374c7a9454 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/build_apk_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/build_apk_test.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:args/command_runner.dart'; +import 'package:file/memory.dart'; import 'package:flutter_tools/src/android/android_builder.dart'; import 'package:flutter_tools/src/android/android_sdk.dart'; import 'package:flutter_tools/src/android/android_studio.dart'; @@ -16,11 +17,13 @@ import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/reporting/reporting.dart'; import 'package:test/fake.dart'; +import 'package:unified_analytics/unified_analytics.dart'; import '../../src/android_common.dart'; import '../../src/common.dart'; import '../../src/context.dart'; import '../../src/fake_process_manager.dart'; +import '../../src/fakes.dart' show FakeFlutterVersion; import '../../src/test_flutter_command_runner.dart'; void main() { @@ -29,10 +32,15 @@ void main() { group('Usage', () { late Directory tempDir; late TestUsage testUsage; + late FakeAnalytics fakeAnalytics; setUp(() { testUsage = TestUsage(); tempDir = globals.fs.systemTempDirectory.createTempSync('flutter_tools_packages_test.'); + fakeAnalytics = getInitializedFakeAnalyticsInstance( + fs: MemoryFileSystem.test(), + fakeFlutterVersion: FakeFlutterVersion(), + ); }); tearDown(() { @@ -46,8 +54,21 @@ void main() { expect((await command.usageValues).commandBuildApkTargetPlatform, 'android-arm,android-arm64,android-x64'); + expect( + fakeAnalytics.sentEvents, + contains( + Event.commandUsageValues( + workflow: 'apk', + commandHasTerminal: false, + buildApkTargetPlatform: 'android-arm,android-arm64,android-x64', + buildApkBuildMode: 'release', + buildApkSplitPerAbi: false, + ), + ), + ); }, overrides: { AndroidBuilder: () => FakeAndroidBuilder(), + Analytics: () => fakeAnalytics, }); testUsingContext('split per abi', () async { diff --git a/packages/flutter_tools/test/commands.shard/permeable/build_appbundle_test.dart b/packages/flutter_tools/test/commands.shard/permeable/build_appbundle_test.dart index 0bd3eaa08ad1b..04910b88d91e0 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/build_appbundle_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/build_appbundle_test.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:args/command_runner.dart'; +import 'package:file/memory.dart'; import 'package:flutter_tools/src/android/android_builder.dart'; import 'package:flutter_tools/src/android/android_sdk.dart'; import 'package:flutter_tools/src/base/file_system.dart'; @@ -13,10 +14,12 @@ import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/reporting/reporting.dart'; import 'package:test/fake.dart'; +import 'package:unified_analytics/unified_analytics.dart'; import '../../src/android_common.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fakes.dart' show FakeFlutterVersion; import '../../src/test_flutter_command_runner.dart'; void main() { @@ -25,10 +28,15 @@ void main() { group('Usage', () { late Directory tempDir; late TestUsage testUsage; + late FakeAnalytics fakeAnalytics; setUp(() { tempDir = globals.fs.systemTempDirectory.createTempSync('flutter_tools_packages_test.'); testUsage = TestUsage(); + fakeAnalytics = getInitializedFakeAnalyticsInstance( + fs: MemoryFileSystem.test(), + fakeFlutterVersion: FakeFlutterVersion(), + ); }); tearDown(() { @@ -42,8 +50,18 @@ void main() { expect((await command.usageValues).commandBuildAppBundleTargetPlatform, 'android-arm,android-arm64,android-x64'); + expect( + fakeAnalytics.sentEvents, + contains(Event.commandUsageValues( + workflow: 'appbundle', + commandHasTerminal: false, + buildAppBundleTargetPlatform: 'android-arm,android-arm64,android-x64', + buildAppBundleBuildMode: 'release', + )), + ); }, overrides: { AndroidBuilder: () => FakeAndroidBuilder(), + Analytics: () => fakeAnalytics, }); testUsingContext('build type', () async { diff --git a/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart b/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart index f20ec4999dd85..9df5ec7ebf8a4 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart @@ -20,6 +20,7 @@ import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/project.dart'; import 'package:meta/meta.dart'; import 'package:test/fake.dart'; +import 'package:unified_analytics/unified_analytics.dart'; import '../../src/common.dart'; import '../../src/context.dart'; @@ -33,21 +34,26 @@ void main() { late FakeBundleBuilder fakeBundleBuilder; final FileSystemStyle fileSystemStyle = globals.fs.path.separator == '/' ? FileSystemStyle.posix : FileSystemStyle.windows; + late FakeAnalytics fakeAnalytics; + + MemoryFileSystem fsFactory() { + return MemoryFileSystem.test(style: fileSystemStyle); + } setUp(() { tempDir = globals.fs.systemTempDirectory.createTempSync('flutter_tools_packages_test.'); fakeBundleBuilder = FakeBundleBuilder(); + fakeAnalytics = getInitializedFakeAnalyticsInstance( + fs: fsFactory(), + fakeFlutterVersion: FakeFlutterVersion(), + ); }); tearDown(() { tryToDelete(tempDir); }); - MemoryFileSystem fsFactory() { - return MemoryFileSystem.test(style: fileSystemStyle); - } - Future runCommandIn(String projectPath, { List? arguments }) async { final BuildBundleCommand command = BuildBundleCommand( logger: BufferLogger.test(), @@ -70,6 +76,19 @@ void main() { final BuildBundleCommand command = await runCommandIn(projectPath); expect((await command.usageValues).commandBuildBundleIsModule, true); + expect( + fakeAnalytics.sentEvents, + contains( + Event.commandUsageValues( + workflow: 'bundle', + commandHasTerminal: false, + buildBundleTargetPlatform: 'android-arm', + buildBundleIsModule: true, + ), + ), + ); + }, overrides: { + Analytics: () => fakeAnalytics, }); testUsingContext('bundle getUsage indicate that project is not a module', () async { @@ -79,6 +98,19 @@ void main() { final BuildBundleCommand command = await runCommandIn(projectPath); expect((await command.usageValues).commandBuildBundleIsModule, false); + expect( + fakeAnalytics.sentEvents, + contains( + Event.commandUsageValues( + workflow: 'bundle', + commandHasTerminal: false, + buildBundleTargetPlatform: 'android-arm', + buildBundleIsModule: false, + ), + ), + ); + }, overrides: { + Analytics: () => fakeAnalytics, }); testUsingContext('bundle getUsage indicate the target platform', () async { diff --git a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart index 0dee658224120..bf6739b1998b9 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart @@ -7,6 +7,7 @@ import 'dart:convert'; import 'dart:io' as io; import 'package:args/command_runner.dart'; +import 'package:file/memory.dart'; import 'package:file_testing/file_testing.dart'; import 'package:flutter_tools/src/android/gradle_utils.dart' show templateAndroidGradlePluginVersion, templateAndroidGradlePluginVersionForModule, templateDefaultGradleVersion; import 'package:flutter_tools/src/android/java.dart'; @@ -30,6 +31,7 @@ import 'package:flutter_tools/src/version.dart'; import 'package:process/process.dart'; import 'package:pub_semver/pub_semver.dart'; import 'package:pubspec_parse/pubspec_parse.dart'; +import 'package:unified_analytics/unified_analytics.dart'; import 'package:uuid/uuid.dart'; import 'package:yaml/yaml.dart'; @@ -71,6 +73,7 @@ void main() { late FakeProcessManager fakeProcessManager; late BufferLogger logger; late FakeStdio mockStdio; + late FakeAnalytics fakeAnalytics; setUpAll(() async { Cache.disableLocking(); @@ -88,6 +91,10 @@ void main() { ); fakeProcessManager = FakeProcessManager.empty(); mockStdio = FakeStdio(); + fakeAnalytics = getInitializedFakeAnalyticsInstance( + fs: MemoryFileSystem.test(), + fakeFlutterVersion: fakeFlutterVersion, + ); }); tearDown(() { @@ -171,10 +178,24 @@ void main() { ], ); expect(logger.statusText, contains('In order to run your application, type:')); - // check that we're telling them about documentation + // Check that we're telling them about documentation expect(logger.statusText, contains('https://docs.flutter.dev/')); expect(logger.statusText, contains('https://api.flutter.dev/')); - // check that the tests run clean + + // Check for usage values sent in analytics + expect( + fakeAnalytics.sentEvents, + contains( + Event.commandUsageValues( + workflow: 'create', + commandHasTerminal: false, + createAndroidLanguage: 'java', + createIosLanguage: 'objc', + ), + ), + ); + + // Check that the tests run clean return _runFlutterTest(projectDir); }, overrides: { Pub: () => Pub.test( @@ -187,6 +208,7 @@ void main() { stdio: mockStdio, ), Logger: () => logger, + Analytics: () => fakeAnalytics, }); testUsingContext('can create a skeleton (list/detail) app', () async { diff --git a/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart b/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart index df145350049e4..ffe3462fd8388 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart @@ -339,6 +339,11 @@ flutter: final PackagesGetCommand getCommand = command.subcommands['get']! as PackagesGetCommand; expect((await getCommand.usageValues).commandPackagesNumberPlugins, 0); + expect( + (await getCommand.unifiedAnalyticsUsageValues('pub/get')) + .eventData['packagesNumberPlugins'], + 0, + ); }, overrides: { Stdio: () => mockStdio, Pub: () => Pub.test( @@ -364,6 +369,11 @@ flutter: // A plugin example depends on the plugin itself, and integration_test. expect((await getCommand.usageValues).commandPackagesNumberPlugins, 2); + expect( + (await getCommand.unifiedAnalyticsUsageValues('pub/get')) + .eventData['packagesNumberPlugins'], + 2, + ); }, overrides: { Stdio: () => mockStdio, Pub: () => Pub.test( @@ -386,6 +396,11 @@ flutter: final PackagesGetCommand getCommand = command.subcommands['get']! as PackagesGetCommand; expect((await getCommand.usageValues).commandPackagesProjectModule, false); + expect( + (await getCommand.unifiedAnalyticsUsageValues('pub/get')) + .eventData['packagesProjectModule'], + false, + ); }, overrides: { Stdio: () => mockStdio, Pub: () => Pub.test( @@ -408,6 +423,11 @@ flutter: final PackagesGetCommand getCommand = command.subcommands['get']! as PackagesGetCommand; expect((await getCommand.usageValues).commandPackagesProjectModule, true); + expect( + (await getCommand.unifiedAnalyticsUsageValues('pub/get')) + .eventData['packagesProjectModule'], + true, + ); }, overrides: { Stdio: () => mockStdio, Pub: () => Pub.test( @@ -439,6 +459,11 @@ flutter: final PackagesGetCommand getCommand = command.subcommands['get']! as PackagesGetCommand; expect((await getCommand.usageValues).commandPackagesAndroidEmbeddingVersion, 'v1'); + expect( + (await getCommand.unifiedAnalyticsUsageValues('pub/get')) + .eventData['packagesAndroidEmbeddingVersion'], + 'v1', + ); }, overrides: { Stdio: () => mockStdio, Pub: () => Pub.test( @@ -461,6 +486,11 @@ flutter: final PackagesGetCommand getCommand = command.subcommands['get']! as PackagesGetCommand; expect((await getCommand.usageValues).commandPackagesAndroidEmbeddingVersion, 'v2'); + expect( + (await getCommand.unifiedAnalyticsUsageValues('pub/get')) + .eventData['packagesAndroidEmbeddingVersion'], + 'v2', + ); }, overrides: { Stdio: () => mockStdio, Pub: () => Pub.test( diff --git a/packages/flutter_tools/test/general.shard/unified_analytics_test.dart b/packages/flutter_tools/test/general.shard/unified_analytics_test.dart new file mode 100644 index 0000000000000..f52a977622aef --- /dev/null +++ b/packages/flutter_tools/test/general.shard/unified_analytics_test.dart @@ -0,0 +1,139 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:file/memory.dart'; +import 'package:flutter_tools/src/base/file_system.dart'; +import 'package:flutter_tools/src/reporting/unified_analytics.dart'; +import 'package:unified_analytics/src/enums.dart'; +import 'package:unified_analytics/unified_analytics.dart'; + +import '../src/common.dart'; +import '../src/fakes.dart'; + +void main() { + const String userBranch = 'abc123'; + const String homeDirectoryName = 'home'; + const DashTool tool = DashTool.flutterTool; + + late FileSystem fs; + late Directory home; + late FakeAnalytics analyticsOverride; + + setUp(() { + fs = MemoryFileSystem.test(); + home = fs.directory(homeDirectoryName); + + // Prepare the tests by "onboarding" the tool into the package + // by invoking the [clientShowedMessage] method for the provided + // [tool] + final FakeAnalytics initialAnalytics = FakeAnalytics( + tool: tool, + homeDirectory: home, + dartVersion: '3.0.0', + platform: DevicePlatform.macos, + fs: fs, + surveyHandler: SurveyHandler( + homeDirectory: home, + fs: fs, + ), + ); + initialAnalytics.clientShowedMessage(); + + analyticsOverride = FakeAnalytics( + tool: tool, + homeDirectory: home, + dartVersion: '3.0.0', + platform: DevicePlatform.macos, + fs: fs, + surveyHandler: SurveyHandler( + homeDirectory: home, + fs: fs, + ), + ); + }); + + group('Unit testing getAnalytics', () { + testWithoutContext('Successfully creates the instance for standard branch', () { + final Analytics analytics = getAnalytics( + runningOnBot: false, + flutterVersion: FakeFlutterVersion(), + environment: const {}, + analyticsOverride: analyticsOverride, + ); + + expect(analytics.clientId, isNot(NoOpAnalytics.staticClientId), + reason: 'The CLIENT ID should be a randomly generated id'); + expect(analytics, isNot(isA())); + }); + + testWithoutContext('NoOp instance for user branch', () { + final Analytics analytics = getAnalytics( + runningOnBot: false, + flutterVersion: FakeFlutterVersion( + branch: userBranch, + frameworkRevision: '3.14.0-14.0.pre.370', + ), + environment: const {}, + analyticsOverride: analyticsOverride, + ); + + expect( + analytics.clientId, + NoOpAnalytics.staticClientId, + reason: 'The client ID should match the NoOp client id', + ); + expect(analytics, isA()); + }); + + testWithoutContext('NoOp instance for unknown branch', () { + final Analytics analytics = getAnalytics( + runningOnBot: false, + flutterVersion: FakeFlutterVersion( + frameworkRevision: 'unknown', + ), + environment: const {}, + analyticsOverride: analyticsOverride, + ); + + expect( + analytics.clientId, + NoOpAnalytics.staticClientId, + reason: 'The client ID should match the NoOp client id', + ); + expect(analytics, isA()); + }); + + testWithoutContext('NoOp instance when running on bots', () { + final Analytics analytics = getAnalytics( + runningOnBot: true, + flutterVersion: FakeFlutterVersion(), + environment: const {}, + analyticsOverride: analyticsOverride, + ); + + expect( + analytics.clientId, + NoOpAnalytics.staticClientId, + reason: 'The client ID should match the NoOp client id', + ); + expect(analytics, isA()); + }); + + testWithoutContext('NoOp instance when suppressing via env variable', () { + final Analytics analytics = getAnalytics( + runningOnBot: true, + flutterVersion: FakeFlutterVersion(), + environment: const {'FLUTTER_SUPPRESS_ANALYTICS': 'true'}, + analyticsOverride: analyticsOverride, + ); + + expect( + analytics.clientId, + NoOpAnalytics.staticClientId, + reason: 'The client ID should match the NoOp client id', + ); + expect(analytics, isA()); + }); + }); +} diff --git a/packages/flutter_tools/test/src/common.dart b/packages/flutter_tools/test/src/common.dart index ca005f21e521a..fca13fa2e5c66 100644 --- a/packages/flutter_tools/test/src/common.dart +++ b/packages/flutter_tools/test/src/common.dart @@ -5,6 +5,7 @@ import 'dart:async'; import 'package:args/command_runner.dart'; +import 'package:collection/collection.dart'; import 'package:file/memory.dart'; import 'package:flutter_tools/src/base/common.dart'; import 'package:flutter_tools/src/base/context.dart'; @@ -16,6 +17,10 @@ import 'package:meta/meta.dart'; import 'package:path/path.dart' as path; // flutter_ignore: package_path_import import 'package:test/test.dart' as test_package show test; import 'package:test/test.dart' hide test; +import 'package:unified_analytics/src/enums.dart'; +import 'package:unified_analytics/unified_analytics.dart'; + +import 'fakes.dart'; export 'package:path/path.dart' show Context; // flutter_ignore: package_path_import export 'package:test/test.dart' hide isInstanceOf, test; @@ -305,3 +310,75 @@ class FileExceptionHandler { throw exception; } } + +/// This method is required to fetch an instance of [FakeAnalytics] +/// because there is initialization logic that is required. An initial +/// instance will first be created and will let package:unified_analytics +/// know that the consent message has been shown. After confirming on the first +/// instance, then a second instance will be generated and returned. This second +/// instance will be cleared to send events. +FakeAnalytics getInitializedFakeAnalyticsInstance({ + required FileSystem fs, + required FakeFlutterVersion fakeFlutterVersion, + String? clientIde, +}) { + final Directory homeDirectory = fs.directory('/'); + final FakeAnalytics initialAnalytics = FakeAnalytics( + tool: DashTool.flutterTool, + homeDirectory: homeDirectory, + dartVersion: fakeFlutterVersion.dartSdkVersion, + platform: DevicePlatform.linux, + fs: fs, + surveyHandler: SurveyHandler(homeDirectory: homeDirectory, fs: fs), + flutterChannel: fakeFlutterVersion.channel, + flutterVersion: fakeFlutterVersion.getVersionString(), + ); + initialAnalytics.clientShowedMessage(); + + return FakeAnalytics( + tool: DashTool.flutterTool, + homeDirectory: homeDirectory, + dartVersion: fakeFlutterVersion.dartSdkVersion, + platform: DevicePlatform.linux, + fs: fs, + surveyHandler: SurveyHandler(homeDirectory: homeDirectory, fs: fs), + flutterChannel: fakeFlutterVersion.channel, + flutterVersion: fakeFlutterVersion.getVersionString(), + clientIde: clientIde, + ); +} + +/// Returns "true" if the timing event searched for exists in [sentEvents]. +/// +/// This utility function allows us to check for an instance of +/// [Event.timing] within a [FakeAnalytics] instance. Normally, we can +/// use the equality operator for [Event] to check if the event exists, but +/// we are unable to do so for the timing event because the elapsed time +/// is variable so we cannot predict what that value will be in tests. +/// +/// This function allows us to check for the other keys that have +/// string values by removing the `elapsedMilliseconds` from the +/// [Event.eventData] map and checking for a match. +bool analyticsTimingEventExists({ + required List sentEvents, + required String workflow, + required String variableName, + String? label, +}) { + final Map lookup = { + 'workflow': workflow, + 'variableName': variableName, + if (label != null) 'label': label, + }; + + for (final Event e in sentEvents) { + final Map eventData = {...e.eventData}; + eventData.remove('elapsedMilliseconds'); + + if (const DeepCollectionEquality().equals(lookup, eventData)) { + return true; + } + } + + return false; +} diff --git a/packages/flutter_tools/test/src/context.dart b/packages/flutter_tools/test/src/context.dart index 7bea7532c3f5b..f0f4fd0f7d162 100644 --- a/packages/flutter_tools/test/src/context.dart +++ b/packages/flutter_tools/test/src/context.dart @@ -35,6 +35,7 @@ import 'package:flutter_tools/src/reporting/reporting.dart'; import 'package:flutter_tools/src/version.dart'; import 'package:meta/meta.dart'; import 'package:test/fake.dart'; +import 'package:unified_analytics/unified_analytics.dart'; import 'common.dart'; import 'fake_http_client.dart'; @@ -120,6 +121,7 @@ void testUsingContext( Pub: () => ThrowingPub(), // prevent accidentally using pub. CrashReporter: () => const NoopCrashReporter(), TemplateRenderer: () => const MustacheTemplateRenderer(), + Analytics: () => NoOpAnalytics(), }, body: () { return runZonedGuarded>(() { diff --git a/packages/flutter_tools/test/src/fakes.dart b/packages/flutter_tools/test/src/fakes.dart index 9f3bb754271db..bca86131dc4e8 100644 --- a/packages/flutter_tools/test/src/fakes.dart +++ b/packages/flutter_tools/test/src/fakes.dart @@ -438,7 +438,7 @@ class FakeFlutterVersion implements FlutterVersion { @override String getVersionString({bool redactUnknownBranches = false}) { - return 'v0.0.0'; + return '${getBranchName(redactUnknownBranches: redactUnknownBranches)}/$frameworkRevision'; } @override From 46787ee49c1fd80ab603f0702733edab54653aef Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Tue, 9 Jan 2024 14:36:07 -0800 Subject: [PATCH 10/11] Set template and migrate apps to iOS 12 minimum (#140921) Cherry-pick https://github.com/flutter/flutter/pull/140823 Issue https://github.com/flutter/flutter/issues/140923 This looks like a lot of files, but most of them are updating the version on our integration/examples apps. --- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- dev/benchmarks/complex_layout/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- dev/benchmarks/macrobenchmarks/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../stocks/ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../tasks/ios_content_validation_test.dart | 2 +- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- dev/integration_tests/channels/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- dev/integration_tests/flavors/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 8 ++--- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../flutter_gallery/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios_app_with_extensions/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- dev/integration_tests/ios_host_app/Podfile | 2 +- .../ios_host_app_swift/Podfile | 2 +- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 12 ++----- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../release_smoke_test/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- dev/integration_tests/spell_check/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ui/ios/Flutter/AppFrameworkInfo.plist | 2 +- dev/integration_tests/ui/ios/Podfile | 2 +- .../ui/ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../api/ios/Flutter/AppFrameworkInfo.plist | 2 +- examples/api/ios/Podfile | 2 +- .../api/ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../layers/ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 9 ++--- packages/flutter_tools/bin/podhelper.rb | 4 +-- .../flutter_tools/lib/src/base/build.dart | 2 +- .../lib/src/build_system/targets/ios.dart | 4 +-- .../lib/src/commands/build_ios_framework.dart | 2 +- .../lib/src/flutter_plugins.dart | 2 +- .../ios_deployment_target_migration.dart | 27 +++++++++----- .../Runner.xcodeproj/project.pbxproj.tmpl | 6 ++-- .../Runner.xcodeproj/project.pbxproj.tmpl | 6 ++-- .../ios.tmpl/Flutter/AppFrameworkInfo.plist | 2 +- .../templates/cocoapods/Podfile-ios-objc | 2 +- .../templates/cocoapods/Podfile-ios-swift | 2 +- .../project.pbxproj.tmpl | 6 ++-- .../Podfile.copy.tmpl | 2 +- .../Flutter.tmpl/AppFrameworkInfo.plist | 2 +- .../Runner.xcodeproj.tmpl/project.pbxproj | 6 ++-- .../hermetic/build_ios_test.dart | 4 +-- .../hermetic/build_ipa_test.dart | 10 +++--- .../test/general.shard/base/build_test.dart | 8 ++--- .../build_system/targets/common_test.dart | 4 +-- .../build_system/targets/ios_test.dart | 4 +-- .../ios/ios_project_migration_test.dart | 36 ++++++++++++------- .../ios/Flutter/AppFrameworkInfo.plist | 2 +- packages/integration_test/example/ios/Podfile | 2 +- .../ios/Runner.xcodeproj/project.pbxproj | 6 ++-- 92 files changed, 211 insertions(+), 199 deletions(-) diff --git a/dev/a11y_assessments/ios/Flutter/AppFrameworkInfo.plist b/dev/a11y_assessments/ios/Flutter/AppFrameworkInfo.plist index 9625e105df39e..7c56964006274 100644 --- a/dev/a11y_assessments/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/a11y_assessments/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/a11y_assessments/ios/Runner.xcodeproj/project.pbxproj b/dev/a11y_assessments/ios/Runner.xcodeproj/project.pbxproj index 142bb384b0dd1..63b2855179ae9 100644 --- a/dev/a11y_assessments/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/a11y_assessments/ios/Runner.xcodeproj/project.pbxproj @@ -344,7 +344,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -469,7 +469,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -518,7 +518,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/dev/benchmarks/complex_layout/ios/Flutter/AppFrameworkInfo.plist b/dev/benchmarks/complex_layout/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/benchmarks/complex_layout/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/benchmarks/complex_layout/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/benchmarks/complex_layout/ios/Podfile b/dev/benchmarks/complex_layout/ios/Podfile index 88359b225fa12..279576f3884fd 100644 --- a/dev/benchmarks/complex_layout/ios/Podfile +++ b/dev/benchmarks/complex_layout/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/dev/benchmarks/complex_layout/ios/Runner.xcodeproj/project.pbxproj b/dev/benchmarks/complex_layout/ios/Runner.xcodeproj/project.pbxproj index bb0b1a35f0b94..d6940b73a3c4d 100644 --- a/dev/benchmarks/complex_layout/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/benchmarks/complex_layout/ios/Runner.xcodeproj/project.pbxproj @@ -354,7 +354,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -425,7 +425,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -474,7 +474,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/dev/benchmarks/macrobenchmarks/ios/Flutter/AppFrameworkInfo.plist b/dev/benchmarks/macrobenchmarks/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/benchmarks/macrobenchmarks/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/benchmarks/macrobenchmarks/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/benchmarks/macrobenchmarks/ios/Podfile b/dev/benchmarks/macrobenchmarks/ios/Podfile index d207307f86d77..414ba51f1c5d5 100644 --- a/dev/benchmarks/macrobenchmarks/ios/Podfile +++ b/dev/benchmarks/macrobenchmarks/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/dev/benchmarks/macrobenchmarks/ios/Runner.xcodeproj/project.pbxproj b/dev/benchmarks/macrobenchmarks/ios/Runner.xcodeproj/project.pbxproj index 4cdd00ac38a27..6438e3d902664 100644 --- a/dev/benchmarks/macrobenchmarks/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/benchmarks/macrobenchmarks/ios/Runner.xcodeproj/project.pbxproj @@ -333,7 +333,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -405,7 +405,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -452,7 +452,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/dev/benchmarks/microbenchmarks/ios/Flutter/AppFrameworkInfo.plist b/dev/benchmarks/microbenchmarks/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/benchmarks/microbenchmarks/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/benchmarks/microbenchmarks/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/benchmarks/microbenchmarks/ios/Runner.xcodeproj/project.pbxproj b/dev/benchmarks/microbenchmarks/ios/Runner.xcodeproj/project.pbxproj index 66227005928a3..e07cb9b22aa44 100644 --- a/dev/benchmarks/microbenchmarks/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/benchmarks/microbenchmarks/ios/Runner.xcodeproj/project.pbxproj @@ -287,7 +287,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -358,7 +358,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -407,7 +407,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/dev/benchmarks/platform_channels_benchmarks/ios/Runner.xcodeproj/project.pbxproj b/dev/benchmarks/platform_channels_benchmarks/ios/Runner.xcodeproj/project.pbxproj index 3530328d7f05f..fa24dac511ad6 100644 --- a/dev/benchmarks/platform_channels_benchmarks/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/benchmarks/platform_channels_benchmarks/ios/Runner.xcodeproj/project.pbxproj @@ -279,7 +279,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -357,7 +357,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -406,7 +406,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/dev/benchmarks/platform_views_layout/ios/Flutter/AppFrameworkInfo.plist b/dev/benchmarks/platform_views_layout/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/benchmarks/platform_views_layout/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/benchmarks/platform_views_layout/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/benchmarks/platform_views_layout/ios/Runner.xcodeproj/project.pbxproj b/dev/benchmarks/platform_views_layout/ios/Runner.xcodeproj/project.pbxproj index 60be902c3e905..d0425c520b347 100644 --- a/dev/benchmarks/platform_views_layout/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/benchmarks/platform_views_layout/ios/Runner.xcodeproj/project.pbxproj @@ -292,7 +292,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -366,7 +366,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -415,7 +415,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/dev/benchmarks/platform_views_layout_hybrid_composition/ios/Flutter/AppFrameworkInfo.plist b/dev/benchmarks/platform_views_layout_hybrid_composition/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/benchmarks/platform_views_layout_hybrid_composition/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/benchmarks/platform_views_layout_hybrid_composition/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/benchmarks/platform_views_layout_hybrid_composition/ios/Runner.xcodeproj/project.pbxproj b/dev/benchmarks/platform_views_layout_hybrid_composition/ios/Runner.xcodeproj/project.pbxproj index 4629e7e7461a2..76b26b609b15e 100644 --- a/dev/benchmarks/platform_views_layout_hybrid_composition/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/benchmarks/platform_views_layout_hybrid_composition/ios/Runner.xcodeproj/project.pbxproj @@ -293,7 +293,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -364,7 +364,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -413,7 +413,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/dev/benchmarks/test_apps/stocks/ios/Flutter/AppFrameworkInfo.plist b/dev/benchmarks/test_apps/stocks/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/benchmarks/test_apps/stocks/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/benchmarks/test_apps/stocks/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/benchmarks/test_apps/stocks/ios/Runner.xcodeproj/project.pbxproj b/dev/benchmarks/test_apps/stocks/ios/Runner.xcodeproj/project.pbxproj index 6eb9204943b16..97d2285056980 100644 --- a/dev/benchmarks/test_apps/stocks/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/benchmarks/test_apps/stocks/ios/Runner.xcodeproj/project.pbxproj @@ -294,7 +294,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -362,7 +362,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -411,7 +411,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/dev/devicelab/bin/tasks/ios_content_validation_test.dart b/dev/devicelab/bin/tasks/ios_content_validation_test.dart index 28e0b6a2e8b21..156c509b54f49 100644 --- a/dev/devicelab/bin/tasks/ios_content_validation_test.dart +++ b/dev/devicelab/bin/tasks/ios_content_validation_test.dart @@ -48,7 +48,7 @@ Future main() async { ' • Version Number: 1.0.0\n', ' • Build Number: 1\n', ' • Display Name: Hello\n', - ' • Deployment Target: 11.0\n', + ' • Deployment Target: 12.0\n', ' • Bundle Identifier: com.example.hello\n', ' ! Your application still contains the default "com.example" bundle identifier.\n', '[!] App Icon and Launch Image Assets Validation\n', diff --git a/dev/integration_tests/channels/ios/Flutter/AppFrameworkInfo.plist b/dev/integration_tests/channels/ios/Flutter/AppFrameworkInfo.plist index 9625e105df39e..7c56964006274 100644 --- a/dev/integration_tests/channels/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/integration_tests/channels/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/integration_tests/channels/ios/Podfile b/dev/integration_tests/channels/ios/Podfile index ec43b513b0d1b..c9339a034ebe2 100644 --- a/dev/integration_tests/channels/ios/Podfile +++ b/dev/integration_tests/channels/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/dev/integration_tests/channels/ios/Runner.xcodeproj/project.pbxproj b/dev/integration_tests/channels/ios/Runner.xcodeproj/project.pbxproj index 48e86439a0cfd..6d325a7c215b5 100644 --- a/dev/integration_tests/channels/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/integration_tests/channels/ios/Runner.xcodeproj/project.pbxproj @@ -445,7 +445,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -562,7 +562,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -611,7 +611,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/dev/integration_tests/external_ui/ios/Flutter/AppFrameworkInfo.plist b/dev/integration_tests/external_ui/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/integration_tests/external_ui/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/integration_tests/external_ui/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/integration_tests/external_ui/ios/Runner.xcodeproj/project.pbxproj b/dev/integration_tests/external_ui/ios/Runner.xcodeproj/project.pbxproj index 9363384e2ae36..2f1dc476ea4b1 100644 --- a/dev/integration_tests/external_ui/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/integration_tests/external_ui/ios/Runner.xcodeproj/project.pbxproj @@ -268,7 +268,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -328,7 +328,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -369,7 +369,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/dev/integration_tests/flavors/ios/Flutter/AppFrameworkInfo.plist b/dev/integration_tests/flavors/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/integration_tests/flavors/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/integration_tests/flavors/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/integration_tests/flavors/ios/Podfile b/dev/integration_tests/flavors/ios/Podfile index ad8f93beab822..f98bf3b4f1ac9 100644 --- a/dev/integration_tests/flavors/ios/Podfile +++ b/dev/integration_tests/flavors/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/dev/integration_tests/flavors/ios/Runner.xcodeproj/project.pbxproj b/dev/integration_tests/flavors/ios/Runner.xcodeproj/project.pbxproj index 5d5c721b320ed..2fade6643a72b 100644 --- a/dev/integration_tests/flavors/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/integration_tests/flavors/ios/Runner.xcodeproj/project.pbxproj @@ -468,7 +468,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_FLAVOR = paid; @@ -523,7 +523,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_FLAVOR = paid; SDKROOT = iphoneos; @@ -584,7 +584,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_FLAVOR = free; @@ -626,7 +626,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_FLAVOR = free; SDKROOT = iphoneos; diff --git a/dev/integration_tests/flutter_gallery/ios/Flutter/AppFrameworkInfo.plist b/dev/integration_tests/flutter_gallery/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/integration_tests/flutter_gallery/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/integration_tests/flutter_gallery/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/integration_tests/flutter_gallery/ios/Podfile b/dev/integration_tests/flutter_gallery/ios/Podfile index c888d17d81697..89b2e432ab268 100644 --- a/dev/integration_tests/flutter_gallery/ios/Podfile +++ b/dev/integration_tests/flutter_gallery/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/dev/integration_tests/flutter_gallery/ios/Runner.xcodeproj/project.pbxproj b/dev/integration_tests/flutter_gallery/ios/Runner.xcodeproj/project.pbxproj index 99021bca10227..62e94aa228bcf 100644 --- a/dev/integration_tests/flutter_gallery/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/integration_tests/flutter_gallery/ios/Runner.xcodeproj/project.pbxproj @@ -331,7 +331,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -399,7 +399,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -448,7 +448,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/dev/integration_tests/ios_app_with_extensions/ios/Flutter/AppFrameworkInfo.plist b/dev/integration_tests/ios_app_with_extensions/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/integration_tests/ios_app_with_extensions/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/integration_tests/ios_app_with_extensions/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/integration_tests/ios_app_with_extensions/ios/Podfile b/dev/integration_tests/ios_app_with_extensions/ios/Podfile index 6bc20eba238fa..363dd2403825a 100644 --- a/dev/integration_tests/ios_app_with_extensions/ios/Podfile +++ b/dev/integration_tests/ios_app_with_extensions/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/dev/integration_tests/ios_app_with_extensions/ios/Runner.xcodeproj/project.pbxproj b/dev/integration_tests/ios_app_with_extensions/ios/Runner.xcodeproj/project.pbxproj index 239639ce0126f..ac3dcdb301b2e 100644 --- a/dev/integration_tests/ios_app_with_extensions/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/integration_tests/ios_app_with_extensions/ios/Runner.xcodeproj/project.pbxproj @@ -585,7 +585,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -853,7 +853,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -903,7 +903,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/dev/integration_tests/ios_host_app/Podfile b/dev/integration_tests/ios_host_app/Podfile index 53a1727c2fbce..826ed62c28c8c 100644 --- a/dev/integration_tests/ios_host_app/Podfile +++ b/dev/integration_tests/ios_host_app/Podfile @@ -1,4 +1,4 @@ -platform :ios, '11.0' +platform :ios, '12.0' flutter_application_path = '../hello' load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb') diff --git a/dev/integration_tests/ios_host_app_swift/Podfile b/dev/integration_tests/ios_host_app_swift/Podfile index b79c449b99d37..2870543ca0459 100644 --- a/dev/integration_tests/ios_host_app_swift/Podfile +++ b/dev/integration_tests/ios_host_app_swift/Podfile @@ -1,4 +1,4 @@ -platform :ios, '11.0' +platform :ios, '12.0' flutter_application_path = '../hello' load File.join(flutter_application_path, '.ios', 'Flutter', 'podhelper.rb') diff --git a/dev/integration_tests/ios_platform_view_tests/ios/Flutter/AppFrameworkInfo.plist b/dev/integration_tests/ios_platform_view_tests/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/integration_tests/ios_platform_view_tests/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/integration_tests/ios_platform_view_tests/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/integration_tests/ios_platform_view_tests/ios/Runner.xcodeproj/project.pbxproj b/dev/integration_tests/ios_platform_view_tests/ios/Runner.xcodeproj/project.pbxproj index a165620cea6c6..161d2f17cb1e4 100644 --- a/dev/integration_tests/ios_platform_view_tests/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/integration_tests/ios_platform_view_tests/ios/Runner.xcodeproj/project.pbxproj @@ -380,7 +380,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -455,7 +455,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -504,7 +504,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -564,14 +564,12 @@ CURRENT_PROJECT_VERSION = 1; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.flutter.platformview.PlatformViewUITests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = NO; - TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = Runner; }; name = Debug; @@ -589,13 +587,11 @@ CURRENT_PROJECT_VERSION = 1; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = 1.0; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.flutter.platformview.PlatformViewUITests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = NO; - TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = Runner; }; name = Release; @@ -613,13 +609,11 @@ CURRENT_PROJECT_VERSION = 1; GCC_C_LANGUAGE_STANDARD = gnu11; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = 1.0; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = io.flutter.platformview.PlatformViewUITests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = NO; - TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = Runner; }; name = Profile; diff --git a/dev/integration_tests/non_nullable/ios/Flutter/AppFrameworkInfo.plist b/dev/integration_tests/non_nullable/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/integration_tests/non_nullable/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/integration_tests/non_nullable/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/integration_tests/non_nullable/ios/Runner.xcodeproj/project.pbxproj b/dev/integration_tests/non_nullable/ios/Runner.xcodeproj/project.pbxproj index 7ef24f76ef2b2..f942d8bf94ee7 100644 --- a/dev/integration_tests/non_nullable/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/integration_tests/non_nullable/ios/Runner.xcodeproj/project.pbxproj @@ -283,7 +283,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -357,7 +357,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -406,7 +406,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/dev/integration_tests/platform_interaction/ios/Flutter/AppFrameworkInfo.plist b/dev/integration_tests/platform_interaction/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/integration_tests/platform_interaction/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/integration_tests/platform_interaction/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/integration_tests/platform_interaction/ios/Runner.xcodeproj/project.pbxproj b/dev/integration_tests/platform_interaction/ios/Runner.xcodeproj/project.pbxproj index 20394076917b2..c19204d205399 100644 --- a/dev/integration_tests/platform_interaction/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/integration_tests/platform_interaction/ios/Runner.xcodeproj/project.pbxproj @@ -284,7 +284,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -344,7 +344,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -385,7 +385,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/dev/integration_tests/release_smoke_test/ios/Flutter/AppFrameworkInfo.plist b/dev/integration_tests/release_smoke_test/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/integration_tests/release_smoke_test/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/integration_tests/release_smoke_test/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/integration_tests/release_smoke_test/ios/Podfile b/dev/integration_tests/release_smoke_test/ios/Podfile index d207307f86d77..414ba51f1c5d5 100644 --- a/dev/integration_tests/release_smoke_test/ios/Podfile +++ b/dev/integration_tests/release_smoke_test/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/dev/integration_tests/release_smoke_test/ios/Runner.xcodeproj/project.pbxproj b/dev/integration_tests/release_smoke_test/ios/Runner.xcodeproj/project.pbxproj index 81b03125efc4a..fd9caf96b57ed 100644 --- a/dev/integration_tests/release_smoke_test/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/integration_tests/release_smoke_test/ios/Runner.xcodeproj/project.pbxproj @@ -334,7 +334,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -403,7 +403,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -450,7 +450,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/dev/integration_tests/spell_check/ios/Flutter/AppFrameworkInfo.plist b/dev/integration_tests/spell_check/ios/Flutter/AppFrameworkInfo.plist index 9625e105df39e..7c56964006274 100644 --- a/dev/integration_tests/spell_check/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/integration_tests/spell_check/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/integration_tests/spell_check/ios/Podfile b/dev/integration_tests/spell_check/ios/Podfile index d207307f86d77..414ba51f1c5d5 100644 --- a/dev/integration_tests/spell_check/ios/Podfile +++ b/dev/integration_tests/spell_check/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/dev/integration_tests/spell_check/ios/Runner.xcodeproj/project.pbxproj b/dev/integration_tests/spell_check/ios/Runner.xcodeproj/project.pbxproj index f6a38cda8e90a..58d196582bb4b 100644 --- a/dev/integration_tests/spell_check/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/integration_tests/spell_check/ios/Runner.xcodeproj/project.pbxproj @@ -336,7 +336,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -410,7 +410,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -459,7 +459,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/dev/integration_tests/ui/ios/Flutter/AppFrameworkInfo.plist b/dev/integration_tests/ui/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/dev/integration_tests/ui/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/integration_tests/ui/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/integration_tests/ui/ios/Podfile b/dev/integration_tests/ui/ios/Podfile index d207307f86d77..414ba51f1c5d5 100644 --- a/dev/integration_tests/ui/ios/Podfile +++ b/dev/integration_tests/ui/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/dev/integration_tests/ui/ios/Runner.xcodeproj/project.pbxproj b/dev/integration_tests/ui/ios/Runner.xcodeproj/project.pbxproj index f9845d80ec678..96f2cbcfd1422 100644 --- a/dev/integration_tests/ui/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/integration_tests/ui/ios/Runner.xcodeproj/project.pbxproj @@ -324,7 +324,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -384,7 +384,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -425,7 +425,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/dev/manual_tests/ios/Flutter/AppFrameworkInfo.plist b/dev/manual_tests/ios/Flutter/AppFrameworkInfo.plist index 9625e105df39e..7c56964006274 100644 --- a/dev/manual_tests/ios/Flutter/AppFrameworkInfo.plist +++ b/dev/manual_tests/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/dev/manual_tests/ios/Runner.xcodeproj/project.pbxproj b/dev/manual_tests/ios/Runner.xcodeproj/project.pbxproj index 9f2be705d3cee..f092925e4e637 100644 --- a/dev/manual_tests/ios/Runner.xcodeproj/project.pbxproj +++ b/dev/manual_tests/ios/Runner.xcodeproj/project.pbxproj @@ -275,7 +275,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -352,7 +352,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -401,7 +401,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/examples/api/ios/Flutter/AppFrameworkInfo.plist b/examples/api/ios/Flutter/AppFrameworkInfo.plist index 9625e105df39e..7c56964006274 100644 --- a/examples/api/ios/Flutter/AppFrameworkInfo.plist +++ b/examples/api/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/examples/api/ios/Podfile b/examples/api/ios/Podfile index 88359b225fa12..279576f3884fd 100644 --- a/examples/api/ios/Podfile +++ b/examples/api/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/examples/api/ios/Runner.xcodeproj/project.pbxproj b/examples/api/ios/Runner.xcodeproj/project.pbxproj index bdd18417a187b..2fb966ec9f9f1 100644 --- a/examples/api/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/api/ios/Runner.xcodeproj/project.pbxproj @@ -343,7 +343,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -420,7 +420,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -469,7 +469,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/examples/flutter_view/ios/Flutter/AppFrameworkInfo.plist b/examples/flutter_view/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/examples/flutter_view/ios/Flutter/AppFrameworkInfo.plist +++ b/examples/flutter_view/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/examples/flutter_view/ios/Runner.xcodeproj/project.pbxproj b/examples/flutter_view/ios/Runner.xcodeproj/project.pbxproj index 107ec7b1196ab..0454417a4f41c 100644 --- a/examples/flutter_view/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/flutter_view/ios/Runner.xcodeproj/project.pbxproj @@ -297,7 +297,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -365,7 +365,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -414,7 +414,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/examples/hello_world/ios/Flutter/AppFrameworkInfo.plist b/examples/hello_world/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/examples/hello_world/ios/Flutter/AppFrameworkInfo.plist +++ b/examples/hello_world/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/examples/hello_world/ios/Runner.xcodeproj/project.pbxproj b/examples/hello_world/ios/Runner.xcodeproj/project.pbxproj index 0c145c6437d87..4ffd41f7e7cd3 100644 --- a/examples/hello_world/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/hello_world/ios/Runner.xcodeproj/project.pbxproj @@ -295,7 +295,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -363,7 +363,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -413,7 +413,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/examples/image_list/ios/Flutter/AppFrameworkInfo.plist b/examples/image_list/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/examples/image_list/ios/Flutter/AppFrameworkInfo.plist +++ b/examples/image_list/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/examples/image_list/ios/Runner.xcodeproj/project.pbxproj b/examples/image_list/ios/Runner.xcodeproj/project.pbxproj index a654ee35738e3..ad33b04d6239e 100644 --- a/examples/image_list/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/image_list/ios/Runner.xcodeproj/project.pbxproj @@ -285,7 +285,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -354,7 +354,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -401,7 +401,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/examples/layers/ios/Flutter/AppFrameworkInfo.plist b/examples/layers/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/examples/layers/ios/Flutter/AppFrameworkInfo.plist +++ b/examples/layers/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/examples/layers/ios/Runner.xcodeproj/project.pbxproj b/examples/layers/ios/Runner.xcodeproj/project.pbxproj index bcf417f27f93e..bc63701cb51fd 100644 --- a/examples/layers/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/layers/ios/Runner.xcodeproj/project.pbxproj @@ -286,7 +286,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -353,7 +353,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -402,7 +402,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/examples/platform_channel/ios/Flutter/AppFrameworkInfo.plist b/examples/platform_channel/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/examples/platform_channel/ios/Flutter/AppFrameworkInfo.plist +++ b/examples/platform_channel/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/examples/platform_channel/ios/Runner.xcodeproj/project.pbxproj b/examples/platform_channel/ios/Runner.xcodeproj/project.pbxproj index dfc9b0023d8ed..024b105bb4b85 100644 --- a/examples/platform_channel/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/platform_channel/ios/Runner.xcodeproj/project.pbxproj @@ -294,7 +294,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -362,7 +362,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -411,7 +411,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/examples/platform_channel_swift/ios/Flutter/AppFrameworkInfo.plist b/examples/platform_channel_swift/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/examples/platform_channel_swift/ios/Flutter/AppFrameworkInfo.plist +++ b/examples/platform_channel_swift/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/examples/platform_channel_swift/ios/Runner.xcodeproj/project.pbxproj b/examples/platform_channel_swift/ios/Runner.xcodeproj/project.pbxproj index f2272d0d481e2..0f7a3c6b2d364 100644 --- a/examples/platform_channel_swift/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/platform_channel_swift/ios/Runner.xcodeproj/project.pbxproj @@ -291,7 +291,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -363,7 +363,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -412,7 +412,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; diff --git a/examples/platform_view/ios/Flutter/AppFrameworkInfo.plist b/examples/platform_view/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/examples/platform_view/ios/Flutter/AppFrameworkInfo.plist +++ b/examples/platform_view/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/examples/platform_view/ios/Runner.xcodeproj/project.pbxproj b/examples/platform_view/ios/Runner.xcodeproj/project.pbxproj index af401d67e44b4..8bb61c4421dda 100644 --- a/examples/platform_view/ios/Runner.xcodeproj/project.pbxproj +++ b/examples/platform_view/ios/Runner.xcodeproj/project.pbxproj @@ -296,7 +296,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -311,7 +311,6 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = io.flutter.examples.fullPlatformView; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -365,7 +364,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -414,7 +413,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -429,7 +428,6 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = io.flutter.examples.fullPlatformView; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -443,7 +441,6 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = io.flutter.examples.fullPlatformView; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/packages/flutter_tools/bin/podhelper.rb b/packages/flutter_tools/bin/podhelper.rb index 01d0bf4e21900..d9b0da38a5a4e 100644 --- a/packages/flutter_tools/bin/podhelper.rb +++ b/packages/flutter_tools/bin/podhelper.rb @@ -32,7 +32,7 @@ def flutter_additional_ios_build_settings(target) return unless target.platform_name == :ios # [target.deployment_target] is a [String] formatted as "8.0". - inherit_deployment_target = target.deployment_target[/\d+/].to_i < 11 + inherit_deployment_target = target.deployment_target[/\d+/].to_i < 12 # ARC code targeting iOS 8 does not build on Xcode 14.3. force_to_arc_supported_min = target.deployment_target[/\d+/].to_i < 9 @@ -206,7 +206,7 @@ def flutter_install_ios_engine_pod(ios_application_path = nil) s.license = { :type => 'BSD' } s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s } - s.ios.deployment_target = '11.0' + s.ios.deployment_target = '12.0' # Framework linking is handled by Flutter tooling, not CocoaPods. # Add a placeholder to satisfy `s.dependency 'Flutter'` plugin podspecs. s.vendored_frameworks = 'path/to/nothing' diff --git a/packages/flutter_tools/lib/src/base/build.dart b/packages/flutter_tools/lib/src/base/build.dart index 9dcafd4b341d4..a5fa9b6cbe37a 100644 --- a/packages/flutter_tools/lib/src/base/build.dart +++ b/packages/flutter_tools/lib/src/base/build.dart @@ -271,7 +271,7 @@ class AOTSnapshotter { // When the minimum version is updated, remember to update // template MinimumOSVersion. // https://github.com/flutter/flutter/pull/62902 - '-miphoneos-version-min=11.0', + '-miphoneos-version-min=12.0', if (sdkRoot != null) ...[ '-isysroot', sdkRoot, diff --git a/packages/flutter_tools/lib/src/build_system/targets/ios.dart b/packages/flutter_tools/lib/src/build_system/targets/ios.dart index 9f43d01fafb4d..ec7b9ab864eb9 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/ios.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/ios.dart @@ -677,9 +677,9 @@ Future _createStubAppFramework(File outputFile, Environment environment, '-dynamiclib', // Keep version in sync with AOTSnapshotter flag if (environmentType == EnvironmentType.physical) - '-miphoneos-version-min=11.0' + '-miphoneos-version-min=12.0' else - '-miphonesimulator-version-min=11.0', + '-miphonesimulator-version-min=12.0', '-Xlinker', '-rpath', '-Xlinker', '@executable_path/Frameworks', '-Xlinker', '-rpath', '-Xlinker', '@loader_path/Frameworks', '-fapplication-extension', diff --git a/packages/flutter_tools/lib/src/commands/build_ios_framework.dart b/packages/flutter_tools/lib/src/commands/build_ios_framework.dart index 66eea554289b6..62d164892da0b 100644 --- a/packages/flutter_tools/lib/src/commands/build_ios_framework.dart +++ b/packages/flutter_tools/lib/src/commands/build_ios_framework.dart @@ -374,7 +374,7 @@ LICENSE s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } s.source = { :http => '${cache.storageBaseUrl}/flutter_infra_release/flutter/${cache.engineRevision}/$artifactsMode/artifacts.zip' } s.documentation_url = 'https://flutter.dev/docs' - s.platform = :ios, '11.0' + s.platform = :ios, '12.0' s.vendored_frameworks = 'Flutter.xcframework' end '''; diff --git a/packages/flutter_tools/lib/src/flutter_plugins.dart b/packages/flutter_tools/lib/src/flutter_plugins.dart index fd38dd79be11c..7eaf178619394 100644 --- a/packages/flutter_tools/lib/src/flutter_plugins.dart +++ b/packages/flutter_tools/lib/src/flutter_plugins.dart @@ -774,7 +774,7 @@ Future _writeIOSPluginRegistrant(FlutterProject project, List plug final List> iosPlugins = _extractPlatformMaps(methodChannelPlugins, IOSPlugin.kConfigKey); final Map context = { 'os': 'ios', - 'deploymentTarget': '11.0', + 'deploymentTarget': '12.0', 'framework': 'Flutter', 'methodChannelPlugins': iosPlugins, }; diff --git a/packages/flutter_tools/lib/src/ios/migrations/ios_deployment_target_migration.dart b/packages/flutter_tools/lib/src/ios/migrations/ios_deployment_target_migration.dart index a9d9b5eabfeab..3f1a423ad4e99 100644 --- a/packages/flutter_tools/lib/src/ios/migrations/ios_deployment_target_migration.dart +++ b/packages/flutter_tools/lib/src/ios/migrations/ios_deployment_target_migration.dart @@ -50,14 +50,19 @@ class IOSDeploymentTargetMigration extends ProjectMigrator { MinimumOSVersion 9.0 '''; - const String minimumOSVersionReplacement = ''' + const String minimumOSVersionOriginal11 = ''' MinimumOSVersion 11.0 '''; + const String minimumOSVersionReplacement = ''' + MinimumOSVersion + 12.0 +'''; return fileContents .replaceAll(minimumOSVersionOriginal8, minimumOSVersionReplacement) - .replaceAll(minimumOSVersionOriginal9, minimumOSVersionReplacement); + .replaceAll(minimumOSVersionOriginal9, minimumOSVersionReplacement) + .replaceAll(minimumOSVersionOriginal11, minimumOSVersionReplacement); } @override @@ -65,24 +70,30 @@ class IOSDeploymentTargetMigration extends ProjectMigrator { // Xcode project file changes. const String deploymentTargetOriginal8 = 'IPHONEOS_DEPLOYMENT_TARGET = 8.0;'; const String deploymentTargetOriginal9 = 'IPHONEOS_DEPLOYMENT_TARGET = 9.0;'; + const String deploymentTargetOriginal11 = 'IPHONEOS_DEPLOYMENT_TARGET = 11.0;'; // Podfile changes. - const String podfilePlatformVersionOriginal = "platform :ios, '9.0'"; + const String podfilePlatformVersionOriginal9 = "platform :ios, '9.0'"; + const String podfilePlatformVersionOriginal11 = "platform :ios, '11.0'"; if (line.contains(deploymentTargetOriginal8) || line.contains(deploymentTargetOriginal9) - || line.contains(podfilePlatformVersionOriginal)) { + || line.contains(deploymentTargetOriginal11) + || line.contains(podfilePlatformVersionOriginal9) + || line.contains(podfilePlatformVersionOriginal11)) { if (!migrationRequired) { // Only print for the first discovered change found. - logger.printStatus('Updating minimum iOS deployment target to 11.0.'); + logger.printStatus('Updating minimum iOS deployment target to 12.0.'); } - const String deploymentTargetReplacement = 'IPHONEOS_DEPLOYMENT_TARGET = 11.0;'; - const String podfilePlatformVersionReplacement = "platform :ios, '11.0'"; + const String deploymentTargetReplacement = 'IPHONEOS_DEPLOYMENT_TARGET = 12.0;'; + const String podfilePlatformVersionReplacement = "platform :ios, '12.0'"; return line .replaceAll(deploymentTargetOriginal8, deploymentTargetReplacement) .replaceAll(deploymentTargetOriginal9, deploymentTargetReplacement) - .replaceAll(podfilePlatformVersionOriginal, podfilePlatformVersionReplacement); + .replaceAll(deploymentTargetOriginal11, deploymentTargetReplacement) + .replaceAll(podfilePlatformVersionOriginal9, podfilePlatformVersionReplacement) + .replaceAll(podfilePlatformVersionOriginal11, podfilePlatformVersionReplacement); } return line; diff --git a/packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner.xcodeproj/project.pbxproj.tmpl b/packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner.xcodeproj/project.pbxproj.tmpl index 44878f4c219ac..625856cd1b1a2 100644 --- a/packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner.xcodeproj/project.pbxproj.tmpl +++ b/packages/flutter_tools/templates/app_shared/ios-objc.tmpl/Runner.xcodeproj/project.pbxproj.tmpl @@ -363,7 +363,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -479,7 +479,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -528,7 +528,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/packages/flutter_tools/templates/app_shared/ios-swift.tmpl/Runner.xcodeproj/project.pbxproj.tmpl b/packages/flutter_tools/templates/app_shared/ios-swift.tmpl/Runner.xcodeproj/project.pbxproj.tmpl index 2bd6d875a3e3f..8c7270be23d3e 100644 --- a/packages/flutter_tools/templates/app_shared/ios-swift.tmpl/Runner.xcodeproj/project.pbxproj.tmpl +++ b/packages/flutter_tools/templates/app_shared/ios-swift.tmpl/Runner.xcodeproj/project.pbxproj.tmpl @@ -345,7 +345,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -475,7 +475,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -524,7 +524,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/Flutter/AppFrameworkInfo.plist b/packages/flutter_tools/templates/app_shared/ios.tmpl/Flutter/AppFrameworkInfo.plist index 9625e105df39e..7c56964006274 100644 --- a/packages/flutter_tools/templates/app_shared/ios.tmpl/Flutter/AppFrameworkInfo.plist +++ b/packages/flutter_tools/templates/app_shared/ios.tmpl/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/packages/flutter_tools/templates/cocoapods/Podfile-ios-objc b/packages/flutter_tools/templates/cocoapods/Podfile-ios-objc index ec43b513b0d1b..c9339a034ebe2 100644 --- a/packages/flutter_tools/templates/cocoapods/Podfile-ios-objc +++ b/packages/flutter_tools/templates/cocoapods/Podfile-ios-objc @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/packages/flutter_tools/templates/cocoapods/Podfile-ios-swift b/packages/flutter_tools/templates/cocoapods/Podfile-ios-swift index fdcc671eb341c..d97f17e223fb9 100644 --- a/packages/flutter_tools/templates/cocoapods/Podfile-ios-swift +++ b/packages/flutter_tools/templates/cocoapods/Podfile-ios-swift @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/project.pbxproj.tmpl b/packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/project.pbxproj.tmpl index e5d1c9f51d521..3085ecec3a178 100644 --- a/packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/project.pbxproj.tmpl +++ b/packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.xcodeproj.tmpl/project.pbxproj.tmpl @@ -287,7 +287,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -363,7 +363,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -412,7 +412,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/packages/flutter_tools/templates/module/ios/host_app_ephemeral_cocoapods/Podfile.copy.tmpl b/packages/flutter_tools/templates/module/ios/host_app_ephemeral_cocoapods/Podfile.copy.tmpl index 08805d6c7e78a..ff7146215ec9c 100644 --- a/packages/flutter_tools/templates/module/ios/host_app_ephemeral_cocoapods/Podfile.copy.tmpl +++ b/packages/flutter_tools/templates/module/ios/host_app_ephemeral_cocoapods/Podfile.copy.tmpl @@ -1,4 +1,4 @@ -platform :ios, '11.0' +platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/packages/flutter_tools/templates/module/ios/library/Flutter.tmpl/AppFrameworkInfo.plist b/packages/flutter_tools/templates/module/ios/library/Flutter.tmpl/AppFrameworkInfo.plist index 9625e105df39e..7c56964006274 100644 --- a/packages/flutter_tools/templates/module/ios/library/Flutter.tmpl/AppFrameworkInfo.plist +++ b/packages/flutter_tools/templates/module/ios/library/Flutter.tmpl/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/packages/flutter_tools/templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/project.pbxproj b/packages/flutter_tools/templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/project.pbxproj index 8f544ef77eb2b..dd93f35c57e7a 100644 --- a/packages/flutter_tools/templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/project.pbxproj +++ b/packages/flutter_tools/templates/xcode/ios/custom_application_bundle/Runner.xcodeproj.tmpl/project.pbxproj @@ -152,7 +152,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -208,7 +208,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -257,7 +257,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart index 8f0ae0d5b3257..5c35fddbd5755 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart @@ -653,7 +653,7 @@ void main() { expect(testLogger.errorText, contains("Use of undeclared identifier 'asdas'")); expect(testLogger.errorText, contains('/Users/m/Projects/test_create/ios/Runner/AppDelegate.m:7:56')); expect(testLogger.errorText, isNot(contains('Command PhaseScriptExecution failed with a nonzero exit code'))); - expect(testLogger.warningText, isNot(contains("The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.0.99."))); + expect(testLogger.warningText, isNot(contains('but the range of supported deployment target versions is'))); }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ @@ -1147,7 +1147,7 @@ Runner requires a provisioning profile. Select a provisioning profile in the Sig expect(testLogger.errorText, contains("Use of undeclared identifier 'asdas'")); expect(testLogger.errorText, contains('/Users/m/Projects/test_create/ios/Runner/AppDelegate.m:7:56')); expect(testLogger.errorText, isNot(contains('Command PhaseScriptExecution failed with a nonzero exit code'))); - expect(testLogger.warningText, isNot(contains("The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.0.99."))); + expect(testLogger.warningText, isNot(contains('but the range of supported deployment target versions is'))); }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.list([ diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart index e4a9d6ecae00b..933fea4e5cfbc 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart @@ -850,7 +850,7 @@ void main() { expect(testLogger.errorText, contains("Use of undeclared identifier 'asdas'")); expect(testLogger.errorText, contains('/Users/m/Projects/test_create/ios/Runner/AppDelegate.m:7:56')); expect(testLogger.errorText, isNot(contains('Command PhaseScriptExecution failed with a nonzero exit code'))); - expect(testLogger.warningText, isNot(contains("The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 9.0 to 14.0.99."))); + expect(testLogger.warningText, isNot(contains('but the range of supported deployment target versions'))); expect(fakeProcessManager, hasNoRemainingExpectations); }, overrides: { FileSystem: () => fileSystem, @@ -992,7 +992,7 @@ void main() { 'CFBundleDisplayName': 'Awesome Gallery', // Will not use CFBundleName since CFBundleDisplayName is present. 'CFBundleName': 'Awesome Gallery 2', - 'MinimumOSVersion': '11.0', + 'MinimumOSVersion': '17.0', 'CFBundleVersion': '666', 'CFBundleShortVersionString': '12.34.56', }; @@ -1014,7 +1014,7 @@ void main() { ' • Version Number: 12.34.56\n' ' • Build Number: 666\n' ' • Display Name: Awesome Gallery\n' - ' • Deployment Target: 11.0\n' + ' • Deployment Target: 17.0\n' ' • Bundle Identifier: io.flutter.someProject\n' ) ); @@ -1047,7 +1047,7 @@ void main() { 'CFBundleIdentifier': 'io.flutter.someProject', // Will use CFBundleName since CFBundleDisplayName is absent. 'CFBundleName': 'Awesome Gallery', - 'MinimumOSVersion': '11.0', + 'MinimumOSVersion': '17.0', 'CFBundleVersion': '666', 'CFBundleShortVersionString': '12.34.56', }; @@ -1069,7 +1069,7 @@ void main() { ' • Version Number: 12.34.56\n' ' • Build Number: 666\n' ' • Display Name: Awesome Gallery\n' - ' • Deployment Target: 11.0\n' + ' • Deployment Target: 17.0\n' ' • Bundle Identifier: io.flutter.someProject\n' ) ); diff --git a/packages/flutter_tools/test/general.shard/base/build_test.dart b/packages/flutter_tools/test/general.shard/base/build_test.dart index 0bd658bb2f5a2..20b85f4f0eb2e 100644 --- a/packages/flutter_tools/test/general.shard/base/build_test.dart +++ b/packages/flutter_tools/test/general.shard/base/build_test.dart @@ -28,7 +28,7 @@ const FakeCommand kARMCheckCommand = FakeCommand( ); const List kDefaultClang = [ - '-miphoneos-version-min=11.0', + '-miphoneos-version-min=12.0', '-isysroot', 'path/to/sdk', '-dynamiclib', @@ -221,7 +221,7 @@ void main() { 'cc', '-arch', 'arm64', - '-miphoneos-version-min=11.0', + '-miphoneos-version-min=12.0', '-isysroot', 'path/to/sdk', '-c', @@ -292,7 +292,7 @@ void main() { 'cc', '-arch', 'arm64', - '-miphoneos-version-min=11.0', + '-miphoneos-version-min=12.0', '-isysroot', 'path/to/sdk', '-c', @@ -360,7 +360,7 @@ void main() { 'cc', '-arch', 'arm64', - '-miphoneos-version-min=11.0', + '-miphoneos-version-min=12.0', '-isysroot', 'path/to/sdk', '-c', diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart index a287f1b0d0923..bc94d0178aa21 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart @@ -584,7 +584,7 @@ native-assets: {} 'cc', '-arch', 'arm64', - '-miphoneos-version-min=11.0', + '-miphoneos-version-min=12.0', '-isysroot', 'path/to/iPhoneOS.sdk', '-c', @@ -597,7 +597,7 @@ native-assets: {} 'clang', '-arch', 'arm64', - '-miphoneos-version-min=11.0', + '-miphoneos-version-min=12.0', '-isysroot', 'path/to/iPhoneOS.sdk', '-dynamiclib', diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/ios_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/ios_test.dart index 8d436ca6e9a73..cab09cf27df55 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/ios_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/ios_test.dart @@ -22,7 +22,7 @@ final Platform macPlatform = FakePlatform(operatingSystem: 'macos', environment: const List _kSharedConfig = [ '-dynamiclib', - '-miphoneos-version-min=11.0', + '-miphoneos-version-min=12.0', '-Xlinker', '-rpath', '-Xlinker', @@ -87,7 +87,7 @@ void main() { fileSystem.path.absolute(fileSystem.path.join( '.tmp_rand0', 'flutter_tools_stub_source.rand0', 'debug_app.cc')), '-dynamiclib', - '-miphonesimulator-version-min=11.0', + '-miphonesimulator-version-min=12.0', '-Xlinker', '-rpath', '-Xlinker', diff --git a/packages/flutter_tools/test/general.shard/ios/ios_project_migration_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_project_migration_test.dart index 3f2277a22c83b..fae4b2be722ba 100644 --- a/packages/flutter_tools/test/general.shard/ios/ios_project_migration_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/ios_project_migration_test.dart @@ -546,18 +546,18 @@ keep this 3 }); testWithoutContext('skipped if nothing to upgrade', () { - const String xcodeProjectInfoFileContents = 'IPHONEOS_DEPLOYMENT_TARGET = 11.0;'; + const String xcodeProjectInfoFileContents = 'IPHONEOS_DEPLOYMENT_TARGET = 12.0;'; xcodeProjectInfoFile.writeAsStringSync(xcodeProjectInfoFileContents); const String appFrameworkInfoPlistContents = ''' MinimumOSVersion - 11.0 + 12.0 '''; appFrameworkInfoPlist.writeAsStringSync(appFrameworkInfoPlistContents); final DateTime projectLastModified = xcodeProjectInfoFile.lastModifiedSync(); - const String podfileFileContents = "# platform :ios, '11.0'"; + const String podfileFileContents = "# platform :ios, '12.0'"; podfile.writeAsStringSync(podfileFileContents); final DateTime podfileLastModified = podfile.lastModifiedSync(); @@ -576,7 +576,7 @@ keep this 3 expect(testLogger.statusText, isEmpty); }); - testWithoutContext('Xcode project is migrated to 11', () { + testWithoutContext('Xcode project is migrated to 12', () { xcodeProjectInfoFile.writeAsStringSync(''' GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 8.0; @@ -585,6 +585,7 @@ keep this 3 IPHONEOS_DEPLOYMENT_TARGET = 8.0; IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; '''); appFrameworkInfoPlist.writeAsStringSync(''' @@ -598,6 +599,8 @@ keep this 3 8.0 MinimumOSVersion 11.0 + MinimumOSVersion + 12.0 '''); @@ -605,6 +608,8 @@ keep this 3 podfile.writeAsStringSync(''' # platform :ios, '9.0' platform :ios, '9.0' +# platform :ios, '11.0' +platform :ios, '11.0' '''); final IOSDeploymentTargetMigration iosProjectMigration = IOSDeploymentTargetMigration( @@ -615,12 +620,13 @@ platform :ios, '9.0' expect(xcodeProjectInfoFile.readAsStringSync(), ''' GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; '''); expect(appFrameworkInfoPlist.readAsStringSync(), ''' @@ -631,19 +637,23 @@ platform :ios, '9.0' CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 MinimumOSVersion - 11.0 + 12.0 + MinimumOSVersion + 12.0 '''); expect(podfile.readAsStringSync(), ''' -# platform :ios, '11.0' -platform :ios, '11.0' +# platform :ios, '12.0' +platform :ios, '12.0' +# platform :ios, '12.0' +platform :ios, '12.0' '''); // Only print once even though 2 lines were changed. - expect('Updating minimum iOS deployment target to 11.0'.allMatches(testLogger.statusText).length, 1); + expect('Updating minimum iOS deployment target to 12.0'.allMatches(testLogger.statusText).length, 1); }); }); @@ -864,7 +874,7 @@ platform :ios, '11.0' }); testWithoutContext('skipped if nothing to upgrade', () { - const String xcodeProjectInfoFileContents = 'IPHONEOS_DEPLOYMENT_TARGET = 11.0;'; + const String xcodeProjectInfoFileContents = 'IPHONEOS_DEPLOYMENT_TARGET = 12.0;'; xcodeProjectInfoFile.writeAsStringSync(xcodeProjectInfoFileContents); final DateTime projectLastModified = xcodeProjectInfoFile.lastModifiedSync(); diff --git a/packages/integration_test/example/ios/Flutter/AppFrameworkInfo.plist b/packages/integration_test/example/ios/Flutter/AppFrameworkInfo.plist index 4f8d4d2456f3b..8c6e56146e23c 100644 --- a/packages/integration_test/example/ios/Flutter/AppFrameworkInfo.plist +++ b/packages/integration_test/example/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 11.0 + 12.0 diff --git a/packages/integration_test/example/ios/Podfile b/packages/integration_test/example/ios/Podfile index ec43b513b0d1b..c9339a034ebe2 100644 --- a/packages/integration_test/example/ios/Podfile +++ b/packages/integration_test/example/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/packages/integration_test/example/ios/Runner.xcodeproj/project.pbxproj b/packages/integration_test/example/ios/Runner.xcodeproj/project.pbxproj index f451041483be0..b7bb8f87c51de 100644 --- a/packages/integration_test/example/ios/Runner.xcodeproj/project.pbxproj +++ b/packages/integration_test/example/ios/Runner.xcodeproj/project.pbxproj @@ -449,7 +449,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -562,7 +562,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -611,7 +611,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; From ef1af02aead6fe2414f3aafa5a61087b610e1332 Mon Sep 17 00:00:00 2001 From: Kevin Chisholm Date: Thu, 11 Jan 2024 15:19:26 -0600 Subject: [PATCH 11/11] [flutter_releases] Flutter stable 3.16.7 Framework Cherrypicks (#141406) # Flutter stable 3.16.7 Framework ## Scheduled Cherrypicks --- bin/internal/engine.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 2d262497c8695..c4b2234c54f7b 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -3f3e560236539b7e2702f5ac790b2a4691b32d49 +4a585b79294e830fa89c24924d58a27cc8fbf406