如何将iOS应用程序扩展到tvOS

Bla*_*ckM 58 ios apple-tv tvos

我有一个iOS应用程序,我需要扩展到tvOS.我找到的所有信息都在解释如何从头开始!有没有办法将我的应用程序扩展到tvOS,或者我应该用它开始一个新项目?

Update1: 我的问题是:如何扩展我现有的项目以支持tvOS而无需从头开始构建它?

Update2: Jess Bower指向Apple的网站:

通过在App Store上为您的应用程序实现通用购买,使客户能够通过一次购买在iOS和新Apple TV上享受他们喜爱的应用程序.

这意味着我们需要在现有项目上创建一个新的捆绑包并启用"通用"购买,因此它将被视为App Store上的一个应用程序.

Aar*_*man 27

tvOS SDK基于iOS,但不可互换.与首款iPad发布时不同,新款Apple TV无法运行iOS应用.

适用于电视的AppStore仅包含专为tvOS构建的应用程序.

对于任何希望为Apple TV创建应用程序的iOS开发人员,我建议您查看新的文档页面:https://developer.apple.com/library/content/documentation/General/Conceptual/AppleTV_PG/index.html#//apple_ref/DOC/UID/TP40015241-CH12-SW1

具体来说,请查看" 继承的iOS框架"部分,以了解现有iOS项目的开箱即用功能.

  • 使用JavaScript和TVML的客户端 - 服务器应用程序与其他应用程序略有不同.Xcode应用程序的主要功能是访问主JavaScript文件并将从TVML文件创建的页面呈现在屏幕上.因此,您可以选择创建类似于iOS的应用程序或基于TVML的应用程序 (4认同)

Mac*_*nik 20

在Xcode 7.1(引入tvOS SDK)中你可以添加一个tvOS目标(File - > New - > Target ... - > tvOS - > ...),它支持Objective-C和Swift,所以是的 - 可以在iOS和tvOS应用程序之间共享代码,只需检查源目标成员资格并在tvOS目标上启用它.要扩展iOS和tvOS应用程序的购买量,我们应该使用Universal Purchases.

  • 好的,发现更多.它是通用购买:(不是通用二进制文件,因此不是相同的软件包/可交付产品):https://developer.apple.com/tvos/"通过一次购买,使客户能够在iOS和新Apple TV上享受他们喜爱的应用程序通过在App Store上为您的应用程序启用通用购买." 再次,制定一个单独的目标 (5认同)

ric*_*chy 17

花了一点时间找到需要改变的所有东西,但是这个清单应该涵盖它.

  1. 单击iOS目标并复制
  2. 将新tvOS目标的基础sdk更改为tvOS最新版本
  3. 复制info.plist并让tvOS指向那一个
  4. 制作所有tvOS图标并启动图像
  5. 为tvOS构建设置将TARGETED_DEVICE_FAMILY设置为3
  6. 添加任何新的tvOS特定版本的代码,例如没有shouldAutorotate,prefersStatusBarHidden等.


Sim*_*son 16

我也相信为tvOS添加一个新目标是可行的方法,特别是如果你有很多objective-c或swift代码可以在项目之间共享.

对于那些在共享代码中可能存在某些tvOS不支持类型的实例,我使用这些预处理器符号为tvOS提供备用代码片段:

#if TARGET_OS_IOS
// iOS-specific code
#elif TARGET_OS_TV
// tvOS-specific code
#endif
Run Code Online (Sandbox Code Playgroud)


Vac*_*cca 8

仅列出一些限制和挑战:
1.Apple TV上的应用程序没有持久的本地存储空间.数据必须存储在iCloud上.

2. Apple TV应用程序的最大大小限制为200MB.应使用按需资源(App Store上托管的应用程序内容).优点是较小的应用程序大小和应用程序资源的延迟加载.

用户界面完全不同.必须按照文档 遵循人机界面指南.

4.使用JavaScript和TVML框架创建客户端 - 服务器应用程序.

5.控制UI触摸焦点.UIFocusEnvironment控制视图层次结构的分支的与焦点相关的行为.UIViewController符合UIFocusEnvironment协议.

6.创建视差图形您必须使用Xcode创建LSR图像,然后使用终端创建LCR图像.UIImage对象可以正确显示LCR图像.

  • 这并不完全准确。第 1 点不正确。第4点这只是一个选项,你可以使用tvOS,你不必使用TVML。第6点,也是一个选项。而且,这是如何回答这个问题的? (2认同)

Dij*_*jam 6

  1. 必须为tvOS添加新目标.有两种方法可以做到这一点

    • 通过File> New> File ...> tvOS Target添加新目标.
    • 复制现有iOS目标并在"构建设置"中将TARGETED_DEVICE_FAMILY更改为3并将"支持的平台"更改为tvOS
  2. 需要使用pod将pod添加到tvOS目标pod install.您可以/想要在tvOS中使用不同的pod列表.可以使用以下命令在Podfile中分隔不同目标的Pod:

    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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 目前大多数Pod都不支持tvOS.对于那些Pod,以下是使它们在您的项目中工作的步骤:

    • 克隆本地磁盘上的git仓库
    • 如果某个版本的pod正在另一个目标(iOS目标)中使用,请更改名称,否则CocoaPods会抱怨:例如RestKit - > RestKitTV并使用:path在Podfile中指向克隆仓库的位置:

      pod 'RestKitTV', :path => 'Other/RestKitTV'
      
      Run Code Online (Sandbox Code Playgroud)
    • 更新克隆的repo中的podspec文件:

      • 修改名称以与新名称兼容
      • 将平台更改为tvOS或将tvOS添加到支持的平台列表中

         Pod::Spec.new do |s|
         ..
         s.platform = :tvos
         ..
         end
        
        Run Code Online (Sandbox Code Playgroud)

        要么

         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
        
        Run Code Online (Sandbox Code Playgroud)
  4. 将文件添加到目标:

    • 将源代码(.m文件)添加到目标的"构建阶段"的"编译源"
    • 将图像添加到"复制捆绑资源"
    • 将框架添加到"Link Binary with Libraries".请注意,并非所有框架都与tvOS兼容
  5. 使用TARGET_OS_TV和TARGET_OS_IOS宏来分离tvOS不兼容的代码

    #if !TARGET_OS_TV
        *iOS only code*
    #else
        *tvOS only code*
    #end
    
    Run Code Online (Sandbox Code Playgroud)


Dan*_*li3 5

+ Simon-Tillson的答案是正确的,但我在iOS 8.1及以下的SDK中存在一些向后兼容性问题,其中未定义TARGET_OS_IOS(对于较旧的Xcode版本)

以下代码修复了iOS 9.0/9.1 SDK +以及之前的8.1及更少SDKS的相同功能.

#if TARGET_OS_IOS || (TARGET_OS_IPHONE && !TARGET_OS_TV)
// iOS-specific code
#elif TARGET_OS_TV
// tvOS-specific code
#endif
Run Code Online (Sandbox Code Playgroud)