extension developer apple app ios apple-tv tvos

ios - extension - apple developer resources



Cómo extender la aplicación de iOS a tvOS (9)

Tengo una aplicación para iOS que necesito extender a tvOS. ¡Toda la información que encontré explica cómo comenzar desde cero! ¿Hay alguna forma de extender mi aplicación a tvOS o debería comenzar un nuevo proyecto con ella?

Actualización 1: Mi pregunta es: ¿Cómo extender mi proyecto existente para admitir tvOS sin construirlo desde cero?

Actualización 2: punto de Jess Bower en el sitio web de Apple:

Permita a los clientes disfrutar de sus aplicaciones favoritas tanto en iOS como en el nuevo Apple TV con una sola compra al permitir la compra universal de su aplicación en App Store.

Lo que significa que necesitamos crear un nuevo paquete en nuestro proyecto existente y habilitar la compra "universal" para que cuente como una aplicación en App Store.


  1. Se debe agregar un nuevo objetivo para tvOS. Hay dos maneras de hacerlo

    • Agregue un nuevo objetivo a través de Archivo> Nuevo> Archivo ...> Destino tvOS.
    • Duplique un objetivo iOS existente y cambie TARGETED_DEVICE_FAMILY a 3 y "Plataformas compatibles" a tvOS en "Configuración de compilación"
  2. Los pods deben agregarse al objetivo de tvOS mediante la pod install . Podría haber una lista diferente de pods que puedes / quieres usar en tvOS. Los pods para diferentes objetivos se pueden separar en Podfile usando:

    target ''iOS TARGET NAME'' do pod ''podname'', :git => ''https://github.com/name.git'' end target ''tvOS TARGET NAME'' do pod ''podname'', :git => ''https://github.com/name.git'' end

  3. La mayoría de las cápsulas en este momento no son compatibles con tvOS. Para esos Pods, estos son los pasos para que funcionen en su proyecto:

    • Clona el repositorio de git en tu disco local
    • Si se está utilizando una versión del pod en otro objetivo (objetivo iOS), cambie el nombre; de ​​lo contrario, CocoaPods se quejará: por ejemplo, RestKit -> RestKitTV y usar: path In Podfile para señalar la ubicación del repositorio clonado:

      pod ''RestKitTV'', :path => ''Other/RestKitTV''

    • Actualice el archivo podspec en el repositorio clonado:

      • Modificar el nombre para que sea compatible con el nuevo nombre
      • Cambie la plataforma a tvOS o agregue tvOS a la lista de plataformas compatibles

        Pod::Spec.new do |s| .. s.platform = :tvos .. end

        O

        Pod::Spec.new do |s| .. s.tvos.deployment_target = ''9.0'' s.tvos.exclude_files = ''framework/Source/Mac'', .... s.tvos.frameworks = [''OpenGLES'', ''CoreMedia'', ''QuartzCore''] .. end

  4. Agregar archivos al objetivo:

    • Agregue código fuente (archivos .m) a "Compilar fuentes" de "Fases de compilación" para el destino
    • Agregar imágenes a "Copiar recursos del paquete"
    • Agregue marcos a "Enlace binario con bibliotecas". Tenga en cuenta que no todos los marcos son compatibles con tvOS
  5. Use las macros TARGET_OS_TV y TARGET_OS_IOS para separar el código tvOS no compatible

    #if !TARGET_OS_TV *iOS only code* #else *tvOS only code* #end


+ La respuesta de Simon-Tillson es correcta, sin embargo, tuve algunos problemas de compatibilidad con versiones anteriores de iOS 8.1 y SDK inferiores, donde TARGET_OS_IOS no estaba definido (para versiones anteriores de Xcode)

El siguiente código corrige eso y funciona igual para iOS 9.0 / 9.1 SDK + y 8.1 SDK anteriores y menos.

#if TARGET_OS_IOS || (TARGET_OS_IPHONE && !TARGET_OS_TV) // iOS-specific code #elif TARGET_OS_TV // tvOS-specific code #endif


El SDK de tvOS se basa en iOS, pero no es intercambiable. A diferencia de cuando se lanzó el primer iPad, el nuevo Apple TV no será capaz de ejecutar aplicaciones iOS.

La AppStore para TV solo incluirá aplicaciones creadas específicamente para tvOS.

Para los desarrolladores de iOS que deseen crear aplicaciones para Apple TV, les recomiendo revisar la nueva página de documentación: https://developer.apple.com/library/content/documentation/General/Conceptual/AppleTV_PG/index.html#//apple_ref/doc/uid/TP40015241-CH12-SW1

Específicamente, revisa la sección de marcos heredados de iOS para darte una idea de lo que funcionará de tus proyectos de iOS existentes.


En Xcode 7.1 (que presenta tvOS SDK) puede agregar un objetivo de tvOS como cualquier otro (Archivo -> Nuevo -> Destino ... -> tvOS -> ...) y es compatible con Objective-C y Swift, así que sí - es posible compartir código entre su aplicación iOS y tvOS, solo necesita verificar su membresía de destino de origen y habilitarlo en su objetivo de tvOS. Para extender las compras a través de la aplicación iOS y tvOS, debemos usar Compras universales.


En el caso de mi proyecto, simplemente agregué un nuevo objetivo al proyecto iOS existente y modifiqué un código apropiadamente (usando #if os (tvOS / iOS) en algunas áreas). Ahora puedo ejecutar la misma aplicación en dispositivos iOS o Apple TV.

El único marco que faltaba en tvOS era WebKit (que era necesario para renderizar texto enriquecido), y necesitaba encontrar un mecanismo alternativo.

Voy a abrir el proyecto de código abierto pronto (antes de finales de octubre), para que otras personas puedan echar un vistazo.


Me tomó un poco de tiempo encontrar todas las cosas necesarias para cambiar, pero esta lista debería cubrirlo.

  1. haga clic en el objetivo de iOS y duplique
  2. cambiar el SDK base del nuevo objetivo de tvOS a tvOS más reciente
  3. haga una copia de info.plist y haga que tvOS apunte a ese
  4. crea todos los íconos de tvOS e inicia imágenes
  5. establezca TARGETED_DEVICE_FAMILY en 3 para la configuración de compilación de tvOS
  6. agregue cualquier nueva versión de código específica de tvOS, por ejemplo, sin shouldAutorotate, prefiereStatusBarHidden, etc.

No olvide cambiar el SDK base a TVos 9.x en la configuración de compilación. Es necesario que aparezca el simulador de TV


Solo para enumerar algunas limitaciones y desafíos:
1. No hay almacenamiento local persistente para aplicaciones en Apple TV. Los datos deben almacenarse en iCloud.

2. El tamaño máximo de una aplicación Apple TV está limitado a 200 MB. Se deben utilizar los recursos a pedido ( contenido de la aplicación que se aloja en la App Store ). Los beneficios son un tamaño de aplicación más pequeño y una carga lenta de los recursos de la aplicación.

3. La interfaz de usuario es drásticamente diferente. Se deben seguir las pautas de la interfaz humana según el documento.

4. Crear una aplicación cliente-servidor usando JavaScript y el marco TVML.

5. Control del enfoque táctil de la IU. UIFocusEnvironment controla el comportamiento relacionado con el enfoque para una rama de la jerarquía de vistas. UIViewController se ajusta al protocolo UIFocusEnvironment.

6. Creación de ilustraciones de Parallax Debe crear una imagen LSR con Xcode y luego usar el terminal para crear una imagen LCR. Un objeto UIImage puede mostrar una imagen LCR correctamente.


También creo que agregar un nuevo objetivo para tvOS es el camino a seguir, especialmente si tiene muchos códigos object-c o swift para compartir entre proyectos.

Para aquellos casos en los que puede haber algunos tipos no compatibles con tvOS en su código compartido, he usado estos símbolos de preprocesador para proporcionar fragmentos de código alternativos para tvOS:

#if TARGET_OS_IOS // iOS-specific code #elif TARGET_OS_TV // tvOS-specific code #endif