if there is no .ios or ios sub-project, don't attempt building for iOS (#31406)
diff --git a/packages/flutter_tools/lib/src/application_package.dart b/packages/flutter_tools/lib/src/application_package.dart index bf0fe9e..fa9dfe6 100644 --- a/packages/flutter_tools/lib/src/application_package.dart +++ b/packages/flutter_tools/lib/src/application_package.dart
@@ -306,8 +306,13 @@ } factory IOSApp.fromIosProject(IosProject project) { - if (getCurrentHostPlatform() != HostPlatform.darwin_x64) + if (getCurrentHostPlatform() != HostPlatform.darwin_x64) { return null; + } + // TODO(jonahwilliams): do more verification in this check. + if (!project.exists) { + return null; + } return BuildableIOSApp(project); }
diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart index c009017..307eaf1 100644 --- a/packages/flutter_tools/lib/src/project.dart +++ b/packages/flutter_tools/lib/src/project.dart
@@ -231,6 +231,9 @@ /// True, if the parent Flutter project is a module project. bool get isModule => parent.isModule; + /// Whether the flutter application has an iOS project. + bool get exists => hostAppRoot.existsSync(); + /// The xcode config file for [mode]. File xcodeConfigFor(String mode) => _flutterLibRoot.childDirectory('Flutter').childFile('$mode.xcconfig');
diff --git a/packages/flutter_tools/test/application_package_test.dart b/packages/flutter_tools/test/application_package_test.dart index 06450ed..20f3d29 100644 --- a/packages/flutter_tools/test/application_package_test.dart +++ b/packages/flutter_tools/test/application_package_test.dart
@@ -277,6 +277,14 @@ expect(iosApp.id, 'fooBundleId'); expect(iosApp.bundleName, 'bundle.app'); }, overrides: overrides); + + testUsingContext('returns null when there is no ios or .ios directory', () async { + fs.file('pubspec.yaml').createSync(); + fs.file('.packages').createSync(); + final BuildableIOSApp iosApp = IOSApp.fromIosProject((await FlutterProject.fromDirectory(fs.currentDirectory)).ios); + + expect(iosApp, null); + }, overrides: overrides); }); }