问题标签 [osx-gatekeeper]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - OS X 看门人/代码设计:签名无效
我面临一个棘手的问题,我希望有人以前遇到过类似的事情。
我创建了一个 OS X 应用程序(应用程序包,在 Yosemite 10.10.2 上进行测试),其中包含几个辅助子应用程序。这些子应用程序存储在它们自己的应用程序包中。
结构是:
等等等等。这一切都很好,完全没有问题。
当我沙箱/代码设计我的应用程序以准备开发/AdHoc/Mac App Store 部署时,问题开始出现。
我正在使用以下命令来签署我的应用程序包(+ 子组件)
再次,效果很好。签名的应用程序启动,工作正常。所有功能都正常工作,没有错误/崩溃/可见错误。类似于非沙盒/协同设计的应用程序。一切都在沙箱中运行。我可以使用该应用程序数小时,没问题。
但是,如果我随后关闭应用程序一段时间(例如,15-30 分钟,这是非常随机的),我会在我的一个子应用程序上收到以下签名无效错误(主包将它们作为子进程生成)。
如果我在几分钟后重新启动应用程序,一切仍然有效。十分之九的时候我需要重新编译应用程序才能让它再次工作。但是,偶尔,它会随机重新开始工作。
当我在不相关的 Yosemite 设备上部署此应用程序的 AdHoc 构建时,会发生同样的事情,但我得到以下 amfid 错误代码:0xfffefa2a
任何人都有任何想法可能导致这种情况?一定有什么我做错了!
macos - OSX Gatekeeper 停止我的应用程序
在我添加一个库和一个子项目(均由我创建)之前,我的应用程序运行良好。所有代码都使用相同的值签名。
如果我创建一个本地 DMG(使用构建脚本),那么它就会安装在我的系统上,也安装在其他系统上。但是从 Anthill pro 获取的构建未能通过 OSX Gatekeeper 并显示“未识别的开发人员”问题。
导致相同 DMG 行为不同的问题可能是什么?
macos - 在签名的应用程序中保存数据
我在单个 USB 上分发我的 OS X 应用程序,因此,所有内容都必须是自包含的。
该应用程序本身允许用户输入信息,然后将此信息保存到现有的文本文件(特别是 ObjectDB 数据库)中。这是我的问题。
我想将此文本文件保留在应用程序本身内(即在Content文件夹内),这样它就不会被普通用户删除。但是一旦应用程序被签名,文本文件似乎不能被任何新信息更改而不会被 Gatekeeper 标记。真的是这样吗?现在没有办法在应用程序中存储数据文件了吗?
我会很感激任何建议。谢谢。
xcode - 在 Xcode 之外对 Mac 应用进行数字签名失败
我用 Qt5 开发了一个 Mac 应用程序,所以在 Xcode 之外。我希望 GateKeeper 允许我的应用程序在客户的计算机上运行,而不是发出“无法打开,因为无法确认开发人员的身份”警告。
我已经成功地对应用程序进行了数字签名,但 GateKeeper 仍然带有此投诉。我有一个 Apple 开发者证书(我是团队代理),我的钥匙串说它是有效的。我还安装了两个 Apple 根证书。
我使用命令行实用程序codesign
对 app 文件夹中的所有二进制文件进行数字签名,此外我还对 app 文件夹本身进行了数字签名。在所有情况下,codesign 的响应都是信息丰富的,并且没有显示错误。使用 codesign,我可以检查所有二进制文件是否都已签名,正在运行
表明所有二进制文件都经过验证。此外,它还报告:
MyApp.app:在磁盘上有效
MyApp.app:满足其指定要求
跑步:
给
可执行文件=/Users/xxx/trunk/yyy/deploy/release/MyApp.app/Contents/MacOS/MyApp
Identifier=aaaa.MyApp
格式=与 Mach-O Thin (x86_64)
捆绑 CodeDirectory v=20200 size=12461 flags=0x0 (none) hashes=616+3 location=embedded
Hash type=sha1 size=20
CDHash=d1c12c783dac0e8d9a2b749fb896b11558cec8b6
Signature size=8532
Authority=Developer ID Application: XXXXX
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=29 jul. 2015 12;04:40
Info.plist 条目=8
TeamIdentifier=YYYYY
密封资源版本=2 规则=12 文件=10
内部要求计数=1 大小=180
这似乎没问题。
跑步
在所有二进制文件上给出的结果
MyApp.app:接受
来源=开发者 ID
来源=开发者 ID 应用程序:XXXX
这似乎也不错
在应用程序或应用程序文件夹内的二进制文件上运行 XCode 命令行工具检查签名:
结果给出
(c) 2014 Apple Inc. 保留所有权利。
是的
这在所有情况下都是期望的结果。
但是GateKeeper仍然不接受该应用程序并抱怨无法确认开发者的事实。
[作者于 2015 年 7 月 17 日星期五添加]
我想我找到了问题所在。我不知道它是一个功能还是一个 OSX 错误。stackoverflow问题 19551298帮助了我很多。
每当从 Internet 下载文件时,它都会获得与其关联的扩展文件属性 com.apple.quarantine。在 Finder 中双击这个下载的文件时,GateKeeper 有两种可能:
当文件未签名时,它会发出“Unidentified developer etc”消息
当文件经过数字签名时,它会发出“无法确认开发人员等”消息
在这两种情况下,MessageBox 都只有一个按钮,即确定按钮。单击此按钮时,除了 MessageBox 关闭之外,没有任何反应。
如果扩展属性被删除(xattr -d)应用程序运行,签名与否。
当应用程序通过在应用程序上的 Finder 中单击鼠标右键然后单击“打开”菜单操作来启动应用程序时,行为会有所不同。再次显示两个消息框之一,但现在有一个额外的按钮,允许用户无论如何打开应用程序。同样,签名和未签名之间的唯一区别是“未识别”或“未确认”消息。我不希望我的客户能够分辨出不同之处。因此,签署应用程序是徒劳的。
根据Apple 支持文档,我期望在双击下载的应用程序时 GateKeeper 的另一个更好的行为(可能文档已经过时,或者我误读了它):
如果应用程序已签名,GateKeeper 应该显示一个带有“从互联网等下载”的消息框和一个带有“仍然继续?”的按钮。
如果应用程序未使用单个确定按钮和文本“未识别的开发人员等”签署 MessageBox。
xcode - 重复的 XPC 服务中断了 Gatekeeper 的开发者 ID 应用程序
我正在使用开发人员 ID 签名在 Mac App Store 之外分发 Mac 应用程序。以前的事情一直在工作,但在我们的上一个版本中,显然发生了一些变化,这导致 Gatekeeper 在从我们的服务器下载后打开应用程序时拒绝该应用程序。
我们正在使用生产“开发人员 ID 应用程序”证书。据我所知,我们已经严格按照在Mac App Store 之外分发应用程序中的说明进行操作。
令人困惑的部分是,以下推荐用于测试网守一致性的命令都可以正常执行并表明没有任何问题。Xcode 管理器中的验证也毫无怨言地通过了。
自我们上次构建以来发生了变化的一件事是我们的代码片段被重构到一个新的框架中。
更新:
通过对提交历史的二进制搜索和健康的试错,我将问题隔离到一个提交中,其中一个新的“复制文件”阶段被添加到我们的主应用程序中,以将 XPC 服务移动到正确的位置。XPC 服务已被复制到登录项帮助应用程序中。删除主应用程序中的构建阶段可以解决问题,但不幸的是,主应用程序确实需要 XPC 服务才能正常运行,因此简单地删除此阶段不是一个可行的解决方案。
macos - codesign 显示 .app 包没问题,但看门人抱怨
我很难让一个.app
捆绑包与看门人一起玩得很好。使用 `codedesign 运行验证看起来很有效:
但是当我尝试使用 Finder 打开它时,Gatekeeper 验证失败,(注意:这发生在 OSX 10.11 上,但在 OSX 10.11 上一切正常,请参阅下面的编辑)说明“无法确认开发人员的身份”。点击“?” 网守弹出窗口中的按钮将我带到标题为“应用程序已被修改或损坏”的帮助页面,但我认为codesign
在要求它验证应用程序时应该告诉我这一点。Juno.app 是公开可用的,所以如果你愿意的话,你们可以看看它,但是我们有一个较小的应用程序在同一台计算机上使用相同的证书签名,它工作得很好,并且给出了非常相似的输出:
第二个捆绑包Julia-0.4.2.app
也可供下载。有什么方法可以让我找出这个Juno.app
案子出了什么问题,以便我可以改变我的签名做法?
编辑:
为了解决下面 l'L'l 的问题,签名过程Juno.app
由这个脚本执行,关键行是第 28 行:
.app 包含可能已经签名的其他资源(例如 的内容Julia-0.4.2.app
,因为Juno是包含 IDE 内置的Julia发行版),这就是我们将-f
标志添加到codesign
.
编辑 2:l'L'l 建议使用spctl
来深入研究问题,结果如下:
这让我想到,也许其中一个Juno.app
或其中一个嵌入式框架可能仍然有一个旧的版本 1 密封资源信封,但是单独检查每个嵌套资源表明所有东西都有一个版本 2 信封。
更有趣的是,看起来这个 .app 可以在 OSX 10.10 上运行,但不能在 OSX 10.11 上运行。
cocoa - 控制台记录“... kernel[0]: AppName[a number] Unable toquarant: 1”是什么意思?
最近,我一直在尝试对我的一个 Cocoa 应用程序进行沙箱处理。
其他事情都很好,除了我不断获取我的应用程序控制台中标题中的信息。
该记录似乎出现在我的文件读/写操作的那一刻。但这些操作都成功了。
这个记录是什么意思?我可以忽略它吗?
macos - 如何使用 productsign 在 OSX 上签署 APP 安装程序?
我从 Apple 获得了安装程序证书,我的安装程序是自定义 APP(没有 pkg 或其他东西)。现在如果我跑
它只是这样说:
我认为它是错误的或什么的,但也许它只是不喜欢 APP 文件。有任何想法吗?
macos - 在远程服务器上上传后,Mac 应用程序签名失败
嗨,我正在开发一个使用 Qt 的应用程序。
我们在 Qt 5.4 上使用了几个月,我们决定继续使用最新版本(5.6)。在此之前,我们对 Mac 应用程序签名没有任何问题,我们运行macdeployqt
二进制文件来部署应用程序,然后运行脚本对整个包进行签名并将其添加到 .dmg 中。
由于我们迁移到 Qt 5.6,签名过程不会引发任何错误,当我使用 USB 密钥在其他计算机上尝试该软件包时,签名正常,应用程序可以毫无问题地启动。
但是,当我在 Internet(Dropbox、Slack 或个人远程服务器)上上传应用程序时,签名被破坏并显示此消息。
当我在上传/下载之前和之后运行时,它具有相同的输出codesign --deep --verify --verbose=4 -d
!spctl --verbose=4 --assess --type execute
这是我用来签署包的脚本:
任何人都知道什么会导致这个问题,或者任何人都面临同样的问题?提前致谢。
xcode - 无法使用 Developer ID 证书正确签署 OS X 应用程序
我已经阅读了几乎所有关于签署 Mac 应用程序以便在 Mac App Store 之外分发的所有内容。基本上 - 我有一个有效的“开发者 ID 应用程序...”证书(创建一个新的以防万一),我确保所有其他 Apple 证书都在那里并且有效。
O 在 XCode 中进行设置,以便我的 Developer ID Application... 证书用于在 relase 模式下进行代码签名,然后归档应用程序。归档后 - 我什至会“验证”并选择合适的团队。它通过它的事情,并说它验证了一切没有问题。然后我使用同一个团队导出应用程序,一切看起来都很好,但是......我无法运行应用程序 - 说崩溃日志中的代码签名无效,如果我执行 codesign -dv myapp.app 它会以 myapp 的形式返回。应用程序:没有签名和 TeamIdentifier=not set 等。
我开始拔头发了!
关于做什么的任何建议?这应该有效吗?
谢谢!