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 diff --git a/bin/internal/engine.version b/bin/internal/engine.version index 6ab6e3bf7ea1c..c4b2234c54f7b 100644 --- a/bin/internal/engine.version +++ b/bin/internal/engine.version @@ -1 +1 @@ -49dec30114f043371698bc12d119d2abd72f475a +4a585b79294e830fa89c24924d58a27cc8fbf406 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/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/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/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/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/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/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/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 e77573b019693..fa69407aceeee 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 @@ -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: 537c +# PUBSPEC CHECKSUM: e7e1 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/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/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/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/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/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/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/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 = ''' { 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/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 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;