diff --git a/.gitignore b/.gitignore index 270e6afa22..56909ccd39 100644 --- a/.gitignore +++ b/.gitignore @@ -92,6 +92,7 @@ unlinked_spec.ds **/ios/Flutter/Flutter.framework **/ios/Flutter/Flutter.podspec **/ios/Flutter/Generated.xcconfig +**/ios/Flutter/ephemeral **/ios/Flutter/app.flx **/ios/Flutter/app.zip **/ios/Flutter/flutter_assets/ diff --git a/dev/benchmarks/complex_layout/ios/.gitignore b/dev/benchmarks/complex_layout/ios/.gitignore index e96ef602b8..4111ddfd5a 100644 --- a/dev/benchmarks/complex_layout/ios/.gitignore +++ b/dev/benchmarks/complex_layout/ios/.gitignore @@ -18,6 +18,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/dev/integration_tests/ios_app_with_extensions/ios/.gitignore b/dev/integration_tests/ios_app_with_extensions/ios/.gitignore index e96ef602b8..4111ddfd5a 100644 --- a/dev/integration_tests/ios_app_with_extensions/ios/.gitignore +++ b/dev/integration_tests/ios_app_with_extensions/ios/.gitignore @@ -18,6 +18,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/dev/integration_tests/non_nullable/ios/.gitignore b/dev/integration_tests/non_nullable/ios/.gitignore index e96ef602b8..4111ddfd5a 100644 --- a/dev/integration_tests/non_nullable/ios/.gitignore +++ b/dev/integration_tests/non_nullable/ios/.gitignore @@ -18,6 +18,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/dev/integration_tests/release_smoke_test/.gitignore b/dev/integration_tests/release_smoke_test/.gitignore index 7391168dda..fa4e4b701e 100644 --- a/dev/integration_tests/release_smoke_test/.gitignore +++ b/dev/integration_tests/release_smoke_test/.gitignore @@ -60,6 +60,7 @@ **/ios/Flutter/Flutter.framework **/ios/Flutter/Flutter.podspec **/ios/Flutter/Generated.xcconfig +**/ios/Flutter/ephemeral **/ios/Flutter/app.flx **/ios/Flutter/app.zip **/ios/Flutter/flutter_assets/ 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 3375d38105..be6898be80 100644 --- a/packages/flutter_tools/lib/src/build_system/targets/ios.dart +++ b/packages/flutter_tools/lib/src/build_system/targets/ios.dart @@ -421,7 +421,7 @@ abstract class IosAssetBundle extends Target { // TODO(jonahwilliams): add plist to inputs final FlutterProject flutterProject = FlutterProject.fromDirectory(environment.projectDir); final Directory plistRoot = flutterProject.isModule - ? flutterProject.ios.ephemeralDirectory + ? flutterProject.ios.ephemeralModuleDirectory : environment.projectDir.childDirectory('ios'); plistRoot .childDirectory('Flutter') diff --git a/packages/flutter_tools/lib/src/commands/clean.dart b/packages/flutter_tools/lib/src/commands/clean.dart index a2b2d14105..ac3f8f5f0f 100644 --- a/packages/flutter_tools/lib/src/commands/clean.dart +++ b/packages/flutter_tools/lib/src/commands/clean.dart @@ -51,6 +51,7 @@ class CleanCommand extends FlutterCommand { deleteFile(flutterProject.android.ephemeralDirectory); deleteFile(flutterProject.ios.ephemeralDirectory); + deleteFile(flutterProject.ios.ephemeralModuleDirectory); deleteFile(flutterProject.ios.generatedXcodePropertiesFile); deleteFile(flutterProject.ios.generatedEnvironmentVariableExportScript); deleteFile(flutterProject.ios.deprecatedCompiledDartFramework); diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart index 06ed097461..4e5046e981 100644 --- a/packages/flutter_tools/lib/src/project.dart +++ b/packages/flutter_tools/lib/src/project.dart @@ -428,7 +428,7 @@ class IosProject extends FlutterProjectPlatform implements XcodeBasedProject { static const String _productBundleIdVariable = r'$(PRODUCT_BUNDLE_IDENTIFIER)'; static const String _hostAppProjectName = 'Runner'; - Directory get ephemeralDirectory => parent.directory.childDirectory('.ios'); + Directory get ephemeralModuleDirectory => parent.directory.childDirectory('.ios'); Directory get _editableDirectory => parent.directory.childDirectory('ios'); /// This parent folder of `Runner.xcodeproj`. @@ -436,7 +436,7 @@ class IosProject extends FlutterProjectPlatform implements XcodeBasedProject { if (!isModule || _editableDirectory.existsSync()) { return _editableDirectory; } - return ephemeralDirectory; + return ephemeralModuleDirectory; } /// The root directory of the iOS wrapping of Flutter and plugins. This is the @@ -445,7 +445,7 @@ class IosProject extends FlutterProjectPlatform implements XcodeBasedProject { /// /// This is the same as [hostAppRoot] except when the project is /// a Flutter module with an editable host app. - Directory get _flutterLibRoot => isModule ? ephemeralDirectory : _editableDirectory; + Directory get _flutterLibRoot => isModule ? ephemeralModuleDirectory : _editableDirectory; /// True, if the parent Flutter project is a module project. bool get isModule => parent.isModule; @@ -453,6 +453,9 @@ class IosProject extends FlutterProjectPlatform implements XcodeBasedProject { /// Whether the flutter application has an iOS project. bool get exists => hostAppRoot.existsSync(); + /// Put generated files here. + Directory get ephemeralDirectory => _flutterLibRoot.childDirectory('Flutter').childDirectory('ephemeral'); + @override File xcodeConfigFor(String mode) => _flutterLibRoot.childDirectory('Flutter').childFile('$mode.xcconfig'); @@ -664,29 +667,29 @@ class IosProject extends FlutterProjectPlatform implements XcodeBasedProject { return; } final bool pubspecChanged = globals.fsUtils.isOlderThanReference( - entity: ephemeralDirectory, + entity: ephemeralModuleDirectory, referenceFile: parent.pubspecFile, ); - final bool toolingChanged = globals.cache.isOlderThanToolsStamp(ephemeralDirectory); + final bool toolingChanged = globals.cache.isOlderThanToolsStamp(ephemeralModuleDirectory); if (!pubspecChanged && !toolingChanged) { return; } - _deleteIfExistsSync(ephemeralDirectory); + _deleteIfExistsSync(ephemeralModuleDirectory); await _overwriteFromTemplate( globals.fs.path.join('module', 'ios', 'library'), - ephemeralDirectory, + ephemeralModuleDirectory, ); // Add ephemeral host app, if a editable host app does not already exist. if (!_editableDirectory.existsSync()) { await _overwriteFromTemplate( globals.fs.path.join('module', 'ios', 'host_app_ephemeral'), - ephemeralDirectory, + ephemeralModuleDirectory, ); if (hasPlugins(parent)) { await _overwriteFromTemplate( globals.fs.path.join('module', 'ios', 'host_app_ephemeral_cocoapods'), - ephemeralDirectory, + ephemeralModuleDirectory, ); } // Use release mode so host project can link on bitcode variant. @@ -759,7 +762,7 @@ class IosProject extends FlutterProjectPlatform implements XcodeBasedProject { Directory get engineCopyDirectory { return isModule - ? ephemeralDirectory.childDirectory('Flutter').childDirectory('engine') + ? ephemeralModuleDirectory.childDirectory('Flutter').childDirectory('engine') : hostAppRoot.childDirectory('Flutter'); } diff --git a/packages/flutter_tools/templates/app/ios.tmpl/.gitignore b/packages/flutter_tools/templates/app/ios.tmpl/.gitignore index e96ef602b8..151026b91b 100644 --- a/packages/flutter_tools/templates/app/ios.tmpl/.gitignore +++ b/packages/flutter_tools/templates/app/ios.tmpl/.gitignore @@ -18,6 +18,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/packages/flutter_tools/templates/package/.gitignore.tmpl b/packages/flutter_tools/templates/package/.gitignore.tmpl index 1985397a2c..a247422ef7 100644 --- a/packages/flutter_tools/templates/package/.gitignore.tmpl +++ b/packages/flutter_tools/templates/package/.gitignore.tmpl @@ -60,6 +60,7 @@ build/ **/ios/Flutter/Flutter.framework **/ios/Flutter/Flutter.podspec **/ios/Flutter/Generated.xcconfig +**/ios/Flutter/ephemeral **/ios/Flutter/app.flx **/ios/Flutter/app.zip **/ios/Flutter/flutter_assets/ diff --git a/packages/flutter_tools/templates/plugin/ios.tmpl/.gitignore b/packages/flutter_tools/templates/plugin/ios.tmpl/.gitignore index aa479fd3ce..0c885071e3 100644 --- a/packages/flutter_tools/templates/plugin/ios.tmpl/.gitignore +++ b/packages/flutter_tools/templates/plugin/ios.tmpl/.gitignore @@ -34,4 +34,5 @@ Icon? .tags* /Flutter/Generated.xcconfig +/Flutter/ephemeral/ /Flutter/flutter_export_environment.sh \ No newline at end of file diff --git a/packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart index 6bb4bcb1b7..63d00b5341 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart @@ -53,6 +53,7 @@ void main() { projectUnderTest.android.ephemeralDirectory.createSync(recursive: true); projectUnderTest.ios.ephemeralDirectory.createSync(recursive: true); + projectUnderTest.ios.ephemeralModuleDirectory.createSync(recursive: true); projectUnderTest.ios.generatedXcodePropertiesFile.createSync(recursive: true); projectUnderTest.ios.generatedEnvironmentVariableExportScript.createSync(recursive: true); projectUnderTest.ios.deprecatedCompiledDartFramework.createSync(recursive: true); @@ -77,6 +78,7 @@ void main() { expect(projectUnderTest.android.ephemeralDirectory.existsSync(), isFalse); expect(projectUnderTest.ios.ephemeralDirectory.existsSync(), isFalse); + expect(projectUnderTest.ios.ephemeralModuleDirectory.existsSync(), isFalse); expect(projectUnderTest.ios.generatedXcodePropertiesFile.existsSync(), isFalse); expect(projectUnderTest.ios.generatedEnvironmentVariableExportScript.existsSync(), isFalse); expect(projectUnderTest.ios.deprecatedCompiledDartFramework.existsSync(), isFalse); diff --git a/packages/integration_test/example/ios/.gitignore b/packages/integration_test/example/ios/.gitignore index e96ef602b8..4111ddfd5a 100644 --- a/packages/integration_test/example/ios/.gitignore +++ b/packages/integration_test/example/ios/.gitignore @@ -18,6 +18,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/packages/integration_test/ios/.gitignore b/packages/integration_test/ios/.gitignore index aa479fd3ce..53b344bcad 100644 --- a/packages/integration_test/ios/.gitignore +++ b/packages/integration_test/ios/.gitignore @@ -34,4 +34,5 @@ Icon? .tags* /Flutter/Generated.xcconfig +/Flutter/ephemeral /Flutter/flutter_export_environment.sh \ No newline at end of file