Pyobjus - autoclassing NSSearchPathForDirectoriesInDomains

66 views
Skip to first unread message

Stéphane Smith

unread,
Aug 12, 2016, 2:22:47 PM8/12/16
to Kivy users support
I've been having a lot of success with a cross-platform Kivy application.  So far I have Windows, Android, and MacOSX working beautifully!  Love It!  I've been using Pyjinus on Android and haven't had any issues.

IOS is almost there, the missing piece is getting write access to a sandbox directory.  I need to access this function:
NSSearchPathForDirectoriesInDomains
(http://stackoverflow.com/questions/1567134/how-can-i-get-a-writable-path-on-the-iphone/1567147#1567147)


Test case:
import pyobjus
from pyobjus import autoclass, objc_str
from pyobjus.dylib_manager import load_framework, INCLUDE
load_framework(INCLUDE.Foundation)
load_framework(INCLUDE.AppKit)
NSSearchPathForDirectoriesInDomains = autoclass('NSSearchPathForDirectoriesInDomains')

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pyobjus.pyx", line 685, in pyobjus.autoclass (pyobjus/pyobjus.c:34723)
  File "pyobjus.pyx", line 70, in pyobjus.MetaObjcClass.__new__ (pyobjus/pyobjus.c:27278)
  File "pyobjus.pyx", line 98, in pyobjus.MetaObjcClass.resolve_class (pyobjus/pyobjus.c:27771)
pyobjus.ObjcException: Unable to find class 'NSSearchPathForDirectoriesInDomains'



What does work:

I can get almost all the Pyobjus examples working from here:
https://github.com/kivy/pyobjus/tree/master/examples

For example:
import pyobjus
from pyobjus import autoclass
from pyobjus.dylib_manager import load_framework, INCLUDE
load_framework(INCLUDE.Foundation)
NSProcessInfo = autoclass('NSProcessInfo')
processInfo = NSProcessInfo.processInfo()
processInfo.operatingSystemVersionString.cString()

'Version 10.11.6 (Build 15G31)'


One notible and unfortunate exception is from: https://github.com/kivy/pyobjus/blob/master/examples/osx_ios_sysinfo.py.  I can't get UIDevice to autoclass.  Maybe this is a related issue?
import pyobjus
from pyobjus import autoclass
from pyobjus.dylib_manager import load_framework, INCLUDE
load_framework(INCLUDE.Foundation)
UIDevice = autoclass('UIDevice')

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pyobjus.pyx", line 685, in pyobjus.autoclass (pyobjus/pyobjus.c:34723)
  File "pyobjus.pyx", line 70, in pyobjus.MetaObjcClass.__new__ (pyobjus/pyobjus.c:27278)
  File "pyobjus.pyx", line 98, in pyobjus.MetaObjcClass.resolve_class (pyobjus/pyobjus.c:27771)
pyobjus.ObjcException: Unable to find class 'UIDevice'


What else I've tried:
I tried loading in every framework listed here: https://pyobjus.readthedocs.io/en/latest/core_tutorials.html#load-framework-function
before autoclassing.

from pyobjus.dylib_manager import frameworks
for framework in frameworks.keys():
    try:
        if framework != 'JavaFrameEmbedding' and framework != 'JavaVM':
            print framework
            load_framework(frameworks[framework])
    except:
        print '-E-'
NSSearchPathForDirectoriesInDomains = autoclass('NSSearchPathForDirectoriesInDomains')

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pyobjus.pyx", line 685, in pyobjus.autoclass (pyobjus/pyobjus.c:34723)
  File "pyobjus.pyx", line 70, in pyobjus.MetaObjcClass.__new__ (pyobjus/pyobjus.c:27278)
  File "pyobjus.pyx", line 98, in pyobjus.MetaObjcClass.resolve_class (pyobjus/pyobjus.c:27771)
pyobjus.ObjcException: Unable to find class 'NSSearchPathForDirectoriesInDomains'



Any help getting Pyobjus working for me, especially to call NSSearchPathForDirectoriesInDomains so we can have access to sandboxed write paths would be very help and much appreciated!

-Stephane
Reply all
Reply to author
Forward
0 new messages