topbanner_forum
  *

avatar image

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
  • Thursday March 28, 2024, 12:43 pm
  • Proudly celebrating 15+ years online.
  • Donate now to become a lifetime supporting member of the site and get a non-expiring license key for all of our programs.
  • donate

Author Topic: Cross-platform mobile apps development: MonoTouch/MonoDroid, Marmalade, etc.  (Read 18222 times)

Armando

  • Charter Member
  • Joined in 2005
  • ***
  • Posts: 2,727
    • View Profile
    • Donate to Member
I'm looking at the various options for cross-platform mobile apps development, reading forums and various articles (Mobile application development).

The C#/.Net way with MonoTouch/MonoDroid is attractive... but then Marmalade looks nice too. There are also other interesting options like Rhodes.

There are of course several parameters to consider (familiarity of language, price, development speed, etc.). But I don't want to clog the discussion right away...  :-[

Any opinion/"hands on" experience on the matter ?
« Last Edit: September 30, 2011, 09:51 AM by Armando, Reason: [Change the thread title to better reflect the discussion.] »

Armando

  • Charter Member
  • Joined in 2005
  • ***
  • Posts: 2,727
    • View Profile
    • Donate to Member
Re: MonoTouch / MonoDroid (Mono for Android) VS Marmalade, etc.
« Reply #1 on: September 28, 2011, 09:19 PM »
Nice (older) post on MonoTouch and Objective C on stackoverflow. Is MonoTouch worth the cost or should I just learn Objective-C?

Eóin

  • Charter Member
  • Joined in 2006
  • ***
  • Posts: 1,401
    • View Profile
    • Donate to Member
Re: MonoTouch / MonoDroid (Mono for Android) VS Marmalade, etc.
« Reply #2 on: September 28, 2011, 09:55 PM »
I'm using Marmalade to develop a game, I started back when it was still called AirPlay SDK. Being primarily a C++ coder I wanted to stick with the language and Marmalade allowed me to do that and avail of many of the Boost libraries too (not all though). The whole build once, then deploy to any platform really does work too, it is a fantastic dev environment.

BUT... a 2nd app I'm working on really requires a good UI, and I'm a stickler for wanting my applications to have the "native feel". Marmalade claims in a future version (the next version even) that it will support native UIs. I didn't have the luxury of waiting to see how that turns out so I opted to write a portable C++ core and glue it to separate Android/Java and iOS/ObjC user interfaces.

The type of app you want to develop is important, how much OS integration will you want?

mahesh2k

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 1,426
    • View Profile
    • Donate to Member
Re: MonoTouch / MonoDroid (Mono for Android) VS Marmalade, etc.
« Reply #3 on: September 29, 2011, 12:18 AM »
Maybe off topic but have you checked Sencha Touch ?

Renegade

  • Charter Member
  • Joined in 2005
  • ***
  • Posts: 13,288
  • Tell me something you don't know...
    • View Profile
    • Renegade Minds
    • Donate to Member
Re: MonoTouch / MonoDroid (Mono for Android) VS Marmalade, etc.
« Reply #4 on: September 30, 2011, 01:11 AM »
Marmalade looks very nice! Rhodes looks interesting as well.

However, don't buy into hype for any dev tools. Whether that's MonoTouch/Mono for Android or Marmalade or whatever. At some point you WILL encounter obstacles that must be solved at the native level. You need to have flexibility there to solve those problems, and not all SDKs or toolkits will let you do that.

Whether that's at the UI level, or being able to open a media file (which you CANNOT do on iOS in a sane manner)... Those problems crop up when you least expect them.

Whichever toolkit you choose, just make sure that you're comfortable with it.

To be honest, I think I'd go with a C~ish language if I were to choose again. (I use the Mono toolkits.) A lot of mobile kits are basically just high-level scripting languages with little possibility to do much other than line of business applications (which they are designed for). Marmalade looks very nice there as it would also let you easily move to other C-based SDKs like bada.

I know that the edge-case problems that I've seen have been solvable in MonoTouch, and I expect that it would be the same with Marmalade. I'm not sure about Rhodes though -- I'm not very familiar with Ruby.

Do post back though when you choose, and any thoughts or opinions you develop. I'd be interested to hear.
Slow Down Music - Where I commit thought crimes...

Freedom is the right to be wrong, not the right to do wrong. - John Diefenbaker

Armando

  • Charter Member
  • Joined in 2005
  • ***
  • Posts: 2,727
    • View Profile
    • Donate to Member
Re: MonoTouch / MonoDroid (Mono for Android) VS Marmalade, etc.
« Reply #5 on: September 30, 2011, 09:43 AM »
Thanks for your opinions! Some quick answers/thoughts :

@mahesh2k: Thanks. Looks nice and powerful too. I bookmarked it and will study it some more later.

@Eóin: I knew you were using marmalade from another thread here. Thanks for sharing your thoughts about UI aspects. Marmalade seems like it's putting a lot of effort into its UI framework and so maybe it'll soon be able to lenify your (legitimate) "criticisms". ;)

The type of app you want to develop is important, how much OS integration will you want?"
-Eóin


It's of course an important point, and I know my intro was a bit vague (on purpose)... Unfortunately, I'm not entirely "there" yet, in terms of details etc.. It will most probably be database oriented, with information exchange (xml, json), grids to display data, etc. For that type of stuff, I have the feeling (from what I've read) that MonoTouch would be a good candidate. But it's mostly an (educated) feeling at this point as other packages would be able to handle that easily as well I believe.

@Renegade:Yes, I saw you're using MonoTouch. MonoTouch looks great. And the posts on stackoverflow and other articles all around are pretty positive and inspiring. Not to mention the "most important" MonoDroid side of the coin which makes the whole package even more attractive.

Whichever toolkit you choose, just make sure that you're comfortable with it.

To be honest, I think I'd go with a C~ish language if I were to choose again. (I use the Mono toolkits.) A lot of mobile kits are basically just high-level scripting languages with little possibility to do much other than line of business applications (which they are designed for). Marmalade looks very nice there as it would also let you easily move to other C-based SDKs like bada.
-Renegade

This is just the beginning of the trip for me, and I don't know how much time and energy I want to invest in that "project" yet. I'm also a beginner and I need to make choices without loosing touch with the "big picture" (i.e.: other contracts and future jobs which might not be linked to mobile development).

In "C~ish type of language", I guess you don't include C#, or... do you ?

My "background" (ahem -- more of a foreground...) is Java and VB (with all the other usual stuff like XML, JSON, etc.), so in any case I'm ready to learn a new language if necessary -- C#, .Net, C++, Objective C, JavaScript, Ruby, Python, whatever.  Of course -- as I just suggested -- it'd ideally be a language which I could also relatively easily use for other contracts (i.e.: a language well adapted to the current market). I know C# and Objective C are still growing in popularity and C++ is pretty stable. The little I've read on C#, I like... But so did the stuff I read about C++ and Objective C. However, I'm wondering how much use Objective-C has outside Apple and iOS, so it doesn't look like the best choice at this point -- especially that I'm not targeting iOS per se, but also Android and Windows (mobile).  I might be wrong though.

Anyway... I don't want to get into a dull/superficial language debate as I'm pretty sure you guys will understand my points.

looking forward to even more points of view !

Renegade

  • Charter Member
  • Joined in 2005
  • ***
  • Posts: 13,288
  • Tell me something you don't know...
    • View Profile
    • Renegade Minds
    • Donate to Member
For C~ish, I'd include C#. You can port between C# and C++ relatively easily compared to something like VB.NET or Delphi to C++.

If you already know Java and VB, then C# is a very easy transition.

For Objective-C, it allows you to use pure C, which allows inline assembler, and regular C++, so you can still side with those more standardized languages there and shy away from the Objective-C somewhat.

I'm also a beginner and I need to make choices without loosing touch with the "big picture" (i.e.: other contracts and future jobs which might not be linked to mobile development).

I think that's the key. For me, as a small developer, getting caught up in the details is a death trap. Focusing on the big picture is the only way to survive. There are simply too many details to worry about.

If you're thinking about this as something going forward and possibly non-mobile, if I were in your shoes, I'd definitely go with the C~ish route. It simply opens more doors. While I'm partial to C#, I think that the future is only getting brighter for C++. If I were to switch to another language for most of my development, I would 100% jump over to C++.

I'm not sure how parallel my situation is to yours though. My clients and my software put food on the table, so I'm risk-averse for a lot of things.
Slow Down Music - Where I commit thought crimes...

Freedom is the right to be wrong, not the right to do wrong. - John Diefenbaker

f0dder

  • Charter Honorary Member
  • Joined in 2005
  • ***
  • Posts: 9,153
  • [Well, THAT escalated quickly!]
    • View Profile
    • f0dder's place
    • Read more about this member.
    • Donate to Member
I didn't have the luxury of waiting to see how that turns out so I opted to write a portable C++ core and glue it to separate Android/Java and iOS/ObjC user interfaces.
I can see how you can glue a C++ core to iOS/ObjC, but how do you do it for Android?

As for Rhodes, no experience with it, but... Ruby? Ugh. A lot of the people I see praising Ruby are those "Anti People" (first they make the move from Windows to Mac, then they make the move from Java to Ruby... and are probably too young to have ever touched C or C++).

The language is cute enough and all, but I personally don't see the attraction to it (apart from Rails, but that's "just" a framework). The mainline implementation is S-L-O-W, being a dynamic language is has relatively poor tooling support, and (again, because of being a dynamic language) it's a second-class citizen on the JVM, Dalvik and .NET VMs. And then there's the utter configuration & maintenance hell - Ruby is known for even non-major versions breaking backwards compatibility... and that's "just" the core language, it's libraries are even worse.

Fun if you like playing on the bleeding edge, but not something I'd personally choose for professional development.
- carpe noctem

Eóin

  • Charter Member
  • Joined in 2006
  • ***
  • Posts: 1,401
    • View Profile
    • Donate to Member
I didn't have the luxury of waiting to see how that turns out so I opted to write a portable C++ core and glue it to separate Android/Java and iOS/ObjC user interfaces.
I can see how you can glue a C++ core to iOS/ObjC, but how do you do it for Android?

