OneV's Den

上善若水,人淡如菊

嗨,我是王巍 (@onevcat),一名来自中国的 iOS / Unity 开发者。现居日本,就职于 LINE。正在修行,探求创意之源。


ObjC 中国与 objc.io 合作最新作品《函数式 Swift》,《Core Data》,《Swift 进阶》及《集合类型优化》已经发布泊学网正在开展订阅赠书活动,也欢迎前往了解

当 App Store 遇上电视,开发者的第四代 Apple TV 开箱体验

引子

2015 年 9 月,San Francisco。今年接近 100 华氏度的气温要比往年都更热,而 Apple 例行的秋季发布会也如期在这里举行。自从 iPhone 一战成名后,每年的 iPhone 旗舰机型都是移动通讯设备的业界标杆。而今年秋季发布会大家也自然地将重点放在了最新的 iPhone 6s 上。手机乏善可陈,除了硬件参数的一些常规升级外,我们并没有看到 iPhone 有多大进步。不过这也是大家预料之中,每隔两年一款的 s 系列定位就只是对之前版本的补充。另外,更大屏幕的 iPad Pro 也传闻已久。虽然 Apple 有意进军生产力市场,但是在平板电脑日渐衰颓的今天,一款并没有实质改变的设备是否能够力挽狂澜,还有待观察。

要说这场发布会上能配得上三藩 9 月气温的产品,可能就只剩新款 Apple TV 了。相比起它的前辈,新款的 Apple TV 拥有一颗 A8 处理器,运行了全新和独立的操作系统 tvOS,第三方开发者可以为 tvOS 开发独立运行的 app,并且它拥有一个全新的 TV App Store。在之前一两年时间里,Apple 开放了 iOS extension 和 Apple Watch app 的开发,以求完善平台用户体验。但是不论是通知中心还是手表 app,其实都是依附在已有的 iOS app 上的,仅仅是功能的补充。Apple TV 的 App Store 可以说是自 iOS 2 时代开放 App Store 以来 iOS 开发生态中最大的一次变革。开发者们现在有了全新的交互方式,全新的使用场景,可以再一次释放创造力。

这样的设备,作为一个 iOS 开发者,不论是利益所使还是兴趣所驱,结论自然都跑不离三个字,那就是“买买买”。

开箱

因为自己的开发者账号是中国区的,所以没法申请到之前的一美金的 Developer Kit,既然薅不到资本主义的羊毛,那就只能出血自己购入了。不过还好 150 美金的售价相比起其他 Apple 产品来说确实只是小菜一碟。于是顺利成章地大前天下了单,然后顺理成章地今天快递盒子就出现在了门口。

apple-tv-1

包装的话和前几代产品差不错,颜色继承了一贯的黑乎乎,并没有像其他的 Apple 产品那样有别的颜色可以选择。不过考虑到电视机作为传统的黑色家电,也很少出现亮丽的色彩。也许想要等到白色或者金色的 Apple TV 的话,估计要看 Apple 自己动手做电视机了。

apple-tv-2

打开包装盒以后的内容,电视盒子的主体部分和带触摸板和 Siri 的遥控器并排摆放。本体的尺寸在长宽上和前代保持一致,但是厚度增加了不少。这主要还是由于需要集成的东西变多了,毕竟本代 Apple TV 内含足够强劲的 A8 以及 2G 内存,另外,蓝牙 wifi 什么的自不用说,也是一应俱全。遥控器上半部分是玻璃的触控板,为系统的操作提供了全新的交互方式,我之后会再提及。上一张内含物全部排开的图:

apple-tv-3

左右两根线分别是电源线和一根普通的 USB-Lightning 的线缆,左下的说明书的话写有开始的欢迎语,以及一些关于本体接口和遥控器按键的简单说明。和 Apple 其他很多产品类似,这份说明书对于大部分人来说应该是不需要的。

值得一提的是,Apple 依然在看不到的地方做了不少功课。我们在放置 Apple TV 的时候,一般还是按照正常的方向放置的。在平时不可能看得到的底面上,Apple 也好不吝啬地做了大大的 logo。另外,设备整体摸上去触感也很不错。

apple-tv-4

安装

其实算不上安装。现在的电子产品要是不能开箱后插上电源就能傻瓜使用的话,是会受不少诟病的。当然啦,Apple TV 这样的机顶盒产品的话除了电源线,还需要一根 HDMI 来和高清电视连接。需要注意的是,HDMI 线是不包含在 Apple TV 盒子里的,需要自行准备。虽然现在客厅娱乐化家里或多或少应该都能翻出一两根 HDMI 的线,但是也不排除正好没有。所以在购买的时候可以确定一下,没有的话直接在 Apple Store 里买一根也是不错的选择。

apple-tv-5

本体背面除了电源线和 HDMI 接口外,还有两个插口,分别是以太网网线接口和一个 USB-C 接口。平时使用的话直接用内置的 wifi 就可以了,没有必要插网线。这个接口的目的应该是用来在 tvOS 出问题变砖的时候强制重装系统时使用的。当然,如果你选择不用无线网络的话,平时插根网线用应该也是可以的。另一个 USB-C 的接口是为开发者准备的,还是需要连线才能够将 Apple TV 与开发的 Mac 连接。另外,在从本地恢复 tvOS 系统的时候也需要 USB-C 的连接才能在 iTunes 中找到 Apple TV 设备。

apple-tv-6

开机以后是很常规的欢迎和语言选择等等,操作的话就靠新的遥控器上半部分的触控板了。tvOS 使用焦点系统进行操控,同一时间屏幕上有且仅有一个焦点 UI 元素,用户通过在遥控器触摸板上的滑动来控制焦点移动,通过按压触摸板来确认。虽说是玻璃触摸板,但是从材质上来说遥控器的下半部分非触摸的区域却更接近于日常使用的手机屏幕,而上半部分的触摸板反而金属质感强烈。我一开始的时候有些不太习惯,拿反了好几次遥控器。不过在经过一段时间适应以后就不会弄错了。

初始设置的话十分方便,你可以用过使用 iOS 设备通过蓝牙来对新的 Apple TV 进行设定。这省去了输入网络密码,登陆 Apple ID 等等一系列复杂的输入过程。如果说在手机的小屏幕上进行键盘输入体验糟糕的话,在 Apple TV 上用遥控器进行输入简直就是灾难:键盘按键从 a 到 z 一字排开,你需要来回滚动焦点选择需要的字符。而且如果你像我一样在使用一些密码管理软件来管理密码,而非自己记忆的话,每次问你输入密码的时候估计都会有砸电视的冲动。还好,Apple 在第一次还是很人性化地帮我们省了这个步骤。

apple-tv-7

成功登陆了自己的中国区的 Apple ID 以后,我们就进入到 tvOS 的主界面了,眼前情况只能用惨不忍睹来形容。只有照片,搜索,家庭共享和设置四个选项,和砖并没有太大区别..

apple-tv-8

赶快吓得祭出了自己日本区的账号,更换账号以后,终于看到 iTunes 和 App Store 等内容了。Apple TV 现在在大陆还没有上市和销售的消息,鉴于之前音乐电影图书的 iTunes Store 在中国正式上线,可能 Apple 也正在努力想让 Apple TV 能在国内开始销售。但是之前有广电总局机顶盒只能用国产 TVOS1.0 的禁令,所以最终 Apple TV 有没有可能在中国上市,还是一个未知数。

总之,你现在想要用 Apple TV 来做客厅娱乐的话,一个欧美或者日本区的 Apple ID 应该是必要的。

apple-tv-9

apple-tv-10

作为开发者,最关心的自然是 App Store 了。可以看到虽然是第一天,但是商店中已经有不少 app 了,像是常看的视频 app 的 YouTube,vimeo,TED 等等一应俱全。Netflix 最近也登陆了日本,并且取得了很好的成绩,也出现在了日本区商店的推荐首页上。其他的像是 NHK,ESPN 等等频道也推出了自己的 app。

使用

使用上来说,交互设计十分简单清晰。焦点的内容会被稍微放大显示,点击触摸板选择,点击 Menu 按钮后退,这对一个普通的有其他电子产品使用经验的用户来说,几乎是没有学习成本的。观看电视节目的话要做的就是在主页面上滑动找到 app 并打开,然后选择想看的内容就可以了。

