首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mac应用程序商店的代码符号资源信封总是第1版吗?

Mac应用程序商店的代码符号资源信封总是第1版吗?
EN

Stack Overflow用户
提问于 2014-08-06 04:50:01
回答 4查看 10.4K关注 0票数 13

在最近的一封电子邮件中详细介绍了10.10beta 5和10.9.5的看门人的变化之后,我立即用TN2206推荐的方法验证了我的应用程序。令我惊讶的是,由于我没有使用任何资源规则并建立在小牛的基础上,它失败了:

代码语言:javascript
运行
复制
$ spctl -a -t exec -v /Applications/MyApp.app/
/Applications/MyApp.app/: rejected
source=obsolete resource envelope

然后,我继续检查Xcode存档中提交的二进制文件,该文件立即被拒绝,但没有“过时的资源信封”警告。我想那是因为它是由提交证书签署的。

代码语言:javascript
运行
复制
$ spctl -a -t exec -v Products/Applications/MyApp.app/
Products/Applications/MyApp.app/: rejected

稍后,我检查了资源信封本身:

代码语言:javascript
运行
复制
$ 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

然后提交的应用程序:

代码语言:javascript
运行
复制
$ 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下载的应用程序只有一个版本1的资源信封,即使提交了版本2的资源信封。可以肯定的是,我检查了我的/Application文件夹,发现我从Mac下载的每个应用程序都有一个版本1的信封,甚至苹果的信封。

有没有人知道这是否正常,也就是说,如果Mac在重新签署应用程序时,只添加一个版本的信封?

此外,这会否引起问题呢?

苹果会解决这个问题吗?

修复之后,我应该重新提交我的应用程序吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-27 19:15:26

这确实是个错误。打开雷达它是作为副本关闭的,这是打开的。

票数 3
EN

Stack Overflow用户

发布于 2014-08-06 07:02:29

版本指示符(1或2)更多地与使用了什么版本的OS有关,生成和签名代码。

资源信封版本1及2

(包含版本1或版本2资源信封的代码签名也分别称为版本1签名或版本2签名)

< OS v10.9 (版本1)

  • 只在参考资料目录中记录文件,而忽略其余的文件。
  • 忽略符号链接。
  • 如果系统是< 10.9,它会忽略版本2的资源信封,而只使用版本1。
  • 使用文档化签名功能(--resource-rules)来控制包中的哪些文件应该由代码签名来密封。(对10.9+不推荐)

OS X v10.9+ (第2版)

  • 记录嵌套代码(框架、dylib、助手工具和应用程序、插件等)
  • 默认情况下,主要记录所有文件。
  • 记录符号链接。
  • 默认情况下,生成版本2和版本1的资源信封。
  • 如果10.9+系统看到版本1签名,它将执行版本1验证。
  • 始终将所有文件密封在一个包中;不再需要显式地指定该文件。
  • codesign 10.9+和更高版本如果存在版本2资源信封,则不会显示版本1资源信封,因为将只使用版本2资源信封。

若要确定代码签名具有哪个版本的资源信封,请使用codesign -dv

代码语言:javascript
运行
复制
$ codesign -dv My.app/
[...]
Sealed Resources version=2 rules=15 files=53
[...]

OSX10.9.5和约塞米蒂开发人员预览5中的更改

OS X版本10.9.5+更改

  • 在小牛之前用OS版本创建的版本1签名将不再被守门员所识别,并且被认为是过时的。
  • 如果您的应用程序要在更新的OS版本上运行,它们必须在OS版本10.9或更高版本上签名,从而具有版本2的签名。
  • 使用以前版本的OS签名的应用程序需要用10.9版或更高版本重新签名,才能创建版本2的签名。
  • 使用版本2签名的应用程序将在较早版本的OS上工作。
  • 如果你的应用程序在上,提交你的重新签名的应用程序作为更新。

OS版本10.9或更高版本的

  • 只包括应该包含签名代码的目录中的签名代码。
  • 只包括应该包含资源的目录中的资源。
  • 不使用-- --resource-rules标志或ResourceRules.plist。(您的应用程序将被拒绝)

为了确保当前和即将发布的版本与网关管理员一起正常工作,在OS版本10.10 (Seed 5或更高版本)和OS版本10.9.5上进行测试。

默认情况下,spctl只接受开发者ID签名的应用程序和从Mac下载的应用程序。它将拒绝与Mac开发或发行证书签署的应用程序。

在应用程序上使用spctl,如下所示:

代码语言:javascript
运行
复制
$ spctl -a -t exec -vv Foo.app

这是如果您的应用程序的签名将被接受的输出:

代码语言:javascript
运行
复制
Foo.app: accepted

source=Developer ID

➣的源代码也可能是。

如果您的应用程序的签名只有一个过时的版本1资源信封,您将看到以下内容:

代码语言:javascript
运行
复制
Foo.app: rejected

source=obsolete resource envelope

注意:在运行OS小精灵时,有必要对代码进行签名,以获得版本2的签名。实际的代码签名机制是操作系统的一部分,而不是codesign工具。将codesign工具从小牛复制到旧的OS版本是行不通的。

票数 15
EN

Stack Overflow用户

发布于 2014-08-08 20:20:29

我提交的申请也有信封v2,它被苹果的v1所取代。

我将"*.dylib“放在”参考资料“文件夹中,完全没有签名。

验证嵌套库是否已签名:

代码语言:javascript
运行
复制
codesign --display --verbose=4 library.dylib
library.dylib: code object is not signed at all 

然而,这还不够。

为了修复它,我添加了额外的后构建codesign和pkg创建脚本。遵循这个教程

还要确保您的第三方框架结构正确(不要省略符号链接)。查看苹果框架结构指南

编辑:没有工作。包仍然在版本1中返回。知道吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25152451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档