在我的iPhone应用程序项目中设置权限时,我创建了一个新的Entitlements.plist,并将get-task-allow的值设置为false。但是为什么?这个键代表什么?
请注意,这与构建iPhone设备的应用程序时出现“应用程序无法验证”错误有关 - 我发现将该键的值翻转为true允许我在设备上安装该应用程序。
在我的iPhone应用程序项目中设置权限时,我创建了一个新的Entitlements.plist,并将get-task-allow的值设置为false。但是为什么?这个键代表什么?
请注意,这与构建iPhone设备的应用程序时出现“应用程序无法验证”错误有关 - 我发现将该键的值翻转为true允许我在设备上安装该应用程序。
来自ADC论坛上的这个帖子:
在应用程序签名后,get-task-allow允许其他进程(如调试器)附加到您的应用程序。发布配置文件要求关闭此值,而开发配置文件要求打开此值(否则Xcode将无法启动和附加到您的应用程序)。
虽然你的答案是正确的,但我想更加具体地说明一下,这样那些想知道get_task_allow
确切含义的人就可以明白了。
get_task_allow
是一种许可,允许其他应用程序获取您的应用程序的任务端口。这意味着如果任何其他应用程序使用您的应用程序进程ID运行task_for_pid()
,他们将获得您的应用程序的任务端口,从而能够在内存中读写东西,因此能够修补东西并修改您的应用程序的行为。
如果您查看越狱的工作原理,您会注意到他们做的第一件事之一是获取task_for_pid(mach_task_self(),0,&kernel_task);
,其中kernel_task
是一个值为0
的mach_port_t
,因此他们能够触及内核的内存。
由于内核许可没有get_task_allow
许可,并且Apple甚至已经取消了执行tfp0
(task_for_pid 0
)的可能性,因此他们需要进行修补。
所以基本上,由于Xcode需要接触您的应用程序内存并与之一起工作以进行调试,您需要启用此功能以进行调试,但您需要禁用此功能以分发您的应用程序,否则任何应用程序都可以获取您的任务端口。
在iPhone上调试应用程序的能力。