Tja, also nach längerer Neugierde habe ich mich mal mit Cappucino auseinander gesetzt und ein wenig damit Programmiert.
Und das hat für mich als Cocoa Programmierer eine Menge Spaß gemacht.
Erst mal ein paar Kleinigkeiten:
- Der Java-Script Parser von Safari saugt. Er sagt einem nie wo der Fehler jetzt genau aufgetreten ist. :-( Unbedingt mit Firefox und Firebug entwickeln!
- Wenn man sich den git tip of the tree auscheckt kriegt man weit mehr Klassen als in der offiziellen Dokumentation erwähnt sind. Insbesondere funktioniert das nib2cib tool auch ein wenig besser - und das spart unmengen von Zeit.
- Allerdings funktioniert nib2cib auch nicht soo gut. Viele Klassen die es können könnte gehen damit nicht. NSScrollView zum Beispiel.
- Wenn man sein eigenes Objective-J kompilieren will darf man keine spaces im Pfad haben. (arrrrghhh!!!!!)
- Man kann (noch) nicht den Code so ohne weiteres in Unterverzeichnisse auslagern. Das macht die Projekte unübersichtlich - aber angeblich soll das bald gefixt sein.
- nib2cib darf man nie mit mehr als einem Filenamen aufrufen. Sonst schreibt es nämlich einfach in das zweite Argument den output hinein.
- Wo ich gerade darüber nachdenke: das geht eigentlich mit kaum einem objective-j tool ojtest zum beispiel... Dabei ist der Startup von Rhino immer das langsamste daran. :-(
- Und man muss einiges an Umgebungsvariablen setzen. Am besten macht man sich ein ein shell script was diese dinger setzt und dann wieder eine shell exec'd. Damit hat man dann gleich eine Arbeitsumgebung für Cappucino ohne alles irgendwohin in standard-Betriebsystem-Locations installieren zu müssen.
#!/bin/sh PROJECT_DIR="/path/to/the/cappucino/sources/but/without/spaces/cappuccino" # you can move this elsewhere to keep things separate export STEAM_BUILD="${PROJECT_DIR}/build" TOOLS_DIR="${STEAM_BUILD}/Cappuccino/Tools/objj" NIBTOOLS_DIR="${PROJECT_DIR}/Tools/objj" export OBJJ_HOME="${TOOLS_DIR}" export PATH="${PATH}:${TOOLS_DIR}/bin:${NIBTOOLS_DIR}/bin" "${SHELL}"
Damit kann man immerhin die ganzen objj tools (ojtest, nib2cib, etc) direkt benutzen.
Cappucino selber benutzt sich tatsächlich ziemlich wie eine recht alte Version von Cocoa. Erstmal keine Bindings und entsprechende Controller und !CPBundle ist reichlich underpowered - Lokalisierter Resourcen-Lookup ist damit erst mal noch nicht drin.
Die Tools sind natürlich nicht so toll. Insebesondere fehlt ein vernünftiger Ersatz für Interface Builder.
Aber ansonsten rockt Cappuccino schon gewaltig. Jedem Cocoa-Programmierer sei also eine Beschäftigung damit schwer ans Herz gelegt.