Sin lugar a dudas, una de las noticias más interesantes que se han filtrado en los últimos meses sobre el posible futuro de las plataformas de Apple a nivel de desarrollo, es el llamado proyecto Marzipan. Un proyecto que supondría la unificación, a través de las apps, de las plataformas iOS y macOS que será presentado para iOS 12 y macOS 10.14 en la próxima WWDC 2018 que podría celebrarse la primera semana de junio. Pero, ¿qué supone eso exactamente? Vamos a analizarlo y descubrir la historia de cómo hemos llegado a ello para entenderlo más claramente, además de ver las ventajas que esto aportaría a usuarios y desarrolladores.
Un poco de historia
Año 1988. Steve Jobs presenta al mundo su nuevo ordenador tras su salida de Apple cuatro años atrás: el NeXT. Una compañía con un objetivo claro: crear el mejor ordenador para investigación del mundo. Una workstation que cualquier estudiante o académico soñaría con tener. Todo el mundo sabe que la compañía no fue viable económicamente, que el equipo era excesivamente caro y finalmente Apple compró NeXT en 1996 para propiciar la vuelta de Jobs a Cupertino.
NeXT reinventó el desarrollo tal como era y lo definió hasta nuestro días
Pero eso es solo la superficie de la verdad tras NeXT. La realidad es que NeXT reinventó el desarrollo tal como era en aquella época y lo definió hasta nuestro días.
Con la llegada del Macintosh en 1984, las interfaces gráficas habían llegado para quedarse. Pero programar una aplicación para ellas era poco menos que un infierno para cualquier desarrollador. Cada ventana o elemento gráfico debía ser programado desde 0, con mucho esfuerzo y sin ningún tipo de reusabilidad de código. Pero Jobs cogió una de las ideas que descubrió en el Xerox PARC en el año 1979 (donde conoció el Xerox Alto que le "inspiró" para crear el Macintosh) y la aplicó en NeXT: la programación orientada a objetos aplicada a interfaces gráficas.

La programación orientada a objetos, como tal, existe desde finales de los años 60. Pero lo que Jobs descubrió en Xerox fue la idea que supuso la base del uso de objetos como elemento reutilizable para crear interfaces. Descubrió las bases de lo que luego se convertiría en el patrón MVC (Modelo-Vista-Controlador) que hoy sigue siendo usado para crear apps nativamente para cualquier sistema Apple. Cogió una super clase del lenguaje C creada en 1980 llamada Objective-C, un motor pionero de compilación incremental orientado a objetos (la primera vez en la historia que un programa solo compilaba las partes que habían cambiado y no todo el código) y el concepto del framework que permitía reutilizar código. Con todos estos ingredientes creó el primer editor comercial de creación de interfaces gráficas de la historia: Interface Builder.
Interface Builder fue el primer entorno de desarrollo con una paleta de componentes (botones, etiquetas, campos...) que podían ser arrastrados a una ventana para crear programas, y usar dichos elementos en el código. Usaba outlets o conexiones que permitían comunicar la interfaz (la vista) con aquello que controlaba qué iba a mostrar (el controlador), mientras los datos para que la aplicación funcionase se guardaban en el modelo. Lo que conocemos como el patrón MVC.

