osx 抱怨该应用来自身份不明的开发者,尽管它通过了所有验证

osx complains that app is from unidentified developer, although it passes all validations

我有开发者证书(从苹果公司买的,每年 99 美元),用 xcode

签署了我的申请

这里也是spctl的输出

spctl  --assess -v /Volumes/<valume>/myapp.app
/Volumes/<valume>/myapp.app: accepted
source=Developer ID

我还通过 RB 应用程序检查器灯检查了我的应用程序 一切似乎都很好,应用程序检查器可以看到该应用程序已签名。 但是当我创建包含我的应用程序的 dmg 并将其上传到我们的服务器时, 下载的应用无法打开,因为 osx 抱怨该应用来自身份不明的开发者。我不知道是什么原因...

首先,您应该查看此技术说明:

TN2206

但是,我将在几行中总结一些您需要进行的检查以确保一切正常:

a) 确保您使用的是 最新 Xcode 版本 — 有时只需升级即可解决所有问题

b) 确保 Xcode 设置为 自动管理您的证书和配置文件 — 如果您在以下方面遇到问题,这可能是我能给您的最佳建议代码签名。总之,如果你有 Xcode 8,你必须:

  1. 单击导航区域(左侧)中的 项目 > 构建设置 选项卡。
  2. 将所有构建的配置文件构建设置设置为自动 配置。
  3. 设置代码签名身份构建设置:
    • 为 iOS 项目中的所有构建配置设置为 iOS 开发人员
    • 根据需要为 macOS 项目中的所有构建配置设置 Mac 开发人员 开发人员 ID
  4. 在“目标”>“常规”>“团队”中将目标设置为 None
  5. 对于 Mac 个应用程序,在“目标”>“常规”>“签名”中将目标设置为 None。
  6. 将所有构建配置的配置文件构建设置更改为自动
  7. 设置代码签名身份构建设置:
    • 为 iOS 目标中的所有构建配置设置为 iOS 开发人员
    • 设置为 Mac 开发人员 开发人员 ID,适用于 macOS 目标中的所有构建配置。
  8. 返回 Targets 并将“常规”>“团队”> 还原为您的团队,然后
  9. 选中自动管理签名复选框
  10. 重新启动Xcode。

这在 QA1814 中有部分解释,但其中缺少一些重要步骤并且其中的一些信息已过时。所以我建议你按照我上面说的去做。

c) 如果您运行正在使用 El Capitan (10.11) 或更高版本,请通过 运行在终端中执行以下命令来检查您的代码:

$ spctl -a -v path/to/your.app

它应该产生如下内容:

path/to/your.app: accepted
source=Developer ID

您应该检查的另一个命令是:

$ spctl -a -v --raw path/to/your.app

或者这个:

$ codesign --verbose=4 --deep --strict path/to/your.app

这些将检查是否有任何框架或任何嵌入式代码正在做一些不应该做的事情,例如指向允许目录之外的代码,例如:

/System
/Library
/usr

因为这会带来安全风险。

但是,不要使用后一个命令对您的应用进行真正的代码签名。这只是为了模仿 Gatekeeper 检查您的应用程序的方式。

要了解更多应该使用的命令,请阅读 Code Signing Guide

d) 使用以下命令对您的 dmg 磁盘映像进行代码签名:

codesign -s <identity> <disk-image>

现在强烈建议您的软件在 macOS Sierra 上 运行 没有任何问题。