c# objective-c mono xamarin.ios

c# - ¿Cómo decidir entre MonoTouch y Objective-C?



xamarin.ios (14)

Algo que me gustaría agregar, aunque haya una respuesta aceptada: ¿quién quiere decir que Apple no solo rechazará las aplicaciones que tienen signos de haber sido construidas con Mono Touch?

Después de pasar por una sesión de hoy en Mono en un evento local de .Net, el uso de MonoTouch fue ''tocado'' como una alternativa para el desarrollo de iPhone. Estar muy cómodo en C # y .Net, parece una opción atractiva, a pesar de algunas de las peculiaridades de la pila Mono. Sin embargo, dado que MonoTouch cuesta $ 400, estoy un tanto molesto si este es el camino a seguir para el desarrollo del iPhone.

¿Alguien tiene una experiencia en el desarrollo con MonoTouch y Objective-C, y si es así, el desarrollo con MonoTouch es mucho más simple y rápido que aprender Objective-C y, a su vez, vale los $ 400?


Cambié. Monotouch me permite escribir aplicaciones al menos 3 o 4 veces más rápido (4 aplicaciones por mes en comparación con mi antiguo 1 por mes en Obj C)

Mucho menos mecanografía.

Solo mi experiencia.


Como alguien con experiencia tanto con C # como con Objective-C, diría que para la mayoría de las personas, Xamarin valdrá la pena.

C # es un lenguaje realmente bien diseñado y las API de C # también están bien diseñadas. Por supuesto, las API de Cocoa Touch (incluido UIKit) también tienen un gran diseño, pero el lenguaje podría mejorarse de varias maneras. Al escribir en C # es probable que sea más productivo que escribir el mismo código en Objective-C. Esto se debe a varias razones, pero algunas razones serían:

  • C # tiene inferencia de tipo . La inferencia de tipos hace que escribir código sea más rápido, ya que no tiene que "conocer" el tipo en el lado izquierdo de una tarea. También hace que la refactorización sea más fácil y más segura.

  • C # tiene generics , lo que reducirá los errores en comparación con el código equivalente de Objective-C (aunque hay algunas soluciones en Objective-C, en la mayoría de las situaciones los desarrolladores los evitarán).

  • Recientemente, Xamarin agregó soporte para Async / Await , lo que facilita la escritura de código asíncrono.

  • Podrás reutilizar parte del código base en iOS, Android y Windows Phone.

  • MonoTouch implementa en gran medida las API de CocoaTouch de una manera muy sencilla. Por ejemplo: si tiene experiencia con CocoaTouch, sabrá dónde encontrar clases para los controles en MonoTouch (MonoTouch.UIKit contiene clases para UIButton, UIView, UINavigationController, etc., también MonoTouch.Foundation tiene clases para NSString, NSData, etc ...).

  • Xamarin brindará a los usuarios una experiencia nativa, a diferencia de soluciones como PhoneGap o Titanium.

Ahora, Objective-C tiene algunas ventajas sobre C #, pero en la mayoría de las situaciones, escribir aplicaciones en C # generalmente resultará en menos tiempo de desarrollo y código más limpio y menos trabajo para portar la misma aplicación a otras plataformas. Una excepción notable podría ser los juegos de alto rendimiento que dependen de OpenGL.


El costo de la biblioteca MonoTouch es totalmente aparte de este punto. La razón por la que no deberías usar Mono para tus aplicaciones de iPhone es que es una muleta. Si no puede molestarse en aprender las herramientas nativas, entonces no tengo ninguna razón para creer que vale la pena descargar su producto.

Edición: 14/4/2010 Las aplicaciones escritas con MonoTouch no son elegibles para la tienda iTunes Store. Esto es como debería ser. Apple vio muchos puertos poco profundos en la Mac, usando juegos de herramientas multiplataforma como Qt, o la reimplementación propia de Adobe de la caja de herramientas del Sistema 7, y el largo y corto es que no son lo suficientemente buenos.


Entonces, mi respuesta a una pregunta similar anterior es aprender Objective-C. (Además, no te olvides del soporte de depuración)

Esto probablemente ofenderá a algunos, pero para ser honesto, si va a hacer un desarrollo serio, debe aprender Objective-C. No saber que Objective-C en el desarrollo de iPhone será un obstáculo. No podrás entender muchos ejemplos; Tienes que lidiar con las peculiaridades de Mono, mientras que si tuvieras un conocimiento práctico de Objective-C, podrías obtener mucho más de la documentación de la plataforma.

