The Cocotron is an open source project which aims to implement a cross-platform Objective-C API similar to that described by Apple Inc.'s Cocoa documentation. This includes the AppKit, Foundation, Objective-C runtime and support APIs such as CoreGraphics and CoreFoundation.

Cocotron Code

COCOTRON FUNCTIONALITY

There is a lot implemented.

There is a lot not implemented.

Be mentally prepared for complete failure to compile your program for another platform on the first try or the 100th try, and then repeat that failure getting it to run properly. Some programs will have few problems, some will have a lot.

Generally speaking, newer classes and technologies are not implemented, by newer I mean Mac OS X. OpenStep has been my baseline requirement for a long time so a lot of newer Cocoa classes are not present at all. This is largely a function of OpenStep doing the job and not a reluctance to implement Cocoa classes.

Don't get discouraged, after-all this has been largely a one and sometimes two person project, more contributors will mean more functionality.

Quartz

Of course it would be exciting if I had this whole huge implementation of Quartz done, but I don't. There is a rudimentary CoreGraphics API implemented on top of the Windows GDI. This is sufficient for a ton of stuff but falls apart when you want to do more sophisticated graphics transformations.

nib's

Text and binary nib's can be read. There is a large amount of nib reading logic in place, but some of the newer controls may not have full nib reading capability.

Text System

The text system is functional for simply laid out English but falls apart when you need better glyph support or fancier layout. Very rudimentary RTF parsing in place, no HTML support.

Some things not implemented at all, or barely working
  • AppleScript classes
  • NSDecimal*
  • NSHTTP*
  • NSURL*
  • NSXML*
  • NSPort*
  • Controllers
  • spelling
  • newer controls, segmented controls
  • Distributed Objects

There is obviously more missing not documented here, the easiest way to get started is to just start compiling your program and fix the failures, rinse, repeat.