在Xcode中,get-task-allow可以做什么?


95

因此,当我在iPhone应用程序项目中设置权利时,将创建一个新的Entitlements.plist,并将get-task-allow的值设置为false。但为什么?此密钥代表什么?

编辑

请注意,这与这个问题有关 -我发现将此键的值翻转为true可以让我在设备上安装该应用程序)

Answers:


165

ADC上的该线程

get-task-allow,在登录到应用程序后,允许其他进程(例如调试器)连接到您的应用程序。分发配置文件要求关闭此值,而开发配置文件要求打开此值(否则Xcode将永远无法启动并附加到您的应用程序)。


2
那么,是否要求项目具有两个Entitlements.plist文件,一个文件的此值设置为YES,以调试配置文件为目标,另一个文件的值为NO,以分发配置文件为目标?
格雷格·马莱蒂克

2
没关系,解决了我自己的问题。如果您在调试构建设置中未包含Entitlements.plist,则没有问题。
格雷格·马列蒂奇

1
但是,即使没有在开发人员配置文件的“调试”模式下将Entitlements.plist包含到项目中,我也可以进行调试。有人可以解释一下吗?
spd 2012年

1
调试的默认值为true,发布的默认值为false。将其设置为false将禁用调试。
懒惰的编码者2012年

1
但是分发配置通常来自“发行版”。这不是意味着您不需要为AdHoc指定FALSE吗?(或者,是否有权利文件?)
Nicolas Miari 2012年

13

在iPhone上调试应用程序的能力。


1
有趣!如果仅此而已,那么我想知道为什么将值翻转为false会阻止我在设备上安装该应用程序吗?(相关的SO问题:stackoverflow.com/questions/997884/…
Codebeef

那就是它的作用……但是实际上它可以做什么呢?
Ryan Detzel 09年

1
如果它包含诸如Codebeef的更多信息,则可以大大改善此答案。
Jadar

@Codebeef我相信这是Xcode施加的限制,而不是固有的限制。
saagarjha

7

尽管您的答案是正确的,但我只是想对此更加具体,以便希望知道确切get_task_allow含义的人可以。

get_task_allow是一项权利,允许其他应用程序获取您应用程序的任务端口。这意味着,如果任何其他应用程序task_for_pid()使用您的应用程序进程ID 运行,它们将获得您应用程序的任务端口,因此它们可以执行诸如在内存上写入和读取内容之类的操作,从而能够修补这些内容并修改其行为。您的应用。

如果你看看怎么越狱的作品,你会发现他们做的第一件事就是让task_for_pid(mach_task_self(),0,&kernel_task);被认为kernel_task是一个mach_port_t具有价值0,使他们能够接触到内核的内存。

由于内核权利没有get_task_allow权利,而且Apple甚至取消了执行tfp0task_for_pid 0)的可能性,因此需要修补程序。

因此,基本上,由于Xcode需要触摸应用程序的内存并对其进行调试,因此您需要启用该功能进行调试,但是需要禁用此功能才能分发您的应用程序,否则任何应用程序都可以获取您的应用程序任务端口。


-7

对于xcode 4:您必须从新文件创建Entitlements.plist文件。和目标->构建设置->代码签名权利,您必须在此处编写“ Entitlements.plist”

我这样做了,xcode不再收到错误

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.