Skip to content

[macOS] User sees permissions popup saying, "[App] wants to use your confidential information stored in 'com.firebase.FIRInstallations.installations' in your keychain." #5540

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
JakeSc opened this issue May 7, 2020 · 15 comments

Comments

@JakeSc
Copy link

JakeSc commented May 7, 2020

[REQUIRED] Step 1: Describe your environment

  • Xcode version: 11.3
  • Firebase SDK version: See below. Podfile just specifies unversioned Firebase/Crashlytics and Firebase/Analytics
  • Firebase Component: Firebase/Analytics (6.23.0), Firebase/Core (6.23.0), Firebase/CoreOnly (6.23.0), Firebase/Crashlytics (6.23.0), FirebaseCore (6.6.7), FirebaseCoreDiagnostics, FirebaseCoreDiagnosticsInterop, FirebaseCrashlytics (4.0.0), FirebaseInstallations (1.2.0), various Google subspecs
  • Component version: See above
  • Installation method: CocoaPods

[REQUIRED] Step 2: Describe the problem

Steps to reproduce:

This is for a macOS application, running on macOS 10.15.4. I see the issue when signing my app with a Developer ID cert with the DEBUG flag, but I don't see it when running with a macOS Development certificate.

In applicationDidFinishLaunching, I have simply:

FirebaseApp.configure()

Upon launch I then see this:
image

I haven't tried to proceed by entering my password, or Denying the request.

Relevant Code:

import Cocoa
import Firebase
import FirebaseCrashlytics

@NSApplicationMain class AppDelegate: NSApplicationDelegate {
    func adfl() {
        FirebaseApp.configure()
    }
}

Is there a workaround for this, so I can avoid spooking my users with this keychain perms request? Thanks!

@google-oss-bot
Copy link

I found a few problems with this issue:

  • I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.
  • This issue does not seem to follow the issue template. Make sure you provide all the required information.

@JakeSc JakeSc changed the title (macOS) User sees permissions popup saying, "[App] wants to use your confidential information stored in 'com.firebase.FIRInstallations.installations' in your keychain." [macOS] User sees permissions popup saying, "[App] wants to use your confidential information stored in 'com.firebase.FIRInstallations.installations' in your keychain." May 7, 2020
@ryanwilson ryanwilson added api: installations macOS Issues or feature requests for macOS. and removed needs-triage labels May 7, 2020
@maksymmalyhin
Copy link
Contributor

@JakeSc Thank you for the report. Since Firebase Mac OS is in a state of Community Support, there still may be cases that are not handled really well. We appreciate your help with making Mac OS support better.

The alert is a result of Firebase Installations SDK storing a generated device ID and supplementary information in the Keychain.
From my experience with previous Mac OS versions the alert should appear only if an application is resigned with a different developer ID and reinstalled on the same Mac, so it tries to read items created by the previous version.

Could you please provide more details on your workflow:

  1. Can you observe Keychain items created by your app with different signing settings? If you remove them, do you still observe the alert?
  2. Do you observe the alert if you re-install your app without signing changes?
  3. Once you allow access you should not see more alerts. It is the case for you?

@JakeSc
Copy link
Author

JakeSc commented May 13, 2020

Hi @maksymmalyhin, thanks for the information.

I see this issue when running the app signed with a Developer ID Cert and ProvProf, as well as an Apple Development Cert. I have not tested this with a Distribution Cert + PP.

How do I observe Keychain items created by my app? I searched Keychain Access for the name / bundleID and didn't see anything there.

I am hesitant to allow access, because I fear that would be permanent and I would thus be unable to test this flow as my users would. In other words, I want to make sure I continue to see the popup until this issue is fixed or there is a workaround. How can I reset the keychain access state, so I can reproduce the issue after allowing access?

@maksymmalyhin
Copy link
Contributor

How do I observe Keychain items created by my app?
@JakeSc you can all Firebase Installations Keychain items in the Keychain Access app filtering by FIRInstallations string:
Screen Shot 2020-05-13 at 12 08 38 PM
You can delete old items to simulate a fresh app installation.

I could reproduce the prompt by installing an app signed with one dev account and then re-installing the app but signed with a different dev account.

Firebase issue
I can see an issue with the way the keychain is used by Firebase Installations on Mac OS. Currently all items from all applications are stored under the same service name com.firebase.FIRInstallations.installations. It works fine on iOS/tvOS/watchOS because of Keychain isolation. But on MacOS, despite that different account names are used for different applications an item, request from any of the MacOS app using Firebase will prompt users with access request to the service if there are other such app installed.

