我有一个使用Sparkle框架的Qt 5.4应用程序 . 从我们的服务器下载后,Mac OS X 10.11上的Gatekeeper将显示“unidentified developer”错误 . 经过一些研究(codesign --strict在sparkle中显示缺少文件),我在Sparkle框架中删除了破坏的符号链接 . 然后我重建了应用程序,检查了codeign和spctl

codesign --verbose --deep --strict myapp.app

结果是:myapp.app:满足其指定要求

spctl --assess --type exec --verbose myapp.app显示:已接受

接下来我构建了dmg图像,从图像安装,应用程序运行没有问题 . 然后我将dmg上传到服务器,并从我们的服务器下载 . MD5校验和匹配 .

但是,在我将应用程序拖放到/ Applications文件夹后,运行它,操作系统显示应用程序已损坏,必须移动到垃圾箱 . 相同的codesign命令仍然返回“满足其指定要求”,但相同的spctl命令显示:

代码没有资源,但签名表明它们必须存在

只需从我们的服务器下载应用程序,spctl输出就会改变 . 我不认为它与资源有任何关系(应用程序确实有资源),因为相同的构建脚本创建了一些没有此错误的版本 . 该脚本确实修改了qt框架结构,但适用于10.10 .

我构建了一个新的Mac OS 10.11,安装了xcode 7.0.1,Qt 5.5,重建了应用程序(没有脚本来修改App bundle中的Qt框架结构) . 完全相同的结果:应用程序在上传之前传递了codesign和spctl,并在下载后失败并出现相同的错误 .

实质上,在Sparkle框架中删除断开的链接后,应用程序包从“未识别的开发人员”变为“损坏的图像” .

谁能告诉我哪里出错了?