xcodebuild - codesign -vvvv提示“资源信封已过时”

21

我刚刚更新了我的Xcode安装,以便开始为iOS 8设备编译我的应用程序。但出于某些原因,我无法正确地签署使用以下命令生成的应用文件:

xcodebuild -project GrantM/GrantM.xcodeproj -configuration Release

它编译了代码并且看起来很好,但运行时:

/usr/bin/codesign --verify -vvvv GrantM/GrantM.app

给我:

Program /usr/bin/codesign returned 1 : [GrantM/GrantM.app: resource envelope is obsolete]
Codesign check fails : GrantM/GrantM.app: resource envelope is obsolete

使用以下命令检查代码是否已签名:

/usr/bin/codesign -dv GrantM/GrantM.app

返回结果如下:

Executable=Documents/GrantM/GrantM/GrantM.app/GrantM
Identifier=com.grantapps.GrantM
Format=bundle with Mach-O universal (armv7 (16777228:0))
CodeDirectory v=20200 size=647 flags=0x0(none) hashes=23+5 location=embedded
Signature size=4336
Signed Time=24 Sep 2014 12:54:53 pm
Info.plist entries=34
TeamIdentifier=N3KKU46JLY
Sealed Resources version=2 rules=5 files=55
Internal requirements count=1 size=180

有其他人在OSX 10.9.5和xcode 6.0.1上遇到类似的问题吗?还是我只是有些愚蠢,做了一些明显的错误?

此外,我能找到在xcode生成的应用程序的调试版本并成功签名,但它只是一个调试版本,不能用于分发。我甚至无法手动签名xcodebuild生成的应用程序文件。

提前感谢任何帮助或建议。


+1,虽然代码签名验证失败,但我的应用程序已能够在iOS7/iPhone4/5上安装和运行。不确定是否存在潜在风险。我从官方和非官方渠道收集了一些信息,但尚未解决这个问题。http://stackoverflow.com/questions/26082784/ios-codesign-verification-failed-while-upgrading-to-os-x-10-9-5 - firebear
5个回答

28
如果您使用Mac OSX 10.9.5或更高版本,则与V2签名的OS代码签名存在问题。
因此,在codesign --verify命令中使用--no-strict标志以解决此错误。
如果您正在使用PackageApplication创建.ipa文件,则需要编辑PackageApplication perl脚本工具,使用vi PackageApplication命令并更新codesign函数出现次数以传递--no-strict参数。
例如:

my $result = runCmd("/usr/bin/codesign", "--verify", "--no-strict", "-vvvv", , $plugin );

我也遇到了同样的问题,并从Apple Dev团队得到了以下回复。对于我来说,问题已经解决了。

命令行工具“codesign”已在10.9.5和10.10中更改,您需要向命令传递“--no-strict”选项(已报告该问题并将进行修复)。 要解决此问题,请保存一份副本并修改PackageApplication以将“—no-strict”传递给codesign,可以通过运行以下命令找到PackageApplication: xcrun -sdk iphoneos -f PackageApplication


1
这是否也解决了 xcodebuild 的问题?我的意思是,xcodebuild 是否使用 PackageApplication? - RonaldPK
1
总体而言,问题出在Mac OSX 10.9.5及更高版本以及codesign工具上。xcodebuild不会直接使用PackageApplication,除非你指定一些后续操作来创建一个ipa文件。 如果你正在使用xscrum和PackageApplication,那么你将需要修改PackageApplication使其在Mac OSX 10.9.5及更高版本中正常工作。 - Omkar
1
谢谢。我确实在使用xcodebuild从xcarchive创建IPA。我在PackageApplication中添加了--no-strict,现在“检查应用程序”返回“磁盘上有效”和“满足其指定要求”。对我来说,这听起来比“资源信封已过时”好多了。 - RonaldPK
2
@JayQ。是的,我们按照上述步骤生成了ipa文件,我们的ipa文件已经被苹果接受了。 :) - Omkar
运行一个不太严格的codesign验证检查对我来说并不能解决问题。在我的情况下,捆绑包(例如OS X安装程序mpkg)仍然无法通过spctl进行的检查,并且最重要的是,无法通过Gatekeeper。 - Rich
显示剩余7条评论

4
我已经设置了一个Jenkins CI系统,从我们的git库提供自动化生成iOS应用程序。此外,我还上传/提交构建到Crashlytics进行崩溃日志监控。
在Xcode 6.0 GM上一切正常,但是自从安装Xcode 6.0.1后,上传到Crashlytics失败并显示相同的错误。我正在请求他们的帮助。
我的构建工作的一部分确实使用xcodebuild生成应用程序的档案,然后我也使用PackageApplication来获取.ipa文件,而PackageApplication确实会发出codesign命令,这不会失败。我正在使用发布版本而不是调试版本。
以下是我在工作中用于清理/归档应用程序的命令:
xcodebuild clean archive -scheme MyScheme -target MyTarget -sdk iphoneos -configuration AdHoc CODE_SIGN_IDENTITY="iPhone Distribution: MyCompany" PROVISIONING_PROFILE="UDID_Of_Provisioning_Profile"

这是我用来从生成的存档中打包/获取应用程序.ipa文件的命令:
xcrun -sdk iphoneos PackageApplication "Path/to/MyApp.app" -o "/Path/To/MyApp.ipa" --sign "iPhone Distribution: MyCompany" --embed "Path/To/UDID_Of_Provisioning_Profile.mobileprovision"

尝试修改这些内容以适应您的设置,并查看是否出现相同的错误。


经过长时间的挣扎,我终于找到了实际问题所在。看起来,在签名过程中使用的证书之一已经悄悄地过期了。为自己创建一个新的配置文件解决了这个问题。对于你来说,尝试将--no-strict标志添加到你的构建标志中(我是在xcode的构建设置中的“其他代码签名标志”部分中完成的)。 - Grantism
1
我有同样的问题,但我的证书没有过期。 - firebear
多目标应用程序,如WatchKit、Watch扩展、Siri Kit和Siri UI扩展怎么样?你能给我一些建议吗?我已经尝试制作一个IPA文件,但在设备复制时抛出API安装错误:( - codelover

1
在我的情况下,我验证了使用的每个框架和动态链接库,找出被拒绝的那一个,然后重新签名这个框架或动态链接库,整个应用程序就得救了。

1

按照以下步骤避免此错误。

  1. 从Info.plist中删除CFBundleResourceSpecification = ResourceRules.plist
  2. 避免在codesign行中使用--resource-rules,并进行代码签名。
  3. 验证应用程序:codesign --verify -vvvv Payload/*.app

0
在OS 10.10中,我必须在codesign行中删除--resource-rules
my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve 
metadata=identifier,entitlements","--sign", $opt{sign});

1
你能否再解释一下它的含义以及为什么它是必要的? - evenro
1
不要使用 --resource-rules 标志或 ResourceRules.plist 文件。它们已经过时并将被拒绝。 -- 来自 苹果关于10.9.5更改的文档 - Dmitry Isaev
我也想从codesign中删除--resource-rules。请告诉我你是如何删除它的。 - Rashmi Ranjan mallick

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