OS X App Codeign问题

时间:2017-03-05 17:09:21

标签: macos codesign

我有一个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文件的网址:http://www.slimjet.com/test/slimjet1.dmg

非常感谢您的帮助!

这是一个更新。当我将应用程序解压缩到/ Applications文件夹并从那里运行时,仅显示损坏警告。如果我将其放入任何其他文件夹并运行,或直接从已安装的dmg存档运行它,它就可以正常运行。

2 个答案:

答案 0 :(得分:0)

你忘了也编码:

FlashPeak Slimjet.app/Contents/Versions/13.0.6.0/FlashPeak Slimjet Helper.app
FlashPeak Slimjet.app/Contents/Versions/13.0.6.0/FlashPeak Slimjet Framework.framework/Resources/app_mode_loader.app

由于他们没有经过编码,这可能是个问题;可能还有其他人,但先检查一下。

答案 1 :(得分:0)

事实证明,网守会保留有关先前失败的缓存信息。即使您稍后通过应用所有正确的签名来解决问题,spctl命令仍会报告相同的错误,而不会再次实际检查它。 codesign命令不使用缓存,但spctl使用缓存。我不得不通过以下命令重置系统策略数据库:

  

sudo cp /var/db/.SystemPolicy-default / var / db / SystemPolicy

之后,我重新启动操作系统。然后我的应用程序运行正常。虽然spctl有一个" - ignore-cache"切换,在这种情况下它没有任何效果。