2014-01-25 104 views
3

在OSX特立獨行的,我有這個PyObjC(python3.3)基於簡單的APPPyObjC應用程序不允許訪問的輔助功能API

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)使全局事件監視器工作。感謝羅納德Oussoren的提示(請參閱下面的回答&評論)。

回答

2

我不知道爲什麼這不符合cx_Freeze工作,它不使用該setup.py文件爲我工作,py2app:

from setuptools import setup 

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

也就是說,當我啓動應用程序,給它可訪問性訪問,然後重新啓動我從Console.app中的應用程序中看到的應用程序。

+0

謝謝。我很感興趣,你是如何在py2pp構建之後啓動應用程序的。你是雙擊它還是使用「打開」命令?它也適用於我(使用cx_Freeze),如果我直接從命令行直接執行應用程序可執行文件,而不是當我啓動.app本身。 – Shawn

+0

我使用「open」啓動了應用程序。 –

+0

我之前在OSX Maverick上使用python3安裝了py2app,並在第一次嘗試構建時遇到了問題:error:No such file or directory:/usr/local/lib/python3.3/site-packages/setuptools-2.1- py3.3.egg/_markerlib/__ init __。pyc我不知道目前是否已修復此問題。我以前沒有設法解決,所以我切換到cx_Freeze。 – Shawn

相關問題