在最新的电子邮件详细说明了 10.10 beta 5 和 10.9.5 的网守更改后,我立即使用 TN2206 推荐的方法验证了我的应用程序。令我惊讶的是,由于我没有使用资源规则并在 Mavericks 上构建它,所以它失败了:
$ spctl -a -t exec -v /Applications/MyApp.app/
/Applications/MyApp.app/: rejected
source=obsolete resource envelope
然后,我继续检查 Xcode 存档中提交的二进制文件,该文件立即被拒绝,但没有“过时的资源信封”警告。我想那是因为它是由提交证书签名的。
$ spctl -a -t exec -v Products/Applications/MyApp.app/
Products/Applications/MyApp.app/: rejected
后来,我自己检查了资源信封:
$ codesign -d -v /Applications/MyApp.app/
Executable=/Applications/MyApp.app/Contents/MacOS/MyApp
Identifier=my.app.id
Format=bundle with Mach-O thin (x86_64)
CodeDirectory v=20100 size=14108 flags=0x200(kill) hashes=697+5 location=embedded
Signature size=4169
Info.plist entries=34
TeamIdentifier=not set
Sealed Resources version=1 rules=5 files=82
Internal requirements count=1 size=220
然后提交的应用程序:
$ codesign -d -v Products/Applications/MyApp.app/
Executable=/Users/jorgepeixotovasquez/Library/Developer/Xcode/Archives/2014-07-09/myapp 09-07-14 00.34.xcarchive/Products/Applications/MyApp.app/Contents/MacOS/myApp
Identifier=my.app.id
Format=bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=14123 flags=0x0(none) hashes=697+5 location=embedded
Signature size=4393
Signed Time=09/07/2014 00:34:08
Info.plist entries=34
TeamIdentifier=F2XAAD6WWR
Sealed Resources version=2 rules=12 files=85
Internal requirements count=1 size=220
如您所见,Mac App Store 下载的应用程序只有版本 1 的资源信封,即使提交了版本 2 的资源包。可以肯定的是,我检查了我的/Application 文件夹,发现我从 Mac App Store 下载的每个应用程序都有一个版本 1 的信封,甚至是 Apple 的信封。
有谁知道这是否正常,即如果 Mac App Store 在重新签署应用程序时只添加版本一信封?
此外,这会引起问题吗?
苹果会解决这个问题吗?
修复后,我应该重新提交我的应用程序吗?
最佳答案
版本指示符(1 或 2)更多地与使用的 OS X 版本构建和签署代码有关。
资源信封版本 1 和 2
(Code signatures containing version 1 or version 2 resource envelopes are also known as version 1 signatures or version 2 signatures, respectively)
< OS X v10.9 (版本 1)
--resource-rules
) 来控制捆绑包中的哪些文件应由代码签名密封。 (10.9+ 已弃用)OS X v10.9+ (第 2 版)
要确定代码签名具有哪个版本的资源信封,请使用
codesign -dv
:$ codesign -dv My.app/
[...]
Sealed Resources version=2 rules=15 files=53
[...]
OS X 10.9.5 和 Yosemite 开发者预览版 5 中的更改
OS X 版本 10.9.5+ 更改
对于 OS X 10.9 或更高版本:
--resource-rules
标志或 ResourceRules.plist
. ( 您的应用将被拒绝 ) 为确保您当前和即将发布的版本与 Gatekeeper 一起正常工作,请在 OS X 版本 10.10(Seed 5 或更高版本)和 OS X 版本 10.9.5 上进行测试。
spctl will only accept Developer ID-signed apps and apps downloaded from the Mac App Store by default. It will reject apps signed with Mac App Store development or distribution certificates.
使用
spctl
在你的应用程序上是这样的:$ spctl -a -t exec -vv Foo.app
如果您的应用程序的签名将被接受,则输出如下:
Foo.app: accepted
source=Developer ID
➣ 来源也可能是 Mac App Store。
如果您的应用程序签名只有一个过时的版本 1 资源信封,您将看到:
Foo.app: rejected
source=obsolete resource envelope
注意:必须在运行 OS X Mavericks 时对代码进行签名才能获得版本 2 签名。实际的代码签名机制是操作系统的一部分,而不是代码签名工具。将 Codesign 工具从 Mavericks 复制到较旧的 OS X 版本是行不通的。
关于macos - Mac App Store 代码签名资源信封是否始终为版本 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25152451/