Después de asistir a una sesión hoy en Mono en un evento local .Net, el uso de MonoTouch fue "tocado" como una alternativa para el desarrollo de iPhone. Siendo muy cómodo en C # y .Net, parece una opción atractiva, a pesar de algunas peculiaridades de la pila Mono. Sin embargo, dado que MonoTouch cuesta $ 400, estoy un poco desgarrado si este es el camino a seguir para el desarrollo de iPhone.
¿Alguien tiene experiencia desarrollando con MonoTouch y Objective-C, y si es así, desarrollar con MonoTouch es mucho más simple y rápido que aprender Objective-C y, a su vez, vale los $ 400?
c#
objective-c
mono
xamarin.ios
jamesaharvey
fuente
fuente
Respuestas:
He visto esta pregunta (y sus variaciones) mucho últimamente. Lo que me sorprende es la frecuencia con la que la gente responde, pero la poca respuesta .
Tengo mis preferencias (disfruto de ambas pilas), pero aquí es donde la mayoría de las "respuestas" comienzan a fallar. No debería ser sobre lo que quiero (o lo que alguien más quiere).
Así es como debería determinar el valor de MonoTouch: obviamente, no puedo ser objetivo, pero creo que esto es bastante fanático:
¿Es esto por diversión o negocios? Si desea consultar en esta área, puede recuperar sus $ 399 muy rápidamente.
¿Desea aprender la plataforma de adentro hacia afuera, o "solo" quiere escribir aplicaciones para ella?
¿Te gusta .Net lo suficiente como para que usar una pila de desarrollo diferente te quite la diversión? Nuevamente, 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 realmente disfruto de ambas pilas . Amo el iPhone y amo .Net. En ese caso, para mí, MonoTouch era obvio.
¿Te sientes cómodo trabajando con C? No me refiero a Objective-C, pero C: es importante porque Objective-C es C. Es una versión 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 experto en desarrollo si sucede que no te gustan los punteros (o C, etc.). Solía caminar con una copia de la referencia de bolsillo de IBM ROM BIOS, y cuando estaba escribiendo ensamblaje y forzando a mi computadora a modos de video divertidos y escribiendo mis propios bits de representación de fuente para ellos y sistemas de ventanas (ciertamente basura), no lo hacía. No creo que los desarrolladores de QuickBasic fueran wusses. Yo estabaun desarrollador de QuickBasic (además del resto). Nunca cedas ante el machismo nerd. Si no le gusta C, y si no le gustan los punteros, y si desea mantenerse lo más lejos posible de la gestión de memoria manual (y, para ser justos, no está nada mal en ObjC), entonces. .. MonoTouch. Y no te preocupes por eso.
¿Te gustaría dirigirte a usuarios o empresas? No me importa mucho, pero todavía hay personas 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, se reduce a aproximadamente 2.7 MB (cuando envía su aplicación para su distribución, la comprime, cuando las aplicaciones se descargan de la tienda, ' vuelva a comprimir, así que cuando descubra si su aplicación va a llegar por debajo del límite de 10 MB OTA, cierre primero la ventosa; se sorprenderá gratamente con MonoTouch). Pero, aparte de la felicidad MT, medio meg frente a casi tres (por ejemplo) es algo que podría ser importante para usted si se dirige a usuarios finales. Si está pensando en el trabajo empresarial, unos pocos MB no importan en absoluto. Y, para que quede claro: pronto enviaré una aplicación basada en MT a la tienda, y no tengo ningún problema con el tamaño. No me molesta en absoluto. Pero si eso es algo que preocuparíausted , entonces la pila de Apple gana este.
¿Funciona algún 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 cocina y todo 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 # que 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 este es otro mundo a Objective-C, aprendí a disfrutarla un poco. Me burlo un poco en las conversaciones ( es extraño para los desarrolladores que están acostumbrados a C # / Java / etc.), pero la verdad es que tengo un punto en forma de Objective-C en mi corazón que me hace feliz.
¿Planeas usar Interface Builder? Porque, incluso en esta versión inicial, me encuentro trabajando mucho menos para construir mis interfaces de usuario con IB y luego usarlas en el código. Parece que faltan pasos completos de la forma de hacer las cosas de Objective-C / IB, y estoy bastante seguro de que es porque faltan pasos completos 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 la pila de Apple probablemente lo sacará de su zona de confort, lo que, para algunos desarrolladores, es divertido (Hola, soy uno de esos desarrolladores, bromeo al respecto y doy Apple es un momento difícil, pero me he divertido mucho aprendiendo el desarrollo de iPhone a través de las herramientas de Apple).
Hay tantas cosas a considerar. El valor es tan abstracto. Si hablamos del costo y de si vale la pena, la respuesta se reduce a mi primer ítem: si esto es por 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 (dejemos caer 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 vas a trabajar con CocoaTouch, solo estará en un entorno .Net.
Pero hay más que eso. Las personas que no han usado MonoTouch tienden a detenerse allí: "Es una envoltura, bla, bla, bla", eso no es MonoTouch.
MonoTouch le da acceso a lo que CocoaTouch tiene para ofrecer, al mismo tiempo que le da 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 puede olvidarse por completo de la administración de memoria, obtiene un buen margen de maniobra.
Si no está seguro, tome la pila de Apple (es gratis) y tome la pila de evaluación MonoTouch (es gratis). Hasta que se una al programa de desarrollo de Apple, ambos solo se ejecutarán contra el simulador, pero eso es suficiente para ayudarlo a descubrir si prefiere enormemente uno al otro, y es posible si MonoTouch, para usted, vale los $ 399.
Y no escuches a los fanáticos: tienden a ser los que no han usado la tecnología contra la que están criticando :)
fuente
Hay muchos rumores en esta publicación de desarrolladores que no han probado MonoTouch y Objective-C. Parece ser que los desarrolladores de Objective-C son los que nunca han probado MonoTouch.
Obviamente soy parcial, pero puedes ver lo que la comunidad MonoTouch ha estado haciendo en:
http://xamarin.com
Allí encontrará varios artículos de desarrolladores que se han desarrollado tanto en Objective-C como en C #.
fuente
Entonces, mi respuesta a una pregunta similar anterior es aprender Objective-C. (Además, no se olvide del soporte de depuración)
Otro usuario también escribió esto:
Monotouch es más fácil para ti ahora. Pero más difícil después.
Por ejemplo, ¿qué sucede cuando salen nuevas semillas que necesita probar pero romper MonoTouch por alguna razón?
Al seguir con Mono, cada vez que busca recursos para frameworks, debe traducir mentalmente cómo los va a usar con Mono. Los binarios de su aplicación 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 utilizando la plataforma nativa.
Otra consideración es que está buscando usar C # porque está más familiarizado con el lenguaje que 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 expresa 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 programar en GTK quisiera escribir aplicaciones de Windows, ¿recomendaría seriamente que no usaran C # y se apegaran a GTK porque era "más fácil" para ellos hacerlo?
fuente
Usar Mono no es una muleta. Hay muchas cosas que agrega al iPhone OS. LINQ, WCF, código para 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 mucho tiempo escribiendo Objective-C (verá en muchos estudios que el mismo código de muestra en C # es significativamente menos para escribir que OC) y luego DUPLICAR todo para otras plataformas. Para mí, elegí MonoTouch porque la aplicación en la nube que estoy escribiendo tendrá muchas interfaces, siendo el iPhone solo una de ellas. Tener transmisión de datos WCF desde la nube a la aplicación MonoTouch es increíblemente simple. Tengo bibliotecas principales que se comparten entre las diversas plataformas y luego solo necesito escribir una capa de presentación simple para las implementaciones de iPhone / WinMobile / Android / SilverLight / WPF / ASP.NET. Volver a crearlo 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 debería replicarse en lugar de reutilizarse.
Las personas que insultan a MonoTouch o insinúan que los usuarios de él necesitan una muleta carecen del panorama general de lo que significa tener el marco .NET a su alcance y tal vez no entienden la separación adecuada de la lógica de la presentación de una manera que se puede reutilizar en plataformas y dispositivos.
Objective-C es interesante y muy diferente de muchos lenguajes comunes. Me gusta un desafío y aprender diferentes enfoques ... pero no cuando hacerlo impide mi progreso o crea una codificación innecesaria. Hay algunas cosas realmente buenas sobre el marco del SDK de iPhone, pero toda esa grandeza es totalmente compatible con MonoTouch y elimina toda la administración manual de memoria, reduce la cantidad de código requerido para realizar las mismas tareas, me permite reutilizar mis ensamblajes y mantiene abiertas mis opciones para poder moverme a otros dispositivos y plataformas.
fuente
Cambié. Monotouch me permite escribir aplicaciones al menos 3-4 veces más rápido (4 aplicaciones por mes en comparación con mi anterior 1 por mes en Obj C)
Mucho menos mecanografía.
Solo mi experiencia.
fuente
Si esta es la única aplicación para iPhone que desarrollará, y también tiene cero interés en desarrollar aplicaciones para Mac, entonces MonoTouch probablemente valga la pena.
Si crees que alguna vez desarrollarás más aplicaciones para iPhone, o si alguna vez querrás 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 de estudiar.
fuente
Personalmente, creo que lo pasarás mejor aprendiendo Objective-C.
En breve:
He descubierto que se supone que los proyectos como Unity y MonoTouch "le ahorrarán tiempo", pero en última instancia, deberá aprender su lenguaje específico de dominio de todos modos y, en ocasiones, tendrá que esquivar las cosas. Probablemente, todo eso te llevará tanto tiempo como aprender el idioma que estabas tratando de evitar (en tiempo calendario). Al final, no ahorró tiempo y está estrechamente vinculado a algún producto.
EDITAR: Nunca quise implicar nada negativo sobre .NET. Soy un gran admirador. Mi punto es que agregar más capas de complejidad solo porque aún no te sientes cómodo con la peculiar notación de corchetes objc realmente no tiene mucho sentido para mí.
Actualización de 2019: son 7 años después. Todavía me siento igual, si no más. Claro, 'lenguaje específico de dominio' puede haber sido un término incorrecto para usar, pero todavía creo que es mucho mejor escribir directamente para la plataforma con la que está trabajando y evitar las capas y abstracciones de compatibilidad tanto como sea posible. Si le preocupa la reutilización y el reprocesamiento de códigos, en general, cualquier funcionalidad que su aplicación multiplataforma necesite realizar probablemente se pueda lograr con las tecnologías web modernas.
fuente
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 están en el sistema operativo iPhone. La actualización para nuevas versiones del sistema operativo será aún más dolorosa de lo normal. Yuck, todo alrededor.
El único caso convincente que puedo ver para MonoTouch son las organizaciones que tienen muchos programadores C # y códigos 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.
fuente
Tres palabras: Linq a SQL
Sí, vale la pena los $.
fuente
Algo que me gustaría agregar, a pesar de que hay una respuesta aceptada: ¿quién puede decir que Apple no solo rechazará las aplicaciones que tienen signos de haber sido creadas con Mono Touch?
fuente
Invertiría el tiempo en Objective-C principalmente por toda la ayuda que puede obtener de sitios como este. Una de las fortalezas de Objective-C es que puede usar código C y C ++, y hay muchos proyectos por ahí que están bien probados .
Otra cosa es que su código (idioma de elección) será compatible con Apple. ¿Qué es iOS 5.x, por ejemplo, elimina la compatibilidad con una solución de terceros como MonoTouch? ¿Qué le dirás a tus clientes entonces?
¿Quizás sea mejor usar una solución independiente de la plataforma como HTML5 si no está completamente listo para pasar a Objective-C?
fuente
He estado usando MonoTouch durante unos meses, porté mi aplicación a medio terminar de ObjectiveC para poder soportar Android en algún momento en el futuro.
Aquí está mi experiencia:
Bits malos:
Xamarin Studio. Los desarrolladores independientes como yo me veo obligado a usar Xamarin Studio. Está mejorando cada semana, los desarrolladores están muy activos en los foros identificando y reparando errores, pero todavía es muy lento, con frecuencia se cuelga, tiene muchos errores y la depuración también es bastante lenta.
Tiempos de construcción. Construir mi aplicación grande (vinculada) para depurar en un dispositivo puede llevar unos minutos, esto se compara con XCode, que se implementa casi de inmediato. Construir para el simulador (no vinculado) es un poco más rápido.
Problemas de 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 pérdidas, como adjuntar y desconectar eventos al ingresar y salir de las vistas. Los desarrolladores de Xamarin están buscando activamente problemas como este.
Bibliotecas de terceros. He pasado bastante tiempo convirtiendo / vinculando 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é en mencionarlo. En mi opinión, un par de Mb adicionales no es nada en estos días.
Buenos bits:
Multiplataforma. Mi amigo está felizmente creando una versión de Android de mi aplicación desde mi base de código central, estamos desarrollando en paralelo y nos estamos comprometiendo con un repositorio remoto de Git en Dropbox, está funcionando bien.
.Red. Trabajar en C # .Net es mucho mejor que Objective C IMO.
MonoTouch. Casi todo en iOS se refleja en .Net y es bastante sencillo hacer que las cosas funcionen.
Xamarin Puedes ver que estos chicos realmente están trabajando para mejorar todo, haciendo que el desarrollo sea más fácil y sencillo.
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á creando una aplicación para iPhone que nunca será necesaria en otra plataforma, y es un desarrollador independiente, me quedaría con XCode y Objective C por ahora.
fuente
Como alguien con experiencia tanto en C # como en Objective-C, diría que para la mayoría de las personas, Xamarin valdrá la pena.
C # es un lenguaje muy 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 #, probablemente será más productivo en comparación con escribir el mismo código en Objective-C. Esto se debe a varias razones, pero algunas serían:
C # tiene inferencia de tipos . 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 ahorradora.
C # tiene genéricos , 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 hace que escribir código asincrónico sea muy fácil.
Podrá reutilizar parte de la base de código en iOS, Android y Windows Phone.
MonoTouch implementa en gran medida las API de CocoaTouch de una manera muy sencilla. Por ejemplo: si tienes experiencia con CocoaTouch, sabrás dónde encontrar clases para controles en MonoTouch (MonoTouch.UIKit contiene clases para UIButton, UIView, UINavigationController, etc ..., también MonoTouch.Foundation obtuvo 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 dará como resultado menos tiempo de desarrollo y un código más limpio y menos trabajo para portar la misma aplicación a otras plataformas. Una excepción notable podrían ser los juegos de alto rendimiento que dependen de OpenGL.
fuente
El costo de la biblioteca MonoTouch es completamente intrascendente. La razón por la que no deberías usar Mono para las aplicaciones de tu iPhone es que es una muleta. Si no puede molestarse en aprender las herramientas nativas, entonces no tengo motivos para creer que valga la pena descargar su producto.
Editar: 14/04/2010 Las aplicaciones escritas con MonoTouch no son elegibles para iTunes Store. Esto es como debería ser. Apple vio muchos puertos poco profundos en la Mac, utilizando kits de herramientas multiplataforma como Qt, o la propia reimplementación parcial de Adobe de la caja de herramientas del Sistema 7, y en resumen, simplemente no son lo suficientemente buenos.
fuente