首页 文章

OS X App Codeign问题

提问于
浏览
0

我有一个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:密封资源丢失或无效

我不知道我在哪里做错了 . 以下是Web上已签名的dmg文件的URL:http://www.slimjet.com/test/slimjet1.dmg .

非常感谢您的帮助!

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

2 回答

  • 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
    

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

  • 0

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

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

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

相关问题