【发布时间】:2017-07-25 11:32:34
【问题描述】:
我有一个 OS X 应用程序,它使用 XCode 之外的自定义构建流程。因此,我必须在命令行模式下使用 codesign 工具对应用程序中的所有内容进行签名。我使用的命令行是:
codesign -f -s "开发者 ID 应用程序:MyCompany Inc" -i com.mycompany.myapp -v $Path_To_App
我首先通过将每个二进制文件、框架和插件的路径传递为 $Path_To_App 来签署应用程序中的每个二进制文件、框架和插件。然后我通过传递应用程序文件夹 MyApp.app 的路径对整个应用程序进行了签名。
之后,我使用以下命令构建了一个 dmg 文件:
hdiutil create -format UDBZ -srcfolder path_to_app_folder myapp.dmg
如果我在本地安装这个 dmg 文件,一切都很好。我相信 OS X 在这种情况下甚至不会检查证书。但是在我将 dmg 文件上传到 Web 服务器后,使用浏览器下载它并将应用程序解压缩到 Applications 文件夹后,操作系统会拒绝该应用程序已损坏。消息是:
“MyApp”已损坏,无法打开。你应该把它移到回收站。
如果我像这样检查签名,那很好:
codesign --verify --verbose /Applications/MyApp.app
/Applications/MyApp.app:在磁盘上有效 /Applications/MyApp.app:满足其指定要求
但是,如果我用 spctl 检查它,它确实会抱怨:
spctl -a -v /Applications/MyApp.app /Applications/MyApp.app:密封资源丢失或无效
我不确定我在哪里做错了。这是网络上已签名的 dmg 文件的 url:http://www.slimjet.com/test/slimjet1.dmg。
非常感谢您的帮助!
这是一个更新。只有当我将应用程序解压缩到 /Applications 文件夹并从那里运行它时,才会显示损坏警告。如果我将它放入任何其他文件夹并运行,或者直接从安装的 dmg 存档中运行它,它就可以正常运行。
【问题讨论】: