Desarrollo multiplataforma Apple

Hace dos días tenía una app iOS funcional, hoy corre en iPhone, iPad, Mac y Apple Watch compartiendo el 70% del código, misma lógica de negocio, UIs distintas para cada plataforma.

¿Por qué multiplataforma? Porque cuando tu lógica de negocio funciona sin cambios en las 4 plataformas, y el usuario puede ver su colección en iPhone/iPad, gestionarla en Mac y actualizarla desde su Watch, entiendes el verdadero poder de una arquitectura bien diseñada.

Lo más importante: multiplataforma no es copiar y pegar código, es separar lógica de negocio de la presentación y adaptar la UI al contexto de cada dispositivo.

El resultado:

✔ iOS: App completa con autenticación, filtros, SwiftData local + sincronización en la nube.

✔ macOS: NavigationSplitView (3 columnas), keyboard shortcuts, menús nativos.

✔ watchOS: Colección compacta, actualizar progreso, feedback háptico -vibraciones muy precisas-.

✔ Código compartido: ViewModels (100%), Network layer (100%), Models (100%), KeychainHelper con App Groups

✔ Swift 6 Strict Concurrency: Complete (cero data races)

Nivel de dificultad: Medio-Alto

Tiempo invertido: 15 horas (Clean Architecture, App Groups, debugging de Target Membership)

¿Vale la pena? Absolutamente, tu producto es tu identidad, y no cuesta implementarlo, dará a tus clientes opciones y se podrán aprovechar de la comodidad del ecosistema Apple. Una vez que la arquitectura es sólida, añadir plataformas es exponencialmente más rápido.

Los aprendizajes clave

  1. @Observable es tu aliado: Compatible con todas las plataformas, mejor que @ObservableObject.
  1. Target Membership: ViewModels y lógica compartidos, Views específicos por plataforma.
  1. App Groups: Token en Keychain compartido entre iOS, macOS, watchOS. Login una vez, acceso desde todas.
  1. UI adaptativa: TabView en iPhone, NavigationSplitView (3 columnas) en Mac, listas compactas en Watch

Recursos que me ayudaron:

Stack: Swift 6, Claude Code, GitHub, Canva, Adobe Photoshop 2025