问题标签 [macos-system-extension]
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.
driverkit - IOBufferMemoryDescriptor 是否应该被释放?
我正在查看IOBufferMemoryDescriptor
. 它说“......除非另有说明,否则您还负责释放您分配的缓冲区。” .
IOBufferMemoryDescriptor::free
也存在。我的问题是:我应该使用free
或release
(或两者)进行清理吗?
xcode - 如何在 MacOS 系统扩展中包含 CocoaPods 框架?
我正在尝试创建一个使用系统扩展的应用程序(NEFilterPacketProvider
确切地说)。目前我正在使用 CocoaPods 来管理我的依赖项。一切正常,直到我尝试在系统扩展中使用框架。
我创建了一个系统扩展目标所依赖的私有 pod 规范。构建本身很好。在我尝试安装和运行我的系统扩展之后,问题就出现了。它无法启动,因为找不到框架。
经过一番调查,事实证明该框架并未作为系统扩展的一部分包含在内,而是复制到主应用程序包中。系统扩展目标只是引用应用程序的相关框架目录,作为运行时框架搜索路径的一部分。这是有问题的,因为系统扩展是/Library/SystemExtension/*
在安装后复制到的。因为搜索路径是相对的,所以它不再起作用,因为扩展已被复制到应用程序之外。
在做了一些谷歌搜索之后,似乎 CocoaPods 的“方式”是将所有框架保留在应用程序包中。理想情况下,我想让 CocoaPods 将框架复制到我的系统扩展包中。这将确保系统扩展可以作为独立的二进制文件运行,而不必依赖硬编码路径中存在的应用程序。
我想知道除了添加/Application/XXX.app/Contents/Frameworks
到运行时框架搜索路径并告诉用户扩展将无法正常工作之外,是否还有更好的解决方案。
macos - 使用带有新 VID/PID 的内置 dext 驱动程序?
苹果开发者文档说:
如果您的硬件完全使用基于标准的协议进行通信,您可以提供一个与您的硬件匹配的驱动程序到一个内置系统驱动程序。
如果 macOS 本身将驱动程序实现为 dext,这可能吗?
特别是,我有兴趣在我的应用程序中为具有自定义产品 ID 的 FTDI 设备提供支持。我了解 macOS 将 FTDI 驱动程序实现为 dext (/System/Library/DriverExtensions/com.apple.DriverKit-AppleUSBFTDI.dext)。
objective-c - 如何为系统扩展设置环境变量
我知道 LSEnvironment 用于定义要在启动应用程序之前设置的环境变量。
系统扩展怎么样?如何在系统扩展运行之前设置一些环境变量?非常感谢。
macos - 系统扩展验证失败
我正在尝试提交网络扩展激活请求,但我收到此错误。
我查了一下,显然它的意思是“validationFailed”。有没有办法调试它,因为我似乎无法弄清楚验证失败的原因。谢谢。
macos - 使用 com.apple.developer.driverkit.userclient-access 配置配置文件应该如何?
我们请求获得使用 bundle id 访问具有 bundle id的com.apple.developer.driverkit.userclient-access
Driverkit 驱动程序的权利的请求已得到处理,但我们不确定我们是否获得了正确的权利。当我们为应用程序生成一个新的配置文件并检查它时,配置文件中的权利会说:com.example.driver
com.example.app
security cms -D -i
读到这里,看起来com.apple.developer.driverkit.userclient-access
键值应该是一个数组而不是一个布尔值(这里的注释表明它com.apple.developer.driverkit.userclient-access
可以是一个布尔值,但只有当权利是用于与另一个 dext 通信的 dext 时)
配置文件中的上述权利是否正确?如果没有,权利应该如何?如果有人可以在配置文件中发布可以与 driverkit 驱动程序通信的应用程序的权利,那将非常有帮助。
macos - DriverKit 中可以将哪些选项传递给 IOService::Terminate
virtual kern_return_t IOService::Terminate(uint64_t options)
说你可以传递一个带有选项的参数。我想知道有什么不同的选择?文档没有说什么。
macos - 是否可以使用 DriverKit 创建子 IOUSBHostDevice?
使用 KEXT 可以分配所需的类(即 IOUSBHostDevice),执行 init()、attach()、设置所需的属性并调用该对象的 registerService()。
使用 DEXT,我们只有 IOService::Create() 方法,它接受来自 Info.plist 的属性键名。因此,它适用于 IOUserClient 和 IOUserHIDDevice 但不适用于 USB。
那么在 DEXT 中,创建任意子对象的一般方法是什么?
apple-silicon - Apple Silicon / M1 的 macOS 驱动程序套件系统扩展应该是 arm64 还是 arm64e?
我将 macOS 驱动程序包系统扩展编译为通用库,以便它同时包含x86_64
和arm64
. 一台 Apple Silicon 计算机 A 连接 USB 设备时驱动程序启动。在连接 USB 设备时,在 Apple Silicon 计算机上,BI 可以kernel: exec_mach_imgact: disallowing arm64 platform driverkit binary "com.example.driver", should be arm64e
在 Console.app 中看到正在打印。我查看了发生这种情况的源代码
,但我无法弄清楚问题所在。如果我编译它arm64e
然后它会exec_mach_imgact: not running binary "com.example.driver" built against preview arm64e
在计算机 A 上运行,然后它会在计算机 B 上启动。
没有一台电脑-arm64e_preview_abi
设置在boot-args
.
如果我在每台机器上创建一个新的 Xcode (12.4) 项目并构建 Release 然后计算机 A 并otool -fvv com.example.driver
给出
在计算机 B 上,相同的命令给出
如何让驱动程序在两台机器上启动?
macos - 如何获取 DriverKit 系统扩展日志输出
在DriverKit 系统扩展的 2019 年 WWDC 会话演示的这一部分中,您可以看到驱动程序,并且只有驱动程序的日志输出正在使用以下命令进行流式传输:
我没有得到任何输出,即使我添加--debug
了我也不知道为什么。据我所知,我的扩展名列表与ps
. 演示者的输出似乎来自kernel.development[0]
并且我有kernel[0]
. 我没有开发内核——这就是我什么都看不到的原因吗?
如果以上都不起作用,你怎么能方便地监控你的扩展的日志输出呢?
更新
谓词适用于您的捆绑 ID 或IOUserServerName
(不确定哪个,它们在USBApp中相同),但仅适用于log show
,它从偶尔写入的文件中读取,对我来说,我认为它是在重新启动时最后更新的:
但log stream
什么也没给我,即使用 . 替换谓词也是如此 --process pid
。