From e4af202b6cec3d1e8583f111c204ccdf4027c8bd Mon Sep 17 00:00:00 2001 From: Frederik St-Onge Date: Tue, 11 Nov 2025 07:42:06 -0500 Subject: [PATCH 01/11] Add display name parameter --- .../flutterfire_cli/lib/src/commands/config.dart | 13 +++++++++++++ packages/flutterfire_cli/lib/src/common/utils.dart | 1 + .../lib/src/firebase/firebase_android_options.dart | 3 ++- .../lib/src/firebase/firebase_apple_options.dart | 3 ++- .../lib/src/firebase/firebase_dart_options.dart | 3 ++- .../lib/src/firebase/firebase_platform_options.dart | 7 +++++++ 6 files changed, 27 insertions(+), 3 deletions(-) diff --git a/packages/flutterfire_cli/lib/src/commands/config.dart b/packages/flutterfire_cli/lib/src/commands/config.dart index 5b2b5d19..428b3b0e 100644 --- a/packages/flutterfire_cli/lib/src/commands/config.dart +++ b/packages/flutterfire_cli/lib/src/commands/config.dart @@ -62,6 +62,14 @@ class ConfigCommand extends FlutterFireCommand { 'Optionally specify the platforms to generate configuration options for ' 'as a comma separated list. For example "android,ios,macos,web,linux,windows".', ); + argParser.addOption( + kDisplayNameFlag, + valueHelp: 'displayName', + abbr: 'n', + help: 'The display name of your app, e.g. "My Cool App". ' + 'If no display name is provided then an attempt will be made to ' + 'automatically detect it from your project configuration (if it exists).', + ); argParser.addOption( kIosBundleIdFlag, valueHelp: 'bundleIdentifier', @@ -243,6 +251,10 @@ class ConfigCommand extends FlutterFireCommand { .toList(); } + String? get appDisplayName { + return argResults![kDisplayNameFlag] as String?; + } + bool get applyGradlePlugins { return argResults!['apply-gradle-plugins'] as bool; } @@ -625,6 +637,7 @@ class ConfigCommand extends FlutterFireCommand { iosBundleId: iosBundleId, macosBundleId: macosBundleId, token: token, + appDisplayName: appDisplayName, serviceAccount: serviceAccount, webAppId: webAppId, windowsAppId: windowsAppId, diff --git a/packages/flutterfire_cli/lib/src/common/utils.dart b/packages/flutterfire_cli/lib/src/common/utils.dart index b99caf47..169aacab 100644 --- a/packages/flutterfire_cli/lib/src/common/utils.dart +++ b/packages/flutterfire_cli/lib/src/common/utils.dart @@ -63,6 +63,7 @@ const String kConfigurations = 'configurations'; const String kOutFlag = 'out'; const String kYesFlag = 'yes'; const String kPlatformsFlag = 'platforms'; +const String kDisplayNameFlag = 'display-name'; const String kIosBundleIdFlag = 'ios-bundle-id'; const String kMacosBundleIdFlag = 'macos-bundle-id'; const String kAndroidAppIdFlag = 'android-app-id'; diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_android_options.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_android_options.dart index a66e7c99..a5a7098e 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_android_options.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_android_options.dart @@ -40,6 +40,7 @@ extension FirebaseAndroidOptions on FirebaseOptions { String? firebaseAccount, required String? token, required String? serviceAccount, + required String? displayName, }) async { var selectedAndroidApplicationId = androidApplicationId ?? flutterApp.androidApplicationId; @@ -56,7 +57,7 @@ extension FirebaseAndroidOptions on FirebaseOptions { ); final firebaseApp = await firebase.findOrCreateFirebaseApp( packageNameOrBundleIdentifier: selectedAndroidApplicationId, - displayName: flutterApp.package.pubSpec.name, + displayName: displayName ?? flutterApp.package.pubSpec.name, platform: kAndroid, project: firebaseProjectId, account: firebaseAccount, diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_apple_options.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_apple_options.dart index 36debd88..070cdd19 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_apple_options.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_apple_options.dart @@ -33,6 +33,7 @@ extension FirebaseAppleOptions on FirebaseOptions { String? firebaseAccount, required String? token, required String? serviceAccount, + required String? displayName, }) async { final platformIdentifier = macos ? kMacos : kIos; var selectedAppleBundleId = appleBundleIdentifier ?? @@ -58,7 +59,7 @@ extension FirebaseAppleOptions on FirebaseOptions { ); final firebaseApp = await firebase.findOrCreateFirebaseApp( packageNameOrBundleIdentifier: selectedAppleBundleId, - displayName: flutterApp.package.pubSpec.name, + displayName: displayName ?? flutterApp.package.pubSpec.name, platform: platformIdentifier, project: firebaseProjectId, account: firebaseAccount, diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_dart_options.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_dart_options.dart index edadd712..b563f017 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_dart_options.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_dart_options.dart @@ -32,9 +32,10 @@ extension FirebaseDartOptions on FirebaseOptions { String platform = kWeb, required String? token, required String? serviceAccount, + required String? displayName, }) async { final firebaseApp = await firebase.findOrCreateFirebaseApp( - displayName: flutterApp.package.pubSpec.name, + displayName: displayName ?? flutterApp.package.pubSpec.name, platform: platform, project: firebaseProjectId, account: firebaseAccount, diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_platform_options.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_platform_options.dart index 1a9d50b4..6ba01752 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_platform_options.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_platform_options.dart @@ -40,6 +40,7 @@ Future fetchAllFirebaseOptions({ String? windowsAppId, String? token, String? serviceAccount, + required String? appDisplayName, }) async { FirebaseOptions? androidOptions; FirebaseOptions? iosOptions; @@ -56,6 +57,7 @@ Future fetchAllFirebaseOptions({ firebaseAccount: firebaseAccount, token: token, serviceAccount: serviceAccount, + displayName: appDisplayName, ); } @@ -67,6 +69,7 @@ Future fetchAllFirebaseOptions({ firebaseAccount: firebaseAccount, token: token, serviceAccount: serviceAccount, + displayName: appDisplayName, ); } if (macos) { @@ -78,6 +81,7 @@ Future fetchAllFirebaseOptions({ macos: true, token: token, serviceAccount: serviceAccount, + displayName: appDisplayName, ); } @@ -89,6 +93,7 @@ Future fetchAllFirebaseOptions({ webAppId: webAppId, token: token, serviceAccount: serviceAccount, + displayName: appDisplayName, ); } @@ -101,6 +106,7 @@ Future fetchAllFirebaseOptions({ token: token, webAppId: windowsAppId, serviceAccount: serviceAccount, + displayName: appDisplayName, ); } @@ -112,6 +118,7 @@ Future fetchAllFirebaseOptions({ platform: kLinux, token: token, serviceAccount: serviceAccount, + displayName: appDisplayName, ); } From 00cb73d736a7cc958547883fad9ba1c0f1a4d55c Mon Sep 17 00:00:00 2001 From: Frederik St-Onge Date: Tue, 11 Nov 2025 07:45:41 -0500 Subject: [PATCH 02/11] Add example in readme --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index c678276a..9e181def 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,11 @@ If you wish to be specific about which platforms you want to configure, use the flutterfire configure --yes --project= --platforms=android,ios,web ``` +If you want to specify a display name you want to configurem use the `--display-name` flag: +```bash +flutterfire configure --yes --project= --display-name=test +``` + FlutterFire CLI now supports Windows applications. The Firebase console does not allow you to create an application for Windows, FlutterFire CLI will create a **web app** if you specify windows as a platform you want to configure: ```bash From 664df7f233779d83b1e29009defc2de14bf314be Mon Sep 17 00:00:00 2001 From: Frederik St-Onge Date: Tue, 11 Nov 2025 07:51:11 -0500 Subject: [PATCH 03/11] Rename variable --- .../flutterfire_cli/lib/src/commands/config.dart | 4 ++-- .../src/firebase/firebase_platform_options.dart | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/flutterfire_cli/lib/src/commands/config.dart b/packages/flutterfire_cli/lib/src/commands/config.dart index 428b3b0e..068b3786 100644 --- a/packages/flutterfire_cli/lib/src/commands/config.dart +++ b/packages/flutterfire_cli/lib/src/commands/config.dart @@ -251,7 +251,7 @@ class ConfigCommand extends FlutterFireCommand { .toList(); } - String? get appDisplayName { + String? get displayName { return argResults![kDisplayNameFlag] as String?; } @@ -637,7 +637,7 @@ class ConfigCommand extends FlutterFireCommand { iosBundleId: iosBundleId, macosBundleId: macosBundleId, token: token, - appDisplayName: appDisplayName, + displayName: displayName, serviceAccount: serviceAccount, webAppId: webAppId, windowsAppId: windowsAppId, diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_platform_options.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_platform_options.dart index 6ba01752..62dcdcec 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_platform_options.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_platform_options.dart @@ -40,7 +40,7 @@ Future fetchAllFirebaseOptions({ String? windowsAppId, String? token, String? serviceAccount, - required String? appDisplayName, + String? displayName, }) async { FirebaseOptions? androidOptions; FirebaseOptions? iosOptions; @@ -57,7 +57,7 @@ Future fetchAllFirebaseOptions({ firebaseAccount: firebaseAccount, token: token, serviceAccount: serviceAccount, - displayName: appDisplayName, + displayName: displayName, ); } @@ -69,7 +69,7 @@ Future fetchAllFirebaseOptions({ firebaseAccount: firebaseAccount, token: token, serviceAccount: serviceAccount, - displayName: appDisplayName, + displayName: displayName, ); } if (macos) { @@ -81,7 +81,7 @@ Future fetchAllFirebaseOptions({ macos: true, token: token, serviceAccount: serviceAccount, - displayName: appDisplayName, + displayName: displayName, ); } @@ -93,7 +93,7 @@ Future fetchAllFirebaseOptions({ webAppId: webAppId, token: token, serviceAccount: serviceAccount, - displayName: appDisplayName, + displayName: displayName, ); } @@ -106,7 +106,7 @@ Future fetchAllFirebaseOptions({ token: token, webAppId: windowsAppId, serviceAccount: serviceAccount, - displayName: appDisplayName, + displayName: displayName, ); } @@ -118,7 +118,7 @@ Future fetchAllFirebaseOptions({ platform: kLinux, token: token, serviceAccount: serviceAccount, - displayName: appDisplayName, + displayName: displayName, ); } From d4ffdbaf69c67d64c94cc1fa4041b085ed8037a7 Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Thu, 27 Nov 2025 15:58:42 +0000 Subject: [PATCH 04/11] fix: set display name early --- packages/flutterfire_cli/lib/src/commands/config.dart | 5 +++-- .../lib/src/firebase/firebase_android_options.dart | 4 ++-- .../lib/src/firebase/firebase_apple_options.dart | 4 ++-- .../lib/src/firebase/firebase_dart_options.dart | 4 ++-- .../lib/src/firebase/firebase_platform_options.dart | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/flutterfire_cli/lib/src/commands/config.dart b/packages/flutterfire_cli/lib/src/commands/config.dart index 068b3786..0c0330c2 100644 --- a/packages/flutterfire_cli/lib/src/commands/config.dart +++ b/packages/flutterfire_cli/lib/src/commands/config.dart @@ -251,8 +251,9 @@ class ConfigCommand extends FlutterFireCommand { .toList(); } - String? get displayName { - return argResults![kDisplayNameFlag] as String?; + String get displayName { + final flagValue = argResults![kDisplayNameFlag] as String?; + return flagValue ?? flutterApp!.package.pubSpec.name; } bool get applyGradlePlugins { diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_android_options.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_android_options.dart index a5a7098e..aeadeb30 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_android_options.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_android_options.dart @@ -40,7 +40,7 @@ extension FirebaseAndroidOptions on FirebaseOptions { String? firebaseAccount, required String? token, required String? serviceAccount, - required String? displayName, + required String displayName, }) async { var selectedAndroidApplicationId = androidApplicationId ?? flutterApp.androidApplicationId; @@ -57,7 +57,7 @@ extension FirebaseAndroidOptions on FirebaseOptions { ); final firebaseApp = await firebase.findOrCreateFirebaseApp( packageNameOrBundleIdentifier: selectedAndroidApplicationId, - displayName: displayName ?? flutterApp.package.pubSpec.name, + displayName: displayName, platform: kAndroid, project: firebaseProjectId, account: firebaseAccount, diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_apple_options.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_apple_options.dart index 070cdd19..d6fde9ce 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_apple_options.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_apple_options.dart @@ -33,7 +33,7 @@ extension FirebaseAppleOptions on FirebaseOptions { String? firebaseAccount, required String? token, required String? serviceAccount, - required String? displayName, + required String displayName, }) async { final platformIdentifier = macos ? kMacos : kIos; var selectedAppleBundleId = appleBundleIdentifier ?? @@ -59,7 +59,7 @@ extension FirebaseAppleOptions on FirebaseOptions { ); final firebaseApp = await firebase.findOrCreateFirebaseApp( packageNameOrBundleIdentifier: selectedAppleBundleId, - displayName: displayName ?? flutterApp.package.pubSpec.name, + displayName: displayName, platform: platformIdentifier, project: firebaseProjectId, account: firebaseAccount, diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_dart_options.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_dart_options.dart index b563f017..3526e586 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_dart_options.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_dart_options.dart @@ -32,10 +32,10 @@ extension FirebaseDartOptions on FirebaseOptions { String platform = kWeb, required String? token, required String? serviceAccount, - required String? displayName, + required String displayName, }) async { final firebaseApp = await firebase.findOrCreateFirebaseApp( - displayName: displayName ?? flutterApp.package.pubSpec.name, + displayName: displayName, platform: platform, project: firebaseProjectId, account: firebaseAccount, diff --git a/packages/flutterfire_cli/lib/src/firebase/firebase_platform_options.dart b/packages/flutterfire_cli/lib/src/firebase/firebase_platform_options.dart index 62dcdcec..09d063c2 100644 --- a/packages/flutterfire_cli/lib/src/firebase/firebase_platform_options.dart +++ b/packages/flutterfire_cli/lib/src/firebase/firebase_platform_options.dart @@ -40,7 +40,7 @@ Future fetchAllFirebaseOptions({ String? windowsAppId, String? token, String? serviceAccount, - String? displayName, + required String displayName, }) async { FirebaseOptions? androidOptions; FirebaseOptions? iosOptions; From 0fb1d8c145c3f809b348ab1191478ec121e4b8e9 Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Thu, 27 Nov 2025 16:00:28 +0000 Subject: [PATCH 05/11] test: add a couple of unit tests --- packages/flutterfire_cli/test/unit_test.dart | 44 ++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/packages/flutterfire_cli/test/unit_test.dart b/packages/flutterfire_cli/test/unit_test.dart index 292473d8..a804d6d2 100644 --- a/packages/flutterfire_cli/test/unit_test.dart +++ b/packages/flutterfire_cli/test/unit_test.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:flutterfire_cli/src/common/strings.dart'; import 'package:flutterfire_cli/src/common/utils.dart'; +import 'package:flutterfire_cli/src/firebase/firebase_app.dart'; import 'package:test/test.dart'; void main() { @@ -142,6 +143,49 @@ void main() { }); }); + group('FirebaseApp displayName handling', () { + test('FirebaseApp.fromJson correctly parses displayName from JSON', () { + final json = { + 'platform': 'ANDROID', + 'appId': '1:123456:android:abc', + 'displayName': 'My Cool App', + 'name': 'projects/test/apps/abc', + 'packageName': 'com.example.app', + }; + + final app = FirebaseApp.fromJson(json); + + expect(app.displayName, 'My Cool App'); + expect(app.name, 'projects/test/apps/abc'); + expect(app.platform, 'android'); + expect(app.packageNameOrBundleIdentifier, 'com.example.app'); + }); + + test('FirebaseApp.fromJson handles null or missing displayName', () { + // Test with null displayName + final jsonWithNull = { + 'platform': 'IOS', + 'appId': '1:123456:ios:xyz', + 'displayName': null, + 'name': 'projects/test/apps/xyz', + 'bundleId': 'com.example.app', + }; + + final appWithNull = FirebaseApp.fromJson(jsonWithNull); + expect(appWithNull.displayName, null); + + // Test with missing displayName field + final jsonWithoutField = { + 'platform': 'WEB', + 'appId': '1:123456:web:def', + 'name': 'projects/test/apps/def', + }; + + final appWithoutField = FirebaseApp.fromJson(jsonWithoutField); + expect(appWithoutField.displayName, null); + }); + }); + group( 'Firebase CLI JSON response parser function `firebaseCLIJsonParse()`', () { From e33dbcb96241ac006a8150e9801ca9456bb54cee Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Thu, 27 Nov 2025 16:01:31 +0000 Subject: [PATCH 06/11] chore: update naming --- packages/flutterfire_cli/lib/src/commands/config.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/flutterfire_cli/lib/src/commands/config.dart b/packages/flutterfire_cli/lib/src/commands/config.dart index 0c0330c2..92d3078b 100644 --- a/packages/flutterfire_cli/lib/src/commands/config.dart +++ b/packages/flutterfire_cli/lib/src/commands/config.dart @@ -252,8 +252,8 @@ class ConfigCommand extends FlutterFireCommand { } String get displayName { - final flagValue = argResults![kDisplayNameFlag] as String?; - return flagValue ?? flutterApp!.package.pubSpec.name; + final name = argResults![kDisplayNameFlag] as String?; + return name ?? flutterApp!.package.pubSpec.name; } bool get applyGradlePlugins { From f8841b616d1591fb91411b7753ac62d719a1b946 Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Thu, 27 Nov 2025 16:03:29 +0000 Subject: [PATCH 07/11] docs: update wording for display-name flag --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9e181def..68d00b64 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,7 @@ If you wish to be specific about which platforms you want to configure, use the flutterfire configure --yes --project= --platforms=android,ios,web ``` -If you want to specify a display name you want to configurem use the `--display-name` flag: +If you want to specify a display name (i.e. how it appears in the Firebase console), use the `--display-name` flag: ```bash flutterfire configure --yes --project= --display-name=test ``` From a46adf21aa1ecc9093d795fa024e9cce2fd179cf Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Thu, 27 Nov 2025 16:06:43 +0000 Subject: [PATCH 08/11] docs: update with further info on display flag --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 68d00b64..e0193612 100644 --- a/README.md +++ b/README.md @@ -120,7 +120,7 @@ If you wish to be specific about which platforms you want to configure, use the flutterfire configure --yes --project= --platforms=android,ios,web ``` -If you want to specify a display name (i.e. how it appears in the Firebase console), use the `--display-name` flag: +If you want to specify a display name (i.e. how it appears in the Firebase console), use the `--display-name` flag. It will still have the platform as a suffix (e.g. `--display-name=test` will appear as "test (ios), "test (web)", etc"): ```bash flutterfire configure --yes --project= --display-name=test ``` From 950514262690feba9953f393957ef7ba2c47718d Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Tue, 16 Dec 2025 15:10:50 +0000 Subject: [PATCH 09/11] test: ensure deployment target is 15 for iOS --- packages/flutterfire_cli/test/test_utils.dart | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/flutterfire_cli/test/test_utils.dart b/packages/flutterfire_cli/test/test_utils.dart index 606b7891..0df1ce07 100644 --- a/packages/flutterfire_cli/test/test_utils.dart +++ b/packages/flutterfire_cli/test/test_utils.dart @@ -55,6 +55,26 @@ Future createFlutterProject() async { final flutterProjectPath = p.join(tempDir.path, flutterProject); + // Set iOS minimum deployment target to 15.0 + const iosVersion = '15.0'; + final pbxprojPath = + p.join(flutterProjectPath, 'ios', 'Runner.xcodeproj', 'project.pbxproj'); + final pbxprojResult = await Process.run( + 'sed', + [ + '-i', + '', + 's/IPHONEOS_DEPLOYMENT_TARGET = [0-9.]*;/IPHONEOS_DEPLOYMENT_TARGET = $iosVersion;/', + pbxprojPath, + ], + runInShell: true, + ); + + if (pbxprojResult.exitCode != 0) { + throw Exception( + 'Failed to set iOS deployment target: ${pbxprojResult.stderr}'); + } + return flutterProjectPath; } From 4775938a256264968437c2fd2a62816a9fe91cfd Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Tue, 16 Dec 2025 15:16:37 +0000 Subject: [PATCH 10/11] chore: format --- packages/flutterfire_cli/test/test_utils.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/flutterfire_cli/test/test_utils.dart b/packages/flutterfire_cli/test/test_utils.dart index 0df1ce07..65d62663 100644 --- a/packages/flutterfire_cli/test/test_utils.dart +++ b/packages/flutterfire_cli/test/test_utils.dart @@ -72,7 +72,8 @@ Future createFlutterProject() async { if (pbxprojResult.exitCode != 0) { throw Exception( - 'Failed to set iOS deployment target: ${pbxprojResult.stderr}'); + 'Failed to set iOS deployment target: ${pbxprojResult.stderr}', + ); } return flutterProjectPath; From eddddc56cb13a24f71c12c8d2e336ed031175bcb Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Tue, 16 Dec 2025 17:29:05 +0000 Subject: [PATCH 11/11] fix: deployment script --- packages/flutterfire_cli/test/test_utils.dart | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/flutterfire_cli/test/test_utils.dart b/packages/flutterfire_cli/test/test_utils.dart index 65d62663..5a31e9f6 100644 --- a/packages/flutterfire_cli/test/test_utils.dart +++ b/packages/flutterfire_cli/test/test_utils.dart @@ -57,17 +57,17 @@ Future createFlutterProject() async { // Set iOS minimum deployment target to 15.0 const iosVersion = '15.0'; - final pbxprojPath = - p.join(flutterProjectPath, 'ios', 'Runner.xcodeproj', 'project.pbxproj'); + + // Update project.pbxproj final pbxprojResult = await Process.run( 'sed', [ '-i', '', 's/IPHONEOS_DEPLOYMENT_TARGET = [0-9.]*;/IPHONEOS_DEPLOYMENT_TARGET = $iosVersion;/', - pbxprojPath, + 'ios/Runner.xcodeproj/project.pbxproj', ], - runInShell: true, + workingDirectory: flutterProjectPath, ); if (pbxprojResult.exitCode != 0) { @@ -76,6 +76,18 @@ Future createFlutterProject() async { ); } + // Update Podfile if it exists + final podfilePath = p.join(flutterProjectPath, 'ios', 'Podfile'); + final podfile = File(podfilePath); + if (podfile.existsSync()) { + var podfileContent = podfile.readAsStringSync(); + podfileContent = podfileContent.replaceFirst( + RegExp("platform :ios, '[0-9.]+'"), + "platform :ios, '$iosVersion'", + ); + podfile.writeAsStringSync(podfileContent); + } + return flutterProjectPath; }