Unverified Commit 65159afb authored by Jenn Magder's avatar Jenn Magder Committed by GitHub

Force plugins to inherit minimum iOS version from Flutter app (#66590)

parent 14722d31
...@@ -37,12 +37,12 @@ class PluginTest { ...@@ -37,12 +37,12 @@ class PluginTest {
try { try {
section('Create plugin'); section('Create plugin');
final _FlutterProject plugin = await _FlutterProject.create( final _FlutterProject plugin = await _FlutterProject.create(
tempDir, options, tempDir, options, buildTarget,
name: 'plugintest', template: 'plugin', environment: pluginCreateEnvironment); name: 'plugintest', template: 'plugin', environment: pluginCreateEnvironment);
section('Test plugin'); section('Test plugin');
await plugin.test(); await plugin.test();
section('Create Flutter app'); section('Create Flutter app');
final _FlutterProject app = await _FlutterProject.create(tempDir, options, final _FlutterProject app = await _FlutterProject.create(tempDir, options, buildTarget,
name: 'plugintestapp', template: 'app', environment: appCreateEnvironment); name: 'plugintestapp', template: 'app', environment: appCreateEnvironment);
try { try {
section('Add plugins'); section('Add plugins');
...@@ -95,6 +95,7 @@ class _FlutterProject { ...@@ -95,6 +95,7 @@ class _FlutterProject {
static Future<_FlutterProject> create( static Future<_FlutterProject> create(
Directory directory, Directory directory,
List<String> options, List<String> options,
String target,
{ {
String name, String name,
String template, String template,
...@@ -113,12 +114,46 @@ class _FlutterProject { ...@@ -113,12 +114,46 @@ class _FlutterProject {
environment: environment, environment: environment,
); );
}); });
return _FlutterProject(directory, name);
final _FlutterProject project = _FlutterProject(directory, name);
if (template == 'plugin' && target == 'ios') {
project._reduceIOSPluginMinimumVersion(name);
}
return project;
}
// Make the platform version artificially low to test that the "deployment
// version too low" warning is never emitted.
void _reduceIOSPluginMinimumVersion(String plugin) {
final File podspec = File(path.join(rootPath, 'ios', '$plugin.podspec'));
if (!podspec.existsSync()) {
throw TaskResult.failure('podspec file missing at ${podspec.path}');
}
const String versionString = "s.platform = :ios, '8.0'";
String podspecContent = podspec.readAsStringSync();
if (!podspecContent.contains(versionString)) {
throw TaskResult.failure('Update this test to match plugin minimum iOS deployment version');
}
podspecContent = podspecContent.replaceFirst(
versionString,
"s.platform = :ios, '7.0'",
);
podspec.writeAsStringSync(podspecContent, flush: true);
} }
Future<void> build(String target) async { Future<void> build(String target) async {
await inDirectory(Directory(rootPath), () async { await inDirectory(Directory(rootPath), () async {
await flutter('build', options: <String>[target]); final String buildOutput = await evalFlutter('build', options: <String>[target, '-v']);
if (target == 'ios') {
// This warning is confusing and shouldn't be emitted. Plugins often support lower versions than the
// Flutter app, but as long as they support the minimum it will work.
// warning: 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.
if (buildOutput.contains('the range of supported deployment target versions')) {
throw TaskResult.failure('Minimum plugin version warning present');
}
}
}); });
} }
......
...@@ -27,8 +27,17 @@ end ...@@ -27,8 +27,17 @@ end
# end # end
# @param [PBXAggregateTarget] target Pod target. # @param [PBXAggregateTarget] target Pod target.
def flutter_additional_ios_build_settings(target) 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 < 9
target.build_configurations.each do |build_configuration| target.build_configurations.each do |build_configuration|
build_configuration.build_settings['ENABLE_BITCODE'] = 'NO' build_configuration.build_settings['ENABLE_BITCODE'] = 'NO'
# Suppress warning when pod supports a version lower than the minimum supported by Xcode (Xcode 12 - iOS 9).
# This warning is harmless but confusing--it's not a bad thing for dependencies to support a lower version.
# When deleted, the deployment version will inherit from the higher version derived from the 'Runner' target.
# If the pod only supports a higher version, do not delete to correctly produce an error.
build_configuration.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET' if inherit_deployment_target
end end
end end
......
...@@ -240,6 +240,12 @@ class AOTSnapshotter { ...@@ -240,6 +240,12 @@ class AOTSnapshotter {
final List<String> commonBuildOptions = <String>[ final List<String> commonBuildOptions = <String>[
'-arch', targetArch, '-arch', targetArch,
if (isIOS) if (isIOS)
// When the minimum version is updated, remember to update
// template IPHONEOS_DEPLOYMENT_TARGET and MinimumOSVersion.
// https://github.com/flutter/flutter/pull/62902
// Also update the podhelper.rb "deployment version too low"
// warning suppression version.
// https://github.com/flutter/flutter/pull/66590
'-miphoneos-version-min=9.0', '-miphoneos-version-min=9.0',
]; ];
......
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