Forum Archive

Touch ID

xferget

This is my code

from objc_util import  *
from ctypes import *
import dialogs

def block(_cmd, succeed, error_ptr):
    pass

context = ObjCClass('LAContext').alloc().init()
error = ObjCClass('NSError').alloc().init()
print(context.canEvaluatePolicy_error_(1, c_void_p(id(error))))
context.evaluatePolicy_localizedReason_reply_(1, 'Touch ID', ObjCBlock(block, restype = None, argtypes = [c_void_p, c_bool, c_void_p]))

I know we should using objective-c type 'BOOL' here but there are no "BOOL"
That make the app crash
Who can help me make it work

JonB

Try using

c_void_p(error.ptr)

, rather than

c_void_p(id(error))

-- you were pointing to the python object using id, not the objc object!

xferget

Thank for you help me but it crash again
I think is context.evaluatePolicy_localizedReason_reply_() make it crash and ObjCBlock class has something wrong
I'm sorry but my English is poor

xferget

OK! It is work!
We should use on_main_thread
Like this:

replyblock = ObjCBlock(myblock, restype = None, argtypes = [c_void_p, c_bool, c_void_p])
    on_main_thread(context.evaluatePolicy_localizedReason_reply_)(1, '爪纹识别', replyblock)