I’ve been really enjoying the roasting that Adobe’s Flash has been getting lately at the hands of Steve Jobs and Daring Fireball’s John Gruber. But Gruber extended the roastingto cross-platform toolkit Qt:
Consider, for one example, Amazon’s Kindle clients for iPhone OS and Mac OS X. The iPhone OS Kindle app is excellent, a worthy rival in terms of experience to Apple’s own iBooks. The Mac Kindle app is a turdthat doesn’t look, feel, or behave like a real Mac app. The iPhone OS Kindle app is a native iPhone app, written in Cocoa Touch. The Mac Kindle app was produced using the cross-platform Qt toolkit.
This was followed shortly after by a Design Dare article titled Steam Is a Port — the title itself implying that Steam is a lesser app for no other reason than being a port.
What They Got Wrong
To say that cross-platform tools are evil because one can produce bad programs with them is like saying that paint should be banned because it might fall into the hands of the tasteless. Or taggers. So too bad for Da Vinci and Picasso.
I’ve worked with wxWidgets and I’m currently working with Qt. Both libraries will let you use native controls. Like artfully used paint, both libraries will let you create native apps that will shine bright and soar.
What They Got Right
On the other hand, both Gruber and Design Dare are correct: Kindle for Mac and Steam for Mac are, indeed, ports. They were designed for one platform first, and only afterwards ported to the Mac. This rarely works, not because it’s technically impossible, but usually because the programmers are not deeply imbued with the Mac culture to get the finer details of the interface right. Often, this is compounded by bad messages from management, e.g. “who cares… we just need a Mac version to cover all bases, wrap it up ASAP”.
BTW, this is precisely why Cedrus (where I work) offers a free iPhoneto all employees. It’s also why we have an iPad in the office that each employee got to take home for a week. We are not currently developing for iPhone or iPad, but if or when the time comes, using and knowing iPhone OS will be second nature.
The converse is also true: one can develop awful apps that don’t feel native even on Mars, all while using the platform’s native tools. Just try to buy a song or an app on iTunes. What horror.
Qt cascading style sheets, introduced in version 4.3, lets you customize each control like you won’t believe — and shoot yourself in the foot like you won’t believe either, if you’re not careful. I’m guessing that perhaps that’s how Kindle for Mac got itself in Gruber’s crosshairs. One single setting in a widget that’s high up in the hierarchy of controls can cause a button to look non-native. The uninitiated developer can then find himself trying to “recreate” that original look and never quite getting it.