2012-06-27 12 views
12

Queremos desarrollar una aplicación para teléfonos inteligentes con iOS y Android. Principalmente estamos utilizando las tecnologías de Microsoft para desarrollar nuestras aplicaciones. Pensamos que si usáramos MonoTouch y Mono para Android, solo tendríamos que mantener una base de código con solo una capa de IU diferente para cada dispositivo.¿Por qué no se recomienda el uso del desarrollo de MonoTouch para iPhone?

Debido a que actualmente nadie en nuestro pequeño equipo ha desarrollado alguna vez una aplicación de teléfono inteligente y la necesitamos rápidamente, queremos subcontratarla. Preguntamos a otras compañías si permiten el desarrollo de MonoTouch u objetivo C para iPhone. La mayoría de ellos dijo que elegirían el Objetivo C. Dijeron que Objective C ofrece más funcionalidades y posibilidades, es más rápido y para MonoTouch existe la posibilidad de que Apple no lo respalde más en el futuro. ¿Todo eso es cierto o hay otras razones para preferir el Objetivo C? Sé que hay otros hilos como este, pero no respondieron a mis preguntas, especialmente la relacionada con el soporte de Apple para MonoTouch.

+0

posible duplicado de [¿Es MonoTouch una plataforma viable para el desarrollo de iPhone?] (Http://stackoverflow.com/questions/1847274/is-monotouch-a-viable-platform-for-iphone-development) –

+2

Son 2.5 años más tarde: creo que han cambiado las cosas suficientes como para que un nuevo conjunto de respuestas no sea una mala idea. –

+12

Parece que ninguna de las compañías con las que habló tiene una verdadera experiencia MonoTouch. –

Respuesta

40

aplicaciones. Pensamos que si usáramos MonoTouch y Mono para Android , solo tendríamos que mantener una base de código única con una capa de interfaz de usuario diferente de para cada dispositivo.

esta es una posibilidad SI usted estructura su aplicación correcta. Si no: no.

Si utiliza Java + ObjC + C# (para WP7/Win8 Metro etc), entonces esto no es una opción EN TODO

Debido a que actualmente nadie en nuestra pequeño equipo que se haya desarrollado una aplicación de teléfono inteligente y lo necesitamos rápidamente queremos subcontratarlo. Preguntamos a otras compañías si per MonoTouch u objetivo C para el desarrollo de iPhone. La mayoría de ellos dijo que la elegiría C. Objetivo

Si está externalización de TI, debe dictar lo que desea escrito en, ¿verdad? Si necesita apoyarlo en la empresa, y solo tiene habilidades de C#, entonces MonoTouch, etc. tiene más sentido para usted, ¡la gente paga las facturas!

Ellos dijeron que el Objetivo C ofrece más funcionalidad y posibilidades,

FUD, y también incorrecto. Monotouch tiene la API completa disponible. Si no está allí, como Xamarin para obligar a éste (que lo han hecho muchas veces antes)

es más rápido

me gustaría ver el punto de referencia. Sí, técnicamente, puede ser más rápido en algunas circunstancias, pero en el uso general, MonoTouch igual o más rápido.

Error del programador es una causa más común de problemas de rendimiento de la aplicación iOS. por ejemplo, no obtener cosas del hilo de la interfaz de usuario (que es más fácil de hacer en MonoTouch que en ObjC, aunque los bloques han ayudado mucho), o tomar demasiado tiempo para salir de FinishedLaunching (el método "principal", si se quiere, aunque no es realmente ...)

La recolección de basura y cosas como linq, análisis xml/json, genéricos y colecciones también son muy valiosos, y muy rápidos.

y para MonoTouch existe la posibilidad de que Apple no va a apoyar más en el futuro.

sí, existe la posibilidad. También existe la posibilidad de que Tim Cook se escape con los miles de millones de Apple y compre todo Hawaii (en lugar de la compra de Larry Ellison "Voy a tener esta isla"). Pero las posibilidades ahora son bastante escasas.

¿Es todo eso cierto o hay otras razones para preferir Objetivo C? Sé que hay otros hilos como este, pero no respondieron a mis preguntas, especialmente la relacionada con el soporte de Apple para MonoTouch.

Apple no es compatible con MonoTouch. Xamarin lo hace, y lo hacen excepcionalmente bien. Apple no admite nada excepto XCode, que es su producto.

Apple DOES permiten aplicaciones MonoTouch (hay muchas). Otra forma de verlo: generalmente, el 95% de los 100 mejores juegos se escriben usando Unity3D, que se basa en las mismas técnicas (compilación anticipada del código C# e incrustación de una versión reducida del marco Mono/.NET)

hay razones para preferir ObjC que serían:

  • usted ya sabe ObjC y Cocoa Touch y me gusta.
  • Su equipo ya conoce ObjC y CocoaTouch o puede contratar fácilmente a personas que sí lo tienen (nota: actualmente, hasta donde yo sé, los desarrolladores de iOS son MUY caros de contratar, si puede obtenerlos)
  • Necesita usar la beta es el día en que salen. Tenga en cuenta que puede usar el MonoTouch actual y desplegarlo en su dispositivo iOS [ELIMINADO] con la versión beta. Simplemente no puedes usar las cosas nuevas en iOS6 AÚN (Xamarin dijo "alrededor de 2 semanas", que debería ser ahora ...). También tenga en cuenta que no puede implementar una aplicación en la tienda creada con el SDK beta, incluso si no usa nada de eso. Ni siquiera puede mencionar iOS [ELIMINADO] en la descripción de su producto (lo he intentado)
  • adora [squareBrackets andTheOccasional: @ "cosas de sintaxis extraña"];

Ahora, ¿será fácil construir una aplicación de código compartido multiplataforma? INFIERNO NO. Es una pieza muy compleja de desarrollo para una aplicación no trivial. Pero esa es la parte divertida del desarrollo de software: ¡si fuera fácil, sería aburrido! Tome el libro de Greg Shackles (http://www.amazon.com/dp/1449320236) para tener una idea de lo que necesita para el desarrollo de estilo iOS + WinPhone + Android.

+1

Gracias por su respuesta detallada. También comencé a leer el libro que mencionaste y hasta ahora es muy bueno tener una visión general. – chrinetr

+0

Excelente, me alegro de que lo haya encontrado interesante. Ahora estoy en un 75%, también es bueno ver las diferencias de terminología entre las tres plataformas. –

-2

Ningún cuerpo puede decir con certeza qué será lo que Apple admitirá y lo que no admitirá en el futuro; sin embargo, Apple tuvo algunos problemas con el mono en el pasado, y como la historia tiende a repetirse, puede ser una posibilidad de que vuelva a suceder

dicho esto, siempre van con los SDK de desarrollo de aplicaciones nativas y entornos, que será más flexible, y se actualizará en tiempo real, y el rendimiento siempre será mejor en el nativo

+5

Aparte de la cosa de "nada en absoluto excepto ObjC" cuando intentaban matar a Flash, Apple nunca tuvo un problema con las aplicaciones de Mono. Incluso cuando rechazaban oficialmente las "aplicaciones no ObjC", todavía estaban aprobando las aplicaciones MonoTouch (incluida la mía) –

8

De hecho, he usado MonoTouch para cada aplicación que he desarrollado. El rendimiento nunca ha sido un problema, y ​​no me puedo imaginar lo malo que hubiera sido usar Objective-C. He tenido 2 top 10 de aplicaciones en la tienda de aplicaciones de EE. UU .: "Draw A Stickman" y "Draw A Stickman: Episode 2" (no se preocupe, estamos trabajando en más).

Si conoce C# y .Net, sus ganancias en productividad serán masivas en comparación con lo que sucedería al intentar aprender Objective-C. Fui desarrollador de C# .Net (solo Windows) antes del desarrollo de iOS y la transición a MonoTouch es genial.

Si le gusta Linq, analiza XML en menos de 100 líneas, recolección de basura, genéricos, multi-threading simple y sin corchetes, MonoTouch es para usted.

11

Mi corazonada es que las empresas con las que hablas simplemente están acostumbradas a usar Objective-C. Ahí es donde se encuentran sus habilidades, y esa es la razón principal por la que preferirían no desviarse de su camino. Las otras razones se pueden argumentar en ambos sentidos.

Es cierto que nadie puede predecir lo que va a hacer de Apple, pero hay una muy pequeña probabilidad de que Apple va a prohibir juegos de herramientas de terceros & API como lo hicieron en el verano de 2010. Eso fue sólo un corto período de tiempo, y ellos invirtieron completamente esa decisión. Su enfoque actual es facilitar el desarrollo de aplicaciones, lo que significa mantener el campo abierto a métodos de desarrollo alternativos. Creo que MonoTouch es seguro.

En cuanto a la velocidad, C# generalmente produce ejecutables muy rápidos. Puede que no sean bastante tan rápido como Objective-C, pero dudo que noten la diferencia. Recuerdo haber visto un sitio web en algún lugar que mostraba que C# superaba a C/C++ en algunas pruebas, pero eso estaba en el entorno .NET, no en Mono ... y desafortunadamente ya no puedo encontrar la referencia. Seguiré buscando. Pero la conclusión sobre la velocidad es que las velocidades de C# son muy buenas. No es como BASIC vs C. Más como Java/JIT vs C.

C# le da muchos, muchos (!) ventajas sobre Objective-C, y se han enumerado en otras respuestas desbordamiento de pila, por lo que ganó no repetirlos aquí. Puedes encontrarlos con bastante facilidad.

Soy un fanático obvio de MonoTouch, pero tengo que decir una cosa: creo que es un error para las empresas pensar que porque dominan C# /. NET que fácilmente podrán desarrollar y/o mantener aplicaciones de iOS usando MonoTouch. Simplemente no es cierto, porque MonoTouch es básicamente una capa C# sobre la API CocoaTouch, lo que significa que tienes que aprender la forma de hacer las cosas de Apple. Tienes delegados de aplicaciones y controles de vista y todo el material de UIKit. Hay una curva de aprendizaje real allí. Pero si dominas C#, MonoTouch será de gran ayuda.

ACTUALIZACIÓN:
encontré el artículo sobre C# velocidad: Head-to-head benchmark: C++ vs .NET

+1

MonoTouch utiliza la compilación previa, por lo que la comparación entre Java (que normalmente es aplicable) no es en este caso. Está ejecutando el ensamblado ARM nativo, desde el generador de código mono, vinculado y construido con gcc o llvm (igual que todas las aplicaciones xcode/objc) –

+0

Es cierto, pero comparaba la velocidad de ejecución general, no la arquitectura subyacente. Gracias, sin embargo, buena aclaración. (TBH, mi comparación de Java también puede tener fallas: C# es probablemente más rápido. Pero en cualquier caso, está dentro del mismo orden de magnitud). –

3

Tenemos una aplicación de línea de negocio que utiliza MS SQL como un almacén de datos, y tiene WinForms y UI web. Se integra con nuestras aplicaciones de Windows Mobile 6.5 y tabletas con servicios web. Todo C#.

Nos hemos comprometido completamente con MonoTouch después de algunos experimentos en Objective-C y HTML-5 (teníamos prototipos en funcionamiento): tenemos que volver a utilizar nuestra lógica comercial y nos sentimos cómodos desarrollando nuevos códigos en C#.

Nuestra lógica empresarial se mejora constantemente, y estas mejoras son inmediatamente visibles para la aplicación móvil, sin tener que replicar la lógica en Objective-C o C++.

Nuestro problema principal es encontrar un programador de C# que se sienta cómodo con las interfaces de usuario de iPhone y iPad.

MonoTouch es estable y no hemos encontrado limitaciones (estamos vinculados a la misma API de iOS que Objective-C se une). Durante nuestra curva de aprendizaje, tuvimos preguntas, tropezamos con errores y tuvimos algunos malentendidos, pero el apoyo de Xamarin es excelente.

El rendimiento no ha sido un problema: nuestra aplicación es ágil aunque está haciendo muchas cosas detrás de escena.

6

Uso tanto Objective-C como C# (MonoTouch & Droid), y realmente me gustan ambos. Cuando estoy codificando en C#, hay muchas características como Linq que me encantaría en Obj-C, & cuando estoy codificando en Obj-C, hay muchas cosas que me gustaría tener en C#, pero me adapto a lo que estoy codificando lo suficientemente rápido. Con respecto al rendimiento, no he detectado ninguna diferencia, incluso para cosas bastante intensivas en gráficos, así que no usaría eso como una razón para no usar C#.

Creo que en última instancia se trata de lo que es cómodo para la codificación, aunque, por supuesto, con un proyecto multiplataforma bien diseñado, PUEDES tener un código central totalmente multiplataforma si utilizas Mono, y solo tendrás para hacer las cosas de la interfaz de usuario de una manera específica para la plataforma: cuando se trata de esto, obviamente necesitarás conocer las cosas nativas para que tus UI funcionen de una manera que sea apropiada para la plataforma y familiar para sus usuarios.

+0

Me interesan las características de Objective-C que extrañas en C#. ¿Cuidado para elaborar? –

Cuestiones relacionadas