Unverified Commit c60f2023 authored by Jenn Magder's avatar Jenn Magder Committed by GitHub

Force plugin transitive dependencies to an ARC compatible version (#124349)

Force plugin transitive dependencies to an ARC compatible version
parent e5e765e6
......@@ -347,12 +347,19 @@ public class $pluginClass: NSObject, FlutterPlugin {
if (!podspecContent.contains(versionString)) {
throw TaskResult.failure('Update this test to match plugin minimum $target deployment version');
}
podspecContent = podspecContent.replaceFirst(
versionString,
target == 'ios'
? "s.platform = :ios, '10.0'"
: "s.platform = :osx, '10.8'"
);
// Add transitive dependency on AppAuth 1.6 targeting iOS 8 and macOS 10.9, which no longer builds in Xcode
// to test the version is forced higher and builds.
const String iosContent = '''
s.platform = :ios, '10.0'
s.dependency 'AppAuth', '1.6.0'
''';
const String macosContent = '''
s.platform = :osx, '10.8'
s.dependency 'AppAuth', '1.6.0'
''';
podspecContent = podspecContent.replaceFirst(versionString, target == 'ios' ? iosContent : macosContent);
podspec.writeAsStringSync(podspecContent, flush: true);
}
......@@ -372,7 +379,8 @@ public class $pluginClass: NSObject, FlutterPlugin {
// but the range of supported deployment target versions is 9.0 to 14.0.99.
//
// (or "The macOS deployment target 'MACOSX_DEPLOYMENT_TARGET'"...)
if (buildOutput.contains('the range of supported deployment target versions')) {
if (buildOutput.contains('is set to 10.0, but the range of supported deployment target versions') ||
buildOutput.contains('is set to 10.8, but the range of supported deployment target versions')) {
throw TaskResult.failure('Minimum plugin version warning present');
}
......@@ -390,16 +398,24 @@ public class $pluginClass: NSObject, FlutterPlugin {
if (podsProjectContent.contains('IPHONEOS_DEPLOYMENT_TARGET = 10')) {
throw TaskResult.failure('Plugin build setting IPHONEOS_DEPLOYMENT_TARGET not removed');
}
// Transitive dependency AppAuth targeting too-low 8.0 was not fixed.
if (podsProjectContent.contains('IPHONEOS_DEPLOYMENT_TARGET = 8')) {
throw TaskResult.failure('Transitive dependency build setting IPHONEOS_DEPLOYMENT_TARGET=8 not removed');
}
if (!podsProjectContent.contains(r'"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = "$(inherited) i386";')) {
throw TaskResult.failure(r'EXCLUDED_ARCHS is not "$(inherited) i386"');
}
}
} else if (target == 'macos') {
// Same for macOS deployment target, but 10.8.
// The plugintest target should not have MACOSX_DEPLOYMENT_TARGET set.
if (target == 'macos' && podsProjectContent.contains('MACOSX_DEPLOYMENT_TARGET = 10.8')) {
if (podsProjectContent.contains('MACOSX_DEPLOYMENT_TARGET = 10.8')) {
throw TaskResult.failure('Plugin build setting MACOSX_DEPLOYMENT_TARGET not removed');
}
// Transitive dependency AppAuth targeting too-low 10.9 was not fixed.
if (podsProjectContent.contains('MACOSX_DEPLOYMENT_TARGET = 10.9')) {
throw TaskResult.failure('Transitive dependency build setting MACOSX_DEPLOYMENT_TARGET=10.9 not removed');
}
}
}
}
});
......
......@@ -34,6 +34,9 @@ def flutter_additional_ios_build_settings(target)
# [target.deployment_target] is a [String] formatted as "8.0".
inherit_deployment_target = target.deployment_target[/\d+/].to_i < 11
# ARC code targeting iOS 8 does not build on Xcode 14.3.
force_to_arc_supported_min = target.deployment_target[/\d+/].to_i < 9
# This podhelper script is at $FLUTTER_ROOT/packages/flutter_tools/bin.
# Add search paths from $FLUTTER_ROOT/bin/cache/artifacts/engine.
artifacts_dir = File.join('..', '..', '..', '..', 'bin', 'cache', 'artifacts', 'engine')
......@@ -62,6 +65,9 @@ def flutter_additional_ios_build_settings(target)
build_configuration.build_settings['EXPANDED_CODE_SIGN_IDENTITY'] = '-'
end
# ARC code targeting iOS 8 does not build on Xcode 14.3. Force to at least iOS 9.
build_configuration.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0' if force_to_arc_supported_min
# Skip other updates if it's not a Flutter plugin (transitive dependency).
next unless target.dependencies.any? { |dependency| dependency.name == 'Flutter' }
......@@ -99,12 +105,14 @@ end
def flutter_additional_macos_build_settings(target)
return unless target.platform_name == :osx
# Return if it's not a Flutter plugin (transitive dependency).
return unless target.dependencies.any? { |dependency| dependency.name == 'FlutterMacOS' }
# [target.deployment_target] is a [String] formatted as "10.8".
deployment_target_major, deployment_target_minor = target.deployment_target.match(/(\d+).?(\d*)/).captures
# ARC code targeting macOS 10.10 does not build on Xcode 14.3.
force_to_arc_supported_min = !target.deployment_target.blank? &&
(deployment_target_major.to_i < 10) ||
(deployment_target_major.to_i == 10 && deployment_target_minor.to_i < 11)
# Suppress warning when pod supports a version lower than the minimum supported by the latest stable version of Xcode (currently 10.14).
# This warning is harmless but confusing--it's not a bad thing for dependencies to support a lower version.
inherit_deployment_target = !target.deployment_target.blank? &&
......@@ -123,6 +131,12 @@ def flutter_additional_macos_build_settings(target)
end
target.build_configurations.each do |build_configuration|
# ARC code targeting macOS 10.10 does not build on Xcode 14.3. Force to at least macOS 10.11.
build_configuration.build_settings['MACOSX_DEPLOYMENT_TARGET'] = '10.11' if force_to_arc_supported_min
# Skip other updates if it's not a Flutter plugin (transitive dependency).
next unless target.dependencies.any? { |dependency| dependency.name == 'FlutterMacOS' }
# Profile can't be derived from the CocoaPods build configuration. Use release framework (for linking only).
configuration_engine_dir = build_configuration.type == :debug ? debug_framework_dir : release_framework_dir
build_configuration.build_settings['FRAMEWORK_SEARCH_PATHS'] = "\"#{configuration_engine_dir}\" $(inherited)"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment