I’m writing a client app, quite old school, quite conservative. On Windows, I’d probably use .NET Forms, or maybe WPF, I’m not sure. On the Mac, I’d use Objective-C, Cocoa, and all that stuff. But I want this app to work on both, and I’d rather only write it once.
Should I write it in QT? I heard that when you get down to it, QT is buggy when you use it across platforms. Do I have to worry about continuity, what with Nokia’s recent troubles? What does the community think about Digia?
Should I write it in Java? Newer Mac OS doesn’t come with Java anymore, and Windows never has. How can I create a good setup experience like that? What about USB devices? There are some Java USB projects, but they’re all Windows or Linux based, no Mac. I’m also worried about getting a native look&feel, but I guess Swing has me covered there.
Should I write it in Python? I’m worried about performance here. Also, I’ve written large Python apps before, and I found that Python scales poorly to large code bases, because of the lack of static analysis.
What do you write yours in?
I asked a similar question a few weeks back Building a Mac and Windows GUI Application.
With regards to “native look & feel”: If you want this, don’t use a cross-platform GUI library. Write the GUI layer once for each platform. You can share the core application logic. You can probably get away with using Qt or wxWidgets on Windows and Linux since requirements for look and feel are more relaxed, but it will look rather out of place on Macs.
If “native look & feel” isn’t essential, I’d say go with Qt or wxWidgets and save yourself the headaches. I wouldn’t worry about continuity for Qt. Its desktop framework is very mature and isn’t maintained by Nokia (they maintain the mobile part). The open source community will keep it alive. Don’t know how buggy it is, but what cross-platform framework doesn’t have its share of bugs?
If “native look & feel” is essential, read on for languages choices for the core application logic.
Java: Don’t. Swing doesn’t actually provide a native look & feel. Just try and make any comprehensive GUI with it. Swing is also very painful to program in. There are plenty of alternatives to Swing, but I doubt any of them will be better than Qt. In addition, most apps will probably need to hook into the OS. Java bridging on Macs is deprecated. You’d have to use JNI for any extensions. Probably the same for Windows.
Python: That’s the path I took. Python is not only cross-platform, it comes with a rich set of cross-platform libraries. Also easy to write C/C++ extensions on any OS. Downside is that it’s relatively slow to start and takes more memory than a native C++ app. Trying to set up a deployable application is rather painful too. I wouldn’t worry too much about performance though unless you plan on doing serious data processing.
C++: Also a good choice. It’s not too hard to write a cross-platform app with C++ if you use cross-platform libraries like Qt or Boost (haven’t tried, conclusions from questions and research). Also compatible with xCode, Visual Studio, etc, so it’s easy to set up the project.