We will consider a Mac OS specific fix to make the Keychain service name unique per application to avoid the interference.

@maksymmalyhin
Copy link
Contributor

@JakeSc As you currently know how to reset relevant Keychain Items for testing, could you please let us know if you observer the alert when you reinstall the application without changing signing settings?

Also we would appreciate testing of the changes from #5603 (currently in master) if you can. You may add the following line to your Podfile for this:

pod 'FirebaseInstallations', :git=>'https://github.com/firebase/firebase-ios-sdk.git', :branch=>'master'

I would recommend publishing your app to users with #5603 changes (expected to be officially released in ~2 weeks) to avoid potential permission popups in case a user has another app with Firebase installed.

@google-oss-bot
Copy link

Hey @JakeSc. We need more information to resolve this issue but there hasn't been an update in 5 weekdays. I'm marking the issue as stale and if there are no new updates in the next 5 days I will close it automatically.

If you have more information that will help us get to the bottom of this, just add a comment!

@google-oss-bot
Copy link

Hey @JakeSc. We need more information to resolve this issue but there hasn't been an update in 5 weekdays. I'm marking the issue as stale and if there are no new updates in the next 5 days I will close it automatically.

If you have more information that will help us get to the bottom of this, just add a comment!

@google-oss-bot
Copy link

Since there haven't been any recent updates here, I am going to close this issue.

@JakeSc if you're still experiencing this problem and want to continue the discussion just leave a comment here and we are happy to re-open this.

@maksymmalyhin
Copy link
Contributor

@JakeSc I hope the issue was solved for you, but feel free to reopen with more details if not.

@bsneider
Copy link

I added the suggested line
pod 'FirebaseInstallations', :git=>'https://github.com/firebase/firebase-ios-sdk.git', :branch=>'master'
But now I get a version error for ` GoogleUtilities/Environment (~> 6.7)

Specs satisfying the `GoogleUtilities/Environment (= 6.6.0, ~> 6.5, ~> 6.6), GoogleUtilities/Environment (~> 6.7)` dependency were
found, but they required a higher minimum deployment target.`

`Launching lib/main.dart on macOS desktop in release mode...
Running pod install... 50.1s
CocoaPods' output:

Preparing

Analyzing dependencies

Inspecting targets to integrate
  Using `ARCHS` setting to build architectures of target `Pods-Runner`: (``)

Finding Podfile changes
  A FirebaseInstallations
  - Firebase
  - FlutterMacOS
  - cloud_firestore
  - connectivity
  - connectivity_macos
  - firebase_auth
  - firebase_core
  - path_provider
  - path_provider_macos
  - shared_preferences
  - shared_preferences_macos
  - sqflite
  - url_launcher
  - url_launcher_macos

Fetching external sources
-> Pre-downloading: `FirebaseInstallations` from `https://github.com/firebase/firebase-ios-sdk.git`, branch `master`
  $ /usr/bin/git ls-remote https://github.com/firebase/firebase-ios-sdk.git master
  01bf5492537cf36a6e2f378e035211080bb6ff95  refs/heads/master
 > Git download
 > Git download
     $ /usr/bin/git clone https://github.com/firebase/firebase-ios-sdk.git
     /var/folders/6q/t71hg3lx0rz2rn8yppy2t9z40000gn/T/d20200628-99225-q21ndb --template=
   $ /usr/bin/git -C /var/folders/6q/t71hg3lx0rz2rn8yppy2t9z40000gn/T/d20200628-99225-q21ndb checkout --quiet
   01bf5492537cf36a6e2f378e035211080bb6ff95
 > Running prepare command
   $ /bin/bash -c  set -e cp -f ./Crashlytics/run ./run cp -f ./Crashlytics/upload-symbols ./upload-symbols
 > Running prepare command
   $ /bin/bash -c  set -e sed '/^#cmakedefine/ d'         Firestore/core/src/util/config.h.in >
   Firestore/core/src/util/config.h
  > Copying FirebaseInstallations from
  `/Users/brandonsneider/Library/Caches/CocoaPods/Pods/External/FirebaseInstallations/9ac93be5b1120bc0442a584e6e09454b` to
  `Pods/FirebaseInstallations`
