Si el código Java puede ejecutarse en cualquier plataforma, ¿por qué los desarrolladores de iOS utilizan Objective C y no Java para ejecutarlo en el iPhone?

La respuesta es complicada. No hay ninguna razón técnica por la que no se pueda portar una VM de Java a iOS. Pero hay que tener en cuenta que la máquina virtual requiere acceso a las llamadas del sistema a nivel del sistema operativo, mapeando la implementación de la clase base del JDK hasta la funcionalidad nativa del sistema operativo. Obtener rendimiento es otro reto, ya que la mayoría de las JVM utilizan un JIT para acercarse al rendimiento de nivel nativo. Estos compiladores JIT son complejos y requieren de un especialista para portarlos, no es un proyecto de fin de semana, a menos que te ganes la vida con esto. Y la mayoría de la gente que utiliza Java se preocupa por el rendimiento, especialmente en el contexto de un dispositivo con recursos limitados. El número de personas en el mundo que se especializan en esta área de trabajo es bastante pequeño en relación con el típico desarrollador de aplicaciones, requiriendo, conocimientos de C/C++, ensamblador para el dispositivo de destino, arquitectura VM, análisis de rendimiento, sysroot de cadena de herramientas avanzada, etc. Realmente, se trata de algunas de las personas más brillantes y con más talento que se pueden encontrar. Si quieres saber más sobre los esfuerzos existentes en torno al JDK y la portación de la plataforma JavaSE a móviles, consulta: Detalles de la implementación de la plataforma iOS

Ahora la respuesta no técnica y de monopolio del mercado: Apple bloquea los tiempos de ejecución alternativos de ser desplegado en iOS. No se podría, por ejemplo, presentar un JDK a la tienda de aplicaciones para obtener la aprobación. Apple lo rechazaría. La incrustación de tiempos de ejecución en tu aplicación solía estar estrictamente prohibida, y Apple tiene un lenguaje al respecto en sus directrices para iOS. Existe la idea de que Apple no quiere apoyar a los ecosistemas de la competencia, y podría entrar en un hilo entero sobre las muchas formas en que esto se manifiesta en el actual proceso de aprobación de aplicaciones. Sin embargo, parece que algunas de estas normas se han relajado. Aún así, yo esperaría que una aplicación de rendimiento lento (suponiendo que esté ejecutando una VM dentro de una aplicación de iOS, realmente sería rechazada por violar las directrices de rendimiento. Más información: AppStore / Aplicaciones iOS y código interpretado: ¿dónde está el límite? Puede haber un vínculo histórico aquí también, hubo un rumor de que Steve Jobs odiaba Java y se aseguró de que fuera eliminado de Mac OS (solíamos disfrutar de una implementación de Java un poco deficiente en el viejo Mac OS 8 o así), y es posible que esto se trasladó al espacio de iOS, aunque, quién sabe. Probablemente, por razones técnicas, no era práctico tenerlo en cuenta en los antiguos dispositivos iOS de primera y segunda generación, debido a los recursos limitados de los dispositivos. Los dispositivos de hoy en día podrían sin duda manejar la tarea de ejecutar una JVM.