¿Cuáles son los mayores desafíos para los desarrolladores de iOS a tiempo completo?

Digo trabajar con diseñadores gráficos que provienen de la impresión y la web . Tienden a pensar que la pantalla del iPhone es un lienzo en blanco, donde pueden dibujar cosas según su inspiración. Si bien eso podría ser cierto para algunos tipos de aplicaciones (por ejemplo, juegos), iOS tiene muchos componentes y animaciones.
Dependiendo del tipo de proyecto y el diseñador con el que estoy trabajando, tiendo a resolver este problema de dos maneras: (i) dar al diseñador un curso intensivo en los componentes de la plataforma; (ii) hacer el UX yo mismo y pedirle al diseñador que lo “pele”.

Otro desafío es trabajar con una API no apta para dispositivos móviles que, por ejemplo, requiera que la aplicación realice diferentes llamadas http en una secuencia determinada o le pida que realice varias llamadas para construir / actualizar un modelo de datos en el lado del cliente.

Pautas de revisión de la tienda de aplicaciones

El desafío número uno tiene que ser las pautas de revisión de la App Store. Si bien muchas de las cosas son obvias, muchas de ellas se dejan a discreción de Apple de lo que consideran correcto. Debe haber enviado muchas aplicaciones con diferentes funcionalidades para asegurarse de conocer todas las razones por las que su aplicación podría ser rechazada.

¡Sí, tienen su base de conocimientos y todos, pero no todos, leen todos los artículos que Apple publica en su base de conocimientos! Cómo funciona el proceso de aprobación sigue siendo un misterio en algunos casos.

Acostumbrarse a XCode

Las actualizaciones recientes de XCode (a partir de 4.0) han tenido errores y fallan mucho. Es un poco difícil acostumbrarse. Si bien lo han hecho mucho mejor en términos de ser un IDE completo, es necesario arreglar mucho.

La documentación

La documentación del SDK de iOS puede ser mínima o engañosa a veces, especialmente para las nuevas características que presentan con los lanzamientos del SDK. Encontrarás muchas preguntas en los foros donde los desarrolladores hacen todo a la T y todavía no obtienen el resultado deseado porque la documentación no mencionó algo importante.

Algunos de los artículos casi no tienen información, excepto una línea que no describe cómo usarlos.

Últimamente, el sistema operativo se actualiza

En las últimas versiones del sistema operativo (lanzamientos principales) que Apple está lanzando, parecen romper invariablemente parte del código de las versiones anteriores del SDK. Como resultado, la mayoría de las aplicaciones se bloquean cuando actualiza el sistema operativo de su dispositivo. No todos los desarrolladores pueden actualizar sus aplicaciones a tiempo para las nuevas versiones del sistema operativo.

Pero desarrollar aplicaciones para iOS sigue siendo muy divertido en comparación con otras plataformas 🙂

Tratando con la policía de la AppStore de Apple.

En mi opinión, violan claramente las leyes de monopolio antimonopolio, especialmente en torno a las suscripciones en la nube de varias empresas. Dropbox parece haberse rendido, Microsoft está luchando y otras compañías que conozco tienen que lidiar con mucha basura de ellos. Para mí tiene sentido que hagan un recorte del 30% en las ventas de aplicaciones y productos digitales como compras en la aplicación, después de todo, brindan un servicio y una solución de instalación increíble. Sin embargo, cuando tiene una empresa que proporciona almacenamiento en la nube (como Dropbox, MSFT), Apple realmente no tiene que proporcionar nada más que permiso. No están alojando servidores, ejecutando operaciones en granjas de servidores, proporcionando el mecanismo de pago, la autenticación o cualquiera de esas cosas en este caso, entonces, ¿por qué deberían obtener un recorte del 30%?

Otro dolor al tratar con su policía de AppStore son las reglas descabelladas que tienen en sus pautas. Una regla popular es “no generará código de máquina en tiempo de ejecución e intentará ejecutarlo”. Esto evita la creación de máquinas virtuales (como AVM de Flash o V8 de Google para JS, etc.). Esto es simplemente IMO anticompetitivo. Afirman que es por seguridad, pero no lo es. Al final del día, el código de la máquina debe llamar a las API del sistema operativo para hacer cualquier cosa fuera de su entorno limitado de aplicaciones, y esas API del sistema operativo ya están protegidas en el kernel por las restricciones de seguridad apropiadas del entorno limitado.

