Cómo extender la aplicación de iOS a tvOS

Tengo una aplicación de iOS que necesito extender a tvOS. Toda la información que encontré está explicando cómo comenzar desde cero. ¿Hay alguna manera de extender mi aplicación a tvOS o debería comenzar un nuevo proyecto con él?

Actualización1: Mi pregunta es: ¿Cómo extender mi proyecto actual para apoyar tvOS sin buildlo desde cero?

Actualización2: punto de Jess Bower en el website de Apple:

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

Lo que significa que necesitamos crear un nuevo package en nuestro proyecto existente y habilitar la compra "universal", por lo que contará como una sola aplicación en App Store.

El SDK de tvOS está basado 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.

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

Para cualquier desarrollador de iOS que busque crear aplicaciones para Apple TV, recomiendo consultar la nueva página de documentation: https://developer.apple.com/library/content/documentation/General/Conceptual/AppleTV_PG/index.html#/ / apple_ref / doc / uid / TP40015241-CH12-SW1

Específicamente, echa un vistazo a la sección Inherited iOS Frameworks para darte una idea de lo que funcionará inmediatamente después de tus proyectos iOS existentes.

En Xcode 7.1 (que introduce el SDK de TVOS) puede agregar un objective de TVOS como cualquier otro (Archivo -> Nuevo -> Objetivo … -> tvOS -> …) y es compatible con Objective-C y Swift, por lo que sí – Es posible compartir el código entre su iOS y la aplicación de TVOS, solo necesita verificar su membresía de origen y habilitarla en su objective de TVOS. Para extender las compras a través de iOS y la aplicación de TVOS, deberíamos usar las compras universales.

También creo que añadir un nuevo objective para tvOS es el path a seguir, especialmente si tienes un montón de código objective u código swift para compartir entre proyectos.

Para aquellos casos en los que podría haber algunos types no compatibles con tvOS en su código compartido, he utilizado estos símbolos de preprocesador para proporcionar fragments de código alternativos para tvOS:

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

Me llevó un time encontrar todas las cosas necesarias para cambiar, pero esta list debería cubrirlo.

  1. haz clic en el objective iOS y duplica
  2. Cambie el sdk base del nuevo objective de TVOS a la última versión de TVOS
  3. Haga una copy de info.plist y tenga TVOS apunte a esa
  4. Realice todos los íconos de tvOS e inicie imágenes.
  5. establece TARGETED_DEVICE_FAMILY en 3 para la configuration de compilation de TVOS
  6. agregue cualquier nueva versión específica del código de tvOS, por ejemplo, sin shouldAutorotate, prefiereStatusBarHidden, etc.

Solo para enumerar algunas limitaciones y desafíos:
1. No hay almacenamiento local permanente 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. Los resources a pedido ( contenido de la aplicación que se aloja en App Store ) deben usarse. Los beneficios son el tamaño de la aplicación más pequeño y la carga perezosa de los resources de la aplicación.

3. La interfaz de usuario es drásticamente diferente. Las directrices de interfaz humana deben seguirse según el doc.

4. Creación de una aplicación Client-Server utilizando JavaScript y marco TVML.

5. Controlar el foco táctil de la UI. UIFocusEnvironment controla el comportamiento relacionado con el foco para una twig de la jerarquía de la vista. UIViewController cumple con el protocolo UIFocusEnvironment.

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

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

El siguiente código lo corrige y funciona igual para iOS 9.0 / 9.1 SDK + y 8.1 anteriores y less SDKS.

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

En el caso de mi proyecto, simplemente agregué un nuevo objective al proyecto iOS existente y modifiqué un código apropiado (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 generar text enriquecido), y necesitaba encontrar un mecanismo alternativo.

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

  1. Se debe agregar un nuevo objective para tvOS. Hay dos forms de hacer eso

    • Agregue un nuevo objective mediante Archivo> Nuevo> Archivo …> Objetivo de TVOS.
    • Duplique un objective de iOS existente y cambie TARGETED_DEVICE_FAMILY a 3 y "Plataforms admitidas" a tvOS en "Configuración de compilation"
  2. Las pods deben agregarse al objective tvOS mediante la pod install . Podría haber una list diferente de pods que puede / quiere usar en tvOS. Los pods para diferentes objectives 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 vainas en este momento no son compatibles con tvOS. Para esos Pods, estos son los pasos para que funcionen en su proyecto:

    • Clone el git repo en su disco local
    • Si una versión de la cápsula se está utilizando en otro objective (objective de iOS), cambie el nombre; de ​​lo contrario, CocoaPods se quejará: por ejemplo, RestKit -> RestKitTV y usará: path En Podfile para señalar la location del repository clonado:

       pod 'RestKitTV', :path => 'Other/RestKitTV' 
    • Actualice el file podspec en el repository clonado:

      • Modificar el nombre para que sea compatible con el nuevo nombre.
      • Cambie la plataforma a tvOS o agregue tvOS a la list de plataforms 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 files al destino:

    • Agregue el código fuente (files .m) a "Fuentes de compilation" de "Fases de compilation" para el objective
    • Agregar imágenes a "Copiar resources de package"
    • Agregue frameworks a "Enlace binary con bibliotecas". Tenga en count que no todos los frameworks son compatibles con tvOS
  5. Use los macros TARGET_OS_TV y TARGET_OS_IOS para separar el código no compatible de tvOS

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

No olvide cambiar el Base SDK a TVos 9.x en la configuration de compilation. Es necesario que el simulador de TV aparezca