Personalmente, no entiendo la posición que dice aumentar la cantidad de información que necesita para usar Mono en el idioma nativo de la plataforma. Me parece algo contraproducente. Creo que si esta es una propuesta muy costosa (aprender un nuevo idioma), entonces puede valer la pena dedicar algo de tiempo a los conceptos fundamentales de programación, de modo que aprender nuevas lenguas sea una propuesta bastante barata.

Otro usuario también escribió esto:

Monotouch es más fácil para ti ahora. Pero más duro después.

Por ejemplo, ¿qué sucede cuando salen nuevas semillas con las que debes probar pero romper MonoTouch por alguna razón?

Al mantenerte en Mono, cada vez que busques recursos para marcos tienes que traducir mentalmente cómo los vas a usar con Mono. Sus binarios de aplicaciones serán más grandes, su tiempo de desarrollo no será mucho más rápido después de unos meses en Objective-C, y otros desarrolladores de aplicaciones tendrán una ventaja mucho mayor sobre usted porque están usando la plataforma nativa.

Otra consideración es que está buscando usar C # porque está más familiarizado con el lenguaje que con Objective-C. Pero la gran mayoría de la curva de aprendizaje para el iPhone no es Objective-C, son los marcos, a los que también tendrá que recurrir con C #.

Para cualquier plataforma, debe usar la plataforma que exprese directamente la filosofía de diseño de esa plataforma: en el iPhone, que es Objective-C. Piense en esto desde el ángulo inverso, si un desarrollador de Linux acostumbrado a la programación en GTK quisiera escribir aplicaciones de Windows, ¿recomendaría seriamente que no usaran C # y se apegara a GTK porque era "más fácil" que lo hicieran?


Hay muchos rumores en esta publicación de desarrolladores que no han probado MonoTouch y Objective-C. Parece ser que en su mayoría son desarrolladores de Objective-C que nunca han probado MonoTouch.

Obviamente estoy sesgado, pero puedes ver lo que ha estado haciendo la comunidad MonoTouch en:

http://xamarin.com

Allí encontrará varios artículos de desarrolladores que se han desarrollado tanto en Objective-C como en C #.


He estado usando MonoTouch durante algunos meses, porté mi aplicación a medio terminar de ObjectiveC para poder admitir Android en algún momento en el futuro.

Aquí está mi experiencia:

Malos bits:

  • Estudio Xamarin. Los desarrolladores independientes, como yo, se ven obligados a usar Xamarin Studio. Está mejorando cada semana, los desarrolladores son muy activos en los foros para identificar y corregir errores, pero sigue siendo muy lento, con frecuencia se cuelga, tiene muchos errores y la depuración también es bastante lenta.

  • Tiempos de construcción Crear mi aplicación grande (vinculada) para depurar en un dispositivo puede demorar unos minutos, esto se compara con XCode, que se implementa casi de inmediato. Construir para el simulador (no enlazado) es un poco más rápido.

  • Problemas con MonoTouch. He experimentado problemas de pérdida de memoria causados ​​por el manejo del evento, y he tenido que poner algunas soluciones bastante feas para evitar las fugas, como adjuntar y separar eventos al entrar y salir de las vistas. Los desarrolladores de Xamarin están buscando activamente este tipo de problemas.

  • Bibliotecas de terceros. He pasado bastante tiempo convirtiendo / enlazando bibliotecas de ObjectiveC para usar en mi aplicación, aunque esto está mejorando con software automatizado como Objective Sharpie.

  • Binarios más grandes. Esto realmente no me molesta, pero pensé que lo mencionaría. En mi opinión, un par de Mb extra no es nada en estos días.

Buenos bits:

  • Multiplataforma. Mi amigo está felizmente creando una versión para Android de mi aplicación desde mi base de código central, estamos desarrollando en paralelo y nos estamos comprometiendo con un repositorio de Git remoto en Dropbox, todo va bien.

  • .Red. Trabajar en C # .Net es mucho mejor que Objective C IMO.

  • MonoTouch. Casi todo en iOS está reflejado en .Net y es bastante sencillo hacer que las cosas funcionen.

  • Xamarin. Puede ver que estos muchachos realmente están trabajando para mejorar todo, haciendo que el desarrollo sea más fácil y más fácil.

