我在OS X 10.8上使用Nickolay Yegorov的LightBlue端口。在导入lightblue
模块后,我立即得到以下错误:
Traceback (most recent call last):
File "commander.py", line 3, in <module>
import lightblue
File "/usr/local/lib/python2.7/site-packages/lightblue/__init__.py", line 160, in <module>
from _lightblue import *
File "/usr/local/lib/python2.7/site-packages/lightblue/_lightblue.py", line 397, in <module>
class _AsyncDeviceInquiry(Foundation.NSObject):
TypeError: Error when calling the metaclass bases
class _AsyncDeviceInquiry does not correctly implement protocol IOBluetoothDeviceInquiryDelegate: the signature for method deviceInquiryComplete:error:aborted: is v@:@iB instead of v@:@iZ
看起来可能是版本不匹配。这个问题有已知的修复方法吗?
打开Yegorov的repo源代码中的src/mac/_lightblue.py
文件。查找467行(如下所示):
deviceInquiryComplete_error_aborted_ = objc.selector(
deviceInquiryComplete_error_aborted_, signature="v@:@iB")
将字符串v@:@iB
修改为v@:@iZ
。从这个源代码重新安装LightBlue:
cd <lightblue_root> && sudo python setup.py install
这将解决签名错误。
二进制dlamblin请求了一个带有此修复的二进制文件。这是我的LightAquaBlue.framework
,用Python 2.7.4构建于OS X 10.8.2(放入/Library/Frameworks
)。