从python访问API objc常量和枚举

从python访问API objc常量和枚举,python,objective-c,enums,constants,pyobjc,Python,Objective C,Enums,Constants,Pyobjc,我正在使用pyobjc向一些随机python软件添加一些所需的OSX功能。我需要从pythonland访问API定义的objc-land常量 此类常量的一个示例位于页面下方,特别是NSApplicationActivationPolicy的三个可能值 对于上下文,当前任务正在列出当前正在运行的面向用户的应用程序。为此,以下代码可以正常工作: from Foundation import * from Cocoa import * import objc for runningApp in so

我正在使用pyobjc向一些随机python软件添加一些所需的OSX功能。我需要从pythonland访问API定义的objc-land常量

此类常量的一个示例位于页面下方,特别是NSApplicationActivationPolicy的三个可能值

对于上下文,当前任务正在列出当前正在运行的面向用户的应用程序。为此,以下代码可以正常工作:

from Foundation import *
from Cocoa import *
import objc

for runningApp in sorted(
                     NSWorkspace.sharedWorkspace().runningApplications(),
                     key=lambda x: x.localizedName()
                  ):
    if runningApp.activationPolicy() == 0:
        # Do stuff
但我不希望检查零(以使其更具可读性),也不希望在我自己的代码中将虚拟NSApplicationActivationPolicyRegular值硬编码为零,因为它在原始库中随时可用


如何通过pyobjc从python访问此类objc常量?

苹果提供的pyobjc早于10.6中对Cocoa所做的一些添加
NSRunningApplication
是这些新增内容之一,因此PyObjC不知道。您需要向AppKit BridgeSupport文件添加一些元数据,该文件位于:/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/Python/PyObjC/AppKit/PyObjC.BridgeSupport

这三行将涵盖您试图使用的
enum

<enum name='NSApplicationActivationPolicyRegular' value='0' />
<enum name='NSApplicationActivationPolicyAccessory' value='1' />
<enum name='NSApplicationActivationPolicyProhibited' value='2' /> 


请注意,像这样更改PyObjC可能意味着您必须静态链接并将更新的版本包含到应用程序中进行分发,因为其他人机器上的版本不会包含此数据。最好编译最新版本的PyObjC(其中将包含这些更改和其他更改)并使用它。

苹果提供的PyObjC早于10.6中对Cocoa所做的一些添加
NSRunningApplication
是这些新增内容之一,因此PyObjC不知道。您需要向AppKit BridgeSupport文件添加一些元数据,该文件位于:/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/Python/PyObjC/AppKit/PyObjC.BridgeSupport

这三行将涵盖您试图使用的
enum

<enum name='NSApplicationActivationPolicyRegular' value='0' />
<enum name='NSApplicationActivationPolicyAccessory' value='1' />
<enum name='NSApplicationActivationPolicyProhibited' value='2' /> 

请注意,像这样更改PyObjC可能意味着您必须静态链接并将更新的版本包含到应用程序中进行分发,因为其他人机器上的版本不会包含此数据。最好编译最新版本的PyObjC(其中将包含这些更改和其他更改)并使用它