-> Fetching podspec for `FlutterMacOS` from `Flutter/ephemeral/.symlinks/flutter/darwin-x64-release`
-> Fetching podspec for `cloud_firestore` from `Flutter/ephemeral/.symlinks/plugins/cloud_firestore/macos`
-> Fetching podspec for `connectivity` from `Flutter/ephemeral/.symlinks/plugins/connectivity/macos`
-> Fetching podspec for `connectivity_macos` from `Flutter/ephemeral/.symlinks/plugins/connectivity_macos/macos`
-> Fetching podspec for `firebase_auth` from `Flutter/ephemeral/.symlinks/plugins/firebase_auth/macos`
-> Fetching podspec for `firebase_core` from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`
-> Fetching podspec for `path_provider` from `Flutter/ephemeral/.symlinks/plugins/path_provider/macos`
-> Fetching podspec for `path_provider_macos` from `Flutter/ephemeral/.symlinks/plugins/path_provider_macos/macos`
-> Fetching podspec for `shared_preferences` from `Flutter/ephemeral/.symlinks/plugins/shared_preferences/macos`
-> Fetching podspec for `shared_preferences_macos` from `Flutter/ephemeral/.symlinks/plugins/shared_preferences_macos/macos`
-> Fetching podspec for `sqflite` from `Flutter/ephemeral/.symlinks/plugins/sqflite/macos`
-> Fetching podspec for `url_launcher` from `Flutter/ephemeral/.symlinks/plugins/url_launcher/macos`
-> Fetching podspec for `url_launcher_macos` from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`

Resolving dependencies of `Podfile`
  CDN: trunk Relative path: CocoaPods-version.yml exists! Returning local because checking is only perfomed in repo update
  CDN: trunk Relative path: all_pods_versions_0_3_5.txt exists! Returning local because checking is only perfomed in repo update
  CDN: trunk Relative path: Specs/0/3/5/Firebase/6.27.0/Firebase.podspec.json exists! Returning local because checking is only
  perfomed in repo update
  CDN: trunk Relative path: Specs/0/3/5/Firebase/6.27.0/Firebase.podspec.json exists! Returning local because checking is only
  perfomed in repo update
  CDN: trunk Relative path: Specs/0/3/5/Firebase/6.27.0/Firebase.podspec.json exists! Returning local because checking is only
  perfomed in repo update
  CDN: trunk Relative path: Specs/0/3/5/Firebase/6.27.0/Firebase.podspec.json exists! Returning local because checking is only
  perfomed in repo update
  CDN: trunk Relative path: Specs/0/3/5/Firebase/6.27.0/Firebase.podspec.json exists! Returning local because checking is only
  perfomed in repo update
  CDN: trunk Relative path: Specs/0/3/5/Firebase/6.27.0/Firebase.podspec.json exists! Returning local because checking is only
  perfomed in repo update
  CDN: trunk Relative path: all_pods_versions_f_4_e.txt exists! Returning local because checking is only perfomed in repo update
  CDN: trunk Relative path: Specs/f/4/e/FMDB/2.7.5/FMDB.podspec.json exists! Returning local because checking is only perfomed in
  repo update
  CDN: trunk Relative path: all_pods_versions_8_b_d.txt exists! Returning local because checking is only perfomed in repo update
  CDN: trunk Relative path: Specs/8/b/d/FirebaseCore/6.8.0/FirebaseCore.podspec.json exists! Returning local because checking is
  only perfomed in repo update
  CDN: trunk Relative path: all_pods_versions_0_b_5.txt exists! Returning local because checking is only perfomed in repo update
  CDN: trunk Relative path: Specs/0/b/5/PromisesObjC/1.2.9/PromisesObjC.podspec.json exists! Returning local because checking is
  only perfomed in repo update
  CDN: trunk Relative path: all_pods_versions_0_8_4.txt exists! Returning local because checking is only perfomed in repo update
  CDN: trunk Relative path: Specs/0/8/4/GoogleUtilities/6.6.0/GoogleUtilities.podspec.json exists! Returning local because checking
  is only perfomed in repo update
  CDN: trunk Relative path: Specs/0/3/5/Firebase/6.27.0/Firebase.podspec.json exists! Returning local because checking is only
  perfomed in repo update
  CDN: trunk Relative path: all_pods_versions_c_7_9.txt exists! Returning local because checking is only perfomed in repo update
  CDN: trunk Relative path: Specs/c/7/9/Reachability/3.2/Reachability.podspec.json exists! Returning local because checking is only
  perfomed in repo update
  CDN: trunk Relative path: Specs/0/3/5/Firebase/6.27.0/Firebase.podspec.json exists! Returning local because checking is only
  perfomed in repo update
  CDN: trunk Relative path: Specs/0/8/4/GoogleUtilities/6.6.0/GoogleUtilities.podspec.json exists! Returning local because checking
  is only perfomed in repo update
