Skip to content

FirebaseApp.configure(options: ) raises an exception inconsistent with the documentation of the options type #12673

Open
@SwiftNativeDeveloper

Description

@SwiftNativeDeveloper

Description

I want to initialize my FirebaseOptions programmatically because, like many of the other open issues related to FirebaseOptions, I have multiple versions of the same app code that make use of CI/CD deployment scripts to connect different environments and more. I do not want my GoogleService-Info.plist file sitting in the compiled output of my app. I want these values injected via XCConfig and build parameters instead.

The swift doc helper for this initializer states:

init(googleAppID:gcmSenderID:)
Initializes a customized instance of FirebaseOptions with required fields. Use the mutable properties to modify fields for configuring specific services. Note that it is not possible to customize FirebaseOptions for Firebase Analytics which expects a static file named GoogleServices-Info.plist - #230.

The keywords from this required fields.

So the following code is assumed to work:

  let options = FirebaseOptions(
      googleAppID: "valid-id-goes-here",
      gcmSenderID: "valid-id-goes-here-also"
  )
  FirebaseApp.configure(options: options)

However, this is not the case, and instead raises an exception and crashes on launch.

*** Terminating app due to uncaught exception 'com.firebase.installations', reason: '[FirebaseInstallations][I-FIS008000] Could not configure Firebase Installations due to invalid FirebaseApp options. The following parameters are nil or empty: FirebaseOptions.APIKey, FirebaseOptions.projectID. If you use GoogleServices-Info.plist please download the most recent version from the Firebase Console. If you configure Firebase in code, please make sure you specify all required parameters.'

The referenced keys from the output above, if required as it suggests, should be in the parameterized initializer as required.

Additionally, the values of the configuration should not be immutable non-optional strings if they're required, and their documentation should state they're required and not providing a valid value will result in the library raising an exception.

apiKey
An API key used for authenticating requests from your Apple app, e.g. The key must begin with “A” and contain exactly 39 alphanumeric characters, used to identify your app to Google servers.

var apiKey: String? { get set }

projectID
The Project ID from the Firebase console, for example @“abc-xyz-123”.

var projectID: String? { get set }

The documentation to configure multiple projects also compounds the problem by applying every property available on the configuration. It is really hard to tell, from documentation, which fields are actually required.
https://firebase.google.com/docs/projects/multiprojects

  1. Please update the documentation to state what properties are actually required with a FirebaseOptions object in a clear developer guide as well as source code comments for auto doc in Xcode.
  2. Please update the initializer to require all required properties (create a new one, mark the old one as deprecated if you must).
  3. Please assess Investigate if GCMSenderID is still a required parameter. #6415 from 2020 to remove any no longer needed properties from the parameterized initializer.
  4. Please update the documentation for the multi projects to use the updated initializer that takes all required properties at initialization, and optionally sets the optional properties.

Reproducing the issue

  let options = FirebaseOptions(
      googleAppID: "valid-id-goes-here",
      gcmSenderID: "valid-id-goes-here-also"
  )
  FirebaseApp.configure(options: options)

Firebase SDK Version

10.22.1

Xcode Version

15.3

Installation Method

Swift Package Manager

Firebase Product(s)

Analytics, Crashlytics, Performance

Targeted Platforms

iOS, visionOS

Relevant Log Output

*** Terminating app due to uncaught exception 'com.firebase.installations', reason: '[FirebaseInstallations][I-FIS008000] Could not configure Firebase Installations due to invalid FirebaseApp options. The following parameters are nil or empty: `FirebaseOptions.APIKey`, `FirebaseOptions.projectID`. If you use GoogleServices-Info.plist please download the most recent version from the Firebase Console. If you configure Firebase in code, please make sure you specify all required parameters.'

If using Swift Package Manager, the project's Package.resolved

Cannot share Package.resolved as it contains information about private repositories.

Rest assured, all checkmarks green for Firebase and it's dependencies.

If using CocoaPods, the project's Podfile.lock

n/a - using Swift Package Manager.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions