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

我有一个iOS应用程序,我需要扩展到tvOS。 我发现的所有信息都是从头开始解释的! 有没有办法将我的应用程序扩展到tvOS,或者我应该开始一个新的项目?

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

Update2: Jess Bower在苹果网站上指出:

通过在App Store上为您的应用程序启用通用购买function,让用户只需购买一次即可在iOS和新版Apple TV上享受自己喜爱的应用程序。

这意味着我们需要在我们现有的项目上创build一个新的捆绑包,并启用“通用”购买,因此它将作为App Store上的一个应用程序。

tvOS SDK基于iOS,但不可互换。 与第一代iPad发布时不同,新的Apple TV将无法运行iOS应用程序。

电视的AppStore将只包含专门为tvOS构build的应用程序。

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

具体来说,请查看“ inheritance的iOS框架”部分,让您了解现有iOS项目中可以使用的function。

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

我也相信为tvOS增加一个新的目标是要走的路,特别是如果你有很多的Objective-C或Swift代码来分享项目。

对于共享代码中可能存在某些tvOS不支持的types的情况,我已经使用这些预处理器符号为tvOS提供了备用代码片段:

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

花了一点时间find所有需要改变的东西,但这个清单应该包括它。

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

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

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

3. UI截然不同。 人机界面指南必须遵循文档。

4.使用JavaScript和TVML框架创build客户端 – 服务器应用程序。

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

6.创build视差图像您必须使用Xcode创buildLSR图像,然后使用terminal创buildLCR图像。 UIImage对象可以正确显示LCR图像。

+ Simon-Tillson的答案是正确的,但是我有一些向后兼容性问题与iOS 8.1和以下SDK的TARGET_OS_IOS没有定义(对于旧的Xcode版本)

下面的代码修复了这个问题,并且对于iOS 9.0 / 9.1 SDK +和之前的8.1以及更less的SDKS也是如此。

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

在我的项目中,我只是给现有的iOS项目添加了一个新的目标,并且适当地修改了一些代码(在几个领域使用#if操作系统(tvOS / iOS))。 我现在可以在iOS设备或Apple TV上运行相同的应用程序。

tvOS中唯一缺less的框架是WebKit(这是呈现丰富文本所必需的),我需要提出一个替代机制。

我将很快(10月底之前)开源这个项目,让其他人可以看看。

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

    • 通过文件>新build>文件…> tvOS目标添加一个新的目标。
    • 复制一个现有的iOS目标,并在“Build Settings”中将TARGETED_DEVICE_FAMILY更改为3,将“Supported Platforms”更改为tvOS
  2. 豆荚需要使用pod install添加到tvOS目标。 可以有不同的pod列表,你可以/想要在tvOS中使用。 用于不同目标的Pod可以使用以下命令在Podfile中分隔:

     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. 目前大多数Pod都不支持tvOS。 对于这些豆荚,下面是让他们在你的项目中工作的步骤:

    • 克隆本地磁盘上的git回购
    • 如果在另一个目标(iOS目标)中使用了某个版本的pod,请更改该名称,否则CocoaPods会投诉:例如RestKit – > RestKitTV并使用:path在Podfile中指向克隆的repo的位置:

       pod 'RestKitTV', :path => 'Other/RestKitTV' 
    • 更新克隆的repo中的podspec文件:

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

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

        要么

          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. 添加文件到目标:

    • 将源代码(.m文件)添加到目标的“Build Phases”的“Compile Sources”中
    • 添加图像到“复制束资源”
    • 添加框架“与库链接二进制文件”。 请注意,并非所有的框架都与tvOS兼容
  5. 使用TARGET_OS_TV和TARGET_OS_IOSmacros分离tvOS不兼容的代码

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

不要忘记在构build设置中将基础SDK更改为TVos 9.x。 电视模拟器显示是必要的

Interesting Posts