Portable toolkits just copy superficial look of Cocoa controls, but don't mimic "feel" part correctly. Not all mouse interactions and keyboard shortcuts work "right".
And even if your toolkit uses real Cocoa controls, there's still problem of window layout and UI design patterns, which aren't portable to Mac OS X (e.g. non-destructive preferences don't have OK/Apply buttons, drag'n'drop is expected almost everywhere, OK/Cancel are in reverse order than on Windows, etc.)
e.g. do you know OS X has separate clipboard for search fields? Cmd+E/Cmd+G. I like it and use it, but it doesn't work in "fake" Mac apps.
If you want to make good portable app that supports Mac well, then separate UI from the rest of the application and on Mac add Cocoa GUI (you don't need ObjC, you can use PyObjC or MacRuby).
Here's patio11 on desktop vs web: http://www.kalzumeus.com/2009/09/05/desktop-aps-versus-web-a...
That said, Tcl and Tk are a fun, fast way to hack up little applications if you need something local.
I really like the idea of desktop/web hybrid apps like Dropbox. You can get the best of both platforms.
I recommend learning the QT framework. It's cross-platform, unlike .NET, has very well designed libraries, and bindings for a bunch of languages if you don't want to write in C++.
It's nice if a desktop program syncs to an online service though (eg Picasa).
I think there is a place for native applications, as long as you've got a niche that needs filling. The web isn't the answer to everything.
[1] - http://www.executionunit.com/blog/2010/metalify_spotify_clon...
It hasn't been so long that browsers come with the necessary APIs. GMail used their own plugin in the beginning (Google Gears).
Of course, this depends on what your app is doing. Every useful app doesn't have to sync, or even create data that you'd want to sync. That said, most apps could greatly benefit from syncing, no matter what platform they're on.
The advantages of using this platform is that it is cross-platform, the application will have a really long longevity and "everyone" knows javascript (which might be a good or bad thing).
But actually Qt really adds a great abstraction layer that makes coding in C++ as enjoyable as Java, for example. Easy string manipulation, easy iterators, the signal/slot stuff is awesome, and the community is great.
Yes, HTML5 is here, but there is still a lot of stuff that you can't do with HTML/CSS/javascript. So my advice is: go for it. You won't regret.
- What kind of application do you want to build?
- What OS platforms will the users have?
- What experience do you have or is there a platform you particularly want to learn?
If you can narrow it down to one platform then most of these have pretty decent tools - if you want to support multiple platforms then things get interesting.
Is it mainly for Windows users? Might want to go with .NET. There are free versions of Visual Studio available for this purpose.
Is it for Linux systems? GTK with C/Python or Qt with C++/Python maybe a better option. All the libraries and compilers are free. Mono (an open source .NET implementation) also works well on Linux.
If its for the Mac then Objective-C + Cocoa is the de facto method. The IDE, Xcode is a free download from Apple. You can also get python bindings for Objective-C.
If it has to run on many platforms then you might want to think of a cross-platform toolkit.
If the program has a very simple UI, then you can probably get away with using wxWidgets or QT with Python.
If UI is more involved, then you will probably want to write the front-end for each in it's own native framework.
I've been looking at shoes by _why with some interest but think a dsl/swing (jvm) comboo would be the quickest and easiest cross platform option.
As a bonus Visual Studio has awesome auto-completion features and is a great WYSIWYG GUI editor.
MS really ought to pay me =p
Qt via Python or Ruby bindings might be the best way to go.
Pick a primary platform and optimise it. Maybe do a less-than-awesome port, if you're eager. If, down the road, your experience with the primary platform leads you to believe there is a large market for the taking, then you can weigh up improved sales versus development effort for a truly excellent implementation on another platform.
Regarding Qt on the Mac: I've done it before. It would be my less-than-awesome port. If you're not using Cocoa on the Mac, making a UI on par with a "native" app is a sisyphean task: you're fighting uphill and you never quite get there.
Only drawback is the non-native GUI. However, I've heard the Eclipse team has made a framework with a native look-and-feel available.
EDIT: Well, if your app is tiny, I guess the different look-and-feel would not be an issue.
Having said that, Swing, the offical GUI toolkit can be themed to look quite native. And Java Webstart is an absolute win: one-click deployment on every platform.
I would love a Java tool that could analyse your app and create an exe that contained a cut-down JVM. Cut-down in that any classes that aren't used (directly or indirectly) are omitted. This is not an easy thing to do given runtime control of class loading.
If your looking to low level system stuff or prioritize app speed have a look at Visual C++. Even Google used if for Chrome.
The most advanced UI framework I've seen is WPF. It has GPU acceleration; compatible, but separate tools for developers and designers; lots of 3rd party controls; can run in browsers through Silverlight.
Both these unfortunately come from Microsoft. You can get the dev tools for free or at low cost through programs like BizSpark.
As an experienced C++ developer I recommend you avoid C++ at all costs, even if you are an experienced C++ developer. A blend of C and another high-level language is a better choice.
For example, I've built game creation tools. These are better suited for the desktop because of the complex interactions and user data involved.
There are plenty of startups that have built their software partially or wholly on the desktop such as Dropbox and Unity3D. For small developers, building desktop clients to popular web services like Twitter is another relevant path to take.
Not the sexiest thing to use, but Swing is very customizable, and I wanted to ensure that it was cross-platform from the get go. In addition to that, we also have an ActionScript-based player/engine and invoke the Flex SDK to compile auto-generated AS3 source into a SWF.
The app also communicates with a server-side webapp to provide the resource sharing, so we've got a little bit of everything in our technology stack. ;)
Is it? I thought the main reasons were: no install, cross-platform, data available everywhere.
Downloading and installing adds extra friction to your distribution, which you can live without for most of the cases.