iPhone调试:如何解决“无法获取进程任务”的问题?

158

我刚刚在XCode中添加了一个配置文件(用于支持通知和应用内购买),按照需要设置了adhoc分发的构建配置,并尝试在设备上运行应用程序(过去已经多次做过这个操作,没有任何问题)。

应用程序已经安装,但是无法启动。在控制台上,我看到以下消息:

Error launching remote program: failed to get the task for process 82.
Error launching remote program: failed to get the task for process 82.
The program being debugged is not being run.
The program being debugged is not being run.

然而,如果我手动在设备上启动应用程序,则可以按预期工作。我最近为Snow Leopard安装了最新的XCode 3.2。这是该版本XCode的已知错误还是我做错了什么?

编辑:使用开发配置文件进行发布分发时,可以正常工作。 我再次检查了Ad Hoc配置文件,以确保其中包括我正在使用的设备。


还有这个可能会有帮助:前往组织者->项目->派生数据删除和清理。确保项目和目标中的所有签名设置一致且正确-这在我的情况下有所帮助... - user387184
15个回答

290

临时配置文件不支持调试。您需要使用开发配置文件进行调试,并仅使用临时配置文件来分发不可调试的副本。


5
在意外将XCode 4中的代码签名身份设置为iPhone分发后,我遇到了相同的问题。 - cpungaliya
1
如何将配置文件切换回调试模式,如果我只是点击“启动”? - spankmaster79
那个错误信息可以再详细一些……不过还是谢谢! - Patrick Pijnappel
正如@cpungaliya所说,将代码签名设置为分发配置文件会导致此错误。 - MatterGoal
转到构建设置。在代码签名-->配置文件下,确保调试模式下使用的是开发配置文件而不是您的 ad hoc 配置文件。如果配置文件未展开,则可能将相同的配置文件应用于调试和发布模式。 - vish
显示剩余4条评论

110

在使用XCode通过设备调试二进制文件时,如果应用程序包含Entitlements.plist文件,则可能会出现问题。这个文件在调试时不需要安装到设备上。通常情况下,我会在发布版本中包含该文件(因为App Store需要),而在调试时删除它(以便可以从XCode调试应用程序)。这可能是你遇到的问题。

更新:截至2010年8月(iPhone 4.1 SDK),在许多情况下,不再需要在应用程序中包含Entitlements.plist文件(例如,通过App Store分发)。有关需要Entitlements.plist的情况,请参见这里的更多信息:

重要提示:Entitlements文件通常仅在构建Ad Hoc分发或启用Keychain数据共享时需要。如果两者都不是必需的,则删除代码签名授权的条目。(重点强调)


你说得对,我已经验证了,在Entitlements.plist中将get-task-allow布尔值设置为false确实会阻止调试。谢谢。 - Massimo Cafaro
1
就提醒你一下,我曾经遇到过完全相同的问题,而解决问题的方法是增加一个包含 get-task-allow 设置为 YES 的权限文件...所以如果你遇到了同样的问题,并且没有这个权限文件,请尝试添加它...:P - Alex Zak
从iOS 8.1.3开始,企业签名的应用程序也需要entitelments.plist文件。 - Roy K

37

我曾经遇到同样的问题,但通过以下简单步骤解决了:

  1. 确保你已经选择了调试模式而不是发布模式。
  2. 在调试配置中,在项目设置中,你应该选择开发者的配置文件,无需指定权利清单(entitlements plist)。
  3. 同样的设置也可以在“Targets”下找到,如果没有,请手动更改为上述调试配置。这样就能解决问题了。

祝你好运。


这个能够工作的原因几乎可以确定是你的 Debug 配置在 Entitlements.plist 中设置了 get-task-allow,而 Release 配置没有 - 这是为了防止人们将调试器附加到从应用商店获取的副本上(请参见下面 Kai 的答案,关于将其设置为 yes 以使其正常工作...) - dsmudger
为我解决了。不知怎么回事,构建设置为“发布”,而发布配置没有正确设置。 - KPK

19

我花了一段时间才弄明白这个问题。