With JNI and the NDK. It's messier that ObjC++ of course, but a few lightweight headers and you can make calling make calling static and member methods on Java side very easy. For example, once you have the object handle of an android Button widget you can call member functions with something like the following

Code: C++ [Select]
  1. void button::set_text(const std::string& text) const
  2. {
  3.         handle->call_method<void>("setText", "(Ljava/lang/CharSequence;)V", jni::to_jstr(text));
  4. }
  5.  
  6. void button::set_enabled(bool enable) const
  7. {
  8.         handle->call_method<void>("setEnabled", "(Z)V", enable);
  9. }

Like I say, it's a bit messy, but I've managed to make it clean enough to not get in the way. The JNI interface seems complete enough that a more experienced programmer could surely write a Boost.Python, or luabind wrapper to automate all the boiler plate.

Armando

  • Charter Member
  • Joined in 2005
  • ***
  • Posts: 2,727
    • View Profile
    • Donate to Member
@Renegade: Thanks for your thoughts, I appreciate. The C~ish route does seem pretty sensible (in terms of employment, language versatility, robustness, performance and "expendability"), and since my own reflections and curiosity (not to mention experience) tend to go/be into that direction too, it seems like a good "match". But I'll see.

As f0dder says, Rhodes and maybe other alternative -- even if they seem nice at the first glance -- aren't as sensible choices. At least in my case:  the story might be different if I was a Ruby programmer, but I am not...

I haven't been doing much work on the whole mobile app development subject in the last few days. But when I will, I'll update this thread with other thoughts/opinions.

f0dder

  • Charter Honorary Member
  • Joined in 2005
  • ***
  • Posts: 9,153
  • [Well, THAT escalated quickly!]
    • View Profile
    • f0dder's place
    • Read more about this member.
    • Donate to Member
Eóin: interesting - I only thought Android devices allowed Java Dalvik code, didn't know about NDK! JNI sucks monstrously, but it's better than not having the capability.
- carpe noctem

40hz

  • Supporting Member
  • Joined in 2007
  • **
  • Posts: 11,857
    • View Profile
    • Donate to Member
You might want to take a look at a product called Illumination by Radical Breeze Software. It's a cross-platform code-generator type RAD tool that runs under Windows, OS X, or Linux and outputs native source code for: Windows, OSX, Linux, Android, iOS, Maemo, and Flex/Flash. HTML5 was just added and is a free upgrade.

I bought a copy ($50) a few days ago and (so far) it looks very promising.

It is primarily designed to handle user interface and basic program functions although it's pretty robust in that regard. The really nice thing about it is that it generates decent stand-alone royalty-free code which does not require a custom runtime or library in order for it to work. The produced code can also be edited, re-purposed, or incorporated into a more traditionally developed project - or where the project requirements exceed the scope of what Illumination was designed for. Very cool.

The visual design methodology will likely draw sneers from a lot of coders. But having coded both ways, I have to admit that putting something together or starting with this tool is a major timesaver.

The code it generates can also be studied. I found some of its approaches to doing things quite interesting since Illumination's coding approach and style is often very different from my own.

Illumination is the brainchild of Linux Action Show co-host Bryan Lunduke. Smart guy with some interesting things to say about open software, coding, and Linux. There's a good intro video up on YouTube (58 mins!) where Bryan demos and talks about Illumination, the design philosophy behind it, how it works, and then does some Q&A with the audience. Well worth a watch if you're at all interested in this product or what it does. I decided to buy a copy after watching the video because I got so curious about it.

WARNING: The recorded audio quality is pretty bad, as Bryan warns at the beginning of the vid. IMO it's really not that bad (ok...it is). But it's worth putting up with since the talk is quite interesting. Especially where Bryan gets into what the design goals were for Illumination - and how they were ("mostly" by his own admission) accomplished.



If the sound really drives you nuts, there's an older formal presentation that covers pretty much the same ground. Just be aware that the version in this video is version 1.0beta4. The current version is 4.0 so it's since gone a ways beyond the limitations of the version shown in this video.



---------------------
Disclaimer: 40hz's only relation to Radical Breeze is that he bought a copy of Illumination. And with his own money too!




Armando

  • Charter Member
  • Joined in 2005
  • ***
  • Posts: 2,727
    • View Profile
    • Donate to Member
Thanks 40hz ! I'm going to have a look at that tonight.

Renegade

  • Charter Member
  • Joined in 2005
  • ***
  • Posts: 13,288
  • Tell me something you don't know...
    • View Profile
    • Renegade Minds
    • Donate to Member
Oh... One other consideration...

Game engines are mostly C/C++, so if you plan on doing any games, the C++ route with Marmalade is likely a good choice.
Slow Down Music - Where I commit thought crimes...

Freedom is the right to be wrong, not the right to do wrong. - John Diefenbaker

Armando

  • Charter Member
  • Joined in 2005
  • ***
  • Posts: 2,727
    • View Profile
    • Donate to Member
Thanks Renegade. I'll keep that in mind.