web-dev-qa-db-fra.com

Comment étendre l'application iOS à tvOS

J'ai une application iOS que je dois étendre à tvOS. Toutes les informations que j'ai trouvées expliquent comment recommencer à zéro! Est-il possible d'étendre mon application à tvOS ou devrais-je commencer un nouveau projet avec elle?

pdate1: Ma question est la suivante: comment étendre mon projet existant pour prendre en charge tvOS sans le construire à partir de zéro?

pdate2: Jess Bower pointe sur le site Web d’Apple:

Permettez aux clients de profiter de leurs applications préférées à la fois sur iOS et sur le nouveau Apple TV avec un seul achat en permettant l’achat universel de votre application sur l’App Store.

Ce qui signifie que nous devons créer un nouveau bundle sur notre projet existant et permettre un achat "universel" afin que celui-ci compte comme une seule application sur l'App Store.

57
BlackM

Le SDK tvOS est basé sur iOS, mais n’est pas interchangeable. Contrairement à la date de sortie du premier iPad, le nouveau Apple TV ne sera pas capable d'exécuter des applications iOS.

L'AppStore pour le téléviseur n'inclura que des applications spécialement conçues pour tvOS.

Pour tous les développeurs iOS qui souhaitent créer des applications pour Apple TV, je vous conseillerais de consulter la nouvelle page de documentation: https://developer.Apple.com/library/content/ documentation/Général/Conceptuel/AppleTV_PG/index.html # // Apple_ref/doc/uid/TP40015241-CH12-SW1

Plus précisément, consultez la section Frameworks iOS hérités pour vous donner une idée de ce qui fonctionnera immédiatement avec vos projets iOS existants.

27
Aaron Wasserman

Dans Xcode 7.1 (qui introduit tvOS SDK), vous pouvez ajouter une cible tvOS comme toute autre (Fichier -> Nouveau -> Cible ... -> tvOS -> ...) et prend en charge à la fois Objective-C et Swift, alors oui - Il est possible de partager du code entre votre application iOS et tvOS, il vous suffit de vérifier votre appartenance à la cible source et de l'activer sur votre cible tvOS. Pour étendre les achats sur iOS et sur l’application tvOS, nous devrions utiliser les achats universels.

20
Maciek Czarnik

Je pense aussi que l'ajout d'une nouvelle cible pour tvOS est la voie à suivre, surtout si vous avez beaucoup d'objectifs-c ou Swift de code à partager entre projets.

Dans les cas où il pourrait y avoir des types non pris en charge par tvOS dans votre code partagé, j'ai utilisé ces symboles de préprocesseur pour fournir des extraits de code de remplacement pour tvOS:

#if TARGET_OS_IOS
// iOS-specific code
#Elif TARGET_OS_TV
// tvOS-specific code
#endif
16
Simon Tillson

Il m'a fallu un peu de temps pour trouver toutes les choses nécessaires pour changer, mais cette liste devrait la couvrir.

  1. cliquez sur cible iOS et dupliquez
  2. changer le sdk de base de la nouvelle cible tvOS en tvOS
  3. faire une copie de info.plist et faire en sorte que tvOS pointe celui-là
  4. créer toutes les icônes tvOS et lancer des images
  5. définissez TARGETED_DEVICE_FAMILY sur 3 pour les paramètres de construction de tvOS
  6. ajoutez toutes les nouvelles versions de code spécifiques à tvOS, par exemple. sans devraitAutorotate, préfèreStatusBarHidden etc.
16
richy

Juste pour énumérer quelques limitations et défis:
1. Il n'y a pas de stockage local persistant pour les applications sur Apple TV. Les données doivent être stockées sur iCloud.

2. La taille maximale d'une application TV Apple TV est limitée à 200 Mo). Ressources à la demande ( contenus de l'application hébergés sur l'App Store ) doit être utilisé. Les avantages sont une taille d’application plus petite et un chargement lent des ressources de l’application.

3. L'interface utilisateur est radicalement différente. Les directives d'interface humaine doivent être suivies comme conformément à la doc.

4. Création d'une application client-serveur à l'aide de la structure JavaScript et TVML.

5. Contrôle de la mise au point tactile de l'interface utilisateur. UIFocusEnvironment contrôle le comportement lié au focus pour une branche de la hiérarchie de vues. UIViewController est conforme au protocole UIFocusEnvironment.

6. Création d'une illustration de parallaxe Vous devez créer une image LSR avec Xcode, puis utiliser un terminal pour créer une image LCR. Un objet UIImage peut afficher une image LCR correctement.

8
Vacca
  1. Une nouvelle cible doit être ajoutée pour tvOS. Il y a deux façons de faire ça

    • Ajoutez une nouvelle cible via Fichier> Nouveau> Fichier ...> Cible tvOS.
    • Dupliquez une cible iOS existante et remplacez TARGETED_DEVICE_FAMILY par 3 et "Plateformes prises en charge" par tvOS dans "Paramètres de construction".
  2. Les pods doivent être ajoutés à la cible tvOS en utilisant pod install. Il pourrait y avoir une liste différente de pods que vous pouvez/voulez utiliser dans tvOS. Les pods de différentes cibles peuvent être séparés dans Podfile en utilisant:

    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 plupart des pods pour le moment ne supportent pas tvOS. Pour ces pods, voici les étapes à suivre pour les faire fonctionner dans votre projet:

    • Cloner le repo git sur votre disque local
    • Si une version du pod est utilisée dans une autre cible (cible iOS), modifiez le nom, sinon CocoaPods se plaindra: par exemple. RestKit -> RestKitTV et utilisez: path Dans Podfile pour indiquer l'emplacement du référentiel cloné:

      pod 'RestKitTV', :path => 'Other/RestKitTV'
      
    • Mettez à jour le fichier podspec dans le référentiel cloné:

      • Modifier le nom pour qu'il soit compatible avec le nouveau nom
      • Changez la plateforme en tvOS ou ajoutez tvOS à la liste des plateformes prises en charge

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

        OR

         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. Ajouter des fichiers à la cible:

    • Ajouter le code source (fichiers .m) à "Compiler les sources" de "Build Phases" pour la cible
    • Ajouter des images à "Copier les ressources du paquet"
    • Ajouter des cadres à "Lier le binaire avec les bibliothèques". Notez que tous les frameworks ne sont pas compatibles avec tvOS
  5. Utilisez les macros TARGET_OS_TV et TARGET_OS_IOS pour séparer le code non compatible tvOS

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

+ La réponse de Simon-Tillson est correcte, mais j'ai eu quelques problèmes de compatibilité avec iOS 8.1 et les versions antérieures de SDK où TARGET_OS_IOS n'était pas défini (pour les anciennes versions de Xcode).

Le code suivant corrige ce problème et fonctionne de la même manière pour iOS 9.0/9.1 SDK + et les versions précédentes de SDKS 8.1 et moins.

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

Dans le cas de mon projet, j'ai simplement ajouté une nouvelle cible au projet iOS existant et modifié un peu de code en conséquence (en utilisant #if os (tvOS/iOS) dans quelques zones). Je peux maintenant exécuter la même application sur des appareils iOS ou sur Apple TV.

Le seul cadre manquant dans tvOS était WebKit (qui était nécessaire pour rendre le texte enrichi) et je devais proposer un mécanisme alternatif.

Je vais ouvrir ce projet bientôt (avant la fin d'octobre) afin que d'autres personnes puissent jeter un coup d'œil.

2
Satoshi Nakajima

N'oubliez pas de changer le SDK de base en TVos 9.x dans les paramètres de construction. Il est nécessaire que le simulateur de télévision apparaisse

0
Pavlos