【问题标题】:How to codesign an existing Mac OS X .app file for gatekeeper?如何为网守协同设计现有的 Mac OS X .app 文件?
【发布时间】:2012-10-23 15:41:24
【问题描述】:

我花了 99 美元获得了 Apple 的开发者许可证。安装 Xcode 4.3。前往 Organizer 和“Provisioning Profiles”并刷新以下载我的代码签名证书。检查了我的 Keychain Access 并确认我拥有“3rd Party Mac Developer ”、“Developer ID”和“Mac Developer *”证书。

此时,来自苹果的文档提到了提取您的项目文件。我正在使用 Wineskin 来打包我的 Windows 应用程序,所以我没有 Xcode 项目。我有一个 .app 文件生成了我的 Wineskin。我想对 Wineskin 为我生成的 .app 文件进行代码设计。

我试过了: codesign -s "证书名称" /path/to/my.app

我从我的钥匙串访问中尝试了所有可能包含我的名字和“应用程序”一词的证书名称。

每次我收到错误“/path/to/my.app: object file format unrecognized, invalid, or unsuitable”

知道如何克服这个错误吗?我什至在尝试正确的命令吗?还是我应该走不同的路?

【问题讨论】:

  • 这个问题是关于 iOS 的,但可能是相关的:stackoverflow.com/questions/4842717/…
  • 从那个帖子我看到有人提到尝试:export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/usr/bin/codesign_allocate"
  • 我试过了,它让我克服了错误。我使用了名为“Mac Developer: (xxxx)”的证书。现在我需要将它上传到互联网并下载它以测试 Gatekeeper 是否抱怨。感谢您的链接。
  • 我想你会发现它还行不通。您必须将一堆更神秘的参数传递给codesign。人们通常做的是在 Xcode 4 中制作一个玩具应用程序,在其日志中找到 codesign 命令,然后复制出神奇的好处(根据需要修改 bundle ID)。
  • 使用以“开发者ID申请:”开头的证书

标签: xcode macos codesign


【解决方案1】:

为了总结我的问题的 cmets,以下是我为 Gatekeeper 签署我的 .app 文件时运行的命令:

export CODESIGN_ALLOCATE="/Applications/Xcode.app/Contents/Developer/usr/bin/codesign_allocate"
codesign --force --sign "Developer ID Application: <my name>" /path/to/my.app

谢谢,戈登戴维森和 JWWalker!

(编辑)如果失败,我意识到需要从 XCode 中安装“命令行工具”。

编辑: 验证

$ codesign -dv --verbose=4 my.app

在 Apple ID 帐户中确保您拥有几种类型的证书?

【讨论】:

  • 我不知道你为什么感谢我,因为你没有按照我说的去做,而且我不相信这么简单的事情会奏效。
  • JWWalker,您的链接为我提供了有关所需命令“export CODESIGN_ALLOCATE ...”的信息。那谢谢啦! Gordon 帮助我选择了正确的证书“Developer ID App...”。我上面提到的脚本与我用来签署我的应用程序的脚本相同(当然,在输入我的实际证书名称和我的实际应用程序名称之后)。现在我不再收到看门人警告。
  • 这很奇怪,因为 Xcode 邮件列表中关于该问题的每个讨论都说您需要 --requirements 参数才能让 GateKeeper 满意。
  • 查看这篇博文。这是我从hardcoded.net/devlogs/20120407 获得“--force --sign”的地方
  • 也许我想到的问题是使签名与 OS 10.6 及更早版本兼容。请参阅此博文:red-sweater.com/blog/2390/developer-id-gotcha
【解决方案2】:

确保您的钥匙串中有有效的开发者证书和私钥。 如果您对它有一些问题,应该通过 developer.apple.com 撤销证书并从头开始生成(XCode > Accounts > Manage Certificates)。

那么你可以使用codesign:

codesign --force --deep --sign "Apple Development: FirstName LastName (XXXXXXXXXX)" /Applications/ApplicationName.app

【讨论】:

    【解决方案3】:

    使用协同设计命令之前

    1. https://developer.apple.com/downloads/index.action 部分安装 Xcode 命令行工具。 (您应该有一个开发者帐户才能下载其他工具。)

    2. 请检查 Payload 文件夹中的任何隐藏文件,如 (.DStore),如果有,请将其删除

      • 使用 cd 命令通过终端导航到 Payload 文件夹
      • 在终端上输入 ls- 命令
      • 如果还有隐藏文件,用 rm -f .DStore 删除

    这个解决方案对我有用,所以请试一试....

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 2011-03-19
      • 1970-01-01
      • 2018-05-21
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 2014-12-06
      相关资源
      最近更新 更多