Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
5e17a240
Unverified
Commit
5e17a240
authored
Oct 19, 2020
by
Jenn Magder
Committed by
GitHub
Oct 19, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Generate only requested platform directories on create (#68376)
parent
a4c2075a
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
382 additions
and
299 deletions
+382
-299
create.dart
packages/flutter_tools/lib/src/commands/create.dart
+13
-3
packages.dart
packages/flutter_tools/lib/src/commands/packages.dart
+2
-2
resident_web_runner.dart
...s/flutter_tools/lib/src/isolated/resident_web_runner.dart
+1
-1
cocoapod_utils.dart
packages/flutter_tools/lib/src/macos/cocoapod_utils.dart
+1
-1
plugins.dart
packages/flutter_tools/lib/src/plugins.dart
+28
-23
project.dart
packages/flutter_tools/lib/src/project.dart
+43
-17
flutter_command.dart
packages/flutter_tools/lib/src/runner/flutter_command.dart
+1
-1
compile.dart
packages/flutter_tools/lib/src/web/compile.dart
+1
-1
create_test.dart
...tter_tools/test/commands.shard/permeable/create_test.dart
+248
-142
cocoapods_test.dart
...lutter_tools/test/general.shard/macos/cocoapods_test.dart
+1
-1
plugins_test.dart
packages/flutter_tools/test/general.shard/plugins_test.dart
+29
-93
project_test.dart
packages/flutter_tools/test/general.shard/project_test.dart
+14
-14
No files found.
packages/flutter_tools/lib/src/commands/create.dart
View file @
5e17a240
...
...
@@ -546,7 +546,10 @@ To edit platform code in an IDE see https://flutter.dev/developing-packages/#edi
generateSyntheticPackage:
false
,
);
final
FlutterProject
project
=
FlutterProject
.
fromDirectory
(
directory
);
await
project
.
ensureReadyForPlatformSpecificTooling
(
checkProjects:
false
);
await
project
.
ensureReadyForPlatformSpecificTooling
(
androidPlatform:
true
,
iosPlatform:
true
,
);
}
return
generatedCount
;
}
...
...
@@ -641,7 +644,6 @@ https://flutter.dev/docs/development/packages-and-plugins/developing-packages#pl
}
}
final
FlutterProject
project
=
FlutterProject
.
fromDirectory
(
directory
);
final
bool
generateAndroid
=
templateContext
[
'android'
]
==
true
;
if
(
generateAndroid
)
{
...
...
@@ -680,7 +682,15 @@ https://flutter.dev/docs/development/packages-and-plugins/developing-packages#pl
offline:
boolArg
(
'offline'
),
generateSyntheticPackage:
false
,
);
await
project
.
ensureReadyForPlatformSpecificTooling
(
checkProjects:
pluginExampleApp
);
await
project
.
ensureReadyForPlatformSpecificTooling
(
androidPlatform:
templateContext
[
'android'
]
as
bool
??
false
,
iosPlatform:
templateContext
[
'ios'
]
as
bool
??
false
,
linuxPlatform:
templateContext
[
'linux'
]
as
bool
??
false
,
macOSPlatform:
templateContext
[
'macos'
]
as
bool
??
false
,
windowsPlatform:
templateContext
[
'windows'
]
as
bool
??
false
,
webPlatform:
templateContext
[
'web'
]
as
bool
??
false
,
);
}
if
(
templateContext
[
'android'
]
==
true
)
{
gradle
.
updateLocalProperties
(
project:
project
,
requireAndroidSdk:
false
);
...
...
packages/flutter_tools/lib/src/commands/packages.dart
View file @
5e17a240
...
...
@@ -147,13 +147,13 @@ class PackagesGetCommand extends FlutterCommand {
final
FlutterProject
rootProject
=
FlutterProject
.
fromPath
(
target
);
await
_runPubGet
(
target
,
rootProject
);
await
rootProject
.
ensureReadyForPlatformSpecificTooling
(
checkProjects:
true
);
await
rootProject
.
regeneratePlatformSpecificTooling
(
);
// Get/upgrade packages in example app as well
if
(
rootProject
.
hasExampleApp
)
{
final
FlutterProject
exampleProject
=
rootProject
.
example
;
await
_runPubGet
(
exampleProject
.
directory
.
path
,
exampleProject
);
await
exampleProject
.
ensureReadyForPlatformSpecificTooling
(
checkProjects:
true
);
await
exampleProject
.
regeneratePlatformSpecificTooling
(
);
}
return
FlutterCommandResult
.
success
();
...
...
packages/flutter_tools/lib/src/isolated/resident_web_runner.dart
View file @
5e17a240
...
...
@@ -657,7 +657,7 @@ class _ResidentWebRunner extends ResidentWebRunner {
final
bool
hasWebPlugins
=
(
await
findPlugins
(
flutterProject
))
.
any
((
Plugin
p
)
=>
p
.
platforms
.
containsKey
(
WebPlugin
.
kConfigKey
));
await
injectPlugins
(
flutterProject
,
checkProjects
:
true
);
await
injectPlugins
(
flutterProject
,
webPlatform
:
true
);
final
Uri
generatedUri
=
globals
.
fs
.
currentDirectory
.
childDirectory
(
'lib'
)
...
...
packages/flutter_tools/lib/src/macos/cocoapod_utils.dart
View file @
5e17a240
...
...
@@ -18,7 +18,7 @@ Future<void> processPodsIfNeeded(
)
async
{
final
FlutterProject
project
=
xcodeProject
.
parent
;
// Ensure that the plugin list is up to date, since hasPlugins relies on it.
await
refreshPluginsList
(
project
);
await
refreshPluginsList
(
project
,
macOSPlatform:
project
.
macos
.
existsSync
()
);
if
(!(
hasPlugins
(
project
)
||
(
project
.
isModule
&&
xcodeProject
.
podfile
.
existsSync
())))
{
return
;
}
...
...
packages/flutter_tools/lib/src/plugins.dart
View file @
5e17a240
...
...
@@ -1145,11 +1145,12 @@ void _createPlatformPluginSymlinks(Directory symlinkDirectory, List<dynamic> pla
/// Rewrites the `.flutter-plugins` file of [project] based on the plugin
/// dependencies declared in `pubspec.yaml`.
///
/// If `checkProjects` is true, then plugins are only injected into directories
/// which already exist.
///
/// Assumes `pub get` has been executed since last change to `pubspec.yaml`.
Future
<
void
>
refreshPluginsList
(
FlutterProject
project
,
{
bool
checkProjects
=
false
})
async
{
Future
<
void
>
refreshPluginsList
(
FlutterProject
project
,
{
bool
iosPlatform
=
false
,
bool
macOSPlatform
=
false
,
})
async
{
final
List
<
Plugin
>
plugins
=
await
findPlugins
(
project
);
// TODO(franciscojma): Remove once migration is complete.
...
...
@@ -1159,12 +1160,10 @@ Future<void> refreshPluginsList(FlutterProject project, {bool checkProjects = fa
final
bool
changed
=
_writeFlutterPluginsList
(
project
,
plugins
);
if
(
changed
||
legacyChanged
)
{
createPluginSymlinks
(
project
,
force:
true
);
if
(
!
checkProjects
||
project
.
ios
.
existsSync
()
)
{
if
(
iosPlatform
)
{
globals
.
cocoaPods
.
invalidatePodInstallOutput
(
project
.
ios
);
}
// TODO(stuartmorgan): Potentially add checkProjects once a decision has
// made about how to handle macOS in existing projects.
if
(
project
.
macos
.
existsSync
())
{
if
(
macOSPlatform
)
{
globals
.
cocoaPods
.
invalidatePodInstallOutput
(
project
.
macos
);
}
}
...
...
@@ -1172,34 +1171,40 @@ Future<void> refreshPluginsList(FlutterProject project, {bool checkProjects = fa
/// Injects plugins found in `pubspec.yaml` into the platform-specific projects.
///
/// If `checkProjects` is true, then plugins are only injected into directories
/// which already exist.
///
/// Assumes [refreshPluginsList] has been called since last change to `pubspec.yaml`.
Future
<
void
>
injectPlugins
(
FlutterProject
project
,
{
bool
checkProjects
=
false
})
async
{
Future
<
void
>
injectPlugins
(
FlutterProject
project
,
{
bool
androidPlatform
=
false
,
bool
iosPlatform
=
false
,
bool
linuxPlatform
=
false
,
bool
macOSPlatform
=
false
,
bool
windowsPlatform
=
false
,
bool
webPlatform
=
false
,
})
async
{
final
List
<
Plugin
>
plugins
=
await
findPlugins
(
project
);
// Sort the plugins by name to keep ordering stable in generated files.
plugins
.
sort
((
Plugin
left
,
Plugin
right
)
=>
left
.
name
.
compareTo
(
right
.
name
));
if
(
(
checkProjects
&&
project
.
android
.
existsSync
())
||
!
checkProjects
)
{
if
(
androidPlatform
)
{
await
_writeAndroidPluginRegistrant
(
project
,
plugins
);
}
if
(
(
checkProjects
&&
project
.
ios
.
existsSync
())
||
!
checkProjects
)
{
if
(
iosPlatform
)
{
await
_writeIOSPluginRegistrant
(
project
,
plugins
);
}
// TODO(stuartmorgan): Revisit the conditions here once the plans for handling
// desktop in existing projects are in place. For now, ignore checkProjects
// on desktop and always treat it as true.
if
(
featureFlags
.
isLinuxEnabled
&&
project
.
linux
.
existsSync
())
{
if
(
linuxPlatform
)
{
await
_writeLinuxPluginFiles
(
project
,
plugins
);
}
if
(
featureFlags
.
isMacOSEnabled
&&
project
.
macos
.
existsSync
()
)
{
if
(
macOSPlatform
)
{
await
_writeMacOSPluginRegistrant
(
project
,
plugins
);
}
if
(
featureFlags
.
isWindowsEnabled
&&
project
.
windows
.
existsSync
()
)
{
if
(
windowsPlatform
)
{
await
_writeWindowsPluginFiles
(
project
,
plugins
);
}
for
(
final
XcodeBasedProject
subproject
in
<
XcodeBasedProject
>[
project
.
ios
,
project
.
macos
])
{
if
(!
project
.
isModule
&&
(!
checkProjects
||
subproject
.
existsSync
()))
{
if
(!
project
.
isModule
)
{
final
List
<
XcodeBasedProject
>
darwinProjects
=
<
XcodeBasedProject
>[
if
(
iosPlatform
)
project
.
ios
,
if
(
macOSPlatform
)
project
.
macos
,
];
for
(
final
XcodeBasedProject
subproject
in
darwinProjects
)
{
if
(
plugins
.
isNotEmpty
)
{
await
globals
.
cocoaPods
.
setupPodfile
(
subproject
);
}
...
...
@@ -1210,7 +1215,7 @@ Future<void> injectPlugins(FlutterProject project, {bool checkProjects = false})
}
}
}
if
(
featureFlags
.
isWebEnabled
&&
project
.
web
.
existsSync
()
)
{
if
(
webPlatform
)
{
await
_writeWebPluginRegistrant
(
project
,
plugins
);
}
}
...
...
packages/flutter_tools/lib/src/project.dart
View file @
5e17a240
...
...
@@ -229,38 +229,64 @@ class FlutterProject {
return
manifest
;
}
/// Generates project files necessary to make Gradle builds work on Android
/// and CocoaPods+Xcode work on iOS, for app and module projects only.
// TODO(cyanglaz): The param `checkProjects` is confusing. We should give it a better name
// or add some documentation explaining what it does, or both.
// https://github.com/flutter/flutter/issues/60023
Future
<
void
>
ensureReadyForPlatformSpecificTooling
({
bool
checkProjects
=
false
})
async
{
/// Reapplies template files and regenerates project files and plugin
/// registrants for app and module projects only.
///
/// Will not create project platform directories if they do not already exist.
Future
<
void
>
regeneratePlatformSpecificTooling
()
async
{
return
ensureReadyForPlatformSpecificTooling
(
androidPlatform:
android
.
existsSync
(),
iosPlatform:
ios
.
existsSync
(),
// TODO(stuartmorgan): Revisit the conditions here once the plans for handling
// desktop in existing projects are in place.
linuxPlatform:
featureFlags
.
isLinuxEnabled
&&
linux
.
existsSync
(),
macOSPlatform:
featureFlags
.
isMacOSEnabled
&&
macos
.
existsSync
(),
windowsPlatform:
featureFlags
.
isWindowsEnabled
&&
windows
.
existsSync
(),
webPlatform:
featureFlags
.
isWebEnabled
&&
web
.
existsSync
(),
);
}
/// Applies template files and generates project files and plugin
/// registrants for app and module projects only for the specified platforms.
Future
<
void
>
ensureReadyForPlatformSpecificTooling
({
bool
androidPlatform
=
false
,
bool
iosPlatform
=
false
,
bool
linuxPlatform
=
false
,
bool
macOSPlatform
=
false
,
bool
windowsPlatform
=
false
,
bool
webPlatform
=
false
,
})
async
{
if
(!
directory
.
existsSync
()
||
hasExampleApp
)
{
return
;
}
await
refreshPluginsList
(
this
);
if
(
(
android
.
existsSync
()
&&
checkProjects
)
||
!
checkProjects
)
{
await
refreshPluginsList
(
this
,
iosPlatform:
iosPlatform
,
macOSPlatform:
macOSPlatform
);
if
(
androidPlatform
)
{
await
android
.
ensureReadyForPlatformSpecificTooling
();
}
if
(
(
ios
.
existsSync
()
&&
checkProjects
)
||
!
checkProjects
)
{
if
(
iosPlatform
)
{
await
ios
.
ensureReadyForPlatformSpecificTooling
();
}
// TODO(stuartmorgan): Revisit conditions once there is a plan for handling
// non-default platform projects. For now, always treat checkProjects as
// true for desktop.
if
(
featureFlags
.
isLinuxEnabled
&&
linux
.
existsSync
())
{
if
(
linuxPlatform
)
{
await
linux
.
ensureReadyForPlatformSpecificTooling
();
}
if
(
featureFlags
.
isMacOSEnabled
&&
macos
.
existsSync
()
)
{
if
(
macOSPlatform
)
{
await
macos
.
ensureReadyForPlatformSpecificTooling
();
}
if
(
featureFlags
.
isWindowsEnabled
&&
windows
.
existsSync
()
)
{
if
(
windowsPlatform
)
{
await
windows
.
ensureReadyForPlatformSpecificTooling
();
}
if
(
featureFlags
.
isWebEnabled
&&
web
.
existsSync
()
)
{
if
(
webPlatform
)
{
await
web
.
ensureReadyForPlatformSpecificTooling
();
}
await
injectPlugins
(
this
,
checkProjects:
checkProjects
);
await
injectPlugins
(
this
,
androidPlatform:
androidPlatform
,
iosPlatform:
iosPlatform
,
linuxPlatform:
linuxPlatform
,
macOSPlatform:
macOSPlatform
,
windowsPlatform:
windowsPlatform
,
webPlatform:
webPlatform
,
);
}
/// Returns a json encoded string containing the [appName], [version], and [buildNumber] that is used to generate version.json
...
...
packages/flutter_tools/lib/src/runner/flutter_command.dart
View file @
5e17a240
...
...
@@ -1013,7 +1013,7 @@ abstract class FlutterCommand extends Command<void> {
);
// All done updating dependencies. Release the cache lock.
Cache
.
releaseLock
();
await
project
.
ensureReadyForPlatformSpecificTooling
(
checkProjects:
true
);
await
project
.
regeneratePlatformSpecificTooling
(
);
}
else
{
Cache
.
releaseLock
();
}
...
...
packages/flutter_tools/lib/src/web/compile.dart
View file @
5e17a240
...
...
@@ -41,7 +41,7 @@ Future<void> buildWeb(
outputDirectory
.
deleteSync
(
recursive:
true
);
outputDirectory
.
createSync
(
recursive:
true
);
}
await
injectPlugins
(
flutterProject
,
checkProjects
:
true
);
await
injectPlugins
(
flutterProject
,
webPlatform
:
true
);
final
Status
status
=
globals
.
logger
.
startProgress
(
'Compiling
$target
for the Web...'
);
final
Stopwatch
sw
=
Stopwatch
()..
start
();
try
{
...
...
packages/flutter_tools/test/commands.shard/permeable/create_test.dart
View file @
5e17a240
This diff is collapsed.
Click to expand it.
packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart
View file @
5e17a240
...
...
@@ -301,7 +301,7 @@ void main() {
..
writeAsStringSync
(
'Existing release config'
);
final
FlutterProject
project
=
FlutterProject
.
fromPath
(
'project'
);
await
injectPlugins
(
project
,
checkProjects
:
true
);
await
injectPlugins
(
project
,
iosPlatform
:
true
);
final
String
debugContents
=
projectUnderTest
.
ios
.
xcodeConfigFor
(
'Debug'
).
readAsStringSync
();
expect
(
debugContents
,
contains
(
...
...
packages/flutter_tools/test/general.shard/plugins_test.dart
View file @
5e17a240
This diff is collapsed.
Click to expand it.
packages/flutter_tools/test/general.shard/project_test.dart
View file @
5e17a240
...
...
@@ -116,12 +116,12 @@ void main() {
FlutterManifest
.
empty
(
logger:
logger
),
FlutterManifest
.
empty
(
logger:
logger
),
);
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expectNotExists
(
project
.
directory
);
});
_testInMemory
(
'does nothing in plugin or package root project'
,
()
async
{
final
FlutterProject
project
=
await
aPluginProject
();
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expectNotExists
(
project
.
ios
.
hostAppRoot
.
childDirectory
(
'Runner'
).
childFile
(
'GeneratedPluginRegistrant.h'
));
expectNotExists
(
androidPluginRegistrant
(
project
.
android
.
hostAppGradleRoot
.
childDirectory
(
'app'
)));
expectNotExists
(
project
.
ios
.
hostAppRoot
.
childDirectory
(
'Flutter'
).
childFile
(
'Generated.xcconfig'
));
...
...
@@ -129,22 +129,22 @@ void main() {
});
_testInMemory
(
'injects plugins for iOS'
,
()
async
{
final
FlutterProject
project
=
await
someProject
();
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expectExists
(
project
.
ios
.
hostAppRoot
.
childDirectory
(
'Runner'
).
childFile
(
'GeneratedPluginRegistrant.h'
));
});
_testInMemory
(
'generates Xcode configuration for iOS'
,
()
async
{
final
FlutterProject
project
=
await
someProject
();
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expectExists
(
project
.
ios
.
hostAppRoot
.
childDirectory
(
'Flutter'
).
childFile
(
'Generated.xcconfig'
));
});
_testInMemory
(
'injects plugins for Android'
,
()
async
{
final
FlutterProject
project
=
await
someProject
();
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expectExists
(
androidPluginRegistrant
(
project
.
android
.
hostAppGradleRoot
.
childDirectory
(
'app'
)));
});
_testInMemory
(
'updates local properties for Android'
,
()
async
{
final
FlutterProject
project
=
await
someProject
();
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expectExists
(
project
.
android
.
hostAppGradleRoot
.
childFile
(
'local.properties'
));
});
_testInMemory
(
'Android project not on v2 embedding shows a warning'
,
()
async
{
...
...
@@ -153,18 +153,18 @@ void main() {
// v1 embedding, as opposed to having <meta-data
// android:name="flutterEmbedding" android:value="2" />.
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expect
(
testLogger
.
statusText
,
contains
(
'https://flutter.dev/go/android-project-migration'
));
});
_testInMemory
(
'updates local properties for Android'
,
()
async
{
final
FlutterProject
project
=
await
someProject
();
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expectExists
(
project
.
android
.
hostAppGradleRoot
.
childFile
(
'local.properties'
));
});
testUsingContext
(
'injects plugins for macOS'
,
()
async
{
final
FlutterProject
project
=
await
someProject
();
project
.
macos
.
managedDirectory
.
createSync
(
recursive:
true
);
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expectExists
(
project
.
macos
.
managedDirectory
.
childFile
(
'GeneratedPluginRegistrant.swift'
));
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
MemoryFileSystem
.
test
(),
...
...
@@ -178,7 +178,7 @@ void main() {
testUsingContext
(
'generates Xcode configuration for macOS'
,
()
async
{
final
FlutterProject
project
=
await
someProject
();
project
.
macos
.
managedDirectory
.
createSync
(
recursive:
true
);
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expectExists
(
project
.
macos
.
generatedXcodePropertiesFile
);
},
overrides:
<
Type
,
Generator
>{
FileSystem:
()
=>
MemoryFileSystem
.
test
(),
...
...
@@ -192,7 +192,7 @@ void main() {
testUsingContext
(
'injects plugins for Linux'
,
()
async
{
final
FlutterProject
project
=
await
someProject
();
project
.
linux
.
cmakeFile
.
createSync
(
recursive:
true
);
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expectExists
(
project
.
linux
.
managedDirectory
.
childFile
(
'generated_plugin_registrant.h'
));
expectExists
(
project
.
linux
.
managedDirectory
.
childFile
(
'generated_plugin_registrant.cc'
));
},
overrides:
<
Type
,
Generator
>{
...
...
@@ -207,7 +207,7 @@ void main() {
testUsingContext
(
'injects plugins for Windows'
,
()
async
{
final
FlutterProject
project
=
await
someProject
();
project
.
windows
.
cmakeFile
.
createSync
(
recursive:
true
);
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expectExists
(
project
.
windows
.
managedDirectory
.
childFile
(
'generated_plugin_registrant.h'
));
expectExists
(
project
.
windows
.
managedDirectory
.
childFile
(
'generated_plugin_registrant.cc'
));
},
overrides:
<
Type
,
Generator
>{
...
...
@@ -221,14 +221,14 @@ void main() {
});
_testInMemory
(
'creates Android library in module'
,
()
async
{
final
FlutterProject
project
=
await
aModuleProject
();
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
expectExists
(
project
.
android
.
hostAppGradleRoot
.
childFile
(
'settings.gradle'
));
expectExists
(
project
.
android
.
hostAppGradleRoot
.
childFile
(
'local.properties'
));
expectExists
(
androidPluginRegistrant
(
project
.
android
.
hostAppGradleRoot
.
childDirectory
(
'Flutter'
)));
});
_testInMemory
(
'creates iOS pod in module'
,
()
async
{
final
FlutterProject
project
=
await
aModuleProject
();
await
project
.
ensureReadyFor
PlatformSpecificTooling
();
await
project
.
regenerate
PlatformSpecificTooling
();
final
Directory
flutter
=
project
.
ios
.
hostAppRoot
.
childDirectory
(
'Flutter'
);
expectExists
(
flutter
.
childFile
(
'podhelper.rb'
));
expectExists
(
flutter
.
childFile
(
'flutter_export_environment.sh'
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment