应用非标准电源声明并创建虚拟HID

问题描述 投票:0回答:1

我在这里有一个很大的要求,但我希望有人能够帮助我。如果您认为应该在其他站点上发布此消息,请让我知道。

我是免费应用程序Amphetamine for macOS的开发者,我希望为该应用程序添加新功能-在closed-display (clamshell) mode中保持Mac处于唤醒状态,而未连接键盘/鼠标/电源适配器/显示器到Mac。我收到几乎每天都要添加此功能的请求。

我一直在研究一种解决方案(并且它已经准备就绪),该解决方案使用必须单独下载和安装的非App Store帮助程序。我仍然可以使用该解决方案,但是在将单独的应用程序解决方案推向世界之前,我想探索另一个选择。

[安非他明用户向我提示另一个应用程序,AntiSleep可以使Mac在关闭显示模式下保持清醒状态,而不会遇到Apple's requirements。我已经测试了这一说法,这是事实。在深入研究了AntiSleep如何实现这一目标之后,到目前为止,我提出了2种可能的理论(尽管可能还有更多的理论):

  1. 除了standard power assertion types,似乎AntiSleep正在使用一个或多个私有框架来应用非标准电源声明。当AntiSleep使Mac保持唤醒状态时,以下非标准电源声明类型将处于活动状态:DenySystemSleepUserIsActiveRequiresDisplayAudioInternalPreventDisplaySleep。除了IOPMLibPrivate.h中显示的内容以外,我还没有找到太多有关这些断言类型的信息。我对使用私有框架一点都不熟悉,但是我假设我可以在理论上将IOPMLibPrivate头文件添加到项目中,然后创建这些电源声明类型。我知道,这很可能会导致App Store对苯丙胺的审查遭到拒绝。非App Store应用程序如何?苹果会使用此公证应用吗?除此之外,有人可以帮助我确认应用这些非标准功率断言的唯一方法是使用私有框架吗?

  2. 我怀疑AntiSleep也可能正在创建虚拟键盘和鼠标。当然,创建虚拟键盘和鼠标的想法可以解决Apple在使用封闭显示模式时将键盘和鼠标连接到Mac的需求,这是一个有趣的想法。经过一番搜索,我发现了foohid。但是,在尝试在测试项目中添加和使用foohid文件时,我遇到了各种各样的错误。 [有人愿意看一下foohid项目并帮助我了解从理论上讲,是否可以在与App Store兼容的应用程序中包含此功能?我不是在寻求代码帮助(但)。我只需要一些帮助来确定是否可以做到。

谢谢您先看一眼。

objective-c macos cocoa hid iokit
1个回答
0
投票

Apple会使用此软件对应用程序进行公证吗?

我还没有看到使用私有API的公证代码有任何问题。当前,Apple似乎仅使用公证来扫描是否包含已知恶意软件。

有人愿意看看foohid项目并帮助我了解从理论上讲,是否可以在与App Store兼容的应用程序中包含此功能?

快速浏览该项目的代码,很明显它实现了内核扩展(kext)。那些在App Store上是不允许的。

但是,从macOS 10.15 Catalina开始,有一种使用DriverKit编写HID驱动程序的新方法。这个想法是API与内核API非常相似,尽管我怀疑这将是将kext重写为DriverKit驱动程序,而不是简单的端口。

  • DriverKit驱动程序are允许包含在App Store应用程序中。
  • 知道基于DriverKit的HID驱动程序是否可以解决您的特定电源管理问题。
  • 如果使用DriverKit解决方案,则仅适用于10.15 +。

我怀疑AntiSleep也可能正在创建虚拟键盘和鼠标。

我没有看过AntiSleep,但我确实知道,除了编写完整的HID驱动程序之外,还可以使用用户空间API(例如IOHIDPostEvent())生成HID事件。我不知道这些是否允许在App Store上使用,但是据我所知,IOKitLib通常很好。

有可能您可以使用这些设备实现虚拟输入设备。

© www.soinside.com 2019 - 2024. All rights reserved.