La AppStore tiene otras políticas extrañas que van más allá de crear un gran “jardín amurallado” para sus usuarios (que a todos nos encanta, de verdad). Algunas de sus políticas son puramente anticompetitivas y anti-confianza. Obviamente no soy abogado, pero me parece bastante básico. Sería interesante ver a los abogados de MSFT ir tras ellos por esto debido a Office 365 o Skydrive, si alguna vez sucede.

Los desarrolladores parecen ser ciudadanos de segunda clase en su ecosistema.

Ciertamente nunca verás un youtube de Steve Jobs o Tim Cook haciendo algo como esto:

Apple cambia las API con frecuencia, Xcode es bastante defectuoso y accidentado, el depurador apesta especialmente en comparación con la oferta de MSFT, su oferta de inteligencia es muy problemática y harán cambios drásticos en SDK e iOS que romperán nuestras aplicaciones y luego tenemos que irnos volver y arreglarlos, y hacer una versión de actualización. Todo esto equivale a tiempo de ingeniería real perdido en “mantenerse al día”. Este es el momento que podríamos utilizar para crear nuevas funciones o corregir errores en nuestras aplicaciones.

Otra cosa aleatoria que me molesta es cómo las actualizaciones del Centro de notificaciones deben realizarse a través de un socket con un servidor en ejecución. Esto hace que sea imposible hacerlo a través de Google App Engine, y presenta otros desafíos de otra manera. Simplemente conviértalo en una interfaz REST Apple, GOSH! (Estilo de la dinamita de Napoleón). Si el deseo es maximizar el rendimiento por conexión, solo proporcione una forma de agrupar n notificaciones por llamada API REST.

Dicho todo esto, todavía nos encanta el desarrollo de iOS. No hay excusa para que XCode sea tan descabellado como sea, y para que el depurador sea tan malo como lo hace, pero aparte de eso, todo se hace para impulsar la innovación, y eso está bien. A Apple no le importa mucho la compatibilidad con versiones anteriores (como lo hace Microsoft), pero está bien porque la ruta de actualización de iOS es gratuita y muy fluida. Los simuladores son geniales (mucho mejor que Android), Obj-C ++ fue la elección de idioma correcta, los guiones gráficos son agradables y las herramientas de creación de perfiles son satisfactorias.

Me gustaría ver que Apple haga que sus herramientas de desarrollador sean tan increíbles como iOS para los consumidores. Echa un vistazo a lo que Adobe mostró recientemente en un MAX Sneak (depuración inversa), me encantaría ver a Apple salir con algo como esto. La depuración básica de XCode ni siquiera es tan buena como lo que Microsoft Visual Studio y Eclipse tenían hace más de 10 años, pedir una característica como la depuración inversa parece ser un gran objetivo para Apple:

Sneak Peeks de MAX 2011 – Sneak Peek de MAX 2011 – Depuración inversa en Flash Builder en Adobe TV

(¡SÍ! Un botón Rebobinar en tu depurador, es como magia).

Optimizando para el rendimiento

Aunque la mayoría de los UIKit parecían hacer un gran trabajo en el rendimiento, la mayoría de las veces aún necesitará conocer los bits y trucos sobre cómo optimizar el rendimiento. Esto toma una gran cantidad de tiempo para hacerlo bien.

Tendrá que comenzar activando los instrumentos y medir las métricas que desea acertar (es decir, si es memoria, entonces desea ver la asignación de memoria, si está desplazándose, entonces es posible que desee ver el FPS en Animación central). Después de rastrear dónde está el problema, es posible que desee probar y jugar con muchas pruebas y errores, luego mida el rendimiento nuevamente y repita. Esto puede llevar días, dependiendo de la complejidad del problema.

Un buen ejemplo de la vida real, que puede parecer muy fácil de hacer desde la superficie, pero no tanto si desea que funcione bien, es implementar un UITableView con celdas personalizadas que se desplaza suavemente como mantequilla. Si el diseño parece que necesitará tener una celda que tenga toneladas de elementos, entonces una implementación ingenua sería simplemente arrojar un montón de subvistas (UILabel, UIView, UIImageView) en la celda. Esta es una solución fácil y puede estar bien, pero en algunos casos puede afectar su rendimiento a largo plazo. Algo que parece tan fácil de implementar podría no ser tan fácil después de todo si desea que funcione bien.

