O que get-task-allow faz no Xcode?

95

Portanto, quando configuro meus direitos no projeto do meu aplicativo para iPhone, crio um novo Entitlements.plist e defino o valor de get-task-allow como false. Mas por que? O que esta chave representa?

EDITAR

Observe que isso está relacionado a esta questão - descobri que virar o valor desta chave para true me permitiu instalar o aplicativo no meu dispositivo)

Codebeef
fonte

Respostas:

165

Deste tópico no ADC :

get-task-allow, quando conectado a um aplicativo, permite que outros processos (como o depurador) sejam anexados ao seu aplicativo. Os perfis de distribuição exigem que esse valor seja desativado, enquanto os perfis de desenvolvimento exigem que esse valor seja ativado (caso contrário, o Xcode nunca seria capaz de iniciar e anexar ao seu aplicativo).

Codebeef
fonte
2
Portanto, os projetos são obrigados a ter dois arquivos Entitlements.plist, um em que esse valor é definido como YES, que visa os perfis de depuração, e outro que especifica NÃO, visando os perfis de distribuição?
Greg Maletic
2
Esqueça, resolveu minha própria pergunta. Se você deixar Entitlements.plist fora de suas configurações de compilação de depuração, você não terá nenhum problema.
Greg Maletic
1
Mas, eu poderia depurar mesmo depois que Entitlements.plist não foi incluído no projeto no modo de depuração com o perfil de desenvolvedor. Alguém poderia me explicar isso?
spd
1
o padrão para depuração é verdadeiro, o padrão para liberação é falso. Torná-lo falso desativará a depuração.
The Lazy Coder
1
Mas as configurações de distribuição geralmente são derivadas de 'lançamento'. Isso não deveria significar que você não precisa especificar FALSE para AdHoc? (ou para esse assunto, tem um arquivo de Direitos?)
Nicolas Miari
13

A capacidade de depurar seu aplicativo no iPhone.

cdespinosa
fonte
1
Interessante! Se isso é tudo, então eu me pergunto por que mudar o valor para false me impede de instalar o aplicativo no meu dispositivo? (Pergunta SO relacionada: stackoverflow.com/questions/997884/… )
Codebeef
É isso que ele faz ... mas o que REALMENTE faz que permite que você faça isso?
Ryan Detzel
1
Essa resposta poderia ser muito melhorada se incluísse mais informações como a do Codebeef.
Jadar
@Codebeef Eu acredito que esta é uma restrição que o Xcode impõe ao invés de uma restrição inerente.
saagarjha
7

Embora sua resposta esteja correta, eu só quero ser mais específico sobre isso para que as pessoas que desejam saber o que exatamente get_task_allowsignifica, possam.

get_task_allowé um direito que permite que outros aplicativos obtenham a porta de tarefas do seu aplicativo. Isso significa que se qualquer outro aplicativo for executado task_for_pid()com o ID do processo do seu aplicativo, eles obterão a porta de tarefas do seu aplicativo para que possam fazer coisas como, por exemplo, escrever e ler coisas na memória, podendo, portanto, corrigir coisas e modificar o comportamento de seu aplicativo.

Se você der uma olhada em como funciona um jailbreak, você notará que uma das primeiras coisas que eles fazem é conseguir task_for_pid(mach_task_self(),0,&kernel_task);ser kernel_taskum mach_port_tcom valor 0, para que possam tocar a memória do kernel.

Como os direitos do kernel não têm get_task_allowdireitos, e a Apple até removeu a possibilidade de fazer tfp0( task_for_pid 0), eles precisam de um patch.

Então, basicamente, como o Xcode precisa tocar a memória do seu aplicativo e trabalhar com ele para depurá-lo, você precisará habilitar isso para depuração, mas você precisará desabilitar isso para distribuir seu aplicativo ou então qualquer aplicativo seria capaz de obter seu porta de tarefas.

iAlex11
fonte
-7

Para o xcode 4: você deve criar o arquivo Entitlements.plist a partir do novo arquivo. and Targets-> Build Settings-> Code Signing Entitlements você deve escrever aqui "Entitlements.plist"

Eu fiz isso e o xcode não recebe mais erro

Yiğit
fonte