2011-03-23 11 views
10

¿Existe una forma sensata de desarrollar una aplicación móvil multiplataforma? Queremos que estas sean aplicaciones nativas en cada plataforma, y ​​no necesariamente un tipo de página web.Aplicación móvil: orientación a iPhone, WP7, Android y Blackberry

Actualmente estamos pensando que dividirlo en dos idiomas:

  • C# backend (lógica de negocio)
  • -> C# estándar de aplicaciones para WP7
  • -> aplicación integrada en MonoTouch de iPhone/iPad/etc.
  • Java backend (lógica de negocio)
  • -> Estándar Android aplicación Java (versión MonoDroid de C# no está listo todavía )
  • -> Estándar Blackberry Java aplicación

También podríamos desarrollar inicialmente en C# y use una de las herramientas de conversión para obtener nuestro C# convertido a Java como punto de partida.

¿Hay otro enfoque? Nuestros conjuntos de habilidades incluyen principalmente un fuerte fondo de C# .Net y una menor experiencia de Java.

Realmente no queremos bajar de nivel y usar algo como C/C++ para hacer el trabajo. Suelen ser simples aplicaciones LOB que se comunican con algún servicio web.

Pregunta lateral: ¿cómo los desarrolladores de juegos como los fabricantes de Angry Birds lo hacen?

ACTUALIZACIÓN:

MonoDroid ahora se lanza oficialmente. Parece que solo necesitarías usar Java para BlackBerry. Estamos considerando no desarrollar para BlackBerry en absoluto, porque el desarrollo de las otras 3 plataformas se ha simplificado. Definitivamente hay algún costo involucrado, ya que MonoTouch y MonoDroid son $ 399 y también necesitaría una licencia para Visual Studio (esto no incluye el costo de la tienda de aplicaciones, etc.).

+0

Lea http://stackoverflow.com/questions/4221315/what-kind-of-conversion-efforts-are-there-involved-in-porting-a-complete-droid-ap/4221446#4221446 es un más pequeño pregunta de rango pero explica bien mi opinión sobre el tema de plataforma cruzada. – blindstuff

+0

Sí, me alegro de que estemos planeando esto desde el principio. Ciertamente, queremos separar el código específico del dispositivo de UI del código reutilizable. – jonathanpeppers

Respuesta

2

No hay buena simple respuesta que conozco para todas las plataformas móviles. Puede utilizar entornos de desarrollo como Appcelerator Titanium, que compilan de forma cruzada con código nativo en varias plataformas (en este momento, por ejemplo, creo que Titanium admite iOS y Android, con planes para Blackberry). Sin embargo, estos generalmente tienen una API limitada a la que tiene acceso, y todavía necesita diseñar diferentes IU para las diferentes plataformas (en mi trabajo comercial, nunca he utilizado con éxito una plataforma como esta)

También podría diseñe toda la lógica empresarial en un back-end de servicios web y luego simplemente escriba aplicaciones "thin client" para cada plataforma. Esto funciona, pero por supuesto requiere acceso a la red cuando el usuario final quiere usar su aplicación. (Por lo general, estará allí, pero a veces no)

En última instancia, suelo terminar haciendo lo que usted propone: escribir la lógica comercial básica en un par de idiomas diferentes de la manera más genérica posible y luego agruparla en con código personalizado de UI/dispositivo para cada plataforma. No he encontrado una mejor manera de mí ...

(Por cierto, los juegos como Angry Birds están escritos principalmente en OpenGL y luego se cargan en el procesador OpenGL en cada plataforma. Pero podría estar equivocado ...)

+0

Bueno, esperaba más un "santo grial" pero no parece que exista tal cosa. Puedo marcarlo como la respuesta si no recibo otras sugerencias. – jonathanpeppers

+0

Sí, creo que lamentablemente el "santo grial" del desarrollo de plataforma móvil cruzada es un mito. Tal vez alguna vez ... –

+0

Una alternativa a Appcelerator es PhoneGap. Pero parece que estás bastante decidido a no usar este tipo de herramientas. Solo pensé en mencionarlo en caso de que alguien busque este hilo en el futuro y esté buscando alternativas. – Tony

0

No creo que esto sea (fácilmente) posible, si no está utilizando algún HTML5 (jquerymobile etc.) en una WebView en su propia aplicación (parece una aplicación real, pero de todos modos verá de alguna manera que no lo es) en lugar del navegador normal. Todavía puede usar alguna API nativa del dispositivo (acelerómetro, ...).

Existen plataformas (comerciales) como Sybase Unwired Platform que ayudan a generar algún código de cliente. Afaik para Blackberry y Windows Mobile incluso se puede generar alguna IU con los objetos comerciales en el servidor. Pero a mí me parece que esto podría ser demasiado pesado para su caso.

Saludos, Martin

+0

Creo que queremos evitar el uso de HTML5, ya que creo que nuestros clientes querrán hacer cosas más avanzadas en segundo plano, etc. – jonathanpeppers

1

Estas son algunas respuestas grande. Estoy de acuerdo, el desarrollo de la plataforma x es aún muy primitivo. Me gustaría agregar 2 puntos:

1) No es necesario que escriba su servidor en diferentes idiomas. Elija un idioma (según su nivel de comodidad, criterios de rendimiento, etc.) y luego conéctese desde las aplicaciones específicas de la plataforma directamente al servidor. Si su backend es el código del lado del servidor, una forma de hablar con él sería a través de XmlHttpClient. Si se trata de un fragmento de código nativo común en varias aplicaciones y está escrito en C++, puede usar JNI desde Java y el ensamblado de contenedor desde C#.

2) Otro motivo para evitar las herramientas de la plataforma x es que siempre tendrá que esperar a que sean compatibles con las nuevas API publicadas por el proveedor de la plataforma (Apple, Google, MSFT, etc.). Una vez que estas compañías lanzan nuevas API, las herramientas necesitarán ser actualizadas y solo entonces podrán usar las nuevas API.

+1

Todo lo relacionado con el servidor será C# (o lo que queramos). Debería haber sido más claro, pero por el "back-end" me refiero a la capa de negocios que se comunica con nuestro servidor y tiene algunas clases para representar datos del servidor. Esta es la parte que se duplicaría en 2 idiomas. Definitivamente estoy de acuerdo en que queremos evitar las herramientas de la plataforma x, ya que todas se quedan cortas de alguna manera, buenos puntos. – jonathanpeppers

+0

Aún así intentaría evitar las capas duplicadas (mucho más fácil de mantener, cuando ya se está tratando con capas duplicadas de la interfaz de usuario para cada plataforma). Esto es lo que haría: capa de interfaz de usuario -> capa de lógica de negocios -> capa de acceso a datos -> base de datos y tener las diferentes capas de la interfaz de usuario a través de un servicio web a la misma capa de lógica de negocios. – Beta

+0

El código que proporciona comunicación al servicio web sería el único código duplicado entre los 2 idiomas. Puede sacar el servicio web de la imagen, ya que podemos desarrollarlo como lo deseemos. Solo me refiero al código que se ejecuta específicamente en cada dispositivo. – jonathanpeppers

Cuestiones relacionadas