Esto requiere una planificación cuidadosa y mucho tiempo dedicado a los instrumentos. Uno de los desafíos más importantes por los que creo que todo buen desarrollador de iOS se esforzará.

El desarrollo de aplicaciones para iPhone ha aumentado más el equilibrio, ya que a más personas les gusta utilizar los teléfonos Apple. En cualquier caso, al hacer una aplicación para iPhone o iPad, hay algunas dificultades que los ingenieros deben resolver. Para dar un encuentro rico con el cliente, deben abordar las siguientes dificultades.

  • Pruebas de usuarios beta
  • Compatibilidad de aplicaciones
  • Malas condiciones de red
  • Impedimentos en el rendimiento y la memoria
  • Aplicaciones en entorno de espacio aislado
  • Aprobación de la tienda de aplicaciones
  • UI

Estas son una parte de las dificultades en la empresa de desarrollo de aplicaciones móviles debe demostrar su experiencia para hacer frente a un costo de especulación insignificante sin negociación en el último elemento y de esta manera recoger la ubicuidad de las aplicaciones creadas.

Fuente: https://www.linkedin.com/pulse/c

Diría que es la combinación de altos precios de CPI, un largo período de revisión y revisiones persistentes, lo que lleva a una situación en la que un desarrollador no puede repetir una aplicación en función de los comentarios de los usuarios. En la web, la iteración y la mejora continua son fáciles (algunos sitios envían actualizaciones todos los días), y los usuarios son relativamente baratos. Pero en iOS, el tiempo entre el envío y la disponibilidad en la App Store puede ser de semanas, y los precios del IPC son tales que adquirir usuarios es un gasto significativo.

Entonces, un desarrollador se encuentra en una situación en la que necesita tratar de anticipar el uso lo mejor que pueda porque una vez que se inicia la aplicación

  1. Los usuarios que compra pueden eliminar todo su presupuesto de marketing, lo que significa que cualquier cambio que se realice no se beneficiará de otra campaña de adquisición
  2. Cualquier cambio que haga en el futuro puede molestar a los primeros usuarios, haciendo que revisen la aplicación negativamente (y las revisiones son persistentes)
  3. Cualquier cambio que realice tardará al menos unos días en entrar en vigencia porque la aplicación reenviada debe ser revisada. Así que ahora la mayoría de los desarrolladores (al menos en juegos) hacen un lanzamiento Beta en Canadá e iteran (en la medida de lo posible) allí; pero como todo el mundo hace esto, los precios del IPC en Canadá son incluso más altos que en los EE. UU., y el precio de esta opción está fuera del alcance de muchos estudios independientes.

Al ser un desarrollador de aplicaciones iOS a tiempo completo, mis problemas cotidianos tienen menos que ver con la aprobación de la tienda de aplicaciones y más con los aspectos generales del desarrollo de aplicaciones iOS. No estoy diciendo que eso no cuenta o que la aprobación de la tienda de aplicaciones es sin problemas y es un placer. Es muy importante conocer las pautas de la tienda de aplicaciones, incluso antes de comenzar a desarrollar una aplicación basada en iOS. Conforme a todas las reglas y regulaciones enumeradas para que la aplicación se apruebe en la tienda de aplicaciones, etc. Sin embargo, si esas regulaciones se tienen en cuenta al comienzo de la etapa de desarrollo, ayudan a través de la aprobación y también ahorran tiempo. No veo ningún problema con ellos.

Sin embargo, tengo un problema con algunos de los siguientes aspectos, ya que detienen el flujo al evaluar un problema e intentar solucionarlo.

Panel de navegación en el portal del desarrollador
Cuando era un novato y recién desarrollado para el desarrollo de aplicaciones iOS, (el panel de navegación) era complicado para mí comprender y trabajar. Sin embargo, con el tiempo y la práctica, cuanto más lo usaba, más me familiarizaba con él y navegaba fácilmente. Me di cuenta de que era necesario tener conocimientos previos sobre el portal.

