¿Cómo escribir aplicaciones para diferentes plataforms? Linux, Mac, Windows y plataforms mobilees

Queremos escribir un cliente para un service en línea que debería estar disponible en tantas plataforms como sea posible. Esta pregunta es acerca de qué lenguaje de progtwigción y marco debemos usar para crear este cliente. Estas plataforms son necesarias: Linux, Mac, Windows, iOS (iPhone, iPod, iPad) y Android. Mientras más, mejor.

Para las plataforms mobilees hay Titanium Mobile . Aún no he probado esto, el website dice que puedes desarrollar iOS y Android utilizando habilidades web como Javascript. Aún no sé si puedes implementar para ambas plataforms con el código SAME. ¡Que sería genial!

También hay Titanium Desktop, pero no me gusta la idea de que el código fuente completo se comparta con la aplicación final. Titanium también lo hace para Mobile, pero no es tan fácil modificar una aplicación cargada a través de App Store.

Entonces, ¿qué otra forma hay de crear una aplicación que se ejecute al less en las tres plataforms principales de escritorio? Pensé que c # con mono sería el path a seguir, pero me di count de que necesitas usar mono con MonoMac para publicarlo en la Mac App Store y usar cosas como Growl. Y dado que MonoMac solo está disponible para Mac, de nuevo no es posible desplegar la aplicación mono en todas las plataforms sin volver a escribirla al less para Mac. Y sería bueno si la aplicación parece "nativa" en todas las plataforms. Gtk # simplemente no se ve bien en una Mac. Está "bien" en Windows y genial en Linux.

Sé que podríamos usar Objective-C para iOS y Mac, Java para Android, C # .net para Windows y C # .mono para Linux, pero el punto principal es que no queremos escribir la misma aplicación en muchos idiomas diferentes . Eso haría muy difícil el desarrollo y el mantenimiento.

Y preferimos lenguajes con syntax estilo C que son mucho más fáciles de aprender para nosotros desarrolladores web PHP. Por cierto: nos disgusta Air y no estoy seguro sobre Java ya que nunca lo usé, pero tampoco se ve "nativo" y se siente algo lento.

Editar:

Solo una nota: no sería un problema crear un formulario propio para cada plataforma si al less el código restante es el mismo. ¿Es posible usar los foros MonoMac, Gtk # y Win en la misma aplicación C #? Y prefiero C # sobre C ++ ya que no tengo habilidades en C ++, así que primero debo comprobar cuán difícil es escribir con Qt.

Otra nota: no pensamos gastar mucho dinero y porque tenemos que pagar los Progtwigs para desarrolladores de manzanas, queremos usar tecnología gratuita o barata. Código abierto preferible.

Simplemente use C # para todo lo anterior.

El proyecto mono cubrirá Mac y Linux, con monodroid los requisitos de su Android están cubiertos y monotouch se hará cargo del iPod / iPad / iPhone.

En lo que respecta a UI – mono tiene soporte completo para el espacio de nombres System.Windows.Forms, por lo que no tiene que usar GTK # si no lo desea.

No creo que necesite mencionar el soporte de Windows;)

Si realmente desea admitir todas esas plataforms desde una única aplicación, lo mejor que puede hacer es crear una aplicación web. Con HTML5, una aplicación de este tipo puede incluso almacenarse en caching en el dispositivo y usarse cuando no hay connection disponible. Además, esa estrategia haría posible personalizar la interfaz de usuario en function del dispositivo que ejecuta la aplicación.

No tendrás buena suerte si deseas crear una aplicación nativa única que se ejecute en Android e iOS, y mucho less en todas las otras plataforms que mencionaste. La razón por la cual son diferentes plataforms en lugar de lo mismo es que son, bueno, diferentes . Tienen diferentes capacidades, se ejecutan en diferentes hardware, se construyen con diferentes idiomas, emplean diferentes models de aplicación con diferentes interfaces de usuario y tienen audiencias con diferentes expectativas.

La mejor solución que he encontrado en los últimos años es Qt SDK . Gran soporte para todas las plataforms principales, Symbian, OS X, sabores de Linux, Windows, Windows CE (mobile), Android y iOS, soporte parcial y etc.

Su base es C ++, pero los enlaces para casi todos los idiomas (como C #) están disponibles. También se cubre una gran cantidad de ayuda y soporte.

Las libs centrales de Qt son muy rápidas y extensas, y todo el escritorio KDE (de Linux) termina con ellas. Software famoso como VLC y VirtualBox se realizan en Qt.

Otra forma relativamente nueva de hacer un desarrollo multiplataforma es usar Eto.Forms de código abierto , lo que le permite tener una base de código UI dirigida a las herramientas nativas de cada plataforma. Es una capa de abstracción de UI que puede apuntar GTK #, MonoMac / OSX, WinForms y WPF.

También hay un puerto iOS en process.

Java suena como el mejor ajuste. Es multiplataforma, fácil de entender, tiene una enorme base de usuarios y Android se basa en ella.

Según si necesita un modo de interacción sin connection, parece que debe desarrollar una aplicación web. Puede desarrollar una versión mobile y una versión de escritorio y, por lo tanto, admitir todas las plataforms anteriores. Mira la aplicación de YouTube para Iphone, conserva la misma funcionalidad que la aplicación iphone, pero es puramente html. Además, los browseres compatibles con html5 también podrían funcionar sin connection.

Por loco que parezca, echa un vistazo a Flash / Flex : es multiplataforma, codifica una vez, se ejecuta en todas partes, ahora se comstack hasta código nativo, por ejemplo, Android e iOS, y el reproductor 10.1 se envía por todas partes. Tuve que resolver exactamente este problema y cuando Flash Builder Burrito se ocupó del mobile después de trabajar con él durante un time, he cambiado de C # / Flash híbrido a Flash solo para clientes. (Nuestro backend es C # / Node / C ++, etc.).

Dependiendo de sus líneas de time y necesidades, es algo que se debe considerar.

Algunos enlaces aleatorios para leer:

Publicación de blog sobre performance y video para dispositivo multi aplicación única

Desarrollo de aplicaciones flash y flex