Jenkins 上的代码签名资源规则路径失败,CODE_SIGN_RESOURCE_RULES_PATH

Posted

技术标签:

【中文标题】Jenkins 上的代码签名资源规则路径失败,CODE_SIGN_RESOURCE_RULES_PATH【英文标题】:Code Signing Resource Rules Path fails on Jenkins, CODE_SIGN_RESOURCE_RULES_PATH 【发布时间】:2015-09-03 08:21:33 【问题描述】:

我不太关心人们如何对待以下问题。

基本上听起来像“使用ResourceRules.plist: cannot read resources 在 Jenkins 上构建失败”

我的情况是:

1) 詹金斯

2) 在本地,我在 Xcode 7 beta 中工作(在一个单独的分支上)

3) 我的队友在 6.4.1 中工作,对他们来说一切正常

4) Jenkins slave 已安装 Xcode 6.4.1

有些人会说“这个问题被问了数百万次”,例如here、here、here、here。

但是documentation 表示如下:

资源规则

OS X Mavericks v10.9 之前的系统记录了一个签名功能 (--resource-rules) 来控制捆绑包中的哪些文件应由代码签名密封。此功能已被 Mavericks 淘汰。在 Mavericks 和后来的代码签名总是将所有文件密封在一个包中;不再需要明确指定这一点。这也意味着 Xcode 中的 Code Signing Resource Rules Path 构建设置不应再使用,应留空。

所以我的问题是,为什么每个人都如此迅速地绕过、破解、解决这个问题,而文档清楚地表明它应该是空白的并且已经过时了?

这背后的真正问题是什么?为什么在几年不需要的东西上构建失败?

【问题讨论】:

我确认,这种解决方法不适用于 Xcode 7。最近的更新破坏了一切,真是太糟糕了。 【参考方案1】:

我遇到了同样的问题。 Mr.Dan Cutting here 建议的解决方案对我有用。

为了节省一些时间,这里是我们需要的网络链接。

“从 Mavericks 开始,在签署应用程序时不应包含资源规则选项,但由于某种原因,脚本仍将此选项传递给代码签名工具。

解决方法是更改​​ PackageApplication 脚本,使其不再执行此操作(这将需要 sudo 访问权限)。脚本的第 155 行构造了要传递给代码签名者的参数,因此我们可以简单地删除对资源规则的引用:"

//Remove - Begin
    - my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
    -   "--sign", $optsign,
    -   "--resource-rules=$destApp/ResourceRules.plist");
//Remove - End

//Add - Begin
    + my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements",
    +   "--sign", $optsign);
//Add - Starts

【讨论】:

【参考方案2】:

如果您使用的是 Xcode 6.1 以上版本,请更改以下行

$(SDKROOT)/ResourceRules.plist

到 CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist

【讨论】:

以上是关于Jenkins 上的代码签名资源规则路径失败,CODE_SIGN_RESOURCE_RULES_PATH的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins上的Xcodebuild代码签名错误

如何将托管在gerrit上的代码库集成到jenkins?

Jenkins构建失败,因为它正在查找执行junit测试时在logback.xml中定义的日志路径

JenkinsCI:APK 上的 zipalign 失败:退出代码 1

防止共享Jenkinsfile中的默认签出

同一路径上的多个二进制文件的代码设计问题