¿Qué hace get-task-allow en Xcode?

95

Entonces, cuando configuro mis derechos en mi proyecto de aplicación de iPhone, creo un nuevo Entitlements.plist y establezco el valor de get-task-allow en falso. ¿Pero por qué? ¿Qué representa esta clave?

EDITAR

Tenga en cuenta que esto está relacionado con esta pregunta : descubrí que cambiar el valor de esta clave a verdadero me permitió instalar la aplicación en mi dispositivo)

Codebeef
fuente

Respuestas:

165

De este hilo en ADC :

get-task-allow, cuando se inicia sesión en una aplicación, permite que otros procesos (como el depurador) se adjunten a su aplicación. Los perfiles de distribución requieren que este valor esté desactivado, mientras que los perfiles de desarrollo requieren que este valor esté activado (de lo contrario, Xcode nunca podría iniciarse y adjuntarse a su aplicación).

Codebeef
fuente
2
Entonces, ¿se requiere que los proyectos tengan dos archivos Entitlements.plist, uno donde este valor se establece en SÍ que apunta a los perfiles de depuración, y otro que especifica NO, apunta a los perfiles de distribución?
Greg Maletic
2
No importa, resolví mi propia pregunta. Si omite Entitlements.plist de su configuración de compilación de depuración, no tiene ningún problema.
Greg Maletic
1
Pero, pude depurar incluso después de que Entitlements.plist no se incluyera en el proyecto en el modo de depuración con el perfil de desarrollador. ¿Alguien podría explicarme esto?
spd
1
el valor predeterminado para la depuración es verdadero, el valor predeterminado para la publicación es falso. Cambiarlo a falso desactivará la depuración.
The Lazy Coder
1
Pero las configuraciones de distribución generalmente se derivan de 'lanzamiento'. ¿No debería eso significar que no necesita especificar FALSE para AdHoc? (o para eso, ¿tiene un archivo de derechos?)
Nicolas Miari
13

La capacidad de depurar su aplicación en el iPhone.

cdespinosa
fuente
1
¡Interesante! Si eso es todo lo que hace, entonces me pregunto por qué cambiar el valor a falso me impide instalar la aplicación en mi dispositivo. (Pregunta de SO relacionada: stackoverflow.com/questions/997884/… )
Codebeef
Eso es lo que hace ... pero ¿qué hace REALMENTE que te permite hacer eso?
Ryan Detzel
1
Esta respuesta podría mejorarse mucho si incluyera más información como la de Codebeef.
Jadar
@Codebeef Creo que esta es una restricción que impone Xcode en lugar de una inherente.
saagarjha
7

Si bien su respuesta es correcta, solo quiero ser más específico sobre esto para que las personas que quieran saber qué significa exactamente get_task_allow, puedan.

get_task_allowes un derecho que permite a otras aplicaciones obtener el puerto de tareas de su aplicación. Esto significa que si cualquier otra aplicación se ejecuta task_for_pid()con su ID de proceso de aplicación, obtendrán el puerto de tareas de su aplicación para que puedan hacer cosas como, por ejemplo, escribir y leer cosas en la memoria, por lo tanto, podrán parchear cosas y modificar el comportamiento de tu aplicación.

Si se echa un vistazo a cómo funciona una fuga de la cárcel, se dará cuenta de una de las primeras cosas que hacen es conseguir task_for_pid(mach_task_self(),0,&kernel_task);siendo que kernel_taskes una mach_port_tcon el valor 0, por lo que son capaces de tocar la memoria del kernel.

Como los derechos del kernel no tienen get_task_allowderechos, y Apple incluso ha eliminado la posibilidad de hacer tfp0( task_for_pid 0), necesitan un parche.

Entonces, básicamente, como Xcode necesita tocar la memoria de su aplicación y trabajar con ella para depurarla, deberá habilitar esto para la depuración, pero deberá deshabilitar esto para distribuir su aplicación o, de lo contrario, cualquier aplicación podría obtener su puerto de tareas.

iAlex11
fuente
-7

Para xcode 4: debe crear un archivo Entitlements.plist a partir de un archivo nuevo. and Targets-> build Settings-> Code Signing Entitlements debe escribir aquí "Entitlements.plist"

Hice esto y xcode no recibe más errores

Yiğit
fuente