codebytere / codebytere/node-mac-contacts
Permission dialog for contacts access not shown
- Langage dominant
- Objective-C++
- Étoiles
- 86
- Forks
- 18
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
**Issue** :
When running the electron app, I am not able to get the contacts permission dialog to be presented (neither when i run the script from the terminal, nor the compiled electron app), despite supplying the correct entitlement(s) in the plist file.
When running the electron app from the command line , the below code is evaluated and when i check the status, i am returned `"Authorised"` and as such i can successfully retrieve my macs Addressbook contacts. In this instance I understand why the pop-up is not displayed, as because I have run the electron app from Terminal, I am implicitly given access to contacts without needing to give consent explicitly.
However when I compile the Electron app, and run, the permission status is immediately returned as being `"Denied"`, this happens for both the .app and .dmg versions.
**Things i have tried :**
1. Clearing the permission state every time i make a new build with > `sudo tccutil reset All com.wowfresh.freshmeup-desktop`
2. Performed step 1 and restarted my mac before attempting to launch the .dmg and .apps
**I am running**
electron version : v1.4.13
npm version : v6.14.15
node version : v14.18.1
OS version : Monterey 12.3.1
packager : electron-builder version : 23.0.3
**My code and config**
My entitlements plist file. Note : i have the same for inherited entitlements.
Also, if you're thinking , why has he included `com.apple.security.personal-information.addressbook` in the entitlements file, i have documented my rational in point 3 at the end :).
**entitlements.plist**
```
com.apple.security.app-sandbox
com.apple.security.personal-information.addressbook
com.apple.private.tcc.manager.check-by-audit-token
com.apple.security.automation.apple-events
NSContactsUsageDescription
Your reason for wanting to access the Contact store
com.apple.security.inherit
```
Relevant pieces of **package.json**
```
"appId": "com.wowfresh.freshmeup-desktop",
"mac": {
"gatekeeperAssess": false,
"icon": "./public/icons/mac/icon.icns",
"category": "public.app-category.utilities",
"type": "distribution",
"hardenedRuntime": true,
"provisioningProfile": "../mac_signing_certificates/freshmeup-desktop.provisionprofile",
"identity": "Apple Distribution: freshmeup Limited (HSGFYWI9929)",
"asarUnpack": "**/*.node",
"extendInfo": {
"NSContactsUsageDescription": "Your reason for wanting to access the Contact store"
}
},
"mas":{
"entitlements": "./build/electron/entitlements.mac.plist",
"entitlementsInherit": "./build/electron/entitlements.mac.plist"
},
```
**Getting contacts code**
```
const macContacts = require('node-mac-contacts');
macContacts.requestAccess().then(function(result) {
const authStatus = macContacts.getAuthStatus();
console.log(`Authorization access to contacts is: ${authStatus}`);
if(authStatus == "Authorized"){
const allContacts = macContacts.getAllContacts();
console.log(allContacts);
}
});
```
**My observations :**
1. When i launch the app (and receive the `Denied` status immediately) i notice that system preferences is not launched (as the documents suggest it should be) and further more ...
2. Having navigated to system preferences i do not see my app in the section as shown below.

3. Unrelated to points 1 and 2 , when i pull up the console logs for the compiled electron app, i see ERROR messages like the following in the list (in order of when i see them) coming from the tccd process , Note : TCC (Transparency, Consent, and Control) is a mechanism in macOS to limit and control application access to certain features
`service: kTCCServiceAddressBook requires entitlement com.apple.security.personal-information.addressbook but it is missing for requesting`
and
`service: kTCCServiceAppleEvents requires entitlement com.apple.security.automation.apple-events but it is missing for accessing
`
and
`attempted to call TCCAccessRequest for kTCCServiceAccessibility without the recommended com.apple.private.tcc.manager.check-by-audit-token entitlement`
These relate to what i am assuming are underlying permissions for accessing contacts, the odd thing is that despite adding them to the entitlements file, the errors persist.
At this point i would have thought , ok i have a signing problem, however when i test adding the **camera** and **microphone** permissions to the entitlements file, then requesting access to them in my code using the electron request method https://www.electronjs.org/docs/latest/api/system-preferences#systempreferencesaskformediaaccessmediatype-macos , i get the "Application Name wants access to your camera and microphone" dialog as expected.
Thank you so much for any help / guidance / alternative things i could try.
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Piste de recherche
Commencez par entitlements.plist et la configuration mac dans package.json, puis suivez les appels à requestAccess() et getAuthStatus() dans le code des contacts. Construisez les deux variantes empaquetées et vérifiez si l’application compilée contient les entitlements déclarés. Le travail est terminé lorsque l’application Electron empaquetée présente le flux d’autorisation des contacts et signale un état d’accès permettant de récupérer les contacts.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- electron, javascript, macos, node.js, objective-c
- Domaine
- build-system, desktop, security
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 25/100