AXIsProcessTrustedWithOptions décoche la case Confidentialité> Accessibilité lorsque l'application est exécutée

Dans OSX 10.9, j'exécute le code suivant pour voir si mon programme est approuvé:

 NSDictionary *options = @{(id)kAXTrustedCheckOptionPrompt: @YES};
 if(!AXIsProcessTrustedWithOptions((CFDictionaryRef)options))
  //Not trusted! ...

which opens the dialog to open System Preferences > Privacy > Accessibility to grant my application permission.

Lorsque je coche la case pour autoriser mon application et la réexécuter, mon application n'a toujours pas d'autorisation et la case n'est plus cochée.

Exécuter simplement AXIsProcessTrustedWithOptions semble décocher cette case pour une raison quelconque.

3
ajouté édité
Vues: 1
Avez-vous trouvé une solution à ce problème? Le même problème se produit pour l'application sur laquelle je travaille.
ajouté l'auteur Steffen Andersen, source
Hey, si vous n'avez pas trouvé de solution à ce problème, vous pouvez vérifier ce post de discussion -> devforums.apple.com/message/903480#903480 Cela m'a aidé, je m'assure également que vous avez tout codé et que vous ne modifiez aucun fichier dans l'ensemble de l'application, car cela corrompra le codeigning et fera redéfinir AXIsProcessTrustedWithOptions pour le votre application
ajouté l'auteur Steffen Andersen, source
@sftsz Votre application devrait probablement toujours vérifier l'autorisation, car l'utilisateur aurait pu la modifier pendant que l'application n'était pas en cours d'exécution.
ajouté l'auteur Steffen Andersen, source
@SteffenAndersen est-ce que cela signifie que même si je n'ai pas changé l'identifiant et la version du bundle (juste en changeant le numéro de build), je devrais vérifier les permissions parce que je change le code?
ajouté l'auteur sftsz, source

1 Réponses

@Steffen, vous avez raison. La reconstruction de l'application modifie la signature et doit donc être à nouveau approuvée.

J'ai écrit un script qui est exécuté avant que mon application soit exécutée en développement au lieu d'avoir à faire confiance manuellement à l'application à chaque fois:

sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db "INSERT or REPLACE INTO access values ('kTCCServiceAccessibility', 'com.company.app', 0, 1, 0, NULL);"
1
ajouté