我的macOS应用程序已经过编码并在某些计算机上运行但在另一台计算机上无法运行,因为Gatekeeper弹出"{App}无法打开,因为无法确认开发人员的身份."
我想发布一个错误的.dmg之前检测build机器上的这个问题,所以我看着苹果的文档上检查关守一致性和检查守则签名,其中讨论codesign
,spctl
和check-signature
.令人困惑的是,所有这些工具都报告.app由我的开发者帐户签名.
$ codesign -v --strict --deep --verbose=2 App.app
App.app: valid on disk
App.app: satisfies its Designated Requirement
$ codesign -d --deep --verbose=2 -r- App.app
Executable=/Applications/App.app/Contents/MacOS/App
Identifier=com.example.app
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=196 flags=0x0(none) hashes=3+3 location=embedded
Signature size=8539
Authority=Developer ID Application: Company, Inc. (XXXXXXXXXX)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Sep 22, 2016, 7:32:19 PM
Info.plist entries=21
TeamIdentifier=XXXXXXXXXX
Sealed Resources version=2 rules=12 files=10708
Nested=Frameworks/Squirrel.framework
Nested=Frameworks/App Helper …
Run Code Online (Sandbox Code Playgroud) 我有一个关于自制程序的愚蠢问题:为什么我通过自制程序安装的可执行文件受到 MacOS(看门人)的信任?即安装后我可以运行可执行文件并且不会弹出安全窗口并且不必允许异常 - 这是为什么?
我最初认为自制程序可能会在其 CI 中对二进制文件进行签名/公证,但查看一些随机可执行文件,看起来它们没有签名:spctl -a -v $(which <some-executable-installed-with-homebrew>)
。
编辑:意思是从瓶子安装的可执行文件(预编译的二进制文件,而不是在我的本地计算机上编译的源包)
我的理解是Mountain Lion将在配置中发布,默认情况下禁止通过Gatekeeper安装未签名的应用程序.
我目前正在分发一个开源应用程序; 这是一个爱好项目,我不收取任何费用.我是否能够在不购买Mac开发者会员资格的情况下签署此应用程序的代码,或Apple是否要求所有开发人员每年支付99美元才能发布安装在Mountain Lion默认配置上的应用程序?
我正在尝试将Java应用程序分发给OS X用户.我没有使用Mac商店 - 它将通过我自己的网站分发.无论我尝试什么,OS X的Gatekeeper拒绝该应用程序.
这是我的方法:
(1)像往常一样构建应用程序,获取一个JAR文件
(2)appbundler
按照此处的描述使用:https://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html.这会在我的JAR周围创建一个运行良好的.app,并在MyApp.app/Contents/PlugIns
目录中包含JVM .
(3)使用我的开发者证书签署应用程序:
codesign -s 'Developer ID Application: MyCompany Ltd' --deep MyApp.app
...过程成功完成
(4)确认.app将遵守关守的铁拳法则:
spctl --assess --verbose=4 --type execute MyApp.app
......我得到的结果是:
MyApp.app: a sealed resource is missing or invalid
Run Code Online (Sandbox Code Playgroud)
对我来说似乎不是很啰嗦!我能做错什么?或者我怎样才能获得更多信息?
SO /谷歌搜索"密封的资源......"是指签名框架(我没有)或建议使用--force
选项签名(我尝试但不起作用).
My project needs the Ghostscript to do lots of tasks, so I have added the gs CLI tool into my project resource. However when I tried to notarize the project application, Xcode shows me this:
I assume that might because the ghostscript portable CLI is a 3rd-party program from the internet and which doesn't have a codesign, also it has not been enabled the hardened runtime. On the latest MacOS Mojave I have to notarize applications to avoid the gatekeeper …
我刚刚开始签署我的 OSX 桌面应用程序,以便可以轻松地将其安装在 OSX 10.8 上。我遇到一个非常奇怪的问题,即签名工作正常,如果通过 DropBox 或 FTP 将 dmg 传输到 Mac,我可以安装,但如果将 dmg 上传到服务器,然后使用浏览器下载到 Mac,则签名失败(用户会看到与文件未签名相同的错误)。
背景:该应用程序是 Java,在 Install4J 中使用 Apple 的 .p12 进行签名。有趣的是,对于未签名或下载的 DMG,OSX 10.8 显示的错误非常奇怪,它表示安装程序已“损坏”,应该卸载。
有谁知道为什么用浏览器下载DMG时签名失败?
我的关守设置是"App Store和Identified Developers"
我有一个带有签名应用程序的DMG.
当我安装DMG并在本地运行它时,它可以工作.当我将相同的DMG上传到我们的服务器(通过http),下载(通过http),安装它,并尝试运行应用程序我得到一个弹出窗口,说我的应用程序"已损坏且无法打开.你应该移动它到垃圾箱.
我不知道是怎么回事.如何在本地正确运行相同的文件,但上传和下载时它是否已损坏?服务器很好,我们公司的其他各方上传和下载应用程序就好了.
我错过了什么吗?
Apple似乎将一些OS X API(例如沙盒)限制为由受信任证书进行编码的应用程序,例如发给付费Mac开发人员程序成员的应用程序.
OS X如何处理使用自签名(或开发)证书进行签名的应用程序?
我正在签署一个.dmg
包含.app
有效开发者ID配置文件的人.一切都签署,包括框架.当我运行时codesign -dvvv
,会显示正确的证书satisfies its Designated Requirement
.应用运行正常.
但是,当我上传和下载时.dmg
,签名"消失".当我跑步时codesign -dvvv
,它说code object is not signed at all
.并且GateKeeper自然拒绝运行该应用程序.
注意:这听起来很像这个问题,但我肯定会使用正确的开发者身份证书签名,并且.dmg
不会出现"损坏".
来自Apple最近的一篇文章:
随着OS X Mavericks 10.9.5的发布,OS X识别签名应用程序的方式将发生变化.使用OS X Mountain Lion 10.8.5或更早版本(v1签名)创建的签名将被废弃,Gatekeeper将不再识别它们.用户可能会收到Gatekeeper警告,并且需要免除您的应用继续使用它.为了确保您的应用程序在OS X的更新版本上运行时没有警告,它们必须在OS X Mavericks 10.9或更高版本(v2签名)上签名.
我怎么知道我的应用程序是否需要辞职?
osx-gatekeeper ×10
macos ×9
code-signing ×2
app-bundle ×1
codesign ×1
dmg ×1
download ×1
homebrew ×1
install4j ×1
java ×1
notarize ×1
objective-c ×1
xcode ×1