"resource-rules在Mac OS X >= 10.10中已被弃用"

69

我尝试使用iResign应用程序在Mac OS 10.10上使用新的provisioning profile重新签署ipa文件,但是我收到了这个警告:"Warning: --resource-rules has been deprecated in Mac OS X >= 10.10"。

现在该怎么办?


你从签名中排除了哪些文件? - Droppy
我有一个带开发证书的ipa文件,现在我想将它更改为企业分发证书。我使用iResign应用程序在Mac OS X 10.10上重新签名,但它显示出警告。 - hiennv92
听起来像是iResign中的一个错误(不管那是什么),你应该考虑使用Xcode重新构建应用程序,对吧? - Droppy
感谢您的支持。但是我的一些朋友不知道如何使用Xcode进行构建。如果他们可以使用他们的分发证书重新签名ipa文件,那就更好了。我会建议他们使用Mac OS 10.9.5或以下版本。无论如何,非常感谢。 - hiennv92
8个回答

153

点击您的项目>目标>选择您的目标>构建设置>

代码签名资源规则路径

并添加:

$(SDKROOT)/ResourceRules.plist

输入图像描述


11
这帮助我解决了我在测试飞行中遇到的问题。 - dfmuir
4
这似乎解决了我在TestFlight中遇到的问题。 - Joseph
5
前往“构建设置”(Build Settings),Georg,并确保您已选择所有级别。 - Dani Pralea
4
使用TestFlight for Mac创建IPA文件失败时,这个解决了我的问题。老实说,苹果似乎正在逐渐消除TestFlight的所有优点。当他们收购它的时候,我还以为这会是一件好事... - Cameron E
2
此答案不适用于 OS X 目标,因为在 Mac OS 上的 ResourceRules.plist 文件可以在 $(SDKROOT) 路径上找到几个级别。 - Bojan Dimovski
显示剩余9条评论

24

自从 Xcode 7 版本开始,Code Signing Resource Rules Pathbuild setting 必须保持为空,否则会产生警告。

技术指南 TN2206 提供了详细信息:

资源规则

OS X Mavericks v10.9 之前的系统记录了一种签名特性(--resource-rules),用于控制捆绑包中应该由代码签名密封的文件。该功能已经过时,对于 Mavericks 及更高版本创建的代码签名,始终会将捆绑包中的所有文件密封起来,不再需要显式地指定此设置。这也意味着 Xcode 中的 Code Signing Resource Rules Path build setting 不再使用,并且应该保持为空。

因此,不再可能从签名中排除捆绑包中的某些部分。一旦签名完成,捆绑包应被视为只读。


好的信息,尽管这似乎意味着与上面最高投票答案的解决方案相反... :S - Mike Chamberlain
我猜最高票的答案在Xcode 6.x版本中是正确的。但它在我的情况下不起作用。 - Ricardo Sanchez-Saez
正确答案需要更新到XCode 7。 - carbonr

10

Xcode 7之后之前的解决方案停止工作了。Rishi Goel指出了一种新的方法(在https://dev59.com/RFwY5IYBdhLWcg3wj4Rr#32762413中)。

  1. 删除CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist
  2. 找到/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication脚本并更新它。
    查找包含以下代码的行:

    my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
                      "--sign", $opt{sign},
                      "--resource-rules=$destApp/ResourceRules.plist");
    

    将其更改为:

    my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements",
                      "--sign", $opt{sign});
    

那其实是唯一行得通的解决方案。谢谢。 - jimpic
这是我个人的解决方案。 - Loukas
无法解锁此文件。 - simply_me

6
我发现一个解决方法:如果你从XCode运行iResign应用程序,那么你将能够完成重签名(警告将以控制台形式出现而非弹窗)。 但是,如果你关闭XCode并单独运行应用程序,则弹窗会再次出现!
顺带一提:我发现了一个bug :) 这种情况。
if (systemVersionFloat < 10.9f)

对于Yosemite 10.10而言,这个功能是不正常的。有意思。

谢谢,


1
非常感谢!这真是一个有趣的漏洞。我最近发现了这个漏洞。这里还有新的更新:https://github.com/maciekish/iReSign - hiennv92
条件是从哪里来的?我该如何修复这个条件? - munmunbb
这似乎不是一个错误,而更像是一种硬编码的强制废弃。 - Lytic

4

尝试在xcodebuild命令中添加以下参数。

-sdk iphoneos CODE_SIGN_RESOURCE_RULES_PATH='$(SDKROOT)/ResourceRules.plist' 

2
如果您正在使用终端退出应用程序,则在执行代码签名时甚至可以省略resource-rules,因为没有必要外部指定要签名的资源以及不需要签名的资源。现在必须签署包内的所有资源。
要使用终端重新签署应用程序,可以按照以下步骤进行:
unzip MyApp.ipa

rm -rf Payload/MyApp.app/_CodeSignature/

cp ~/Desktop/MyAdHoc.mobileprovision Payload/MyApp.app/embedded.mobileprovision 

codesign -f -s "iPhone Distribution: Code signing Certificate for Enterprise or Ad-hoc app" Payload/MyApp.app

zip -qr MyApp_Resigned.ipa Payload/

1
我刚刚在Xcode 7 GM(来自Xcode 6.4)中打开了我的现有iOS应用程序,并看到了这个弃用警告。
有趣的是,回答和评论都说要更新“代码签名资源规则路径”,并且他们还提到了Mac应用程序。
在我的情况下,该项目已经默认设置了此键和值(我从未设置过)。警告是关于资源规则也被弃用了。
对我来说,删除“代码签名资源规则路径”的值就消除了警告。我还没有以这种方式提交新版本,所以我可能需要回来更新这个答案。
只是觉得有趣的是,我的答案与其他人看到的相反。

0

如果您在参数列表中注释掉两个--resource-rules参数,在iResign应用程序调用codesign任务的位置,那么您就不必更改应用程序项目的项目构建设置。

我不喜欢为每个想要处理的项目修改构建设置的想法,只是为了重新签名。

我重新构建了重新签名工具,并将其复制到我的应用程序目录中,以便我不必在Xcode中打开它。


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