由于字符输入的困难,我选择了在设置中将购买 app 需要确认 Apple ID 关掉了。Apple TV 作为一款家庭设备的话其实如果家里有小朋友的话这还是挺危险的一件事情,但是相比起每次要打开手机显示密码再花三分钟划来划去输入密码的话,我还是选择前者..

在要求用户登录和输入上,值得一提的是 YouTube 的处理。YouTube 没有选择让用户直接在 Apple TV 上输入用户密码,而是采用了让用户使用其他设备进行登陆:访问特定网址进行正常登陆,然后输入特定的序列码来进行回调和授权。其实猜测这样做的很大原因是 YouTube 要求的是标准的 OAuth 2.0 登陆,需要访问 Google 账号,而在 tvOS 上是没有 WebView 支持的。也就是说,想要像在 iOS 或者 Android 上弹出 web view 的认证的话是不可能的了,除非用 TVML 专门为 Apple TV 写一套流程和界面。于此相比,现在几乎拥有 Apple TV 的用户都不太可能没有其他设备,使用更方便的设备进行登陆会是一个很不错的选择。

apple-tv-11

除了电视节目,App Store 中现在另一个大类就是游戏了。在发布会上已经有开发商展示了一些游戏,比如 Crossy Road:

apple-tv-12

这类游戏依然交互简单,相比起在手机上来说,你的操作不会影响到屏幕显示,你可以一直看到完整的屏幕 (而且这块屏幕比手机大得多的多得多..),手持遥控器窝在沙发里懒洋洋地划来划去的感觉相比去抬着手拿设备来说也要舒适一些。

如果你认为 Apple TV 只能胜任这样的像素风小游戏的话你就错了。Gameloft 也在第一时间将《狂野飙车8》移植到了 Apple TV 上。因为 Apple TV 的 app 有 200 MB 的尺寸限制,所以对于这样的 3D 游戏,基本需要能够进行额外的资源加载。自己维护一套 asset 的规则或者使用 Apple 的 On-Demand Resources 都是可选项。Gameloft 也采用了额外的资源下载:

apple-tv-13

得益于 A8 CPU 和 2GB 内存,游戏运行的帧率完全没有问题,游戏始终能跑在满帧。在操作时,游戏利用了遥控器中的重力感应和陀螺仪来识别遥控器方向,以此控制赛车。除了使用遥控器以外,游戏也支持 MFi 的各种第三方手柄或者方向盘,作为一款赛车类游戏来说,体验还是相当完整。当然,《狂野飙车8》还是属于移动端为主的视觉效果。光影和细节上相比主机游戏还是有不小差距,但是毕竟相比于 iPhone 或者 iPad,更大的屏幕意味着更接近于标准游戏主机的体验,玩起来还是挺过瘾的,可以说这次 Apple 在游戏方向上迈出了坚实的一步。

apple-tv-14

开发

回到开发的正题上,Xcode 7.1 包含了 tvOS 的 SDK,相信有兴趣的同学已经把玩过 tvOS SDK 和模拟器了。想要把程序部署到实际设备上的话,我们需要一根 USB-C 到 USB-A 的线缆将 Apple TV 与 Mac 进行连接(如果你用的是 MacBook 的话那就是两头 USB-C),然后选择正确的 provisioning file 或者直接交给 Xcode fix 以后就可以直接部署了。所以作为开发者,在购买 Apple TV 作为开发设备的时候,千万不要忘了一并买一根转接线,否则你将无法将 TV 连接到你的开发设备上。

Apple TV 的 app 的话,基本来说有两种形式:一是基于网络的一套方案,使用 TVJS (一套为 Apple TV 设计的 Javascript 框架),TVML (Apple TV 专用的类似 XML 的标记语言,用来构建界面) 和 TVMLKit (胶水代码) 来构建,Apple 把这类的 app 叫做 Client-server Apps。这类 app 的开发更偏向于类似前端和网站开发:你使用 Apple 提供的常用模板,然后从自己的服务器中获取内容后,将这些内容填写到模板中进行显示。使用这种开发方法的话,基本是在和 Javascript 和 XML 相关的内容打交道。如果你已经有现成的数据 (视频) 源,那么使用这种方法能让你直接将数据填到模板里,以此来迅速地构建出符合 Apple TV 标准交互的 app。

