Que fait get-task-allow dans Xcode?

95

Ainsi, lorsque je configure mes droits dans mon projet d'application iPhone, je crée un nouveau Entitlements.plist et définit la valeur de get-task-allow sur false. Mais pourquoi? Que représente cette clé?

ÉDITER

Notez que cela est lié à cette question - j'ai trouvé que le basculement de la valeur de cette clé sur true m'a permis d'installer l'application sur mon appareil)

Codebeef
la source

Réponses:

165

À partir de ce fil sur ADC :

get-task-allow, lorsqu'il est connecté à une application, permet à d'autres processus (comme le débogueur) de s'attacher à votre application. Les profils de distribution nécessitent que cette valeur soit désactivée, tandis que les profils de développement exigent que cette valeur soit activée (sinon Xcode ne pourra jamais se lancer et se connecter à votre application).

Codebeef
la source
2
Les projets doivent-ils donc avoir deux fichiers Entitlements.plist, un dans lequel cette valeur est définie sur YES qui cible les profils de débogage et un autre qui spécifie NON, ciblant les profils de distribution?
Greg Maletic
2
Nevermind, a résolu ma propre question. Si vous omettez Entitlements.plist de vos paramètres de génération de débogage, vous n'avez aucun problème.
Greg Maletic
1
Mais, je pourrais déboguer même après que Entitlements.plist n'a pas été inclus dans le projet en mode débogage avec le profil de développeur. Quelqu'un pourrait-il m'expliquer cela?
spd
1
la valeur par défaut pour le débogage est true, la valeur par défaut pour la version est false. Le régler sur false désactivera le débogage.
The Lazy Coder
1
Mais les configurations de distribution sont généralement dérivées de «release». Cela ne devrait-il pas signifier que vous n'avez pas besoin de spécifier FALSE pour AdHoc? (ou pour cela compte, avez-vous un fichier de droits?)
Nicolas Miari
13

La possibilité de déboguer votre application sur l'iPhone.

cdespinosa
la source
1
Intéressant! Si c'est tout ce qu'il fait, alors je me demande pourquoi le basculement de la valeur sur false m'empêche d'installer l'application sur mon appareil? (Question SO connexe: stackoverflow.com/questions/997884/… )
Codebeef
C'est ce qu'il fait ... mais qu'est-ce qu'il fait réellement qui vous permet de faire cela?
Ryan Detzel
1
Cette réponse pourrait être grandement améliorée si elle incluait plus d'informations comme celles de Codebeef.
Jadar
@Codebeef Je crois que c'est une restriction que Xcode impose plutôt qu'une restriction inhérente.
saagarjha
7

Bien que votre réponse soit correcte, je veux juste être plus précis à ce sujet afin que les gens qui veulent savoir ce que cela get_task_allowsignifie exactement , le puissent.

get_task_allowest un droit qui permet à d'autres applications d'obtenir le port de tâche de votre application. Cela signifie que si une autre application s'exécute task_for_pid()avec l'ID de processus de votre application, elle obtiendra le port de tâche de votre application afin qu'elle puisse faire des choses comme par exemple écrire et lire des choses sur la mémoire, pouvant ainsi patcher des choses et modifier le comportement de votre appli.

Si vous regardez comment fonctionne un jailbreak, vous remarquerez que l'une des premières choses qu'ils font est d'obtenir un task_for_pid(mach_task_self(),0,&kernel_task);être qui a kernel_taskune mach_port_tvaleur 0, afin qu'ils puissent toucher la mémoire du noyau.

Comme les droits du noyau n'ont pas de get_task_allowdroits et qu'Apple a même supprimé la possibilité de faire tfp0( task_for_pid 0), ils ont besoin d'un correctif.

Donc, fondamentalement, comme Xcode doit toucher la mémoire de votre application et travailler avec elle pour la déboguer, vous devrez l'activer pour le débogage, mais vous devrez le désactiver pour distribuer votre application, sinon toute application pourrait obtenir votre port de tâche.

iAlex11
la source
-7

Pour xcode 4: vous devez créer le fichier Entitlements.plist à partir d'un nouveau fichier. et Targets-> build Settings-> Code Signing Entitlements, vous devez écrire ici "Entitlements.plist"

Je l'ai fait et xcode n'obtient plus d'erreur

Yiğit
la source