Cosa fa get-task-allow in Xcode?


95

Quindi, quando imposto i miei diritti nel progetto dell'app per iPhone, creo un nuovo Entitlements.plist e imposto il valore di get-task-allow su false. Ma perché? Cosa rappresenta questa chiave?

MODIFICARE

Nota che questo è correlato a questa domanda : ho scoperto che capovolgere il valore di questa chiave su true mi ha permesso di installare l'app sul mio dispositivo)

Risposte:


165

Da questo thread su ADC :

get-task-allow, una volta effettuato l'accesso a un'applicazione, consente ad altri processi (come il debugger) di collegarsi alla tua app. I profili di distribuzione richiedono che questo valore sia disattivato, mentre i profili di sviluppo richiedono che questo valore sia attivato (altrimenti Xcode non sarebbe mai in grado di avviarsi e collegarsi alla tua app).


2
Quindi i progetti devono avere due file Entitlements.plist, uno in cui questo valore è impostato su YES per i profili di debug e un altro che specifica NO, per i profili di distribuzione?
Greg Maletic,

2
Non importa, ho risolto la mia stessa domanda. Se lasci Entitlements.plist fuori dalle impostazioni della build di debug, non hai problemi.
Greg Maletic,

1
Tuttavia, ho potuto eseguire il debug anche dopo che Entitlements.plist non è stato incluso nel progetto in modalità Debug con il profilo dello sviluppatore. Qualcuno potrebbe spiegarmelo?
spd

1
il valore predefinito per il debug è vero, il valore predefinito per il rilascio è falso. Impostarlo su false disabiliterà il debug.
The Lazy Coder

1
Ma le configurazioni di distribuzione sono generalmente derivate da "release". Non dovrebbe significare che non è necessario specificare FALSE per AdHoc? (o per questo motivo, hai un file dei diritti?)
Nicolas Miari,

13

La possibilità di eseguire il debug della tua applicazione su iPhone.


1
Interessante! Se è tutto ciò che fa, allora mi chiedo perché capovolgere il valore su false mi impedisce di installare l'app sul mio dispositivo? (SO connessa interrogazione: stackoverflow.com/questions/997884/... )
Codebeef

Questo è quello che fa ... ma cosa fa REALMENTE che ti permette di farlo?
Ryan Detzel,

1
Questa risposta potrebbe essere notevolmente migliorata se includesse più informazioni come quelle di Codebeef.
Jadar

@Codebeef Credo che questa sia una restrizione che Xcode impone piuttosto che intrinseca.
saagarjha

7

Sebbene la tua risposta sia corretta, voglio solo essere più specifico su questo solo così le persone che vogliono sapere cosa significa esattamente get_task_allow, possono.

get_task_allowè un'autorizzazione che consente ad altre app di ottenere la porta delle attività della tua app. Ciò significa che se qualsiasi altra app viene eseguita task_for_pid()con l'ID del processo della tua app, otterrà la porta delle attività della tua app in modo che possano fare cose come ad esempio scrivere e leggere cose sulla memoria, potendo quindi correggere le cose e modificare il comportamento di la tua app.

Se si dà un'occhiata a come funziona un jailbreak, si noterà una delle prime cose che fanno è ottenere task_for_pid(mach_task_self(),0,&kernel_task);essere che kernel_taskè una mach_port_tcon un valore 0, in modo che siano in grado di toccare la memoria del kernel.

Poiché i diritti del kernel non hanno get_task_allowdiritto e Apple ha persino rimosso la possibilità di fare tfp0( task_for_pid 0), hanno bisogno di una patch.

Quindi, in pratica, poiché Xcode deve toccare la memoria della tua app e lavorarci per il debug, dovrai abilitarlo per il debug, ma dovrai disabilitarlo per distribuire la tua app altrimenti qualsiasi app sarebbe in grado di ottenere il tuo porta attività.


-7

Per xcode 4: devi creare il file Entitlements.plist dal nuovo file. and Targets-> build Settings-> Code Signing Entitlements devi scrivere qui "Entitlements.plist"

L'ho fatto e xcode non riceve più errori

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.