[R-SIG-Mac]Python <-> Objective C bidirectional bridge

Jan de Leeuw deleeuw@stat.ucla.edu
Tue, 24 Dec 2002 09:31:33 -0800


See the message below. Although it is no substitute for
an R <-> Objective C bridge, it may make it
possible (using the existing RSPython bridge to do
Python from R) to do Cocoa from Python from R. Maybe I'll waste
part of the holidays trying this out.


--- Jan

======================================================================== 
=====================================================

PyObjC version 0.8 is now available for download.

See...

     http://pyobjc.sourceforge.net/

... for more information.

The installer package includes a Project Builder project template for  
easily creating new Cocoa-Python projects and a slew of examples.   
Alternatively, the developer can choose to develop applications without  
using Apple's developer tools. Full support for Interface Builder  
documents is included.

The PyObjC Python module provides a feature complete bridge between the  
Python programming language and Objective-C. With PyObjC, it is  
possible to transparently message Objective-C objects from Python and  
Python objects from Objective-C. Objective-C objects can be subclassed  
from within Python.  Support is also included for using the various  
functions, enumerated types, and global variables found throughout the  
Objective-C framework.

References to python dictionaries pass into Objective-C act like a well  
behaved member of the NSDictionary class cluster. Likewise, Python List  
references behave like a member of the NSArray class cluster.
Strings are transparently converted to the native type.  NSArray and  
NSDictionary references passed into Python behave like native Python  
lists and dictionaries; including the ability to enumerate either using  
the 'in' operator and to slice NSArray and NSMutableArray instances.

PyObjC fully supports creating full featured Cocoa applications written  
in pure Python.  There are aspects of PyObjC that are more powerful  
than Cocoa in pure Obj-C (the ability to automatically define  
classes/outlets based on the contents of a NIB file, for example).

PyObjC requires OS X 10.2 or greater.  10.1 support is possible and  
will likely happen soon-- contact me if you need 10.1 support and are  
willing to do a bit of grunt work to generate the appropriate files  
(easy to do-- just need a 10.1 development machine).

The installer package is designed to work with the built-in Python  
provided in OS X 10.2.   Source is included on the disk image and the  
pyobjc module works with Python 2.2 or greater as installed directly  
from the Python Source, with the MacPython packages, and with the Fink  
build of python.

PyObjC also provides an awesome environment for exploring frameworks.    
The following transcript was copied out of a Terminal window-- it is an  
example of working directly with the Objective-C runtime from Python  
within the terminal.

 >>> from objc import *
 >>> from Foundation import *
 >>> b =  
NSBundle.bundleWithPath_("/System/Library/PrivateFrameworks/ 
PBXCore.framework")
 >>> b.principalClass()
<objective-c class PBXProducerTarget at 0xa9030034>
 >>> NSBundle.searchPathsForSupportFilesWithSubpath_("FooBar")
(
     "/Volumes/Data/Users/bbum/Developer/ProjectBuilder Extras/FooBar",
     "/Network/Developer/ProjectBuilder Extras/FooBar",
     "/Developer/ProjectBuilder Extras/FooBar"
)
 >>> PBXProject = lookUpClass("PBXProject")
 >>> p =  
PBXProject.projectWithFile_("/Developer/Examples/AppKit/TextEdit/ 
TextEdit.pbproj")
 >>> p.targets()
(<PBXApplicationTarget:0x00a76830:6FE2093EFE93D5F211CA2CEA:name='TextEdi 
t'>)
 >>> p.buildStyles()
(
      
<PBXBuildStyle:0x00a77d30:011ADBA3FF9FD52E11CA0C5D:name='Development':bu 
ildSettings.count=2>,
      
<PBXBuildStyle:0x00a82180:011ADBA4FF9FD52E11CA0C5D:name='Deployment':bui 
ldSettings.count=1>
)

The version # of 0.8 indicates that documentation is lacking, unit  
tests are incomplete and there may be a bug or two lurking within.  In  
practice, the module has proven to be very stable and to allow for the  
development of extremely complex Cocoa projects in pure Python or a mix  
of Python and Objective-C.

===
Jan de Leeuw; Professor and Chair, UCLA Department of Statistics;
Editor: Journal of Multivariate Analysis, Journal of Statistical  
Software
US mail: 9432 Boelter Hall, Box 951554, Los Angeles, CA 90095-1554
phone (310)-825-9550;  fax (310)-206-5658;  email: deleeuw@stat.ucla.edu
homepage: http://gifi.stat.ucla.edu
   
------------------------------------------------------------------------ 
-------------------------
           No matter where you go, there you are. --- Buckaroo Banzai
                    http://gifi.stat.ucla.edu/sounds/nomatter.au
   
------------------------------------------------------------------------ 
-------------------------