Malas condiciones de red
Por lo general, el caso es que la velocidad que uso no es la velocidad que usa el usuario / consumidor final. Pasar la prueba del acondicionador de enlace de red se convierte en algo esencial para que la aplicación vigorice no hasta las redes de marcas.

Compatibilidad cruzada de dispositivos
Como desarrollador de aplicaciones, debo probar en cada tipo de dispositivo iOS, sin embargo, esto se ha simplificado probando como productos de servicio para acelerar el proceso. Pero aún así, es una molestia.

Condiciones de falla
Hay problemas en el manejo de errores y la interacción con los usuarios en torno a las condiciones de falla. Como práctica recomendada, hemos comenzado pruebas con usuarios beta para detectar condiciones de falla específicas de nuestra aplicación.

Encontrar buenos beta testers
Inicialmente siempre tuvimos problemas para encontrar un buen conjunto de beta testers. Los que podrían implementar y ver varios casos de uso y dar una respuesta valiosa. Más tarde nos dimos cuenta de que el truco es encontrar los probadores beta objetivo (al igual que encontrar el público objetivo correcto). Buscamos grupos que no solo probaron y proporcionaron comentarios, sino que también se convirtieron en primeros evangelistas para nuestras aplicaciones iOS.

El primero que viene a la mente es trabajar con diseñadores.

El segundo es trabajar con clientes que piensan que nuestro trabajo es fácil porque hay herramientas como phonegap (odio simplemente escribir esa palabra).

Muchas veces los diseñadores elaboran lo que se ve “genial y único” sin tener en cuenta la usabilidad. Eso puede afectar significativamente qué tan bien los clientes adoptan la aplicación. En promedio, las personas solo quieren usar una maldita herramienta, no darse cuenta de cómo va a aparecer una animación sofisticada y darle una gran cantidad de opciones únicas que le permitirán enviar la mierda a sus amigos en todas las redes sociales. Y nadie está impresionado por las fuentes pequeñas y delgadas que hacen que el menú sea difícil de leer.

La cuestión es que la mayoría de los diseñadores son de fondos impresos, y esa mierda no se transfiere bien a la web, y especialmente a los dispositivos móviles. Parecen pensar que solo porque pueden diseñar un botón en 30 minutos, debería ser tan fácil codificar todas las interacciones que lo acompañan.

En otras palabras, el photoshop hace que la mierda parezca mágica. Como si pudiéramos arrancar la aplicación en unos días. No entienden toda la programación del lado del servidor que conlleva la disponibilidad de los datos.

Todas estas herramientas halfass como Phonegap son otra abominación. Dumbasses piensa que debido a que puedes crear una aplicación en 5 minutos en phonegap (aplicación de barra de pestañas falsa de medio culo que solo muestra un sitio web existente) que todas las otras aplicaciones deberían ser tan fáciles y rápidas de hacer. Hay demasiados sombreros en las reuniones que realizan estas presentaciones de “déjame mostrarte lo fácil que es crear una aplicación” y eso destruye la realidad de lo que se necesita para crear una aplicación valiosa.

En nuestra experiencia, no hay ningún problema con las Reglas de la tienda de aplicaciones, ya que algunas otras respuestas aquí han estado hablando. Una vez que los conoces, vives por ellos y realmente no es un problema. A menudo pasamos el tiempo explicando o respondiendo preguntas sobre ellos a nuestros clientes, pero todavía tiene que ser un desafío.

En el desarrollo de muchas, muchas aplicaciones, para las compañías Fortune 1000 (solo trabajamos en grandes proyectos de marca), el mayor desafío para el desarrollo casi siempre se centra en una cosa:

Malos servicios web para móviles.
– Por lo general, cuanto más grande es la empresa, más enrevesados ​​y desactualizados son los servicios de datos finales
– Esto da como resultado que se deban hacer cambios, o que se coloquen calzas adicionales en la capa de servicio web para tener una aplicación de rendimiento razonable
– Nunca están listos o son tan rápidos de desarrollar como la línea de tiempo de la aplicación (como saben, los dispositivos móviles deben moverse rápidamente)
– Los servicios web utilizan tecnologías más antiguas como RSS, en lugar de los protocolos más modernos.

