[Mono-osx] General cross-platform issues and considerations

Andrew Brehm ajbrehm at gmail.com
Thu Oct 15 06:36:28 EDT 2009

Yes, ideally the UI should be rewritten.

I just think it's ironic that cross-platform tools like REALbasic or QT can
give you (somewhat) native-looking applications based on the same code while
Mono, with its ability to run even the same binary on all target platforms,
cannot. There is a certain disconnect there.

And when I have to rewrite the GUI for each platform I can also recompile
the non-GUI code while I am at it and most of the advantage of managed code
goes away.

My particular problem is that Mono's Windows Forms does not support
right-to-left writing on Linux and Mac OS, otherwise a Windows Forms version
of my program would at least run on all three platforms. (I really have to
try whether Gtk# works with right-to-left scripts! Anyone know?)

Ignoring the right-to-left script issue, I think the best solution is this:

I Put everything but the GUI in a DLL.

II Write a GUI for each targeted platform and one GUI that runs on

III Offer four downloads:

1. Mac OS X (Monobjc)

2. Linux (Gtk#)

3. Windows (WPF or Windows Forms)

4. cross-platform (Windows Forms or Gtk#)

Download #4 should have a functional GUI without bells or whistles.

The DLL itself should be perfectly cross-platform with everything
platform-specific abstracted within the DLL.

duanew wrote:
> Not an easy answer.  The conclusion I have come to is that the UI most
> always be rewritten for each platform.  One goal that I have when writing
> an
> application is that it offers the best UI experience possible.  At least
> so
> far, any cross platform UI is going to diminish the user's experience with
> your application, which makes your application look inferior.  Separate
> the
> logic as much as possible, but use native UI tools to develop the UI.
> Thanks to mono we have the ability to reuse large portions of the library.
> To me implementing the UI in native tools and recompiling is trivial
> compared to the cost of writing in C, C++, Objective-C or using a
> non-standard cross-platform GUI toolkit.
> Bset of luck.
> Duane
> On Wed, Oct 14, 2009 at 6:49 AM, Andrew Brehm <ajbrehm at gmail.com> wrote:
>> I have been working with Delphi Prism for a while now and can recommend
>> it
>> to
>> anyone who wants to do Mac development in .NET. Any criticism below is
>> not
>> to be understood as criticism of Delphi Prism. It's just the tool I use
>> because I think it is the best for the job.
>> Between Windows Forms, Windows Presentation Foundation (WPF), Monobjc
>> (Cocoa
>> bindings), and Gtk# we have ample GUI toolkits to choose from, but this
>> also
>> means that the ability of .NET/Mono binaries to run unchanged on any
>> platform is somewhat diminished, to say the least. I found that Mono's
>> implementation of Windows Forms on Mac OS and Linux does not support
>> right-to-left text. I haven't checked with Gtk#. (In fact I have never
>> really looked at Gtk#.)
>> So currently the best solution for cross-platform .NET development is to
>> create separate binaries for each platform which, as I said, diminished
>> the
>> advantage of being able to run the same binary on any target platform.
>> One year ago I managed to create a test program that would check whether
>> it's running on Windows or Mac OS and then use a Windows Forms or a
>> Cocoa#
>> (back then) GUI depending on the result. A single binary worked on both
>> systems again, with decent results on both targets too. But this
>> configuration is not easily supported by IDEs or build scripts and
>> doesn't
>> play well with Apple's (excellent) concept of bundles.
>> But then even checking which OS one is running on is difficult since Mono
>> reports UNIX when running on Mac OS (at least it did the last time I
>> checked).
>> How is the Gtk# implementation on Mac OS? Is it better than Windows
>> Forms?
>> Would Gtk# be a good solution for a single binary for all three targets?
>> (On
>> Windows, can I just include Gtk# DLLs or does the user have to install
>> Mono
>> or Gtk# himself?)
>> I like Monobjc and the Cocoa GUI it makes available to .NET programs. But
>> porting the GUI part of an app to Monobjc is (doable but) an effort that
>> seems ironic considering .NET/Mono is inherently a cross-platform
>> development environment.
>> So what's the best way to go for cross-platform apps? Three separate
>> GUIs?
>> Gtk# for all? And if the first, should it be a single binary checking the
>> OS
>> and then using the right GUI or should it be separate binaries?
>> --
>> View this message in context:
>> http://www.nabble.com/General-cross-platform-issues-and-considerations-tp25888867p25888867.html
>> Sent from the Mono - OSX mailing list archive at Nabble.com.
>> _______________________________________________
>> Mono-osx mailing list
>> Mono-osx at lists.ximian.com
>> http://lists.ximian.com/mailman/listinfo/mono-osx
> _______________________________________________
> Mono-osx mailing list
> Mono-osx at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-osx

View this message in context: http://www.nabble.com/General-cross-platform-issues-and-considerations-tp25888867p25906262.html
Sent from the Mono - OSX mailing list archive at Nabble.com.

More information about the Mono-osx mailing list