构建 iPhone 应用程序时出现“应用程序无法验证”错误

46

我刚刚买了一台闪亮的新MacBook Pro,之前我在另一台MacBook上开发iPhone应用程序,现在我想把我的开发迁移到新电脑上。

现在我已经能够轻松构建并在模拟器上运行该应用程序,但当我尝试在iPhone上运行该应用程序时,我一直收到“应用程序无法验证”的错误。我已安装了新的开发者证书,并安装了生成的所有新配置文件,但我不知道为什么我仍然会收到这个错误。

有人能否提供任何想法,指出我哪里出错了?

编辑

我重新创建了证书和配置文件等...构建成功,在底部显示的状态一直到“正在设备上安装”,然后显示两个模态对话框,具有相同的“应用程序无法验证”错误消息。

是否有任何输出可用以提供精确的错误信息?

编辑

好的,我从组织者那里得到了适当的日志,显示问题所在。看起来我没有设置Entitlements.plist,但是在Xcode中我已经设置了(我添加了一个Entitlements.plist文件,然后取消选中get-task-allow,接着将Entitlements.plist添加到项目设置的代码签名权利中)。日志如下:

Tue Jun 16 07:35:42 unknown mobile_installation_proxy[1162] <Error>: install_embedded_profile: Skipping the installation of the embedded profile
Tue Jun 16 07:35:42 unknown securityd[1158] <Error>: mobile_installat[1162] SecItemCopyMatching: missing entitlement
Tue Jun 16 07:35:42 unknown securityd[1158] <Error>: mobile_installat[1162] SecItemCopyMatching: missing entitlement
Tue Jun 16 07:35:42 unknown securityd[1158] <Error>: mobile_installat[1162] SecItemCopyMatching: missing entitlement
Tue Jun 16 07:35:42 unknown securityd[1158] <Error>: mobile_installat[1162] SecItemCopyMatching: missing entitlement
Tue Jun 16 07:35:43 unknown mobile_installation_proxy[1162] <Error>: entitlement 'get-task-allow' has value not permitted by a provisioning profile
Tue Jun 16 07:35:43 unknown mobile_installation_proxy[1162] <Error>: verify_executable: Could not validate signature: e8008016
Tue Jun 16 07:35:43 unknown mobile_installation_proxy[1162] <Error>: preflight_application_install: Could not verify /var/tmp/install_staging.1WIVsB/BouldrData.app/BouldrData
Tue Jun 16 07:35:43 unknown mobile_installation_proxy[1162] <Error>: install_application: Could not preflight application install
Tue Jun 16 07:35:43 unknown mobile_installation_proxy[1162] <Error>: handle_install: Installation failed
Tue Jun 16 07:51:53 unknown afcd[1181] <Error>: user mobile has uid 501
Tue Jun 16 07:51:53 unknown afcd[1181] <Error>: mode is 0x41e8

有人能解释一下为什么这个没有按预期工作吗?

编辑

构建已经成功了,但我还没有接受答案,因为我不知道发生了什么。有没有人知道到底发生了什么?

12个回答

93

我的问题实际上是我已经通过TestFlight在手机上安装了应用程序,之后卸载了该应用程序,然后它就可以工作了!


5
这种情况与我的类似;我已经通过应用商店安装了这个应用程序,试图用一个开发版覆盖它,但没有成功。删除设备上的原始版本允许 Xcode 安装调试版本! - Luke
2
对我也起作用了。有趣的是,今天在Android上我遇到了完全相同的情况,提示信息大致是“在安装此应用程序之前必须先卸载它。” - Jack BeNimble
2
@JackBeNimble 我敢打赌,有27,000人不需要通过谷歌来理解那条信息的含义。 - devios1

32

我通过从手机中删除已安装的构建,然后重新安装该构建来解决了这个问题。


2
这也是我的问题。 - wfbarksdale
1
这对我起作用了 :) - Mischa Molhoek

16

来自ADC论坛上的这个帖子:

当一个应用程序被签名后,get-task-allow选项允许其他进程(如调试器)附加到你的应用程序。发行配置文件要求关闭此值,而开发配置文件要求打开此值(否则Xcode将无法启动和附加到你的应用程序)。


+1 我在谷歌上花了一个多小时寻找这个答案。太棒了! - Jason George
我刚刚跳过了授权文件,这对于内部分发起作用。 - Rivera

6

检查您的iPhone是否正确进行了配置。您可以连接iPhone并从XCode启动Organizer(主菜单 -> 窗口 -> 组织者),然后检查PROVISIONING PROFILES信息。

之后,您需要匹配Bundle Identifier(项目 -> Info.plist)和您的应用程序ID。您可以阅读此苹果笔记App ID和Bundle Identifier之间的不匹配

当我的Bundle Identifier不正确时,我也遇到了类似的消息框(连续两个)。


当我覆盖一个通过TestFlight下载的应用程序时,出现了这个错误。这可能是因为我正在使用一个开发配置文件,其团队与分发配置文件的团队不同。 - user_

3
请问您在项目窗口左侧是否展开了“Targets”选项,然后右键单击您的应用程序名称并选择“获取信息”,接着转到“构建”选项卡,在“代码签名”下,将“任何iPhone OS设备”的值更改为适用于您的情况。另外,在属性选项卡中,您应该设置标识符以匹配您选择的标识符。不知道这是否有帮助,但这是我在您的描述中找到遗漏的步骤。请注意保留原有的HTML标签。

是的 - 那看起来都很好。 - Codebeef
从你旧的MacBook上使用的值来看,它可能看起来很好。你是否已经在所有目标中更改了它们,以使用你在新的MacBook Pro上安装的新证书和配置文件? - Steve Madsen
是的 - 我在新的 MacBook 上检查了它。 - Codebeef

2

我知道您已经检查过其中的一些内容,但为了使答案更完整,以下是要检查的内容:

  • 检查新的配置文件和证书是否在每个要安装在设备上的构建设置的目标级别命名。
  • 代码签名权利也必须在目标级别定义,而不是项目级别。
  • 仔细检查您的构建日志,查找包含CodeSign的行。验证它是否存在并且使用您期望的证书。
  • 如果所有其他方法都失败,请从目标中删除代码签名身份,清除所有目标,从项目中删除任何构建目录,退出并重新启动Xcode,替换代码签名身份,然后再次尝试构建。

1
进入“窗口”>“设备”,查看已安装应用程序,我能找到我的应用程序已经安装。选择该应用程序并点击“-”以将其从设备中删除。尝试使用该设备作为目标重新构建您的应用程序。
对我有用,即使从手机上我找不到应用程序安装在哪里!

1

问题已解决(至少对我来说是这样的!)

在可以正常工作的机器上导出开发者档案,然后在出现问题的机器上导入。通过"偏好设置/帐户",底部的齿轮图标完成此操作。


1
在您的设备上,可能已经安装了一个具有相同捆绑标识符的应用程序,因此无法验证该应用程序。我遇到了这个问题,因为我从App Store中安装了我的应用程序,并从Xcode测试其更新版本,并且与我的现有应用程序中的标识符相同。所以简单的解决方案就是删除应用程序并重新安装。

1
除了验证代码签名之外,一定要去“构建”菜单并运行“清理所有目标”。Xcode有时会混淆。

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