我的关守设置是“App Store和Identified Developers”
我有一个带有签名应用的DMG。
当我挂载DMG并在本地运行时,它可以工作。 当我将相同的DMG上传到我们的服务器(通过http),下载(通过http),安装它,并尝试运行应用程序我得到一个弹出窗口,说我的应用程序“已损坏且无法打开。你应该移动它到了垃圾桶。
我不知道发生了什么。如何在本地正确运行相同的文件,但上传和下载时它是否已损坏?服务器很好,我们公司的其他各方上传和下载应用程序就好了。
我错过了什么吗?
答案 0 :(得分:2)
我很高兴你找到了你的问题。如果其他人发现此帖子搜索损坏的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名称中的空格不太可能。如果您这样做,请不要忘记在命令行中转义它们,或者将文件路径用引号括起来。
答案 1 :(得分:1)
我发现了这个问题。
我不知道,我们的安装程序会在安装时将文件写入应用程序包。
这会破坏签名并导致Mac出现异常并声明应用程序已损坏。
花了一段时间才发现。
答案 2 :(得分:1)
经过多次尝试后想出问题。
在我的情况下: 流行消息 - 损坏的应用程序是由于库丢失。 我使用QT创建了.app文件。 要生成dmg,我使用的是deploymacqt命令工具。 deploymacqt工具在.app中创建动态库,所以基本上如果我们在创建dmg之前进行协同编码,这个alter会操纵代码符号。 所以正确的解决方法是。
# Create dmg using
deploymacqt <yourapp.app> -dmg
# Open resulted dmg file, copy <yourapp.app> to different folder(let's say /Documents/<yourapp.app>)
# Codesign the /Documents/<yourapp.app> using
codesign --deep --force --verify --verbose --sign "Developer ID Application: <developerid>" <yourapp.app>
# Verify using
codesign --verify --verbose=4 <yourapp.app>
* you should see something like this
<yourapp.app>: valid on disk
<yourapp.app>: satisfies its Designated Requirement
# Now create again the dmg file using [dropdmg](https://c-command.com/dropdmg/) application, download, install dropdmg. set the cofiguration preferences with your developer id certificate in signing option.
# drag and drop <yourapp.app> to dropdmg app, wait for creation of dmg to complete. voila you have now successfully created dmg with proper developer id certification.
# verify resulted dmg again using
codesign --verify --verbose=4 <yourapp.dmg>
# you can also verify with gatekeeper
spctl -a -t exec -vv <yourapp.dmg>
答案 3 :(得分:0)
我的问题与@JasonGenX's post中描述的问题有相似但不同的原因。
我的应用程序运行时有些文件被修改,导致该应用程序的签名无法通过验证。
要修复此问题,我删除了这些文件,并阻止了它们的创建或修改,以使.app捆绑包永远都不能自行更改。
具体地说,我的应用程序包中包含Python代码。当应用程序运行Python时,它将导入文件编译为.pyc
个文件。这些已与其他应用程序包一起签名。
当我在创建DMG之前运行.app时,Python更新并修改了这些.pyc
文件,因此它们不再通过签名验证。我使用以下方法验证了这一点:
$ codesign --verify --verbose=4 my.app
[...]
my.app: a sealed resource is missing or invalid
file modified: /private/tmp/my.app/Contents/Resources/python-dist/chardet/codingstatemachine.pyc
file modified: /private/tmp/my.app/Contents/Resources/python-dist/chardet/euckrprober.pyc
[...etc...]
.app仍在我自己的计算机上运行,因为我是自己构建的,因此值得信任。但是当我上传并下载DMG时,它被加了标签,表明它来自不可靠的来源并需要签名验证。
由于签名验证失败,MacOS报告该应用程序捆绑已损坏。
解决方法是从捆绑的Python资源中删除.pyc
个文件,并以python -B
身份运行Python,指示它不要创建.pyc
个文件。
我重建了没有.pyc
文件的.app捆绑包,而Python不再创建它们,因此.app捆绑包保持不变。
答案 4 :(得分:0)
打开终端并运行:
sudo xattr -rd com.apple.quarantine /Applications/xxx.app
和“ /Applications/xxx.app”必须是您的应用程序的路径。例如,我要运行PDF Expert,其路径为“ / Applications / PDF \ Expert.app”。然后我应该在我的终端上按Enter键。
sudo xattr -rd com.apple.quarantine /Applications/PDF\ Expert.app"
答案 5 :(得分:0)