我的关守设置是“App Store和Identified Developers”
我有一个带有签名应用程序的DMG .
当我安装DMG并在本地运行它时,它可以工作 . 当我将相同的DMG上传到我们的服务器(通过http),下载(通过http),安装它,并尝试运行应用程序我得到一个弹出窗口,说我的应用程序“已损坏且无法打开 . 你应该移动它到垃圾箱 .
我不知道是怎么回事 . 如何在本地正确运行相同的文件,但上传和下载时它是否已损坏?服务器很好,我们公司的其他各方上传和下载应用程序就好了 .
我错过了什么吗?
4 回答
经过多次尝试后想出了问题 .
在我的情况下:Pop消息 - 损坏的应用程序是由于库缺失 . 我使用QT创建了.app文件 . 要生成dmg,我使用的是deploymacqt命令工具 . deploymacqt工具在.app中创建动态库,所以基本上如果我们在创建dmg之前进行协同编码,这个alter会操纵代码符号 . 所以正确的解决方法是 .
一旦完成这些操作,您将看不到弹出消息,说应用已损坏或损坏或未识别的开发人员 .
我很高兴你找到了你的问题 . 如果其他人发现此帖子搜索损坏的DMG,我想添加另一个可能的解决方案:
除了签署.app包之外:
codesign -f -s "Developer ID Application: Your Dev ID Here" -v "Your App.app"
你还应该签署创建的DMG:
codesign -f -s "Developer ID Application: Your Dev ID Here" -v YourProgram.dmg
我没有在dmg文件路径周围加上引号,因为dmg名称中的空格不太可能 . 如果这样做,请不要忘记在命令行中转义它们,或者将文件路径包装在引号中 .
我发现了这个问题 .
我不知道,我们的安装程序在安装时将文件写入应用程序包 .
这打破了签名并导致Mac吓坏了并声明应用程序已损坏 .
花了一段时间才发现这一点 .
我的问题与@JasonGenX's post中描述的问题有着相似但不同的原因 .
我的应用程序有一些文件在我运行时被修改,这导致应用程序的签名验证失败 .
为了解决这个问题,我删除了这些文件并阻止它们被创建或修改,因此.app包本身永远不会改变 .
具体来说,我的应用程序包中有Python代码 . 当应用程序运行Python时,它编译导入到
.pyc
文件 . 这些与应用程序包的其余部分一起签名 .当我在创建DMG之前运行.app时,Python更新并修改了这些
.pyc
文件,因此它们不再通过签名验证 . 我使用以下方法验证了.app仍然在我自己的计算机上运行,因为我自己构建了它,所以它是值得信任的 . 但是当我上传和下载DMG时,它被标记为表明它来自不受信任的来源并需要签名验证 .
由于签名验证失败,MacOS报告应用程序包已损坏 .
解决方法是从捆绑的Python资源中删除
.pyc
文件,并将Python作为python -B
运行,指示它不要创建.pyc
文件 .我在没有
.pyc
文件的情况下重建了我的.app包,并且Python不再创建它们,因此.app包保持不变 .