Revert "remove iOS folder (#61561)" (#62903)
This partially reverts cherry-pick f904f51fbc4777a82d2a22b473a40004c56c7f9b
diff --git a/packages/flutter_tools/lib/src/template.dart b/packages/flutter_tools/lib/src/template.dart
index eacdacb..b3f8f78 100644
--- a/packages/flutter_tools/lib/src/template.dart
+++ b/packages/flutter_tools/lib/src/template.dart
@@ -129,10 +129,9 @@
return null;
}
- final bool ios = context['ios'] as bool;
- if (relativeDestinationPath.contains('ios') && !ios) {
- return null;
- }
+ // TODO(cyanglaz): do not add iOS folder by default when 1.20.0 is released.
+ // Also need to update the flutter SDK min constraint in the pubspec.yaml to 1.20.0.
+ // https://github.com/flutter/flutter/issues/59787
// Only build a web project if explicitly asked.
final bool web = context['web'] as bool;
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 05d3051..8f39a74 100644
--- a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart
+++ b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart
@@ -1533,7 +1533,7 @@
// TODO(cyanglaz): no-op iOS folder should be removed after 1.20.0 release
// https://github.com/flutter/flutter/issues/59787
- expect(projectDir.childDirectory('ios').existsSync(), false);
+ expect(projectDir.childDirectory('ios').existsSync(), true);
expect(projectDir.childDirectory('android').existsSync(), false);
expect(projectDir.childDirectory('web').existsSync(), false);
expect(projectDir.childDirectory('linux').existsSync(), false);
@@ -1542,7 +1542,7 @@
// TODO(cyanglaz): no-op iOS folder should be removed after 1.20.0 release
// https://github.com/flutter/flutter/issues/59787
- expect(projectDir.childDirectory('example').childDirectory('ios').existsSync(), false);
+ expect(projectDir.childDirectory('example').childDirectory('ios').existsSync(), true);
expect(projectDir.childDirectory('example').childDirectory('android').existsSync(), false);
expect(projectDir.childDirectory('example').childDirectory('web').existsSync(), false);
expect(projectDir.childDirectory('example').childDirectory('linux').existsSync(), false);
@@ -1557,6 +1557,25 @@
});
+ // TODO(cyanglaz): no-op iOS folder should be removed after 1.20.0 release
+ // https://github.com/flutter/flutter/issues/59787
+ testUsingContext('create an empty plugin contains a no-op ios folder, but no pubspec entry.', () async {
+ Cache.flutterRoot = '../..';
+ when(mockFlutterVersion.frameworkRevision).thenReturn(frameworkRevision);
+ when(mockFlutterVersion.channel).thenReturn(frameworkChannel);
+
+ final CreateCommand command = CreateCommand();
+ final CommandRunner<void> runner = createTestCommandRunner(command);
+ await runner.run(<String>['create', '--no-pub', '--template=plugin', projectDir.path]);
+
+ expect(projectDir.childDirectory('ios').existsSync(), true);
+ expect(projectDir.childDirectory('example').childDirectory('ios').existsSync(), true);
+ validatePubspecForPlugin(projectDir: projectDir.absolute.path, expectedPlatforms: const <String>[
+ 'some_platform'
+ ], pluginClass: 'somePluginClass',
+ unexpectedPlatforms: <String>['ios']);
+ });
+
testUsingContext('plugin supports ios if requested', () async {
Cache.flutterRoot = '../..';
when(mockFlutterVersion.frameworkRevision).thenReturn(frameworkRevision);