Además, con Interface Builder, vieron la luz las primeras librerías o frameworks de la historia: FoundationKit y AppKit. FoundationKit daba soporte a Objective-C para tareas comunes de trabajo con tipos de datos o funciones matemáticas y AppKit permitía crear las propias interfaces. Era la librería donde estaban los objetos que se usaban para crear UIs, es decir, los botones y demás. Esta tecnología fue tan revolucionaria que los NeXT fueron los ordenadores que dieron a luz al lenguaje HTML y los navegadores web, al primer servidor web de la historia (que funcionaba sobre Objective-C), a Virtuoso (padre de Freehand y primer software de dibujo vectorial) o al motor de juego sobre el que se creó el primer FPS de la historia: Wolfestein 3D (los motores de Doom y Quake también fueron gestados en un NeXT).
Hoy día, toda esta tecnología sigue vigente y la librería de construcción de interfaces para macOS sigue llamándose AppKit. Es obvio que ha evolucionado en sus 30 años de historia, pero la base, la esencia, se definió en aquel momento y ha perdurado hasta nuestros días.
Cuando la primera versión del kit de desarrollo de software del iPhone llegó a las manos de los desarrolladores en verano de 2008 (junto al lanzamiento del App Store) supuso un cambio evolutivo muy importante para Apple a nivel de desarrollo. El entonces iPhone OS 2.0 estrenaba la posibilidad que desarrolladores terceros usaran una nueva librería basada en Objective-C que Apple había creado para el primer iPhone durante varios años de trabajo.

Muchos de los frameworks que el entonces OS X usaba estaban presentes tal cual en el nuevo kit de desarrollo del iPhone. De hecho, Apple vendió en su primera keynote de presentación del iPhone que este, por debajo, era OS X. Y así es y sigue siendo. No podemos pensar que iOS y macOS son sistemas operativos diferentes porque no lo son. Comparten el mismo núcleo de sistema, Darwin, y muchas librerías como las de uso de red, seguridad, gráficos, sonido e incluso animaciones de la propia interfaz. El mismo núcleo que Apple creó en el año 2000 para ser el corazón de su sistema OS X.
La diferencia entre iOS, macOS, watchOS y tvOS son las APIs de sistema que hay encima del núcleo Darwin y montadas sobre los componentes que comparten. Por ejemplo, en macOS tenemos a Aqua como API que da servicio a la GUI y AppKit como API de construcción de interfaces. En iOS (he ahí la novedad en 2008) la API de creación de interfaces se llama UIKit. Una API nueva, adaptada al entorno táctil y NO compatible con AppKit. Se parece en algunos aspectos, es indudable, pero no es compatible. Esto es clave para entender el punto donde estamos ahora mismo.
Por lo tanto hoy día tenemos un mismo núcleo para todos, pero encima de macOS tiene una librería de construcción de apps y sobre watchOS, iOS y tvOS hay otra. La ironía es que con los años UIKit ha evolucionado e incorporado soporte de otras capas de construcción para otros sistemas. Evolucionó con el Apple Watch para permitir crear interfaces para watchOS con los mismos componentes que ya tenía. Y luego volvió a evolucionar para permitir construir apps nativas en tvOS. Los componentes son los mismos en los 3 casos: reloj, TV o dispositivo iOS. Pero UIKit ofrece diferentes adaptaciones de los mismos componentes con el fin de adaptar su apariencia e interacción a aquella que necesita cada nueva plataforma.
Incluir a macOS es el siguiente y lógico paso. Un paso en que UIKit evolucionará y ganará soporte para macOS con el fin de crear apps que funcionen en el sistema de escritorio, heredando el comportamiento y los flujos de uso de este sistema como ya ha hecho con tvOS donde la UI es manejada con un mando táctil y está compuesta por tiles navegables y el uso del concepto del foco por zonas de interfaz.
La unificación ya existe
Apple, hoy día, tiene cuatro grandes librerías de desarrollo para construcción de apps: UIKit (solo para iOS, watchOS y tvOS), AppKit (solo para macOS), SceneKit (para juegos 3D) y SpriteKit (para juegos 2D). Pero, ¿sabían qué? SceneKit y SpriteKit ya están unificadas y permiten crear juegos 2D y 3D que con un solo código y proyecto funcionan en todos los sistemas, incluido macOS.
Por lo tanto el camino ya no es hacer que las apps de iOS se ejecutan en el Mac. Hay que mirar más allá. Porque las apps de iOS no van a ejecutarse en el Mac ya que no tendría sentido. No estamos hablando de lo que Google ha hecho con ChromeOS donde ha puesto Android como un parche donde parte de las apps o juegos no funcionan correctamente porque esperan una interacción táctil. Es decir, no estamos hablando de coger la app de iOS y ejecutarla "en modo emulación", tal cual, en macOS.
Lo que Apple está haciendo en el proyecto Marzipan es proporcionar las herramientas necesarias para que UIKit también sirva para crear apps para macOS. No que funcionen en macOS, sino que con las mismas herramientas y componentes que ya usan millones de desarrolladores al programar apps para iOS, tvOS y watchOS, se puedan crear apps que funcionen correctamente en macOS. Así de simple en concepto, aunque obviamente requiere un trabajo importante para que estas herramientas sean adaptadas para que las apps proporcionen una experiencia de usuario fluida y correcta, adaptada a cada sistema y usando las mismas herramientas compatibles.

Cualquier desarrollador como yo mismo, que conozca en profundidad los sistemas Apple, sabe que este es el siguiente paso. Algunos desarrolladores conocidos como Steven Troughton-Smith o Guilherme Rambo (ahora editor en 9to5mac), coinciden en esta misma teoría porque, básicamente, es el próximo y lógico paso que Apple ya ha demostrado que puede hacer adaptando UIKit a la usabilidad de un sistema diferente a iOS como tvOS.
Por lo tanto es importante entender que para que las apps creadas para iOS funcionen en macOS requerirán de una adaptación lógica. Habrá que crear una interfaz propia para macOS que luego podrá reutilizar todo el código común de la app, además de incorporar elementos propios como los menús. Incluso la nueva interacción que incorpora iOS 11 para trabajar con la app Archivos a través de permisos temporales a través del sandbox que da seguridad a las apps, también serviría para integrar con Finder y no tener que abrir todo el sistema de archivos a las nuevas apps.

Cuando hoy creamos un proyecto en Xcode que contiene todos los sistemas, cada uno tiene su target que dará lugar a un ejecutable para cada sistema. Y cada uno de ellos tiene sus carpetas con sus recursos específicos y luego una parte compartida por todos. En los últimos años, las interfaces se construyen con un componente llamado Storyboard que es algo así como el mapa de navegación de la app. Y hay uno diferente para tvOS, otro para watchOS, otro para iOS (iPhone y iPad) y ahora habrá otro nuevo para macOS.
Un primer y muy interesante paso que dará nueva vida a macOS y le permitirá ejecutar apps universales que permitan un flujo de trabajo más unificado.
Desarrolladores, usuarios
Este cambio es algo natural y como hemos visto, parte de una evolución lógica. Y las principales ventajas que se van a obtener de esta evolución son para la propia plataforma macOS. Está claro que el Mac App Store es un desierto y que la plataforma no interesa a los desarrolladores. No solo porque el número de usuarios es mucho menor. También porque desarrollar una app para macOS es más costoso y complejo porque la propia infraestructura de AppKit no ha evolucionado demasiado en todos estos años y eso hace que procesos que UIKit realiza de forma rápida y cómoda en macOS con AppKit sea más engorroso y requiera más trabajo.
A cualquier desarrollador que le preguntes te dirá que hacer apps con macOS le da demasiado respeto e incluso miedo. Es más tedioso y lento.
La llegada de UIKit a macOS supondrá un soplo de aire fresco pues infinidad de apps que funcionan ahora mismo en el ecosistema iOS podrán ofrecer soluciones integradas de uso continuado y por lo tanto el ecosistema macOS se enriquecerá mucho. Si somos solo usuarios iOS no nos aportará nada, pero si tenemos un Mac viviremos una nueva era de prosperidad en el sistema de escritorio. Además las apps de la propia Apple evolucionarán de la mano con un único desarrollo y veremos más novedades de forma frecuente en vez de, como ahora, que da la impresión que el software para macOS está abandonado. Ya sé que el software de Apple para iOS también parece abandonado, pero es lógico pensar que Apple trabaja en nuevas versiones que funcionen ahora también en macOS y por eso no reciben actualizaciones hace tiempo.
Las suscripciones por software que Apple estrenó hace unos años para cualquier tipo de app tendrán también un protagonismo muy importante. Habrá apps que ahora cobran dos veces, una por la versión de iOS y otra por la de macOS, que podrán ofrecer diferentes tipos de suscripción que permitan usar solo la app de iOS a quien interesa o ambas iOS y macOS, creando un flujo de uso muy interesante e integrando por fin el sistema escritorio de forma completa en el ecosistema de uso de las apps y no como un sistema diferente y olvidado.
Hace más de un año, en una entrevista que me hizo nuestro compañero Eduardo Archanco, hablé sobre cómo la unión de los equipos de iOS y de macOS en uno solo no era más que una ventaja para el usuario. Y esta que vemos ahora es la primera consecuencia y gran ventaja para desarrolladores y usuarios.
El futuro
Muchos de los analistas de desarrollo coincidimos en que este será un primer paso: el usar UIKit para hacer apps para macOS.