Definitivamente recomiendo Xamarin para el desarrollo multiplataforma, especialmente si tiene el dinero para usar las ediciones Business o Enterprise que funcionan con Visual Studio.

Si solo estás creando una aplicación para iPhone que nunca será necesaria en otra plataforma, y ​​eres un desarrollador independiente, me quedo con XCode y Objective C por ahora.


He visto esta pregunta (y sus variaciones) mucho últimamente. Lo que me sorprende es la frecuencia con la que las personas responden, pero la poca respuesta .

Tengo mis preferencias (disfruto de ambas pilas), pero aquí es donde la mayoría de las "respuestas" empiezan a ir mal. No debería ser sobre lo que quiero (o lo que nadie más quiere).

Aquí es cómo me gustaría determinar el valor de MonoTouch. No puedo ser objetivo, obviamente, pero creo que esto es bastante libre de fanatismo:

  • ¿Esto es por diversión o por negocios? Si quisiera entrar en consultoría en esta área, podría recuperar sus $ 399 muy rápidamente.

  • ¿Desea conocer la plataforma de adentro hacia afuera o "simplemente" quiere escribir aplicaciones para ella?

  • ¿Te gusta .Net lo suficiente como para que usar una pila de desarrolladores diferente te quitara la diversión? Una vez más, me gustan las dos pilas (Apple y Mono), pero para mí, MonoTouch hace que la experiencia sea mucho más divertida. No he dejado de usar las herramientas de Apple, pero eso se debe principalmente a que disfruto de ambas pilas . Me encanta el iPhone, y me encanta .Net. En ese caso, para mí, MonoTouch fue una obviedad.

  • ¿Te sientes cómodo trabajando con C? No me refiero a Objective-C, pero C: importa porque Objective-C es C. Es una versión de OO agradable, elegante y amigable, pero si los punteros te dan los heebie-jeebies, MonoTouch es tu amigo. Y no escuches a los detractores que piensan que eres un dev wuss si sucede que no te gustan los punteros (o C, etc.). Solía ​​caminar con una copia de IBM ROM BIOS Pocket Reference, y cuando escribía el ensamblaje y forzaba a mi computadora a modos de video divertidos y escribía mis propios bits de renderizado de fuentes para ellos y sistemas de ventanas (ciertamente trashy), no lo hice. No creo que los desarrolladores de QuickBasic estuvieran mal. Yo era un dev de QuickBasic (además del resto). Nunca ceder al machismo nerd. Si no te gusta C, y si no te gustan los punteros, y si quieres mantenerte lo más alejado posible de la administración de memoria manual (y, para ser justos, no está nada mal en ObjC), entonces. .. MonoTouch. Y no te tomes ninguna broma por ello.

  • ¿Te gustaría apuntar a usuarios o empresas? Para mí no me importa mucho, pero todavía hay gente en Edge, y el hecho es que puedes crear un paquete de descarga mucho más pequeño si usas la pila de Apple. He estado jugando con MonoTouch, y tengo una pequeña aplicación decente que, una vez comprimida, llega a aproximadamente 2,7 MB (cuando envías tu aplicación para su distribución, la comprimes: cuando las aplicaciones se descargan de la tienda, ellas re comprimido - así que cuando averigüe si su aplicación va a entrar por debajo del límite OTA de 10 MB, cierre primero la ventosa: le sorprenderá gratamente con MonoTouch). Pero, dejando de lado la felicidad de MT, la mitad de un meg en comparación con casi tres (por ejemplo) es algo que podría ser importante para usted si está apuntando a usuarios finales. Si está pensando en el trabajo empresarial, unos pocos MB no importarán en absoluto. Y, para ser claros, pronto enviaré a la tienda una aplicación basada en MT, y no tengo ningún problema con el tamaño. No me molesta en absoluto. Pero si eso es algo que te preocupa, entonces el stack de Apple gana este.

  • ¿Haciendo algún trabajo XML? MonoTouch. Período.

  • ¿Manipulación de cuerdas? ¿Manipulación de la fecha? ¿Un millón de otras pequeñas cosas a las que nos hemos acostumbrado con los marcos de fregadero de todo-y-la-cocina de .Net? MonoTouch.

  • ¿Servicios web? MonoTouch.

  • Sintácticamente, ambos tienen sus ventajas. Objective-C tiende a ser más detallado donde tienes que escribirlo . Te encontrarás escribiendo código con C #, no tendrías que escribir con ObjC, pero va en ambos sentidos. Este tema en particular podría llenar un libro. Prefiero la sintaxis de C #, pero después de superar mi reacción inicial de esto es de otro mundo a Objective-C, he aprendido a disfrutarlo un poco. Me burlo de eso un poco en las conversaciones ( es raro para los desarrolladores que están acostumbrados a C # / Java / etc.), Pero la verdad es que tengo un punto con forma de C en mi C que me hace feliz.

  • ¿Planeas usar Interface Builder? Porque, incluso en esta versión anterior, me encuentro haciendo mucho menos trabajo para crear mis interfaces de usuario con IB y luego usarlas en código. Parece que faltan pasos completos de la forma de hacer las cosas de Objective-C / IB, y estoy bastante seguro de que faltan pasos enteros de la forma de hacer las cosas de Objective-C / IB. Hasta ahora, y no creo que haya probado lo suficiente, pero hasta ahora , MonoTouch es el ganador aquí por la cantidad de trabajo que tiene que hacer.

  • ¿Crees que es divertido aprender nuevos idiomas y plataformas? Si es así, el iPhone tiene mucho que ofrecer y es probable que la pila de Apple te saque de tu zona de confort, lo cual, para algunos desarrolladores, es divertido (Hola, soy uno de esos desarrolladores, bromeo al respecto y doy Apple es un momento difícil, pero me divertí mucho aprendiendo el desarrollo del iPhone a través de las herramientas de Apple).

