La plataforma Cocoa está ahora representada por cuatro sabores separados, o subplataformas, con los SDK de macOS, iOS/iPadOS, watchOS y tvOS. Cada SDK se compone de bibliotecas individuales que suelen denominarse «Frameworks».
En el lado de Objective-C, cada framework es un paquete con la extensión .framework
que contiene tanto archivos binarios (.dylib
, que es comparable a .dll
en Windows) como de cabecera de Objective-C. Para Elements, cada marco de trabajo en el SDK está representado por un archivo .fx que agrega todos los metadatos de las cabeceras para hacerlos más fáciles y rápidos de consumir para el compilador de Elements.
Elements viene con archivos .fx
pre-creados para todos los marcos de trabajo en los SDKs estándar de Apple que se envían con las últimas versiones de los cuatro SDKs (así como para algunas versiones anteriores).
Puede encontrar una lista completa de todos los marcos de trabajo en las listas siguientes. Verás que muchos de los frameworks son compartidos por algunos o incluso todos los SDKs, proporcionando una amplia biblioteca de clases que te permiten escribir código que puede ser compilado para y compartido entre todas las subplataformas, mientras que cada SDK también proporciona un número significativo de frameworks que son específicos de la plataforma.
- Todos los frameworks del SDK de macOS
- Todos los frameworks del SDK de iOS
- Todos los frameworks del SDK de tvOS
- Todos los frameworks del SDK de watchOS
- Todos los frameworks de Mac Catalyst
Veamos algunos de estos frameworks con más detalle.
Foundation
Probablemente el framework más crítico para cualquier aplicación Cocoa es el framework Foundation, porque -como su nombre indica- proporciona gran parte de las clases base que componen una aplicación en el tiempo de ejecución de Objective-C. Esto incluye la mayoría de las clases estándar con prefijos NS*
(aparte de las clases GUI, más en eso más adelante), desde los tipos simples y esenciales como NSString
, NSArray
y similares, a las clases que proporcionan acceso a los servicios del núcleo del sistema operativo, como NSFileManager
para el acceso al disco, NSNotificationCenter
para trabajar con las notificaciones, NSURL*
clases para trabajar con las solicitudes de red, y muchos muchos más.
Lea más en sobre Foundation.fx
. Está disponible en todas las subplataformas de Cocoa.
Interfaces de usuario: AppKit vs. UIKit vs. WatchKit.
Las similitudes entre los SDK de iOS, watchOS, tvOS y macOS se disipan cuando entramos en el terreno del desarrollo de la interfaz de usuario, y con razón, ya que la interfaz de usuario de las aplicaciones en estas plataformas es muy diferente. Por esta razón, los SDKs proporcionan tres marcos muy distintos:
AppKit
se incluye en el SDK de macOS solamente, y proporciona todas las clases y controles que necesitas para crear aplicaciones para Mac. Por razones de legado, la mayoría de estas clases comparten un prefijo de nomenclatura común con Foundation y comienzan con NS*
, y las clases con las que trabajarás incluyen NSWindow
, NSButton
, NSTableView
y similares.
UIKit
es el framework que tanto iOS como tvOS utilizan para proporcionar sus UIs, y sus clases comienzan con un prefijo UI*
. Muchos conceptos son compartidos por AppKit y UIKit, pero las clases son diferentes &mdash algunas más que otras. Por ejemplo, ambos frameworks tienen una clase para representar el color (NSColor
y UIColor
, respectivamente) que funcionan de forma muy similar, mientras que otros conceptos son bastante exclusivos de UIKit, como su uso de controladores predefinidos como UINavigationController
y UITabBarController
. UIKit también tiene diferencias (algunas menores, otras muy significativas) entre iOS y tvOS.
WatchKit
, finalmente, es utilizado por watchOS para construir UI para el Apple Watch en términos de Apps, Glances y Notificaciones. (También hay ClockKit
para construir Complicaciones en la cara del reloj.) WatchKit utiliza un enfoque diferente y más simple para el diseño de la UI que UIKit.
Los diferentes marcos obligan al desarrollador a repensar y diseñar la UI de su aplicación desde el principio, pero eso es una buena cosa, porque los paradigmas de la UI en cada plataforma son fundamentalmente diferentes, con UIKit siendo impulsado en gran medida por el tacto (tanto directamente como a través del Siri Remote en el Apple TV) y AppKit siendo utilizado para una interacción más tradicional de estilo ratón + teclado.
Pero muchos de los conceptos que hay detrás de los frameworks son similares, y verás que aprender a crear aplicaciones en uno de ellos se trasladará fácilmente al otro en muchos casos. Por ejemplo, los tres frameworks adoptan el paradigma Modelo-Vista-Controlador para separar la interfaz de usuario real de la clase «controlador» que la maneja. Esto se hace evidente en el momento en que empiezas a crear tu primera interfaz de usuario, porque en lugar de implementar tu propia clase Window o View (debido a la naturaleza de una sola ventana de iOS, las aplicaciones de UIKit piensan principalmente en términos de vistas, no de ventanas) en el código como lo harías en .NET o Delphi, se implementa un »Controlador» de Ventana (o Vista).
Otros temas en este sitio de documentación, como el artículo Working with XIB Files (Trabajar con archivos XIB) discuten estos conceptos con más detalle.
Lea más en los artículos AppKit.fx
, UIKit.fx
y WatchKit.fx
.
Nota: Existe un Cocoa.framework
(y el correspondiente Cocoa.fx
) en el SDK de macOS. Este marco no es más que un paquete de Foundation y AppKit. No debe confundirse con nuestro uso general del término «Cocoa» para referirse a toda la plataforma.
Más marcos de interfaz de usuario específicos
Ambos SDK contienen marcos adicionales que se basan en AppKit y UIKit para proporcionar acceso a elementos de interfaz de usuario más avanzados o específicos.
Por ejemplo:
- Los SDK de macOS, iOS y watchOS contienen MapKit, que proporciona clases para integrar Apple Maps en tu aplicación, tanto para mostrar mapas, como para trabajar con datos geográficos. (MapKit también trabaja estrechamente con CoreLocation, que se trata más adelante.)
- Tanto iOS como macOS contienen el nuevo framework Social que permite que tu aplicación muestre la interfaz de usuario para compartir contenido en Twitter, Facebook, Sina Weibo y otras redes sociales.
- iOS proporciona el framework MessageUI para interactuar con el correo electrónico y permitir que el usuario envíe correos electrónicos directamente desde tu aplicación.
- SpriteKit, nuevo tanto en iOS 7.0 como en OS X 10.9 y SceneKit (nuevo en OS X 10.9 y también en iOS a partir de la versión 8.0) facilita la creación de una gran interfaz de usuario para juegos.
Servicios del sistema
También hay un montón de frameworks que permiten a tu aplicación interactuar con los servicios del sistema, como:
- StoreKit para manejar las compras dentro de la aplicación para las aplicaciones de iOS y Mac App Store.
- Seguridad para acceder a la cadena de claves del sistema, almacenar y recuperar contraseñas y certificados, etc.
- CoreLocation para trabajar con GPS (y servicios de localización basados en Wifi).
- CoreAudio y CoreVideo para trabajar y reproducir medios de audio y vídeo.
- Addressbook y EventKit para trabajar con los contactos y calendarios de los usuarios (junto a EventKitUI en iOS).
- GameKit para integrar tus juegos con Game Center.
(todo compartido entre todas las plataformas) y más.
Frameworks de nivel inferior
Si quieres ir más allá de sólo AppKit/UIKit para tu desarrollo de interfaz de usuario, ambos SDKs también proporcionan frameworks que te permiten ensuciarte más las manos y trabajar con la UI en niveles inferiores.
- CoreGraphics es la base de todo el renderizado de gráficos en los frameworks del núcleo de la UI, y puedes y vas a trabajar con él cuando crees tus propios controles personalizados.
- QuartzCore contiene »CoreAnimation», la librería que proporciona un acceso sofisticado y a la vez sencillo para añadir animación a tus aplicaciones, algo imprescindible para cualquier aplicación moderna de iOS y Mac.
- GLKit te permite añadir elementos basados en OpenGL a tus aplicaciones UIKit/AppKit, mientras que los frameworks de nivel inferior OpenGL (macOS) y OpenGLES (iOS y tvOS) te dan acceso completo a las APIs OpenGL en bruto.
rtl.fx, libToffee.fx, libSwift.fx
Además de los frameworks del SDK principal, Elements proporciona tres archivos adicionales .fx
que son cruciales para su funcionamiento.
-
rtl.fx
Es aún más fundamental que el marco de la Fundación, y contiene todas las API de bajo nivel de estilo C que conforman el núcleo del sistema UNIX de macOS, iOS, watchOS y tvOS; también contiene bibliotecas como Grand Central Dispatch y CommonCrypto. Esencialmente, rtl.fx representa la mayoría de las cabeceras de/usr/include
. -
libToffee.fx
contiene tipos de ayuda que son cruciales para el propio compilador de Elements. Por ejemplo, contiene soporte interno para Future Types, tipos genéricosNSArray<T>
yNSDictionary<T>
, soporte para LINQ, y mucho más. -
libSwift.fx
proporciona tipos y funciones adicionales específicas del lenguaje Swift.
Cualquier aplicación Cocoa hará referencia automáticamente a rtl.fx
, tanto si aparece explícitamente en las Referencias como si no. Las referencias a libToffee.fx
y libSwift.fx
son opcionales; el compilador advertirá/error si se utilizan funciones que requieren una referencia a libToffee.fx
o libSwift.fx
y no están referenciadas.