High Level Mac App Development
I love the Corona SDK—everyone knows that. But at the moment, it only does (and excels tremendously at) cross-platform mobile apps.
Sometimes though, I get the urge to make native software for the Mac, but I just can’t get used to anything other than the high-level, super-fast development approach that Corona takes by using the Lua scripting language for development. I absolutely love programming in Lua because of its easy-to-understand syntax, its flexibility, and how quickly you can go from zero-to-app in no time flat when using it in conjunction with Corona.
Because Corona has spoiled me so much, I really can’t (due to time constraints)—and don’t want to—learn Objective-C just to make Mac OS X apps. I’ve been spoiled rotten with simple Lua syntax, and the fast development speeds with Corona to even go near there.
And since there really isn’t a Corona-equivalent for desktop apps, I just figured it’s not my time to make anything for Mac OS X just yet—that is, unless Corona supports it as a target platform at some point. However, I did come across something earlier… and it’s not quite Corona-for-desktop per say, but it is an official solution to desktop apps (non-game apps, at least).
It’s called AppleScriptObjC, and I’m surprised I haven’t heard of it before (it’s been available since Snow Leopard).
I don’t know too much about AppleScript or it’s history, but some quick digging and I discovered that originally, AppleScript was used to “script” the Mac and other apps in various ways (duh). Then, Apple came out with something called AppleScript Studio (ASS; shipped as part of Xcode in 10.2) which allowed developers to use AppleScript to make full-fledged Mac apps. Sounds awesome right? Well it gets better.
Since AppleScript Studio required maintaining a branch separate from their primary Objective-C (documentation, API’s, etc), in Mac OS X 10.6 they deprecated ASS and replaced it with AppleScriptObjC, which serves the same purpose, but is much more “compatible” with Objective-C than its predecessor, yet from the looks of it, still vastly easier to use. And here’s the kicker: It’s been included with Xcode since Mac OS X 10.6. So if you’re a Mac or iOS developer, then you already have it.
After more Googling, I also discovered that surprisingly, there’s not a lot of literature on AppleScriptObjC. I did manage to find a quick AppleScriptObjC tutorial on MacScripter which seems to leave out a little too much for a complete understanding, for those like myself, who know neither Objective-C nor AppleScript. However, if you take a moment to go through the tutorial, you start seeing just how vastly intuitive AppleScriptObjC is over vanilla Objective-C.
Apple’s official page for AppleScriptObjC says you need to know Cocoa (e.g. Objective-C) before using AppleScriptObjC, but doing some poking around you can see that there are plenty of AppleScript developers who don’t know Objective-C and are getting along just fine with AppleScriptObjC.
John Welch, an AppleScript developer who doesn’t know Objective-C began using AppleScriptObjC is one of them (emphasis mine):
In one sense, my refusal to deal with the unending limitations of ASS have been a help, as I don’t have any bad habits to break from that direction. Since I don’t know Objective C, I don’t have to deal with those differences either. However, the lack of ObjC knowledge is a bit of a pain in the keister when reading Apple developer docs, although not as much as I thought it might be, thanks to Craig’s tutorials.
Judging by his experiences, personally I think Apple says you need to know Cocoa so they don’t have to dedicate too many resources to the AppleScriptObjC documentation (because if you know Cocoa/Objective-C, then the documentation they have now should be sufficient).
Thankfully, there’s a solution for those who don’t know Objective-C or AppleScript. It’s called AppleScriptObjC Explored by Shane Stanley ($29.95, eBook format), and from the looks of it, this book seems like a great A-Z resource for learning how to develop real Mac apps using AppleScriptObjC. Take a look at the table of content screenshots and see for yourself.
AppleScriptObjC looks like a great solution for those who want to make (non-game) native Mac apps without having to learn Objective-C. If you don’t know AppleScript, you’ll have to learn something, but at least the learning curve isn’t as great. From my initial observations, the learning curve seems slightly greater than that of Lua, but not by too much.
Another big plus is that you can use Xcode’s amazing Interface Builder when creating your AppleScriptObjC apps, to the extent you can with normal Cocoa apps. Very, very awesome.
For those that do know Objective-C, it looks like you’re free to use whatever library you want. In fact, there seems to be no real limitations since it’s so closely integrated with Xcode and the rest of Apple’s API’s (but I’m not so sure about the level of visual customization/theming your apps can have, and OpenGL games seem to be out of the question). Don’t quote me on any of that though, because I have zero experience with it at this point—definitely do your own research if any of this sounds interesting to you.
The main drawback to this of course, is that you can only develop Mac OS X (10.6+) applications using AppleScriptObjC, so cross-platform is out of the question. There are tons of successful Mac-only developers out there though (e.g. Bare Bones Software and Panic, to name a couple), so this definitely isn’t a downside for everyone.
Another bummer is that if you don’t know Objective-C or AppleScript, you’ll most likely—at the moment—have to fork over some cash to buy the AppleScriptObjC Explored eBook that was mentioned earlier. You may want to do this anyway, even if you do know said languages.
So as it stands, if you want to make some software for the Mac but want to stay as high-level as possible when it comes to development, then I’d say the upsides far outweigh the downsides and you should definitely buy Shane’s book and dive right in.
BUT, if Corona ever supports Mac OS X as a target platform, then I’m sure you already know it’s gonna be Corona SDK all the way for me (as it already is in the mobile space).