Skip to main content

A bridge between an Objective C runtime environment and Python.

Project description

Rubicon-ObjC is a bridge between Objective C and Python. It enables you to:

  • Use Python to instantiate objects defined in Objective C,

  • Use Python to invoke methods on objects defined in Objective C, and

  • Subclass and extend Objective C classes in Python.

It also includes wrappers of the some key data types from the Core Foundation framework (e.g., NSString).

Quickstart

Rubicon uses a combination of ctypes, plus Objective-C’s own reflection APIs, to enable Objective C objects to be referenced in a Python process.

To install Rubicon, use pip:

$ pip install rubicon-objc

Then, in a Python shell:

>>> from ctypes import cdll
>>> from ctypes import util
>>> from rubicon.objc import ObjCClass, objc_method

# Use ctypes to import a framework into the Python process
>>> cdll.LoadLibrary(util.find_library('Foundation'))

# Wrap an Objective C class contained in the framework
>>> NSURL = ObjCClass("NSURL")

# Then instantiate the Objective C class, using the API
# that is exposed through Objective C. The Python method name
# is the concatenated version of the Objective C method descriptor,
# with colons replaced with underscores. So, the equivalent of
# [NSURL URLWithString:@"http://pybee.org"];
# would be:
>>> NSURL.URLWithString_("http://pybee.org/")

# To create a new Objective C class, define a Python class that
# has the methods you want to define, decorated to provide the
# Objective C prototype:
>>> class Handler(NSObject):
...     @objc_method('@i')
...     def initWithValue_(self, value):
...         # You can't store attributes directly on the object -
...         # you need to put them manually on the Python object
...         self.__dict__['value'] = value
...         return self
...
...     @objc_method('vi')
...     def pokeWithValue_(self, value):
...         print ("Poking with", value)

# Then use the class:
>>> my_handler = Handler.alloc().initWithValue_(42)
>>> my_handler.pokeWithValue_(37)

Testing

To run the Rubicon test suite:

1. Compile the Rubicon test library. A Makefile has been provided to make this easy. Type:

$ make

to compile it.

  1. Put the Rubicon support library somewhere that it will be found by dynamic library discovery. This means:

    1. Under OS X, put the tests/objc directory in your DYLD_LIBRARY_PATH

    2. Under Linux, put the tests/objc directory in your LD_LIBRARY_PATH

    3. Under Windows…. something :-)

  2. Run the test suite:

    $ python setup.py test

    A tox configuration has also been provided; to run the tests across all supported platforms, run:

    $ tox

Community

Rubicon is part of the BeeWare suite. You can talk to the community through:

Contributing

If you experience problems with this backend, log them on GitHub. If you want to contribute code, please fork the code and submit a pull request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rubicon-objc-0.1.3.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rubicon_objc-0.1.3-py2.py3-none-any.whl (22.0 kB view details)

Uploaded Python 2Python 3

File details

Details for the file rubicon-objc-0.1.3.tar.gz.

File metadata

  • Download URL: rubicon-objc-0.1.3.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for rubicon-objc-0.1.3.tar.gz
Algorithm Hash digest
SHA256 e11dd0b1ec7b1a28a70fa3f0ed3048af7acc4d529c126619f056c3de8ce45ff0
MD5 7f3571c8ee5d3c39a2b3c4c6ad1064e6
BLAKE2b-256 dfe4a5264c72329658b8c34a0d7322d2fe1f69e42645ab812ce0576ff9766cd9

See more details on using hashes here.

File details

Details for the file rubicon_objc-0.1.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for rubicon_objc-0.1.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 bc94c1c2a2357d0355bdbaad4b71ba79fefd9c92b9a8975b115caacbc22495ee
MD5 ff2a28f449813d6796fbaaf7552c9d3d
BLAKE2b-256 e5b82cbbde18a382503ff95d2f9f6c52245aedaddd5152f9ea4e0de0b9676f4a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page