问题标签 [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.

0 投票
1 回答
1959 浏览

xcode - 为 GateKeeper (Sierra) 验证 OSX 应用程序签名时出现问题 [“代码有效但似乎不是应用程序”]

我正在构建我的应用程序并通过以下方式使用有效的代码签名证书(开发人员 ID 应用程序...)进行签名:

我的 .app/Contents/MacOS 文件夹有一个本地编译的二进制文件,我在可可应用程序中执行该二进制文件。我也在使用相同的 codesign 命令签署这个二进制文件。

当我尝试使用“spctl”验证不同组件的签名时,我的主要可可应用程序得到了这个:

当我在辅助二进制文件上运行相同时,我得到:

我今天无法通过谷歌在字符串“代码有效但似乎不是应用程序”上找到任何内容。

我不确定从该陈述中推断出什么或如何进行。有什么帮助吗?

0 投票
1 回答
6991 浏览

macos - 验证通过 codesign、spctl 和 check-signature 但无法运行的 macOS 应用程序“因为无法确认开发者的身份”

我的 macOS 应用程序经过代码签名并在某些计算机上运行,​​但在另一台计算机上运行失败,因为 Gatekeeper 弹出“{App} 无法打开,因为无法确认开发者的身份。”

我想在发布错误的 .dmg 之前在构建机器上检测到这个问题,所以我查看了 Apple 的关于Checking Gatekeeper Conformance and Examining a Code Signature的文档,其中讨论了codesignspctlcheck-signature. 令人困惑的是,所有这些工具都报告说 .app 是由我的开发者帐户签名的。

Certificates, Identifiers & Profiles 网站在我的帐户下显示未过期的“Developer ID Application”和“Developer ID Installer”证书。我从未撤销过任何 Mac 签名证书。我还检查CFBundlePackageType了应用程序的 Info.plist 是否设置为APPL.

这里发生了什么?


更新:将 Mac 从 El Capitan 升级到 Sierra 解决了这个问题。如果有用户遇到它,我仍然有兴趣了解问题可能是什么。

0 投票
1 回答
3987 浏览

swift - Xcode 成功构建但无法运行 macOS 应用程序

我编写了一个使用 CloudKit 的 mac 应用程序,自从我升级到 Sierra 和 XCode 8 后,该应用程序将成功构建,但是当我单击“运行”时 Xcode 不会启动该应用程序。

如果我进入 Derived Data 文件夹并手动双击我的应用程序以启动它,它会立即崩溃并在错误报告中显示以下内容:

有趣的是,如果我将应用程序存档并导出开发者 ID 签名的应用程序,导出的构建会成功签名并且可以完美运行。

此外,如果我进入功能选项卡并关闭 iCloud 功能,该应用程序将在 XCode 中成功运行。

每当我在 DerivedData 文件夹中的应用程序上运行 spctl 时,无论我是否启用或禁用了 iCloud,我总是得到这个:

在 XCode 的“常规”选项卡中,我将其设置为“自动管理签名”,据我所知,我的所有证书都是有效的。

不太确定在这里做什么。我什至尝试过完全禁用 Gatekeeper,但仍然没有运气。

0 投票
0 回答
207 浏览

c - OS X 上的内存补丁?

我正在尝试一些逆向工程,但我对如何进行内存修补感到有些困惑。我的目标二进制文件是一个简单的已签名的 Hello World 应用程序。因此,虽然我可以轻松地修补二进制文件,但看门人却崩溃了(应该如此)。

该字符串在内存中,所以我想我只是使用posix_spawn()with POSIX_SPAWN_START_SUSPENDED,用 xnumem 修补进程的内存,然后恢复它。出于某种原因,这似乎也失败了。我的测试代码;

我似乎没有收到任何错误,只是一个循环;

然后它终止。

有人可以指出我正确的方向吗?如何在挂起状态下启动进程、更改其内存并在不触发网守的情况下恢复?

0 投票
1 回答
159 浏览

xcode - OS X Sierra 10.12 上的代码签名应用程序无法在旧的 Mac 上运行,为什么?

我有来自 Apple 的“已识别开发者”证书。

我已经通过命令行使用 Sierra 签署了我的应用程序,因为我的应用程序不在 xcode 之外,签名在 Sierra 上验证为来自已识别的开发人员。

当安全设置为以下时,Sierra 上的测试允许安装:

'允许从以下位置下载分配:Mac App Store 和确定的开发者'。

在 OS X 10.8 Mountain Lion 上进行的测试给出了附加的错误“.app 已损坏”。Gatekeeper Screenshot当安全设置为:

'允许从以下位置下载分配:Mac App Store 和确定的开发者'。

将安全设置更改为

'允许从任何地方下载分配'。

允许该应用程序安装得很好,所以我确信该文件是有效的。

为什么应用程序仅在较新的 Mac 上验证。

我还尝试在 10.8 上签署应用程序。在这种情况下,10.8 接受来自已识别开发人员的应用程序,但 10.12 不接受,恰恰相反。

0 投票
1 回答
379 浏览

macos-sierra - 开发人员签名 DMG 的看门人路径随机化?

我们正在打包我们的应用程序以进行拖放安装 DMG,如下所示:

并且用户应该将应用程序名称文件夹d&d到/Applications/。一切都是代码签名的,包括 DMG。

从我读到的大多数信息来看,这应该足以防止发生应用程序易位,但出于某种原因,它不适合我们的某些 Sierra 用户?

他们的解决方案将在/Applications的d&d 文件夹旁边进行另一个拖放(移动)Application.app某处并返回/Applications/Application Name/或仅移动Application Name/Application.app覆盖/Applications/Application Name /应用程序.app

现在的问题是为什么只有一些用户有这个问题,代码签名 dmg 不应该阻止应用程序易位的发生吗?

我确认他们选择了允许从 Mac App Store 下载的应用程序并确定了开发人员。

0 投票
0 回答
411 浏览

macos - 成功代码签名的应用程序未能通过 Gatekeeper

我正在尝试使用 codesign 命令行工具对我的应用程序进行签名:

结果似乎是成功的:

在我朋友的 Mac 上,系统向我们保证一切正常:

但是我在执行应用程序时仍然收到那个奇怪的消息框:

无法确认开发者身份,无法打开“MyApp.app”。您的安全首选项只允许安装来自 Mac App Store 和已识别开发者的应用程序。

我究竟做错了什么?如何摆脱那个奇怪的 Gatekeeper 消息框?

其他细节(在我朋友的 Mac 上):

0 投票
0 回答
1265 浏览

macos - 签署可可应用程序以进行分发

我正在尝试让 xcode 使用我的分发证书对我的应用程序进行签名,这样应用程序就可以同时使用 thespctlcodesignverify 命令行进行正确验证。这是一个将通过下载而不是通过 Mac OS Store 分发的应用程序。

我有一个 Apple Developer Program OSX 分发证书。我只是一个团队成员,不是我们 Apple Developer Program 团队的管理员,但我的管理员制作了证书并将其发送给我。

这是开发人员计划网站中的证书:

在此处输入图像描述

这是钥匙串访问中我的机器上安装的证书:

在此处输入图像描述

我使用 File > New > Project > Cocoa 在 xcode 中创建了一个可可应用程序。该项目名为 Fred,因此它构建 Fred.app。我没有修改项目的代码/资源,所以它只是显示了一个示例窗口和示例菜单栏。

这是我的应用程序身份/签名:

在此处输入图像描述

以下是签名设置:

在此处输入图像描述

这是“计划”:

在此处输入图像描述

如您所见,我在 Code Sign Identity 中选择了 Mac Distribution。当我这样做时,它给了我你可以在身份/签名屏幕截图中看到的错误:

Fred 的配置设置存在冲突。Fred 为开发自动签名,但手动指定了冲突的代码签名身份 3rd Party Mac Developer Application。在构建设置编辑器中将代码签名标识值设置为“Mac Developer”,或在项目编辑器中切换到手动签名。

如果我选择“Mac Developer”作为我的代码签名身份,则构建成功完成。但似乎我想选择 Mac Distribution,因为我正在签署分发协议,对吗?

无论如何,当我选择“Mac Developer”并构建应用程序时,我会使用以下命令行:

但:

我不知道如何解释为什么我会被“拒绝”,但我相信这意味着当应用程序被下载时,它不会被识别为具有有效的第 3 方开发人员签名(并且用户会必须绕过 Gategeeker 才能运行)。

我在这里做错了什么?

(请注意,我还在上面包含了我的构建“方案”的图像。我有一个基本问题是,我不清楚使用该方案是否是告诉 xcode 进行发布构建的唯一方法。我在想它不接受“Mac Distribution”作为我的代码签名身份的原因是因为我没有设置应用程序来正确构建分发。)

0 投票
1 回答
161 浏览

macos - 是否可以通过扩展禁用mac网守?

当我第一次尝试使用未通过商店签名的应用程序时,我希望得到 Mac 网守的警告。但是,我无法通过单击具有相关扩展名(例如 .ods、.odt)的文件来使用 LibreOffice Vanilla。似乎将每个文件视为不同的应用程序,我认为需要我单独授权。双击文件 '"myfile.odt" 无法打开,因为它来自身份不明的开发人员。

右键单击并使用 Open with ... LibreOffice Vanilla yields: '"myfile.odt" 来自身份不明的开发人员。您确定要打开它吗?

我发现https://support.apple.com/en-ca/HT202491上的“帮助”没有帮助。如何配置 OS X 以便让我通过双击打开 LibreOffice 文件但仍让 GateKeeper 检查其他未签名的新应用程序?

0 投票
0 回答
482 浏览

macos - 我应该设置什么 com.apple.quarantine 值来将文件标记为潜在恶意?

我正在制作一个桌面应用程序,它将打开文件(LHTML 格式)并且可以将文件(任何格式)保存到用户的计算机上。换句话说,用户可能:

  1. something.lhtml从他们收到的电子邮件中下载
  2. 打开something.lhtml
  3. 被此应用程序提示保存stuff.ppt(其中的内容由stuff.ppt决定something.lhtml
  4. 双击stuff.ppt

当用户打开stuff.ppt时,我希望他们在打开文件之前得到提示,就好像他们是stuff.ppt从电子邮件中下载的一样。something.lhtml所以...如果我将的当前 com.apple.quarantine扩展属性 复制到stuff.ppt,是否保证在stuff.ppt打开时强制提示?

如果要保存的文件不是.ppt其中之一,那么复制该com.apple.quarantine值是否仍然足够?

  • .exe
  • .pdf
  • .dmg
  • .app

这个问题还有意义吗?:)