成为tvOS开发人员

一年多以前,我来到苏黎世加入了Zattoo。

Zattoo是一家位于瑞士的小型公司,致力于通过互联网分发电视,无论用户使用哪种设备。

在这些设备中,有iPhone,iPad,现在有了App Store,这是Apple“最近”发布的第四代Apple TV。

即使在这段时间里我也一直在开发我们的iOS App,事实是我更专注于tvOS。

由于其上下文和设备类型,在电视平台上进行开发总是会导致其自身类型的问题。

这不是我第一次面对他们。 过去,我从事其他电视平台的开发工作,例如Euskaltel电视或Imagenio(如今更名为Movistar电视),在开发大屏幕时总是会遇到一系列问题。

实际上,Apple TV并非例外。

–过扫描 :使用屏幕边缘附近的所有区域基本上是不安全的,因为根据用户的电视设置,其中的所有内容都可能被裁剪甚至完全隐藏。 到目前为止,在tvOS中处理过扫描是一项手动任务,但是由于tvOS 11和新的safeAreaLayoutGuide定义,从现在开始将变得更加容易。

–非常长的会话,甚至永不结束:在大屏幕应用程序中查看用户会话的平均时长后,您会注意到与标准移动应用程序的巨大差异。 在大屏幕中,用户实际上在使用您的App时会在沙发上休息几个小时,更不用说那些只关闭电视以使STB和您的App在后台存活数天甚至数周的人。 内存管理和后端资源消耗的效率在这里确实很重要。

–屏幕不旋转:这实际上不是问题,而是优点。 自动布局问题较少,使开发人员更满意。

–基于焦点的导航:从用户到设备的较大距离决定了与之交互的方式。 由于无法使用触摸屏,因此可以使用遥控器在屏幕上的不同交互元素上移动焦点。 处理焦点始终是一项艰巨的任务,并且由于tvOS中的Focus Engine效率低下,因此与Apple TV一起工作时甚至更糟。

–尺寸 :一切都在进一步,因此一切都必须更大,就这么简单。 最好的方法是遵循平台人机界面准则定义的大小。 对于Apple TV,可以在此处找到它们。

–带宽 :在大屏幕上工作时不是硬性限制。 STB通常使用以太网连接到高速网络。 盒子的主要目的是接收视频,至少现在是高清的。 因此,从后端获取一些JSON应该不是什么大问题。

除了先前的问题,Apple TV的Apps开发也有其自身的特色。

它们可以归纳为三点, 导航,定制可靠性。

导航

Apple TV是迄今为止我使用的第一台机顶盒,其性能足以提供流畅的用户导航。

通过Siri Remote,Apple引入了电视导航的全新概念。

在拥有大量按钮的遥控器世界中,苹果公司有勇气😜释放了一个仅由六个按钮和一个数字转换器控制的盒子,开发人员只能使用其中两个按钮和数字转换器。

与Siri Remote一起使用,结合tvOS的后堆栈逻辑和焦点管理,是Apple Tv中最具挑战性的部分之一。 它始终需要做出折衷,这不仅是因为只有少数几个可用的手势,而且还因为使用本地组件作为AVPlayerViewController时,Apple可能不允许甚至保留很多手势。

我最近发布的有关tvOS定向点击的文章就是一个例子,您可以看到,检测到这些点击的唯一方法实际上是利用GameController SDK。

定制

tvOS并非在设计时就考虑了定制,因此从一开始您就会注意到它。

诸如更改按钮背景颜色或在集合视图中创建自定义单元格之类的小任务一开始可能看起来很简单,但是在使用tvOS时绝对不是。

如果您习惯使用iOS SDK,则在尝试为tvOS创建视图时会发现很多限制。

想象一下,您必须在登机屏幕上创建经典游戏,这是一个简单的带有跳过按钮的分页教程,要在您的应用首次启动时展示。 很简单吧?

好吧,如果我告诉您在tvOS中,UICollectionView不支持isPagingEnabled,并且UIPageViewController不允许在其页面上包含交互元素怎么办?

在tvOS中创建自定义视图不是不可能的,但是您会注意到它们通常比最初预期的要难。

可靠性:

Apple TV是越野车,或者公平地说,我应该说tvOS 10是越野车,因为Apple确实在努力为tvOS 11进行错误修复。

到目前为止,与Apple Tv合作的最后一年是我向Apple开放更多雷达的一年,这让我想起了iOS 7时代。这不仅是因为在真正奇怪的场景中出现了罕见的错误,而且还因为使用了非常流行的API。

这里有一些有趣的例子:

  • UITextField没有正确居中
  • 将isUserInteractionEnabled设置为false时,AVPlayerViewController对暂停做出反应
  • AVPlayerViewController,在实时流之间切换时出现奇怪的进度行为
  • 从Interface Builder创建UITextField的实例时,忽略属性NSFontAttributeName

另一方面,我不得不说,Apple确实在照顾这些错误,它们确实响应雷达,询问更多信息或数据,传达每个问题的状态并在得到修复后要求进行验证。

在这一点上,非常重要的一点是tvOS中的碎片数量为0%。 到目前为止,只有一个盒子可以使用该操作系统,并且它们当然都可以更新为该系统的最新版本。 您可以从统计信息中看到,只需几天就可以将所有用户更新到最新版本的tvOS。

tvOS的核心基本上是iOS的核心。 它们之间的主要区别实际上是在UI层中。

因此,所有业务逻辑都可以很容易地在两个系统之间共享,而只有一些特殊性,例如tvOS中的持久性限制。

另一方面,UI代码不那么容易共享。 使用TVML时,根本不可能,但不能使用xibs或情节提要,这两个平台之间不兼容。

在工具方面,即使没有特定的支持,通常iOS工具也可以很好地适用于tvOS。 例如,即使tvOS不受官方支持,Fastlane在Zattoo中也对我们很好。

但是您可能还会发现其他工具,例如HockeyApp,这些工具尚不能在tvOS中使用。

Apple TV不仅仅是一个新的机顶盒,它还创造了整个电视体验的全新概念。

如果您是iOS开发人员,乐于学习新知识,将一只脚放在舒适区,我建议您开始为tvOS创建Apps。 您会发现新的挑战和新机遇的新领域。


如有任何疑问,请随时在github,twitter或dcordero.me上添加我。