应用程序安装失败 - 应用程序在构建时没有有效签名

Posted

技术标签:

【中文标题】应用程序安装失败 - 应用程序在构建时没有有效签名【英文标题】:App Installation failed - The application does not have a valid signature on build 【发布时间】:2016-12-19 14:22:28 【问题描述】:

我在构建时遇到以下错误:

应用程序没有有效的签名

玩了一会儿后,我发现了以下内容:

错误仅在构建应用程序后出现,没有任何更改 - 也就是说,如果我在开发过程中遇到崩溃并尝试再次构建它会显示错误 为了再次构建,我需要添加空格或新行,然后它才能工作 它将在完全清理 -> 构建后工作。这是不可接受的,因为项目很大(超过 300 个文件),并且使用 cocoapods 构建时间大约为 20 分钟。 发生在所有类型的 ios 上,但仅限于设备上。在模拟器上它工作正常。尝试从 8.0 到 10.2 iOS 版本。 干净的构建只会修复一次,之后如果我尝试再次构建相同的代码,则会出现同样的错误。

其他相关信息:

Xcode 8.2(也发生在 8.0 和 8.1 上) 语言是 Swift 3 MacOS 是 Sierra (10.12.1) 用于签名的证书是企业级的

已经在线尝试了所有建议的解决方案,包括 SO(例如 App installation failed),但没有运气。

我的问题是:如何解决这个问题,以便在每次构建时无需更改代码即可构建?我认为这与构建设置有关...

【问题讨论】:

我有同样的问题,但发现完全清理后(转到产品并按 cmd - 你会看到“清理构建文件夹”),它仍然会发生,但频率要低得多跨度> 嘿 Roee84,是的,这就是我的意思干净构建:派生数据,干净构建文件夹,干净构建 - 派生数据有点难找到,但我也处理好了。没运气。起初我以为这与 Xcode 发布有关,这实际上是一个错误,但这种行为一直显示 :( 【参考方案1】:

这似乎是 Xcode 的一个已知问题。我没有在我们的项目中体验过,所以它可能与 CocoaPods 或其他特定于您的项目的东西有关。我记得在 Apple 的论坛 here 上看到过这个问题。

虽然更多的是一种变通方法而不是解决方案,但您可以通过添加 BuildDate.plist 文件强制应用每次重新构建,添加构建阶段以将当前日期/时间放入 plist 文件中。此更改足以触发足够的重建,因此代码签名错误不会影响您。它应该会导致重新编译任何耗时的东西。

这应该可以让您和您的团队在发生这种情况时不必对代码进行简单的更改。

【讨论】:

嘿@wottle,感谢您的回答-我从您的回答中不太明白的是:此触发器是否会在每次构建时重新编译?因为它会导致每次构建 20 分钟“无工作”:( 它应该只“重建”一个文件,该文件在代码中没有其他依赖项。这么小的更改不应该花费 20 分钟,特别是因为 plist 没有被编译,它们只是复制的资源。要进行测试,您可以简单地更改项目中的 plist 并查看它是否解决了该问题/后续构建不需要太长时间。如果不需要太长时间,我会让构建阶段脚本在每次构建期间自动更新 plist(即使项目中没有任何更改也会执行)。 是的,添加 .sh 脚本不会过多地延长构建时间 - 并且重建 info.plist 也可以。我担心重建源文件。我明天早上会尝试这种方法,我希望它能解决问题:) 谢谢 您提供的这个链接对我帮助很大。只是一些更正 - 我希望你会为其他有同样问题但对 cme​​ts 太懒惰的人更新你的答案:1) BuildDate.plist 不会解决这个问题 - 你必须找到自己的脚本来实际更新 info.plist 中的某些内容. 2)您实际上在代码中使用了更改后的值(例如,显示构建版本)。我有大约 4 个脚本 - 3 个用于 pod。最后一个是用于构建版本并导致问题。删除它后,我可以完美地构建。 有两种方法可以解决这个问题:要么只为 prod 运行此脚本(本地构建不需要构建版本),要么创建单独的 plist 文件并更新该文件。

以上是关于应用程序安装失败 - 应用程序在构建时没有有效签名的主要内容,如果未能解决你的问题,请参考以下文章

该应用程序没有有效的签名 Xcode 7.3

Android安装失败 - 相同的包但签名不同

反应本机签名的 apk 构建失败 lint 错误

Xcode 4 UI 可以很好地构建应用程序,但命令行 xcodebuild 在代码签名时失败

安装失败已安装了签名冲突的应用恢复出厂设置

Android 安装失败 - 相同的包但不同的签名