在 macOS 应用程序中使用 Safari 调试 JavaScriptCore

Posted

技术标签:

【中文标题】在 macOS 应用程序中使用 Safari 调试 JavaScriptCore【英文标题】:Debugging JavaScriptCore with Safari, in macOS app 【发布时间】:2018-12-09 19:31:49 【问题描述】:

我为 OSX 制作了一个简单的 Hello World 应用程序,它使用 C-API 创建一个上下文组、一个上下文、运行一个脚本并调用我自己的函数,一切都很好。

但我不能做的是让我的 app/JSContext 出现在 Safari 的可检查应用程序列表中。 (它只是空的)

我不知道这是否应该是自动的,或者我是否需要在上下文、VM 等中启用某些东西(在文档、标题中找不到任何关于可调试/可检查的引用)

这个项目声称可以做到(基于 wiki 中的屏幕截图),但查看代码我看不到任何特定的配置选项、设置等 https://github.com/kasper/phoenix

这个答案表明 ios 应用程序需要签名...... macOS 应用程序也需要签名吗? Safari: no Inspectable applications

使用 Xcode 10B61、Safari 11.1.2、OSX 10.13.6

有人用 Safari 调试过 macOS 应用吗?

【问题讨论】:

该项目作者的一些跟进; twitter.com/kasper/status/1080507639451340800 I was wondering how to get it working myself as well, but it just automatically started working after building with some specific Xcode 9 version. The app is indeed signed with a Developer ID certificate, but it doesn’t seem to be clear whether this is a requirement or not. 【参考方案1】:

我使用我的 Apple Dev 帐户签署了该应用程序,(在发布此问题后,我出于不同的原因对其进行了更新),它出现在 Safari 中(并且中断了,让我调试)并且运行良好!

【讨论】:

【参考方案2】:

如果您希望您发布的应用程序(即不在 Xcode 的调试器中运行)能够在运行 JSC 代码时使用 Safari Web Inspector 调试器,您需要将com.apple.security.get-task-allow 添加到您的权利中。

警告:您无法获得具有经 Apple 公证的该权利的应用。

这意味着您可能必须同时提供一个没有 JS 调试的公证应用程序和一个允许调试的没有公证的应用程序。

【讨论】:

以上是关于在 macOS 应用程序中使用 Safari 调试 JavaScriptCore的主要内容,如果未能解决你的问题,请参考以下文章

Safari Web 检查器为空白

如何在没有 macOS 应用程序的情况下开发 Safari 应用程序扩展?

Safari+macOS的全套漏洞利用链

如何在 iOS 和 macOS 上的 Safari 中使用网络摄像头录制视频?

如何限制在 Safari(MacOS 和 iOS)中暂停时获取 hls 段文件

mac小技巧 macOS Big Sur 中使用Safari 起始页