【问题标题】:Which certificate should I use to sign my Mac OS X application?我应该使用哪个证书来签署我的 Mac OS X 应用程序?
【发布时间】:2015-05-16 08:41:04
【问题描述】:

我们正在开发一个 Mac OS X 应用程序,我们将在 Mac App Store 之外分发该应用程序。我们最终在 Mac 开发者计划中获得了这些证书:

当我选择一个来签署申请时,我发现:

我应该使用Developer ID: * 进行调试是否正确?这是否允许没有我公司证书的开发人员签署应用程序以便能够在本地运行它?

我应该使用什么证书来发布?

【问题讨论】:

    标签: xcode macos certificate release


    【解决方案1】:

    对于开发(例如,Debug configuratino)使用Mac Developer 选项,它将选择您本地的 Mac 开发人员证书(在您的情况下为“Mac 开发人员:José Fernández”),该证书适用于在您的项目(包括测试/调试)。

    对于发布,请使用“开发人员 ID:*”,这将选择 the standard application release certificate used outside the AppStore,在您的情况下为“开发人员 ID 应用程序:轮播应用程序。我建议在代码设计后进行最终测试/调试,以确保其按预期工作。

    Xcode 获取证书的方式是通过简单的子字符串匹配。

    Apple Codesigning Certificate Types

    名称类型,描述)

    iOS 开发

    • iPhone 开发人员:团队成员名称用于在设备上运行 iOS 应用程序 并在开发过程中使用某些应用服务。

    iOS 分发

    • iPhone 分布: 团队名称 用于分发您的 iOS 应用程序 指定设备进行测试或提交到 App Store。

    Mac 开发

    • Mac 开发人员:团队成员名称 用于启用某些应用服务 在开发和测试期间。

    Mac 应用分发

    • 第 3 方 Mac 开发者应用程序:团队名称用于签署 Mac 应用程序 在将其提交到 Mac App Store 之前。

    Mac 安装程序分发

    • 3rd Party Mac Developer Installer:团队名称用于签名和提交 一个 Mac 安装程序包,包含您签名的应用程序,到 Mac 应用程序 商店。

    开发者 ID 应用程序

    • Developer ID Application:Team Name 之前用于签署 Mac 应用程序 在 Mac App Store 之外分发。

    开发者 ID 安装程序

    • Developer ID Installer:团队名称用于签署和分发 Mac 安装程序包,包含您已签名的应用程序,位于 Mac 应用程序之外 商店

    代码设计完成后,您还可以在 Terminal.app 启用 Gatekeeper 时模拟应用的启动行为:

    spctl -a -v Carousel.app
    
    ./Carousel.app: accepted
    source=Developer ID
    

    Developer ID Application 证书允许您的应用运行 Gatekeeper 设置 “允许从 Mac App Store 下载应用程序 和确定的开发者”

    【讨论】:

    • 当你说它是正确的,你的意思是发布还是调试?您说的是 Mac Apple Store,但我们不会通过 Mac Apple Store 分发我们的应用程序。它会改变你的答案吗?
    • 如果您不担心用户在尝试打开您的应用程序时是否会收到警告,那么您可以选择在 AppStore 之外完全不进行代码签名——不过我不建议这样做。
    • 我认为 Developer ID: * 会用我自己的证书而不是我公司的证书来签名。苹果为什么要发布个人证书?
    • 或者更确切地说,我如何让它在没有我公司证书的开发者机器上编译?
    • 我觉得这很混乱,我说“可以使用 Developer ID *”,而您在 Developer ID * 和 Developer ID Application 时说“是的,可以使用 Developer ID Application”是该列表中的两个单独条目。此外,使用 Developer ID * 会阻止其他开发人员签署应用程序以供本地使用,因此,它似乎不是用于调试目的的正确方法。
    【解决方案2】:

    通过终端进行代码签名(如果不使用 Xcode):

    codesign -s "Developer ID" -v Carousel.app # 用"Developer ID Application"签名进行分发

    codesign -s "Mac Developer" -v CarouselDebug.app # 用 "Mac Developer:*" 签名进行测试

    spctl -a -v Carousel.app #验证,找“accepted”

    spctl -a -v CarouselDebug.app #验证,找“accepted”

    Codesign 通过在钥匙串中查找具有 -s 字符串作为子字符串的证书来找到正确的证书。如果只有一个以上的证书匹配,它会警告你,你可以给一个更长的字符串。

    参考:https://developer.apple.com/library/content/documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html#//apple_ref/doc/uid/TP40005929-CH4-SW4

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2011-02-10
      • 2011-12-08
      相关资源
      最近更新 更多