iPhone中的adhoc应用安装失败,为什么?

16

我正在开发一款 iPhone 应用。

由于该应用是有定位功能的,因此我正在不在场地进行测试。

为此,我向朋友发送了一个 .mobileprovision 配置文件和应用的 adhoc 版本。

但是,在他的设备上,应用安装过程中停止了。

设备日志显示以下日志:

2:42:30 unknown mobile_installationd[164] <Error>: 00808800 install_embedded_profile: Skipping the installation of the embedded profile
Wed Nov 11 12:42:31 unknown mobile_installationd[164] <Error>: 00808800 verify_executable: Could not validate signature: e8008017
Wed Nov 11 12:42:31 unknown mobile_installationd[164] <Error>: 00808800 preflight_application_install: Could not verify /var/tmp/install_staging.HreENJ/foo_extracted/Payload/RestaurantApp .app/RestaurantApp
Wed Nov 11 12:42:31 unknown mobile_installationd[164] <Error>: 00808800 install_application: Could not preflight application install
Wed Nov 11 12:42:31 unknown mobile_installation_proxy[163] <Error>: handle_install: Installation failed
Wed Nov 11 12:42:31 unknown mobile_installationd[164] <Error>: 00808800 handle_install: API failed
Wed Nov 11 12:42:31 unknown mobile_installationd[164] <Error>: 00808800 send_message: failed to send mach message of 64 bytes: 10000003
Wed Nov 11 12:42:31 unknown mobile_installationd[164] <Error>: 00808800 send_error: Could not send error response to client

有人能告诉我这个错误信息是什么意思导致安装失败吗?

我发现这是一个非常常见且令人沮丧的问题。甚至没有一个完美的解决方案。

苹果的技术说明:http://developer.apple.com/iphone/library/technotes/tn2009/tn2242.html


你的朋友需要注册成为iPhone开发者才能在他们的手机上安装该应用程序吗? - Lazarus
@lazarus 不需要。他们只需要传递他们的设备ID,以便将其添加到应用程序构建时使用的Ad Hoc配置文件中。 - Stephen Darlington
5个回答

23

看起来你的配置文件存在某些问题。以下是我通常解决这个问题的步骤:

  1. 删除整个构建文件夹。清理所有 *应该* 为您完成此操作,但有时会留下一些残留物。
  2. 在开发者中心检查设备ID。如果需要,请进行编辑。
  3. 重新下载配置文件。
  4. 再次安装配置文件。
  5. 退出Xcode并重新加载。
  6. 确保将Xcode设置为使用新的特定于广告的配置文件而不是开发者配置文件,用于您将用于档案的配置文件的代码签名标识符。
  7. 构建
  8. 立即复制可执行文件

如果有办法找到哪个步骤出了问题,那就太棒了,但在那之前,最好还是从头开始,除非你有非常耐心(或本地)的测试人员。


你好 Stephen,能告诉我应该从产品部分还是可执行文件部分获取可执行文件?删除整个文件夹对我的项目没有任何影响吗?最后,在使用 adhoc 分发时,我应该选择“使用基本 SDK”还是“iPhone 设备 3.0”来构建? - harshalb

3
看起来你的朋友试图安装你的应用程序的设备无法验证应用程序的签名。基本上,这意味着你发送给朋友的配置文件与编译用于 ad hoc 分发时实际应用的签名(如果有)不匹配。请尝试检查以下内容:
  1. 确保你已经添加了正确的 Entitlements.plist 文件到你的应用程序中。
  2. 确保你已将 Entitlements.plist 文件添加到构建该应用程序的 Ad Hoc 设置中。
  3. 验证你用于签署应用程序的证书(在你的 Ad Hoc 设置中)是否确实有效用于 ad hoc 分发。
  4. 验证你是使用与设备相关的基础 SDK 而不是模拟器和 Ad Hoc 分发设置来构建应用程序。
  5. 验证你发送的配置文件是用于 ad hoc 分发,并且正确包含了你朋友的设备。

第一、第二和第四个验证都没问题。但是对于第三个验证,我不确定在adhoc分发设置中应该使用"Use Base SDK"还是"iPhone Device 3.0"。另外,关于Entitlements.plist文件可能有什么问题,我只需要取消勾选get-task-allow,是吗? - harshalb
是的,你必须取消勾选get-task-allow。对于你的构建设置,请按照以下步骤进行操作:将基本SDK设置为最新的可用版本,目前是3.1.2,并将iPhone OS部署目标设置为第一个可用的SDK,即3.0(因为你不希望在旧的2.x设备上运行)。然后仔细检查代码签名标识是否指向你的Ad Hoc分发配置文件,并且相关的AppID是否正确:不要忘记根据你的AppID在目标的属性窗格中设置应用程序标识符。 - Massimo Cafaro
我在哪里可以找到“iPhone OS部署目标”? - harshalb
这是部署部分中的最后一个设置。 - Massimo Cafaro

1

天哪,现在已经是2014年中期了,但XCode 5仍然像以前一样让人气愤。

最令人沮丧的是,即使你已经跳过了苹果的新的https障碍来创建你的Ad-Hoc安装程序,你的设备可能会下载安装包,开始安装,默默地失败(由于不正确/无效的Provision Profile),然后尝试重新下载和安装

只有当你进入XCode \ Organiser并选择你的设备时,你才能实际查看日志,找出致命错误发生的原因,并开始搜索解决方案。为什么设备会尝试重试超出我的理解范围。

而显示那个模糊的“[Your application] could not be installed at this time”错误只会产生误导作用。通常,这会给人留下这样的印象,啊,也许稍后它会工作。去喝咖啡,午餐后再试试。额,不行。

无论如何,不多说废话(在我自己投票之前),只是想说我遇到了这个问题,原因是我试图创建一个我们iPad应用的Ad-Hoc(内部)版本,但我选择了生产(App Store)版本的Provisioning Profile。
我使用正确的“内部分发”Provisioning Profile重新构建了应用程序,将所有内容部署到我们的内部网络中,确保.plist文件位于https服务器上(不是http服务器,否则安装将失败并显示另一个模糊/不相关的错误消息),然后它最终成功了。
哦,我发现this StackOverflow page上的提示真是救命稻草。
Mike (躺下休息。喝一杯啤酒。)

1

请确保在 .app 包中没有留下 SVN 的任何痕迹。我曾经遇到过类似的问题,但在移除隐藏的 SVN 目录后,一切都成功安装了。 希望这可以帮到您。


-1

那么它可以作为bundleID中的通配符字符,例如:com.comp_name.*。 - harshalb
那个链接指向一个含有恶意软件的网站(根据谷歌)。 - NickG

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