63

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

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

更新 2 : Apple 网站上的 Jess Bower 点:

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

这意味着我们需要在现有项目上创建一个新捆绑包并启用“通用”购买,以便将其视为 App Store 上的一个应用程序。

4

9 回答 9

29

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

具体来说,请查看Inherited iOS Frameworks部分,让您了解现有 iOS 项目的开箱即用功能。

于 2015-09-09T23:28:10.320 回答
21

在 Xcode 7.1(引入 tvOS SDK)中,您可以像添加任何其他目标一样添加 tvOS 目标(文件 -> 新建 -> 目标... -> tvOS -> ...),它支持 Objective-C 和 Swift,所以是的- 可以在您的 iOS 和 tvOS 应用程序之间共享代码,您只需要检查您的源目标成员资格并在您的 tvOS 目标上启用它。要跨 iOS 和 tvOS 应用扩展购买,我们应该使用 Universal Purchases。

于 2015-09-10T12:10:23.990 回答
18

我花了一点时间找到所有需要改变的东西,但这个列表应该涵盖它。

  1. 单击 iOS 目标并复制
  2. 将新 tvOS 目标的基本 sdk 更改为最新的 tvOS
  3. 复制 info.plist 并让 tvOS 指向那个
  4. 制作所有 tvOS 图标并启动图像
  5. 为 tvOS 构建设置将 TARGETED_DEVICE_FAMILY 设置为 3
  6. 添加任何新的 tvOS 特定版本的代码,例如没有 shouldAutorotate、prefersStatusBarHidden 等。
于 2015-11-02T04:49:10.097 回答
17

我也相信为 tvOS 添加一个新目标是可行的方法,特别是如果您有大量的 Objective-c 或 swift 代码要在项目之间共享。

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

#if TARGET_OS_IOS
// iOS-specific code
#elif TARGET_OS_TV
// tvOS-specific code
#endif
于 2015-10-11T13:17:40.547 回答
10

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

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

3. 用户界面截然不同。必须按照文档遵循人机界面指南。

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

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

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

于 2015-09-10T15:00:34.907 回答
8
  1. 必须为 tvOS 添加一个新目标。有两种方法可以做到这一点

    • 通过 File > New > File...> tvOS Target 添加一个新目标。
    • 复制现有的 iOS 目标并将 TARGETED_DEVICE_FAMILY 更改为 3 并将“支持的平台”更改为“构建设置”中的 tvOS
  2. Pod 需要使用pod install. 您可以/想要在 tvOS 中使用的 pod 列表可能有所不同。不同目标的 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。对于这些 Pod,以下是使它们在您的项目中工作的步骤:

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

      pod 'RestKitTV', :path => 'Other/RestKitTV'
      
    • 更新克隆仓库中的 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 文件)添加到目标的“构建阶段”的“编译源”
    • 将图像添加到“复制捆绑资源”
    • 将框架添加到“将二进制文件与库链接”。请注意,并非所有框架都与 tvOS 兼容
  5. 使用 TARGET_OS_TV 和 TARGET_OS_IOS 宏来分离 tvOS 不兼容的代码

    #if !TARGET_OS_TV
        *iOS only code*
    #else
        *tvOS only code*
    #end
    
于 2016-02-03T21:23:59.980 回答
5

+Simon-Tillson 的回答是正确的,但是我在 iOS 8.1 及以下未定义 TARGET_OS_IOS 的 SDK 中遇到了一些向后兼容性问题(对于较旧的 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
于 2015-10-28T08:04:13.880 回答
2

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

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

我打算尽快(10月底之前)开源这个项目,以便其他人可以看看。

于 2015-10-21T07:56:02.217 回答
0

不要忘记在构建设置中将 Base SDK 更改为 TVos 9.x。电视模拟器必须出现

于 2016-06-01T14:08:51.407 回答