Let injectPlugins integrate custom pods (#26970)
diff --git a/packages/flutter_tools/lib/src/ios/cocoapods.dart b/packages/flutter_tools/lib/src/ios/cocoapods.dart index 92b7a3e..7686ef8 100644 --- a/packages/flutter_tools/lib/src/ios/cocoapods.dart +++ b/packages/flutter_tools/lib/src/ios/cocoapods.dart
@@ -193,6 +193,12 @@ )); podfileTemplate.copySync(podfile.path); } + addPodsDependencyToFlutterXcconfig(iosProject); + } + + /// Ensures all `Flutter/Xxx.xcconfig` files for the given iOS sub-project of + /// a parent Flutter project include pods configuration. + void addPodsDependencyToFlutterXcconfig(IosProject iosProject) { _addPodsDependencyToFlutterXcconfig(iosProject, 'Debug'); _addPodsDependencyToFlutterXcconfig(iosProject, 'Release'); }
diff --git a/packages/flutter_tools/lib/src/plugins.dart b/packages/flutter_tools/lib/src/plugins.dart index cd4827b..5f67181 100644 --- a/packages/flutter_tools/lib/src/plugins.dart +++ b/packages/flutter_tools/lib/src/plugins.dart
@@ -298,9 +298,16 @@ await _writeAndroidPluginRegistrant(project, plugins); await _writeIOSPluginRegistrant(project, plugins); if (!project.isModule && project.ios.hostAppRoot.existsSync()) { + final IosProject iosProject = IosProject.fromFlutter(project); final CocoaPods cocoaPods = CocoaPods(); - if (plugins.isNotEmpty) + if (plugins.isNotEmpty) { cocoaPods.setupPodfile(project.ios); + } + /// The user may have a custom maintained Podfile that they're running `pod install` + /// on themselves. + else if (iosProject.podfile.existsSync() && iosProject.podfileLock.existsSync()) { + cocoaPods.addPodsDependencyToFlutterXcconfig(iosProject); + } } }
diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart index 4c5496b..9e4bdac 100644 --- a/packages/flutter_tools/lib/src/project.dart +++ b/packages/flutter_tools/lib/src/project.dart
@@ -89,7 +89,7 @@ } /// The iOS sub project of this project. - IosProject get ios => IosProject._(this); + IosProject get ios => IosProject.fromFlutter(this); /// The Android sub project of this project. AndroidProject get android => AndroidProject._(this); @@ -151,7 +151,7 @@ /// Instances will reflect the contents of the `ios/` sub-folder of /// Flutter applications and the `.ios/` sub-folder of Flutter module projects. class IosProject { - IosProject._(this.parent); + IosProject.fromFlutter(this.parent); /// The parent of this project. final FlutterProject parent;