[!] CocoaPods could not find compatible versions for pod "GoogleUtilities/Environment":
  In snapshot (Podfile.lock):
    GoogleUtilities/Environment (= 6.6.0, ~> 6.5, ~> 6.6)

  In Podfile:
    FirebaseInstallations (from `https://github.com/firebase/firebase-ios-sdk.git`, branch `master`) was resolved to 1.4.0, which
    depends on
      GoogleUtilities/Environment (~> 6.7)

Specs satisfying the `GoogleUtilities/Environment (= 6.6.0, ~> 6.5, ~> 6.6), GoogleUtilities/Environment (~> 6.7)` dependency were
found, but they required a higher minimum deployment target.

/Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:328:in `raise_error_unless_state'
/Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:310:in `block in unwind_for_conflict'
/Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:308:in `tap'
/Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:308:in `unwind_for_conflict'
/Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:257:in `process_topmost_state'
/Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolution.rb:182:in `resolve'
/Library/Ruby/Gems/2.6.0/gems/molinillo-0.6.6/lib/molinillo/resolver.rb:43:in `resolve'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/resolver.rb:94:in `resolve'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/installer/analyzer.rb:1065:in `block in resolve_dependencies'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/user_interface.rb:64:in `section'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/installer/analyzer.rb:1063:in `resolve_dependencies'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/installer/analyzer.rb:124:in `analyze'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/installer.rb:410:in `analyze'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/installer.rb:235:in `block in resolve_dependencies'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/user_interface.rb:64:in `section'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/installer.rb:234:in `resolve_dependencies'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/installer.rb:156:in `install!'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/command/install.rb:52:in `run'
/Library/Ruby/Gems/2.6.0/gems/claide-1.0.3/lib/claide/command.rb:334:in `run'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/lib/cocoapods/command.rb:52:in `run'
/Library/Ruby/Gems/2.6.0/gems/cocoapods-1.9.3/bin/pod:55:in `<top (required)>'
/usr/local/bin/pod:23:in `load'
/usr/local/bin/pod:23:in `<main>'

Error output from CocoaPods:

Cloning into '/var/folders/6q/t71hg3lx0rz2rn8yppy2t9z40000gn/T/d20200628-99225-q21ndb'...

Error running pod install`

@paulb777
Copy link
Member

When adding pods from the master branch, it also may be required to include its dependencies that are also in the repo. In this case pod 'GoogleUtilities', :git=>'https://github.com/firebase/firebase-ios-sdk.git', :branch=>'master'

@paulb777
Copy link
Member

However, in this case, it's not likely to help, since the bug was addressed in the already releases 6.26.0. Running pod update should be sufficient.

@bsneider
Copy link

Ok so I tried pod up update before posting. No luck.
This is from the Podfile.lock
- FirebaseInstallations (1.4.0): - FirebaseCore (~> 6.8) - GoogleUtilities/Environment (~> 6.6) - GoogleUtilities/UserDefaults (~> 6.6) - PromisesObjC (~> 1.2)

Next, I tried adding
pod 'FirebaseInstallations', :git=>'https://github.com/firebase/firebase-ios-sdk.git', :branch=>'master'
and running

  • pod install; pod update

  • pod install --repo-update

Note, after running this and then running the app it would not even build.
"Launching lib/main.dart on macOS desktop in debug mode...
Running pod install... 8.9s
** BUILD FAILED **

The following build commands failed:
CompileC /Users////build/macos/Build/Intermediates.noindex/Pods.build/Debug/FirebaseAuth.build/Objects-normal/x86_64/FIRAuth.o /Users////macos/Pods/FirebaseAuth/FirebaseAuth/Sources/Auth/FIRAuth.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler
(1 failure)
Building macOS application...
Exception: Build process failed"

