【问题标题】:PyObjC app not allowed to access the accessibility APIPyObjC 应用程序不允许访问辅助功能 API
【发布时间】:2014-02-16 07:23:08
【问题描述】:

在 OSX Maverick 上,我有这个基于 PyObjC(python3.3) 的简单 APP

test.py

class MyDelegate(NSObject):

def applicationDidFinishLaunching_(self, sender):
    NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSKeyDownMask, lambda event: NSLog("hello"))
    NSApp.activateIgnoringOtherApps_(YES)

delegate = MyDelegate.alloc().init()
app = NSApplication.sharedApplication()
app.setDelegate_(delegate)

menu = NSMenu.alloc().initWithTitle_("My Menu")
app.setMainMenu_(menu)

window = NSWindow.alloc().initWithContentRect_styleMask_backing_defer_(
    NSMakeRect(0, 0, 100, 100),
    NSTitledWindowMask,
    NSBackingStoreBuffered,
    NO
)

window.setTitle_("my app")
window.makeKeyAndOrderFront_(None)

windowController = NSWindowController.alloc().initWithWindow_(window)


AppHelper.runEventLoop()

运行它

python3 test.py

并在系统偏好设置 -> 隐私和安全 -> 可访问性中授予对终端的可访问性访问

我可以看到全局监视器工作正常。

然后我用 cx_Freeze 冻结它

python3 setup.py bdist_mac

结束
build/Test.app

open build/Test.app

我在 OSX 系统日志中看到错误

universalAccessAuthWarn[546]: AccessibilityAPI: pid 3809, is not allowed to access the accessibility API. Path: /path/to/build/Test.app/Contents/MacOS/test

我在“系统偏好设置”->“隐私和安全”->“辅助功能”中启用了“测试”的访问权限,但这不起作用。

我在这里缺少什么?

更新: 可能是 cx_Freeze 的问题,使用 py2app(0.8) 使全局事件监视器工作。感谢 Ronald Oussoren 的提示(请参阅下面的答案和评论)。

【问题讨论】:

    标签: python cocoa cx-freeze pyobjc


    【解决方案1】:

    我不知道为什么这不适用于 cx_Freeze,它确实适用于使用此 setup.py 文件的 py2app:

    from setuptools import setup
    
    setup(
        name='main',
        app=['test.py'],
        setup_requires=['py2app'],
    )
    

    也就是说,当我启动应用程序时,为其授予辅助功能访问权限,然后重新启动我在 Console.app 中看到的应用程序日志记录的应用程序。

    【讨论】:

    • 谢谢。我很感兴趣你是如何在使用 py2pp 构建应用程序后启动该应用程序的。您是双击它还是使用“打开”命令?如果我直接从命令行专门执行应用程序可执行文件,但在我启动 .app 本身时,它也适用于我(使用 cx_Freeze)。
    • 我使用“open”启动了应用程序。
    • 我不久前在 OSX Maverick 上使用 python3 安装了 py2app,但在我第一次尝试构建时遇到了一个问题:错误:没有这样的文件或目录:/usr/local/lib/python3.3/site -packages/setuptools-2.1-py3.3.egg/_markerlib/__init__.pyc 我想知道目前是否已修复。我之前没能解决这个问题,所以我改用 cx_Freeze。
    • 我在 Mavericks 上使用 py2app 0.8(刚刚上传)和 python3.3 没有问题。
    猜你喜欢
    • 1970-01-01
    • 2017-08-09
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2022-11-30
    • 1970-01-01
    相关资源
    最近更新 更多