Pero otra consecuencia de este primer paso son los rumoreados Mac con ARM. Los últimos procesadores de Qualcomm como el anunciado 845 tienen la capacidad de ejecutar software en modo x86. Con algunas limitaciones pero tienen esa capacidad. Si las apps de macOS poco a poco pasan a usar UIKit, estaríamos ante el paradigma que dicha librería puede generar binarios tanto para ARM (dispositivos iOS) como x86 (Mac). Y si usan el núcleo Darwin en su versión ARM en vez de la x86 así como los componentes que ya existen en ambas arquitecturas, podríamos estar a las puertas de una nueva era Rosetta como aquel paso intermedio entre PowerPC e Intel allá por el año 2006. Un paso de transformación que unificaría ambas plataformas a través del desarrollo.
Este último punto hay que verlo, obviamente, como una teoría sobre una base que es técnicamente plausible a nivel de desarrollo y de lo que hoy permite la tecnología. Y habría más pasos aún que podrían darse, pero de eso hablaremos en una próxima ocasión. No obstante, si quieren saber más del tema les invito a oír mi podcast Apple Coding, parte de la comunidad independiente de podcast Cuonda, donde en uno de los últimos episodios hablé de estos temas y algunos más que podrían interesarles si quieren ahondar en él.
Espero que les hayan quedado claras las nuevas posibilidades que se nos ofrecerán a usuarios y desarrolladores, así como que entiendan cómo hemos llegado hasta aquí. Un saludo a todos y gracias.
En Applesfera | "Veremos un sistema operativo universal que unifique el desarrollo, no la experiencia"
Ver 42 comentarios
42 comentarios
Naihmor
Soy desarrollador iOS y siempre estaré agradecido de leer este tipo de artículos. Todo un gustazo.
Como digo, conozco el entorno iOS pero no el de macOS, aunque debo confesar que alguna vez he creado proyectos en el Xcode por simple curiosidad. Hay similitudes entre ambos entornos, muchas, pero supongo que por simple desconocomiento no me veo tan capaz de desarrollar una aplicación para macOS.
Siguiendo el tema del artículo, veo enormemente favorable que se pudieran desarrollar versiones de una misma app para todos los entornos, en un mismo proyecto. Veo con muy buenos ojos este posible cambio, quitando posibles cambios gráficos en el sistema como se muestran en algunos "Concept Arts" de diseñadores, que tan siquiera hace falta. Simplemente: misma app, distintos elementos de diseño según entorno, distintas librerías, etc.
Posiblemente confunda cosas, ya que no desarrollo para macOC y me centro sólo en iOS, pero así como primer análisis veo que sería beneficioso para los desarrolladores (facilidad de trabajo y ampliación de nicho/plataformas), para Apple (ampliar catálogo en macOS, que no le viene nada mal) y por supuesto para el usuario final (más oferta).
El futuro de todo esto pasa por implementar ARM, y creo que todos en el fondo sabemos que va a acabar pasando.
the_aviator
Artículo completísimo, de agradable lectura y muy intesante. Enhorabuena al redactor.
Desde luego es una gran mejora para los usuarios y desarrolladores.
Usuario desactivado
Mil gracias a todos por vuestros positivos comentarios. Es un placer escribir para el medio más destacado de Apple en habla hispana y recibir tan buena acogida. Espero estar siempre a la altura y aportaros algo especial en cada artículo que os guste y os aporte en vuestro conocimiento del mundo Apple.
Un saludo a todos y Good Apple Coding.
lokalensejota
Creia que no era posible pero acabo de leer uno de los mejores articulos de los ultimos publicados :)
Felicidades al escritor y a la editorial por el fichaje y por volver a escribir aritculos interesantes :)
De verdad... articulos asi y volveis a tener a un lector asiduo... y no creo que sea el unico!!
Cuando Apple facilita unas herramientas buenas hay que decirlo... pero cuando lo hace mal tambien... acabamos de leer un gran articulo y que ademas tiene toda la razon... me encantaria leer uno que realmente criticara donde hay que criticar :)
Lo dicho, felicidades!
Uti
Un interesantísimo artículo que me ha aclarado todas las dudas y preguntas que me hacía a cerca de eso de "pasar aplicaciones iOS al Mac", ahora lo entiendo perfectamente.
Sólo me hago una cuestión ¿No se convertirán las app en demasiado pesadas?
xeneka
Excelente artículo de unos de los profesionales que mejor conocen este entorno de programación.
Excelente fichaje
Vicente Ibanez Recatala
Por Dios, no creía que fuera posible... pero Julio ¡¡ escribe aún más que habla !!!
Gran lectura (en todos los sentidos).
Un placer leerte en Applesfera. Fichaje de invierno estratosférico.
populus
Duos, qué gran fichaje! Julio César! Aún me acuerdo cuando escribía para la difunta Appleweblog. Solía entrar a menudo por sus artículos.
Espero que esta colaboración se alargue en el tiempo. Mi enhorabuena.
church1987
Vamos algo como hicieron con Windows 10 Mobile y Windows 10 de sobre mesa
Si ya está todo inventado
alga_spain
Te deseo lo mejor en este medio eres una persona que no solo sabes un monton de lo que escribes sino que te sabes explicar y explayar de 10, felicitaciones a Applesfera por el fichaje y termino con esta frase "Lo que diga Julio va a misa"
black_ice
Un placer de lectura sin duda ¡enhorabuena!
Solo una pequeña corrección en
Objective-C es un superset de C. Es decir, soporta todo lo que hace C (puedes escribir partes de una app de iOS o Mac en C puro), mas todo lo suyo:
https://i.stack.imgur.com/wznBM.png
Como curiosidad, agregar que existen muchas clases en iOS / macOS que llevan el prefijo NS como por ejemplo
NSDictionary
oNSString
que proviene como os podéis imaginar de NextStep.Koji
Me uno a las felicitaciones, un artículo estupendo y si van por ahí los tiros el futuro de iOs/MacOs pinta de lo mas interesante.
amtdesarrollos
Un placer leer este artículo.
Era hora que a la Mac se la considere un dispositivo táctil. No será la pantalla, pero hace años que usamos MagicMouse o Trackpads. UIKit debería “encajar” sin problemas.
Esperemos esto de vida a la Mac App Store. Aunque viendo lo pobre que es la TV Store (que juega en la liga UIKit desde hace años), no me da mucha esperanza de que esta movida de sus frutos en la Mac...
DarkDudae
Existen IDEs de desarrollo como RAD Studio que permiten generar binarios para iOS, OSX, Windows e incluso Android desde hace años. Que esa vaya a ser la gran “novedad” porque se haga en xcode me decepcionaría.
salomon100
Magnífico artículo Julio. Pero estaría muy bien una actualización del mismo a día de hoy después de todo lo acontecido con el anuncio de iOS 12 y mojave
José Antonio Ruiz Puerta
Muy buen artículo.
Xdd alguien sabe de donde se puede descargar los wallpapers que aparecen en el artículo
Sanchinarro
Estupendo artículo Julio, sin lugar a dudas fichaje estrella para Applesfera.
Un saludo.
ciudadwifi
Buen artículo... pero yo creo que van más allá. Me explico, realmente a día de hoy cuando compilas una App para subirla a una de las tiendas, realmente no estás creando un binario final, sino uno intermedio y cuando se instala, pues se convierte en el adecuado a ese sistema... Realmente gracias a que por bajo está LLVM, pues hay una independencia a nivel hardware muy potente en las plataformas de Apple en cuanto a compiladores. Y esto no es de ahora, lleva bastantes años. Lo único que actualmente tenías APIs distintas para iOS, OSX, etc...
Por otro lado, ya hoy en día hay herramientas para crear una vez y generar para varios sistemas operativos. Por ejemplo con Xamarin (ahora perfectamente integrado en VS.NET) pues compartiendo la mayoría del código (y en aplicaciones muy sencillas incluso todo) pues de un código generar Apps para iOS, Android, Windows, etc.
Apple como no necesita tanto, pues podría permitir compartir prácticamente el 100% del código, como máximo solo la distribución del la interfaz pues una para Mac (y puede que iPad), otra para iPhone... porque el tamaño tan distintos te lleva a que vayas a tener lo mismo en pantalla. Pero sería directamente el SO el que decidiría el comportamiento concreto dependiendo del dispositivo. Precisamente el modelo MVC tira a eso: poder tener distintas vistas sobre lo mismo. Realmente si Phonegap, Cordoba y similares son tan populares es para conseguir eso mismo: escribe una vez, ejecuta en cualquier sitio sin reescribir nada, porque lo específico se separa en 2 partes: librerías que recurres para acceder a los servicios de esa plataforma (esto es obligatorio, pero es transparente para el programador) y después la presentación (no obligatorio, pero con CSS y poco más lo logras, y realmente ya hay librerías que se encargan de eso también... aunque aquí tienes un control de como quieres que sea).
Y con esto Apple soluciona un viejo problema: la tienda para MacOS nunca a estado al nivel de la de iOS. Es justo el camino contrario que intentó Microsoft con Windows Phone (aunque ninguna de las 2 tiendas cuajaron, pero con las App universales y ahora xamarin esperaban llenar la tienda de Windows al menso).
Realmente si lo hace bien Apple, pues de cara al programador será bastante transparente.
hasta luego
jocha
Excelente artículo, con información precisa y muy completo.
Felicitaciones.
Ojalá que poder programar para un entorno funcione en el otro, llegue pronto
carlitos007
Excelente articulo, y fácil de entender para personas que no son desarrolladores.
aparicioo
Otro lector fan de Julio César de la vieja appleweblogs que no se ha creído posible que escribiera el artículo aquí. Ojalá que no sea el único.
Este señor, además de entender, saber explicar etc, me ha ayudado muchísimas veces respondiéndome a emails, por lo que le estaré eternamente agradecido.
En cuanto al artículo, estoy a años luz de saber de desarrollo así que me ha venido muy grande,pero sí aprecio su dedicación en la redacción.
Entiendo que a muchísimos usuarios que conozcan el tema no les haya venido grande y que estén encantados. Al fin y al cabo en un blog tendrían que tratarse distintos temas para así satisfacer las curiosidades y hobbies de todos.
Así que chapeau por el redactor y también a applesfera por contratar para el artículo al que debían. (No siempre van a ser palos a Applesfera)
arquimaes
Buen artículo, con historia y explicaciones claras.
Mi único pero es que no menciona ni a Microsoft ni a Ubuntu, ambos competidores con distinta experiencia en el proceso de las aplicaciones universales. Para mí eso hace que peque de optimista, aunque es razonable teniendo en cuenta dónde nos encontramos.