Hay tantas cosas a considerar. El valor es tan abstracto. Si estamos hablando de costo y si vale la pena, la respuesta se reduce a mi primer punto: si esto es para negocios, y si puede obtener el trabajo, recuperará su dinero de inmediato.

Entonces ... eso es lo más objetivo que puedo ser. Esta es una breve lista de lo que podría preguntarse, pero es un punto de partida.

Personalmente (abandonemos la objetividad por un momento), amo y uso ambos. Y me alegro de haber aprendido la pila de Apple primero. Me fue más fácil ponerme en marcha con MonoTouch cuando ya conocía el mundo de Apple. Como han dicho otros, todavía va a estar trabajando con CocoaTouch, simplemente estará en un entorno de red .Net.

Pero hay más que eso. Las personas que no han usado MonoTouch tienden a detenerse allí: "Es un envoltorio, bla, bla, bla", eso no es MonoTouch.

MonoTouch le brinda acceso a lo que CocoaTouch tiene para ofrecer, mientras que también le brinda acceso a lo que (un subconjunto de) .Net tiene para ofrecer, un IDE con el que algunas personas se sienten más cómodas (yo soy uno de ellos), una mejor integración con Interface Builder , y aunque no te olvides completamente de la gestión de la memoria, obtienes un buen grado de libertad de acción.

Si no estás seguro, toma la pila de Apple (es gratis) y toma la pila de evaluación MonoTouch (es gratis). Hasta que te unas al programa de desarrollo de Apple, ambos solo se ejecutarán contra el simulador, pero eso es suficiente para ayudarte a determinar si prefieres uno a otro, y es posible que MonoTouch valga los $ 399 para ti.

Y no escuches a los fanáticos: tienden a ser los que no han usado la tecnología contra la que están hablando :)


Invertiría el tiempo en Objective-C principalmente debido a toda la ayuda que puede obtener de sitios como este. Una de las fortalezas de Objective-C es que puede usar los códigos C y C ++, y hay muchos proyectos que están bien probados .

Otra cosa es que tu código (idioma de elección) será compatible con Apple. ¿Por qué iOS 5.x, por ejemplo, elimina la compatibilidad con una solución de terceros como MonoTouch? ¿Qué les dirás a tus clientes entonces?

Tal vez sea mejor usar una solución independiente de la plataforma como HTML5 si no está completamente listo para mudarse a Objective-C.


Para agregar a lo que otros ya han dicho (¡bueno!): Mi sensación es que básicamente estás duplicando la cantidad de errores de los que tienes que preocuparte, agregando los de MonoTouch a los que ya se encuentran en iPhone OS. Actualizar las nuevas versiones del sistema operativo será incluso más doloroso de lo normal. Yuck, todo alrededor.