Analyzing dependencies Pre-downloading: FirebaseInstallationsfromhttps://github.com/firebase/firebase-ios-sdk.git`, branch master
[!] CocoaPods could not find compatible versions for pod "GoogleUtilities/Environment":
In snapshot (Podfile.lock):
GoogleUtilities/Environment (= 6.6.0, ~> 6.5, ~> 6.6)

In Podfile:
FirebaseInstallations (from https://github.com/firebase/firebase-ios-sdk.git, branch master) was resolved to 1.4.0, which depends on
GoogleUtilities/Environment (~> 6.7)

Specs satisfying the GoogleUtilities/Environment (= 6.6.0, ~> 6.5, ~> 6.6), GoogleUtilities/Environment (~> 6.7) dependency were found, but they required a higher minimum deployment target.
Update all pods
Updating local specs repositories
Analyzing dependencies
Pre-downloading: FirebaseInstallations from https://github.com/firebase/firebase-ios-sdk.git, branch master
[!] CocoaPods could not find compatible versions for pod "GoogleUtilities/UserDefaults":
In Podfile:
FirebaseInstallations (from https://github.com/firebase/firebase-ios-sdk.git, branch master) was resolved to 1.4.0, which depends on
GoogleUtilities/UserDefaults (~> 6.7)

None of your spec sources contain a spec satisfying the dependency: GoogleUtilities/UserDefaults (~> 6.7).

You have either:

  • mistyped the name or version.
  • not added the source repo that hosts the Podspec to your Podfile.`

finally, I added both suggestions
Analyzing dependencies Pre-downloading: FirebaseInstallationsfromhttps://github.com/firebase/firebase-ios-sdk.git`, branch master
Pre-downloading: GoogleUtilities from https://github.com/firebase/firebase-ios-sdk.git, branch master
[!] CocoaPods could not find compatible versions for pod "GoogleUtilities/UserDefaults":
In snapshot (Podfile.lock):
GoogleUtilities/UserDefaults (= 6.6.0, ~> 6.6)

In Podfile:
FirebaseInstallations (from https://github.com/firebase/firebase-ios-sdk.git, branch master) was resolved to 1.4.0, which depends on
GoogleUtilities/UserDefaults (~> 6.7)

GoogleUtilities (from `https://github.com/firebase/firebase-ios-sdk.git`, branch `master`) was resolved to 6.7.0, which depends on
  GoogleUtilities/UserDefaults (= 6.7.0)

None of your spec sources contain a spec satisfying the dependencies: GoogleUtilities/UserDefaults (= 6.6.0, ~> 6.6), GoogleUtilities/UserDefaults (= 6.7.0), GoogleUtilities/UserDefaults (~> 6.7).

You have either:

  • out-of-date source repos which you can update with pod repo update or with pod install --repo-update.
  • mistyped the name or version.
  • not added the source repo that hosts the Podspec to your Podfile.
    Update all pods
    Updating local specs repositories
    Analyzing dependencies
    Pre-downloading: FirebaseInstallations from https://github.com/firebase/firebase-ios-sdk.git, branch master
    Pre-downloading: GoogleUtilities from https://github.com/firebase/firebase-ios-sdk.git, branch master
    Downloading dependencies
    Installing FirebaseInstallations 1.4.0
    Installing GoogleUtilities 6.7.0 (was 6.6.0)
    Generating Pods project
    Integrating client project
    Pod installation complete! There are 20 dependencies from the Podfile and 33 total pods installed.

[!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target Runner to Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig or include the Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig in your build configuration (Runner/Configs/AppInfo.xcconfig).

[!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target Runner to Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig or include the Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig in your build configuration (Runner/Configs/AppInfo.xcconfig).

[!] CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target Runner to Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig or include the Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig in your build configuration (Runner/Configs/AppInfo.xcconfig).`

@firebase firebase locked and limited conversation to collaborators Jul 1, 2020
@maksymmalyhin
Copy link
Contributor

@bsneider The fix is part of Firebase 6.26.0, so there is no need to use a branch.

As mentioned above, there are several cases when the permissions popup is presented and some of them cannot be fixed on Firebase side. Could you please answer the questions from the comment to understand better your particular case?

@ncooke3
Copy link
Member

ncooke3 commented Sep 13, 2022

For future readers– this issue resurfaced in later Firebase versions and was fixed in Firebase 9.6.0. Please see this post for more details.

To fix this issue, upgrade to Firebase 9.6.0+ and ensure that the provisioning profile you use to sign your macOS target has the Keychain Sharing capability enabled.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

7 participants