另一类 app 类似于传统 iOS app,使用一个 UIKit 的子集,一些 tvOS 的独特的特性以及 Auto layout 来进行 app 构建,Apple 将其称为 Custom Apps。如果你已经是一个 iOS 开发者的话,这种模式的 app 会让你感到如沐春风。基础控件,导航,网络等等,一切都是那么熟悉。不过相比起完整的 iOS,tvOS 有着完全不同的交互方式和体验,很多时候我们都需要注意不能将 iOS 开发中已有的经验简单粗暴地照搬。

对于开发者来说,直接获取利润的方式和普通的 iOS app 基本一致,也就是付费 app,内购以及广告。现在暂时在 tvOS 上还没有成熟的广告平台 (不知道 Admob 之类的平台商有没有在这方面有什么进展),只能靠内容商自己想办法。因为是全新的平台,所以现在 App Store 上 app 数量还比较有限,可以说暂时还是一片蓝海。如果 Apple TV 能够获得成功进入大多数人的客厅的话,这绝对是一个极具潜力的消费市场。

但是不得不吐槽的是,现在 App Store 的应用发现还非常不足,只有推荐,已购买和搜索三个栏目。没有分类榜单,也没有方式能打开指向 App Store 的链接 (因为 Apple 铁了心不想把网页浏览加入到 tvOS 里)。也就是说,想要发现一个 app 现在只有两种方式:被 Apple 推荐出现在首页,或者是用户在搜索中输入你的 app 名字/关键字进行搜索。搜索的方法能为 app 带来的曝光度几乎为零,而且也没有办法使用链接进行推广。用户想要下载你的 app,不得不经过痛苦的搜索过程 (还记得我们说了好几次的 Apple TV 上输入不便的问题么)。所以对广大普通开发者来说,相比起开发中的技术问题,如何让自己开发的 app 让用户看到知道,会是更大的挑战。

apple-tv-15

不过输入和 App Store 的问题都不是无解。在平台化如此强大的今天,直接用 Siri 进行语音输入,使用 iCloud 密码或者 Touch ID,都是很好的输入解决方案。App Store 的话只要 Apple 愿意,添加一些分类榜单或者更完善的 app 发现机制也只是时间上的问题。对于像一个 tvOS 这样一个全新的系统和平台生态,我们还是不应该太过着急,多给它一些时间来调整。

我之后可能会看时间安排,有空的话会稍微再写一点 Apple TV 开发相关的内容 :)

最近的文章

写在 2015 的尾巴

上一次写类似年终总结的东西已经是大概快十年前的事情了,那时候还刚进大学,每天也就喜欢发一些无病呻吟的东西。回望之后,发现那些蹉跎掉的岁月确实无法再重新来过,不过也让我懂得了,幸好我们还能珍惜当下。今年于我来说,注定是不平凡的一年。愈到年关,写作的冲动就愈发强烈,它驱使着我去记录下些什么,所以有了这篇写给自己的“阔别已久”的年终总结。无论何时,无论何地,平安就好前几天因为北京雾霾很凶,看到有人在说柴静的雾霾报告,自己之前没看过,所以就找来补了补课。《穹顶之下》确实是一部非常好的新闻调查片子,...…

胡言乱语集继续阅读
更早的文章

WWDC15 Session笔记 - Xcode 7 UI 测试初窥

Unit Test 在 iOS 开发中已经有足够多的讨论了。Objective-C 时代除了 Xcode 集成的 XCTest 以外,还有很多的测试相关的工具链可以使用,比如专注于提供 Mock 和 Stub 的 OCMock,使用行为驱动测试的 Kiwi 或者 Specta 等等。在 Swift 中,我们可以继续使用 XCTest 来进行测试,而 Swift 的 mock 和 stub 的处理,我们甚至不需要再借助于第三方框架,而使用 Swift 自身可以在方法中内嵌类型的特性来完成。关...…

能工巧匠集继续阅读