Adventures with Cappuccino and Objective-J
Cappuccino is a port of Cocoa (the Objective-C app frameworks in Mac OS X) to the web. The framework lets you make desktop-like apps that run in the web browser. The Cappuccino team also created a language called Objective-J, which is a clone of Objective-C that runs in the browser on top of JavaScript. Objective-J and JavaScript code can be mixed just like Objective-C and C/C++ code.
When I first discovered this framework, I was excited to try it out. I wanted to see if I could use Cappuccino for a web app or possibly even game development. As an experiment, I ported EdgeRift’s Real Solitaire game, originally written in Objective-C for iOS, to Objective-J to run on Cappuccino.
The iOS game used Core Animation as the renderer. The game elements were made up of many CALayers. Core Animation didn’t exist in Cappuccino so I had to come up with some custom solutions to achieve the same visual effects.
EdgeRift released the game as a web app for the original launch of the Google Chrome Web Store. It was a fun project to work on and people loved the game. Googled liked it too and featured the game. (Unfortunately, the web app has been discontinued as EdgeRift shifted its focus exclusively to mobile apps.)
I still have an early build of Real Solitaire which was ported from Objective-C to Objective-J. I’m hosting it on my site. Be sure to check it out at: https://solitaire.parkerminardo.com
If you encounter any crashing, please try the game in Chrome. The game uses an old version of SoundManager2 for audio playback and it appears to have some problems with newer versions of Safari.
Should you use Cappuccino for web apps or games in 2020? No, I wouldn’t recommend it because it’s quite outdated. Objective-J and Cappuccino were exciting in 2008 when everyone used Objective-C to write iOS and Mac apps. If the Cappuccino team can reinvent the framework with a modern Swift-like language and new features, I believe it has the potential to be a hit with developers. Until then, I would look at other web frameworks and choose the one that is the best fit based on your project requirements.