Skip to content

Commit

Permalink
Add ephemeral iOS directory to put future generated files (flutter#76830
Browse files Browse the repository at this point in the history
)
  • Loading branch information
jmagman authored Feb 26, 2021
1 parent f5903a9 commit d099ae6
Show file tree
Hide file tree
Showing 14 changed files with 27 additions and 11 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
1 change: 1 addition & 0 deletions dev/benchmarks/complex_layout/ios/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
1 change: 1 addition & 0 deletions dev/integration_tests/non_nullable/ios/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
1 change: 1 addition & 0 deletions dev/integration_tests/release_smoke_test/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down
1 change: 1 addition & 0 deletions packages/flutter_tools/lib/src/commands/clean.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
23 changes: 13 additions & 10 deletions packages/flutter_tools/lib/src/project.dart
Original file line number Diff line number Diff line change
Expand Up @@ -428,15 +428,15 @@ 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`.
Directory get hostAppRoot {
if (!isModule || _editableDirectory.existsSync()) {
return _editableDirectory;
}
return ephemeralDirectory;
return ephemeralModuleDirectory;
}

/// The root directory of the iOS wrapping of Flutter and plugins. This is the
Expand All @@ -445,14 +445,17 @@ 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;

/// 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');

Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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');
}

Expand Down
1 change: 1 addition & 0 deletions packages/flutter_tools/templates/app/ios.tmpl/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
1 change: 1 addition & 0 deletions packages/flutter_tools/templates/package/.gitignore.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@ Icon?
.tags*

/Flutter/Generated.xcconfig
/Flutter/ephemeral/
/Flutter/flutter_export_environment.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down
1 change: 1 addition & 0 deletions packages/integration_test/example/ios/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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/
Expand Down
1 change: 1 addition & 0 deletions packages/integration_test/ios/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,5 @@ Icon?
.tags*

/Flutter/Generated.xcconfig
/Flutter/ephemeral
/Flutter/flutter_export_environment.sh

0 comments on commit d099ae6

Please sign in to comment.