Es un poco difícil integrar la automatización de pruebas con la implementación continua (Jenkins, etc.). Tanto la prueba unitaria como la automatización de la interfaz de usuario pueden funcionar desde la línea de comandos, pero siempre requieren algunos hacks que no son obvios. Peor aún, la configuración de trabajo a menudo se rompe cuando Xcode o iOS obtienen una actualización importante.

Además, a veces es un poco difícil reproducir y corregir algunos bloqueos relacionados con la memoria, especialmente cuando el seguimiento de la pila del registro de bloqueo solo muestra algunas llamadas al método de marco del sistema de bajo nivel, sin ningún código propio. Los bloqueos de memoria no se pueden evitar utilizando los bloques try catch, y ARC realmente no resuelve todos los problemas.

La plataforma iOS se actualiza cada dos días con características nuevas y avanzadas. Y desde mi perspectiva personal, el desafío más grande y más importante de cada desarrollador de iOS es aprender y adoptar la actualización frecuente de esas características. Además, cada nueva característica debe implementarse con diferentes marcos y API. Por lo tanto, es realmente un desafío difícil para cualquier desarrollador aprender y adoptar la implementación y actualización de cada nueva característica.

2 cosas me vienen a la mente:
– tiempo de respuesta para la revisión de la tienda de aplicaciones. No me importa el sistema de revisión per se, pero lleva una semana cada vez que desea actualizar la aplicación, y eso es un gran desincentivo para el crecimiento de una aplicación.

– falta de análisis de la tienda de aplicaciones. Quiero saber cuántas personas visitan mi página de App Store para poder probar diferentes cosas para ver cuál es una estrategia de venta más efectiva / correlacionada con mis otros esfuerzos de marketing. Pero no puedo porque Apple no comparte esos datos con nadie.

Creo que las cosas más difíciles son las que son difíciles de depurar.
Por lo tanto, compras inactivas y notificaciones push y perfiles de aprovisionamiento.

La buena noticia es que una vez que lo haces funcionar, copias y pegas … 😉

Es una pregunta bastante difícil de responder. Yo diría que para los desarrolladores de iOS, el comienzo correcto con el diseño de la interfaz de usuario exactamente que no tiene alteraciones y las funciones bien discutidas para habilitar habría sido el mayor desafío personal que parece.

Al ser parte de una empresa de desarrollo de aplicaciones para iPhone, experimenté lo mismo. http://www.contus.com/iphone-app

Depuración, cuando la aplicación se encuentra en etapas finales.
Soporte futuro

More Interesting

¿Cuáles son algunos principios para construir servicios de almacenamiento en caché?

¿Cuáles son los títulos requeridos para la ingeniería de software?

¿Cuál es la reputación de un B.Tech de Jamia Hamdard (Universidad de Hamdard) en el campo de la informática, en términos de personal docente, entorno del campus y prácticas?

¿Cómo puedo externalizar el desarrollo web sin sacrificar el proceso de aprendizaje?

¿Cuáles son algunas cosas que uno debe lograr en su primer rol de ciencia de datos?

¿Qué consejo le darías a un tipo no técnico que inicia una empresa de desarrollo de software?

¿Quién es el líder actual en software OpenStack en términos de estabilidad y número de implementaciones? ¿Sombrero rojo? ¿Canónico? ¿Pistón? Mirantis? ¿Escalada de nubes?

¿Cuáles son las cosas más esenciales que un programador autodidacta debe aprender para ser un gran ingeniero de software en el menor tiempo posible?

Cómo valorar los beneficios de un software informático

Como programador, ¿está bien comenzar mi propia empresa de desarrollo web / software sin inversión?

¿Cuál será la mejor manera de hacer un proyecto de equipo? (lea la descripción para más detalles)

¿Qué es una herramienta de administración de rutas, cuáles son los parámetros para el problema de administración de rutas y cómo hago para crear dicho software?

¿A dónde van los ingenieros de software con habilidades sociales terribles?

¿Debo cambiar mi trabajo de ingeniería de software dentro de los 6 meses posteriores a la incorporación, si la calidad del trabajo es mala y no es interesante?

¿Qué patrones de diseño de GoF (Gang of Four) están desactualizados?