如果您正在使用分发/自定义配置文件,则无法通过xcode测试它。您将会收到错误信息:“正在调试的程序未在运行。”

您可以构建应用程序,进入xcode中您的应用程序的“Products”文件夹,点击带有您项目名称的文件,并选择在Finder中显示。然后,您可以将此应用程序拖入iTunes中并同步,这时您就可以在设备上测试您的应用程序。


是的,这就是我的问题。我没有“权利文件(Entitlements file)”,但我已经将我的调试构建配置切换到了发布配置。切换到开发配置解决了一切问题。 - vocaro
1
我希望XCode能更加坦率地说明这一点。在连接到XCode时,无法在设备上测试分发版本构建根本不明显。这是一个常见的使用情况。 - user798719

13

在这个问题上花了近2个小时!最终,我通过将

iPhone Developer

替换为

iPhone Developer: My Dev Account Name

来解决 Debug 的 CODE_SIGN_IDENTITY

  1. 选择项目目标
  2. 构建设置
  3. 搜索 "code sign"
  4. CODE_SIGN_IDENTITY 部分的 Debug 行修改为 "iPhone Developer: My Dev Account Name",而不仅仅是 "iPhone Developer"

我不知道它为什么行得通,但对我来说确实行得通!


环境:Xcode 5.0 (5A1412)。


这对我也起作用了,谢谢。不得不摆弄一下要使用的身份验证,但最终它喜欢某个组合。Xcode 6真的需要一个“自动纠正”功能来处理这种东西,有很多我没有时间做的工作! - John Contarino
1
只是想补充一下,我的做法类似但又不同——我将配置文件更改为团队配置文件(用于调试),这将代码签名者设置为“自动”——在XCode 5+中,您应该选择要构建的配置文件,并让它根据该配置文件决定使用哪个签名者。 - Kendall Helmstetter Gelner
@KendallHelmstetterGelner 谢谢,这可能对其他人有帮助! :D - Kjuly
另外,我还应该添加了针对“Debug”构建的团队配置文件,该构建用于在XCode中从设备上运行(除非您更改方案设置)。 - Kendall Helmstetter Gelner
1
这解决了我的问题,而且不需要做任何其他事情,只需使用不同的代码签名身份重新构建。谢谢!在我的情况下,我正在使用Ad-hoc分发身份。 - Sean Michael Dorian
@SeanMichaelDorian 很高兴能帮到你 :D - Kjuly

13
如果你遇到这样的错误,唯一的原因可能是你在Xcode中使用了分发文件而非开发文件,或者缺少Entitlement属性。如果你没有使用Entitlements.plist,则唯一可能的错误是应用程序与分发文件打包在一起。你可以通过确认构建日志来验证此事。要更改这个设置,请进入项目的构建设置,验证Code Signing Entity设置。为了使调试工作正常,该设置应该是当前使用的配置的开发者文件。

https://developer.apple.com/library/ios/#qa/qa1682/_index.html

为了获得即时结果,请从xcode中删除所有移动提供程序文件,并安装您打算使用的开发人员文件。


12

检查您的代码签名部分。确保代码签名为iPhoneDeveloper代码签名


这是我的做法 - 不知何故在我的目标设备上,“团队”已更改为“无”,将其更改回来即可解决问题。干杯 - Ralpharoo

9

打开Entitlements.plist并将布尔值get-task-allow设置为YES - 调试器现在可以附加了!


我已经尝试了很多次,不明白为什么它不能解决问题。如果你仍然想要集成testflightapp,这将是最好的方法。 - owen gerig
我的运行方案设置为调试模式。只有这个解决方案才能修复它!谢谢。 - Pieter

4

前往“编辑方案”,在运行 -> 信息 -> 构建配置下,将 Ad-Hoc 更改为调试。 点击确定以保存。


1

可能是您的手机上有一个过期的开发配置文件。

我的开发配置文件几天前已经过期,我不得不更新它。我在手机上安装了新的配置文件,但当我尝试运行我的应用程序时,出现了相同的错误消息。当我查看手机上的配置文件设置时,我注意到了过期的配置文件并将其删除。这为我解决了错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接