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.
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.
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.
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
Il m'a fallu un peu de temps pour trouver toutes les choses nécessaires pour changer, mais cette liste devrait la couvrir.
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.
Une nouvelle cible doit être ajoutée pour tvOS. Il y a deux façons de faire ça
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
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:
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é:
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
Ajouter des fichiers à la cible:
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
+ 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
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.
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