Welcome!
This is the community forum for my apps Pythonista and Editorial.
For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.
How to access VisionKit?
-
You are amazing - thank you. You have saved me so much frustration and guessing.
Thank you so much,
Martin
-
@emkay_online next step but documentCameraViewController_didFinishWith_ not called.
Either my bug either iOS bug (other people seem to meet the same problem)from objc_util import * import ui load_framework('VisionKit') #========= VNDocumentViewController def documentCameraViewController_didFinishWith_(_self, _cmd, _controller, _scan): print('documentCameraViewController_didFinishWith_') VNDocumentViewController = ObjCInstance(_controller) scan = ObjCInstance(_scan) # VNDocumentCameraScan #print(scan) methods = [documentCameraViewController_didFinishWith_,] protocols = ['VNDocumentCameraViewControllerDelegate'] try: MyVNDocumentCameraViewControllerDelegate = ObjCClass('MyVNDocumentCameraViewControllerDelegate') except: MyVNDocumentCameraViewControllerDelegate = create_objc_class('MyVNDocumentCameraViewControllerDelegate', methods=methods, protocols=protocols) @on_main_thread def main(): VNDocumentCameraViewController = ObjCClass('VNDocumentCameraViewController').alloc().init() #print(dir(VNDocumentCameraViewController)) delegate = MyVNDocumentCameraViewControllerDelegate.alloc().init() VNDocumentCameraViewController.delegate = delegate uiview = ui.View() uiview.frame = (0,0,500,500) uiview.present('sheet') objc_uiview = ObjCInstance(uiview) SUIViewController = ObjCClass('SUIViewController') vc = SUIViewController.viewControllerForView_(objc_uiview) VNDocumentCameraViewController.setModalTransitionStyle_(4) vc.presentViewController_animated_completion_(VNDocumentCameraViewController, True, None) main()
-
Thank you for your code. I'm as puzzled as you as to why it doesn't work. I added the other methods in case an error or a cancel was being returned, but nothing.
I'll keep playing and hope I stumble on the answer.
Thanks again.
Martin
-
@emkay_online I did it also and cancel reacts
def documentCameraViewController_didFailWithError_(_self, _cmd, _controller, _error): print('documentCameraViewController_didFailWithError_') def documentCameraViewControllerDidCancel_(_self, _cmd, _controller): print('documentCameraViewControllerDidCancel_') methods = [documentCameraViewController_didFinishWith_, documentCameraViewController_didFailWithError_, documentCameraViewControllerDidCancel_]
-
Cancel is called but you still need to tap save to terminate...
-
@cvp the recent iPadOS update seems to have effected accesing different areas of the sandbox. and unless someone finds the new access classes, Apple will have some upset developers on thier hands lol
-
Have you checked
supported
? -
@JonB I tried but does not exist in dir(VNDocumentCameraViewController).
And the process seems to be realized, you receive the camera, take a photo, system aligns a frame, you tap save ..... and the viewcontroller closes but does not call the didfinish -
-
@mikael @JonB strange, on my iPad mini 4, three different prints and their results
print('VNDocumentCameraViewController.isSupported') print(VNDocumentCameraViewController.isSupported) print() print('dir(VNDocumentCameraViewController.isSupported)') print(dir(VNDocumentCameraViewController.isSupported)) print() print('VNDocumentCameraViewController.isSupported()') print(VNDocumentCameraViewController.isSupported()) ''' VNDocumentCameraViewController.isSupported <objc_util.ObjCInstanceMethodProxy object at 0x113ca84e0> dir(VNDocumentCameraViewController.isSupported) ['__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'method_cache', 'name', 'obj'] VNDocumentCameraViewController.isSupported() Traceback (most recent call last): File "_ctypes/callbacks.c", line 234, in 'calling callback function' File "/var/containers/Bundle/Application/34BAEE1A-BC33-4D6F-A0C1-B733E4991F31/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/site-packages/objc_util.py", line 1066, in OMMainThreadDispatcher_invoke_imp retval = func(*args, **kwargs) File "/private/var/mobile/Containers/Shared/AppGroup/668A7D98-7216-47ED-917D-AA0B6173167E/Pythonista3/Documents/VNDocumentCameraViewController.py", line 37, in main print(VNDocumentCameraViewController.isSupported()) File "/var/containers/Bundle/Application/34BAEE1A-BC33-4D6F-A0C1-B733E4991F31/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/site-packages/objc_util.py", line 798, in __call__ method_name, kwarg_order = resolve_instance_method(obj, self.name, args, kwargs) File "/var/containers/Bundle/Application/34BAEE1A-BC33-4D6F-A0C1-B733E4991F31/Pythonista3.app/Frameworks/Py3Kit.framework/pylib/site-packages/objc_util.py", line 405, in resolve_instance_method raise AttributeError('No method found for %s' % (name,)) AttributeError: No method found for isSupported '''
-
-
I bet the function name is wrong, or the arguments are wrong.
Shouldn't it be
documentCameraViewController_didFinishWithScan_
?You could also swizzle respondsToSelector on your delegate, and log what gets queried.
Have you checked what the protocol -
-
@JonB said:
documentCameraViewController_didFinishWithScan_
You're right. I sincerely don't understand how I could do so big mistake.
Thanks, I'll tryÉdit: save button does not close the view
-
The delegate is called but the view is not closed as I though thus I have proven by writing in a file. And restart Pythonista because I could not close the view.
def documentCameraViewController_didFinishWithScan_(_self, _cmd, _controller, _scan): with open('a.txt',mode='wt') as fil: fil.write('documentCameraViewController_didFinishWithScan_') print('documentCameraViewController_didFinishWithScan_') VNDocumentViewController = ObjCInstance(_controller) scan = ObjCInstance(_scan) # VNDocumentCameraScan #print(scan) . . . methods = [documentCameraViewController_didFinishWithScan_, documentCameraViewController_didFailWithError_, documentCameraViewControllerDidCancel_]
-
This post is deleted! -
@cvp perhaps you need to dismiss the _controller?
-
@JonB I was busy to post this
def documentCameraViewController_didFinishWithScan_(_self, _cmd, _controller, _scan): VNDocumentViewController = ObjCInstance(_controller) scan = ObjCInstance(_scan) # VNDocumentCameraScan #print(scan) VNDocumentViewController.dismissViewControllerAnimated_completion_(True, None)
-
@cvp re: getting the name wrong, in Swift, they omit the "nouns", i think. So the docs show the selectors without nouns. In objc_util it lets you do this too, if you use kwargs.
Re: dismissing... So did that work? If not, maybe need to on_main_thread it?
-
scan returns an UIImage
print(scan.imageOfPageAtIndex_(0))