El único caso convincente que puedo ver para MonoTouch es que las organizaciones tienen muchos programadores de C # y código de C # que deben aprovechar en el iPhone. (El tipo de tienda que ni siquiera parpadeará a $ 3500).

Pero para cualquiera que empiece desde cero, realmente no puedo verlo como valioso o sabio.


Personalmente creo que lo pasarás mejor aprendiendo Objective-C.

En breve:

  • "Learning Objective-C" no es una tarea desalentadora como podría pensar, incluso puede disfrutarlo después de las primeras semanas.
  • Ya estás familiarizado con la sintaxis del "estilo C" con muchos * & () {}; en todos lados
  • Apple ha hecho un muy buen trabajo documentando cosas.
  • Estarás interactuando con el iPhone de la manera que Apple pretendía, lo que significa que obtendrás los beneficios directamente de la fuente, no a través de algún filtro.

Descubrí que los proyectos como Unity y MonoTouch se supone que "te ahorran tiempo", pero en última instancia, tendrás que aprender su lenguaje específico de dominio de todos modos y, a veces, tendrás que hacer cosas a un lado. Es probable que todo esto lo lleve a usted el mismo tiempo que lo haría para aprender el idioma que estaba tratando de evitar aprender (en el calendario). Al final, no ahorró tiempo y está estrechamente vinculado a algún producto.

EDITAR: Nunca quise dar a entender nada negativo sobre .NET que me gusta mucho. Mi punto es que agregar más capas de complejidad simplemente porque todavía no te sientes cómodo con la peculiar notación de soporte objc no tiene mucho sentido para mí.


Si esta es la única aplicación para iPhone que desarrollará alguna vez, y tampoco tiene ningún interés en desarrollar aplicaciones para Mac, entonces probablemente vale la pena el costo de MonoTouch.

Si piensa que alguna vez desarrollará más aplicaciones de iPhone, o si alguna vez querrá hacer un desarrollo nativo de Mac, probablemente valga la pena aprender Objective-C y los marcos asociados. Además, si eres el tipo de programador que disfruta aprender cosas nuevas, es un nuevo paradigma divertido para estudiar.


Tres palabras: Linq a SQL

Sí, vale la pena el $.


Usar Mono no es una muleta. Hay muchas cosas que se agrega al iPhone OS. LINQ, WCF, código que se puede compartir entre una aplicación Silverlight, una página ASP.NET, una aplicación WPF, una aplicación Windows Form, y también hay mono para Android y también funcionará para Windows Mobile.

Por lo tanto, puede pasar un montón de tiempo escribiendo Objective-C (verá en muchos estudios donde el mismo código de muestra en C # es significativamente menos que escribir en OC) y luego DUPLICARÁ todo para otras plataformas. Para mí, elegí MonoTouch porque la aplicación Cloud que estoy escribiendo tendrá muchas interfaces, el iPhone es solo una de ellas. Tener la transmisión de datos WCF desde la nube a la aplicación MonoTouch es increíblemente simple. Tengo bibliotecas centrales que están compartidas entre las distintas plataformas y luego solo necesito escribir una capa de presentación simple para las implementaciones de iPhone / WinMobile / Android / SilverLight / WPF / ASP.NET. Recrearlo todo en Objective-C sería una enorme pérdida de tiempo tanto para el desarrollo inicial como para el mantenimiento, ya que el producto continúa avanzando, ya que toda la funcionalidad tendría que replicarse en lugar de reutilizarse.

A las personas que insultan a MonoTouch o que insinúan que los usuarios necesitan una muleta les falta el panorama general de lo que significa tener el marco .NET a su alcance y tal vez no entiendan la separación correcta de la lógica de la presentación de una manera que Se puede reutilizar a través de plataformas y dispositivos.

Objective-C es interesante y muy diferente de muchos lenguajes comunes. Me gustan los retos y aprender diferentes enfoques ... pero no cuando hacerlo impide mi progreso o crea una recodificación innecesaria. Hay algunas cosas realmente buenas sobre el marco de SDK del iPhone, pero toda esa grandeza es totalmente compatible con MonoTouch y elimina toda la administración de memoria manual, reduce la cantidad de código necesario para realizar las mismas tareas, me permite reutilizar mis ensamblajes y Mantiene mis opciones abiertas para poder moverme a otros dispositivos y plataformas.