代码签名错误:应用程序未通过代码签名验证

10

我是iOS开发的新手,我已经准备好一款应用程序并准备进行分发,但每次在我的设备上运行应用程序时都会出现这个错误,而在iOS模拟器上则正常工作。以下是完整的错误信息:

应用程序未通过签名验证,签名无效,包含禁用的权限或未使用iPhone分发证书进行签名。 (-19011)

下面是完整的日志:

Validate "/Users/masonsocha/Library/Developer/Xcode/DerivedData/Multibrowser-brgeiknbjgrywwehhohafjwxjqnk/Build/Products/App Store-iphoneos/Multibrowser.app"
    cd /Users/masonsocha/Desktop/Apps/MultiBrowser
    setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    setenv PRODUCT_TYPE com.apple.product-type.application
    /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/Validation "/Users/masonsocha/Library/Developer/Xcode/DerivedData/Multibrowser-brgeiknbjgrywwehhohafjwxjqnk/Build/Products/App Store-iphoneos/Multibrowser.app"

warning: Application failed codesign verification.  The signature was invalid, contains disallowed entitlements, or it was not signed with an iPhone Distribution Certificate. (-19011)
Executable=/Users/masonsocha/Library/Developer/Xcode/DerivedData/Multibrowser-brgeiknbjgrywwehhohafjwxjqnk/Build/Products/App Store-iphoneos/Multibrowser.app/Multibrowser
codesign_wrapper-0.7.10: using Apple CA for profile evaluation
AssertMacros: trust_result == kSecTrustResultUnspecified,  file: codesign_wrapper.c, line: 594
AssertMacros: profile,  file: codesign_wrapper.c, line: 918
codesign_wrapper-0.7.10: Failed to load provision profile from: /Users/masonsocha/Library/Developer/Xcode/DerivedData/Multibrowser-brgeiknbjgrywwehhohafjwxjqnk/Build/Products/App Store-iphoneos/Multibrowser.app/embedded.mobileprovision
 - (null)

我已经尝试缩短项目名称的长度,但没有帮助,我目前使用的是OSX Lion操作系统,在Xcode 4.3.2上工作。我彻夜未眠地抓耳挠腮,请帮帮我!


你是想构建一个用于测试的设备,还是要构建一个用于发布到应用商店的版本? - magmastonealex
听起来你可能还没有按照要求设置代码签名。签名无效,包含不允许的权限或未使用 iPhone 发行证书进行签名。你是否遵循开发者门户上的任何指示来获取你的证书?还是你只是从模拟器切换到设备并希望它能运行? - rooftop
对于那些寻找最新解决方案的人 - 基于2013年4月,请访问以下链接: https://developer.apple.com/library/ios/#technotes/tn2250/_index.html - Yizhar
6个回答

19

可能Xcode会选择一个开发配置文件来对代码进行签名。

请确保它使用分发配置文件。

在“构建设置” -> “代码签名”部分展开“代码签名身份” -> “发布” -> 确保任何iOS SDK都引用分发配置文件。


1
谢谢!我遇到了这个问题,因为我的发布代码签名实体设置为与Test Flight的开发实体匹配。 - sberley

9
我遇到了完全相同的问题。。
前往钥匙串访问
1、确认您正确设置了公钥和私钥。这是一个不错的参考:https://developer.apple.com/legacy/library/technotes/tn2250/_index.html 2、我之前调整了我的钥匙串证书首选项,以使 Outlook 工作,但这几乎破坏了 XCode 代码签名。
在我将这些设置为“最佳尝试”设置之后(见截图),验证正常工作了。 enter image description here

3
您可以解决此问题,而无需将个人资料选择留给Xcode。在项目设置中手动选择正确的发布个人资料,问题就会得到解决。

2

即使我检查了所有签名相关的东西,我仍然遇到了同样的问题。我的entitlements文件中有旧的“Can be debugged”设置。将其切换为“get-task-allowed”可以解决这个问题。苹果提供了有关调试签名问题的说明


谢谢大家的回复,但我已经解决了这个问题。我选择了特定的分发配置文件,然后尝试选择推荐的设置,让它自动选择有效的配置文件,这样就可以正常工作了:D - Mason Socha

1
我曾遇到这个问题,但发现以上所有解决方法都无法解决。最终,我通过研究苹果的技术文档(https://developer.apple.com/legacy/library/technotes/tn2250/_index.html)找到了解决方案。
在我的情况下,具体问题是某个资源文件要么缺失,要么被隐藏了(我不知道哪种情况),但在构建过程中没有标记为有问题的文件。下面我将概述我采取的步骤来发现这个问题。
  1. 将构建存档,保存以进行adhoc部署。
  2. 在Finder中导航到ipa文件,将其重命名为.zip。
  3. 双击解压缩,打开“Payload”文件夹。
  4. 打开终端,输入以下内容:

    codesign --verify -vvvv -R='anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.1] exists and (certificate leaf[field.1.2.840.113635.100.6.1.2] exists or certificate leaf[field.1.2.840.113635.100.6.1.4] exists)' /Path/to/your/app.app

  5. 不要输入/Path/to/your/app.app,而是从Payload文件夹中将*.app文件拖放到终端中,确保命令末尾和文件名之间有一个空格,然后按回车键。

输出中出现错误,指出“密封资源丢失或无效”,并给出了引起问题的文件名称(它以点号开头,这可能是问题所在)。在XCode项目浏览器中搜索文件名时,我找到了该文件,但在Finder中查看时,它并不存在于磁盘上。

解决方法很简单,只需从XCode项目浏览器中删除该文件即可,错误便会消失。我一定会建议任何遇到类似问题的人仔细阅读苹果的技术笔记。虽然措辞有些不好理解,但解决方案很可能就在其中。

0

我曾经遇到过同样的问题,并通过以下方式解决:

  • 根据分配构建配置文件中的说明,将自动配置文件选择器的值从“iPhone Developer”更改为“iPhone Distribution”。
  • 下载发布配置文件并双击以添加它。

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