Node.jstvOS 入门:开发而的率先个 tvOS 应用

原本文链接=http://www.appcoda.com/tvos-introduction/
作者=gregg mojica
初稿日期=2015/11/02
译者=pmst
校对=numbbbbb
定稿=numbbbbb

上月在旧金山开的苹果发布会受到,苹果公司公布了季替苹果电视。然而,此次更新不同于以往另版本,苹果新电视将同意用户从
App Store 下载使用和玩。

这般的扬言的确为开发者打了同一煎鸡血。新苹果电视中,位于
Cupertino(译者注:苹果电脑的全球总公司所在地,位于美国旧金山)的大个子介绍了一个新的操作系统,有别于
iOS 系统,新系名吧 tvOS。tvOS 基于 iOS 开发,有星星点点改动。
我们用使通用框架和你尽欣赏编程语言(当然是 Swift
喽,毫无疑问!)来修几只大概以,初步询问 tvOS。

image

了解 tvOS

tvOS 基被 iOS 系统出要变成。你下的过剩框架可能都适用于
tvOS。然而,苹果删除了几只 iOS 框架,使得 tvOS 独一无二 (最知名的尽管是
WebKit)。

苹果支持少数种植档次的 tvOS
应用程序。第一单凡是风的应用程序-这看似应用程序会卷入代码和图纸等等资源。这差不多跟
iOS 或 OS X 应用程序一样。tvOS
新增对client-server(客户端-服务器)用的支持,即第二种植档次。client-server应用程序简单地拿服务器请求与网支付过程集中到用中来。换句话说,这些使得跟周边的数据库,服务器等竞相。例如,如果您利用
Node.js(一迟迟基于 Chrome V8 引擎开发之 JavaScript
框架)实现了后端,接着你可考虑动用client-server技能,使它们还便于管理应用程序(即我们的客户端)和后端(又称作服务器)。client-server应用程序可以直接和
JavaScript
进行相互。然而,由于这些应用程序比较特别,在本教程中我们将未讨论client-server应用程序,重点介绍传统应用之付出。

伸手用这些概念牢记于心,开始我们的教程!

必备条件

每当本教程中,我假而你已经了解科普的 iOS 框架、术语和网络文化。
我拿当整个课程被行使 storyboard 进行讲解,希望而懂得怎么使
storyboard。同样,我弗见面对 storyboard
中一些广阔的操作做详细深入地讲学(例如改变背景颜色,修改对象尺寸等等)。如果您针对
storyboard 还免顶了解还是还特是独 iOS 的新家,我提议您去 AppCoda
教程网站先上下,再回过头来学习以课程。

开条件呢 Xcode7.1
以上。当然最要于苹果电视真机上拓展调试(译者表示呵呵),当然模拟器也足够了。

缔造一个初的 tvOS 工程

为开 tvOS 应用,你要在你的 Mac 上设置 Xcode7.1。Xcode7.1 内置了
tvOS SDK,除此之外还有 iOS9.1 以及 Swift2.1。

起步 Xcode,创建一个初工,选中一个新的 tvOS 应用。在右边面板,选中击
Single View Application 并点击 next。

image2

紧接着为新应用命名。对于第一独使用来说,我们习惯以一个 Hello World App
作为教程的开。命名该工程为
HelloWorld,接着点击创建并选项目存储位置。

Hello, tvOS

鉴于 tvOS 继承自 iOS,许多你熟悉的 iOS 开发基本概念在 tvOS 中还适用。

于您的 Main.storyboard 文件中,添加一个 button,将 title 修改为“Click
Me!”,接着在其下方添加一个标签 label,如下所示:

image3

留意到 tvOS 中的按钮与 iOS
的按钮稍有异。此外,当你上加多个按钮时,苹果已经同意用户以按钮间无缝切换,比如向右侧,向左,向上或朝向下滑动。开发者只待以
storyboard 中为按钮布局来采取该特性(稍后详述)。

暨 iOS 一样,我们透过 control-drag 标签(label)和按钮(button)来创造
IBOutlet 以及 IBAction。这里分别命名 outlet 为 myLabel,IBAction 为
buttonPressed。

在 buttonPressed 动作受到,请键入如下代码行:

self.myLabel.text = "Hello,World"

君应有好熟稔这行代码了。如果你无熟识,上述代码实现了点击按钮,为标签(label)的
text 字段赋值”Hello,World”字符串值。

央于模拟器中运行应用。

公恐怕想使通过鼠标来点击按钮,但跟模拟器中的 iOS
应用不同,苹果电视不布置触摸屏,仅仅依赖一个遥控器罢了。因此,单击Hardware
>Show Apple TV Remote 或者 Command + Shift + R
快捷键显示遥控器。通过遥控器实现按钮的点击,你的首先个 tvOS
应用就是这就了!

猜谜游戏 App

接下,我们拿运用现有的 tvOS
知识开发同悠悠简单的猜谜应用。这将凡一个万分基本的猜谜应用(只来一个题目),这个迷你项目根本是像你展示按钮和遥控器之间是哪相互的。在连片下的类型面临,我们拿探讨又多关于决定
tvOS 的知识。

又启航 Xcode,依葫芦画瓢创建一个新的 tvOS
项目。不过请重新命名项目名称。

如法炮制我下面的布局做有 storyboard 的底蕴操作。

如果您切莫确定自身是哪些实现的,下面是自我下的机件的列表:

  1. 4 个 UIButton,尺寸为 960 X 325
  2. 1 个 UILabel,尺寸为 1400 X 120

接着为 4 个按钮上加 text 并改变它们的背景颜色,均以 storyboard 完成(任何
iOS 应用还得以这么实现)。

譬如以前一样,让咱们将这些按钮绑定到代码中。为了代码简洁与容易理解,我拿创设
4 个 IBAction(虽然当时并不一定是最最优雅的缓解方案,但她是最简便易行的)。

用这些按钮逐一连接到 ViewController.swift 文件被(通过拖拉方式创造
IBAction),暂且命名吧 :button0Tapped、button1Tapped、button2Tapped 和
button3Tapped,你可随时修改这些号。

地方图片被展示的 label
内容是了解加州底省会是何人。给起四只挑选供您选择(有关加州京城之学问),答案是
Sacramento。其中 button1Pressed 动作应 Sacramento 按钮的点击事件。

据悉点击的按钮,我们怀念朝着用户展示一个警示信息,告知他们选择了不易或错误的按钮。接着我们创建一个名为吧
showAlert 的函数来处理及时起事,让咱们的代码 DRY(DRY 是 Don’t Repeat
YourSelf
的缩写,对于软件工程师来说这是常规用法,确保代码可重用性和可维护性)。

func showAlert(status: String, title:String) { // 1
        let alertController = UIAlertController(title: status, message: title, preferredStyle: .Alert) // 2
        let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in //3 
        }
        alertController.addAction(cancelAction)

        let ok = UIAlertAction(title: "OK", style: .Default) { (action) in
        } // 4
        alertController.addAction(ok)

        self.presentViewController(alertController, animated: true) { // 5
        }
    }

上述函数接受两独参数,一个凡用户之输入状态(表面他们答复问题之科学或不当),以及警告提示框中如果展示的信或者标题。

第二尽创建并初始化一个初的 UIAlertController 对象。第三与季推行代码为
alert 警告框添加一个 cancel 取消按钮和 ok
确认按钮,第五实施代码用于呈现这些情节。

如若您莫确定就段代码是何等行事之,我强烈建议你先看UIAlertController课,这里提供了关于该类的详细信息。

本,请于不同的 IBActions 中调用这个方式。

@IBAction func button0Tapped(sender: AnyObject) {
        showAlert("Wrong!", title: "Bummer, you got it wrong!")
}
// 这是唯一正确的
@IBAction func button1Tapped(sender: AnyObject) {
    showAlert("Correct!", title: "Whoo! That is the correct response")
}
@IBAction func button2Tapped(sender: AnyObject) {
    showAlert("Wrong!", title: "Bummer, you got it wrong!")
}
@IBAction func button3Tapped(sender: AnyObject) {
    showAlert("Wrong!", title: "Bummer, you got it wrong!")
}

刚巧使您所见到的,仅在 button1Tapped
函数遭受传播“Correct”的题目,剩下都传“Wrong”。

卿的代码应该看起与底下的代码一样。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func button0Tapped(sender: AnyObject) {
        showAlert("Wrong!", title: "Bummer, you got it wrong!")
    }
    @IBAction func button1Tapped(sender: AnyObject) {
        showAlert("Correct!", title: "Whoo! That is the correct response")
    }
    @IBAction func button2Tapped(sender: AnyObject) {
        showAlert("Wrong!", title: "Bummer, you got it wrong!")
    }
    @IBAction func button3Tapped(sender: AnyObject) {
        showAlert("Wrong!", title: "Bummer, you got it wrong!")
    }

    func showAlert(status: String, title:String) {
        let alertController = UIAlertController(title: status, message: title, preferredStyle: .Alert)

        let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in

        }
        alertController.addAction(cancelAction)

        let ok = UIAlertAction(title: "OK", style: .Default) { (action) in
        }
        alertController.addAction(ok)

        self.presentViewController(alertController, animated: true) {
        }
    }
}

于模拟器中运行而的应用。如果一切顺利,你当会盼类似下面的截图。

单机遥控器,选中 Cupertino 选项

卿该看弹出一个 UIAlertController。

噩运之是,模拟器并无支持 swiping,因此你或用在真机中测试成功之 alert
警告框。不过,你可以在模拟器(遥控)中经过本停 option 键 swipe 选项。在
Apple TV 真机中,你能够当富有按钮中无缝切换。

恭喜! 你已就了次单门类。

在 tvOS 中使用 TableViews

于 iOS 操作系统中,苹果大量下
tableview。事实上,苹果于不少自家应用(包括信息、联系人等)都采用了它。随着
watchOS SDK 的颁发,tableview 可用于 Apple Watch
开发。自然地,新的苹果电视以及 tvOS 同样支持这个流行的 API。

抄袭创建一个新的工程项目,命名也 TableViewPractice。

暨以前缔造的工程一律,Xcode 默认自动生成 ViewController.swift
文件。请于文书之第 11 行代码处添加如下宣示(译者注:就是叫 ViewController
遵循两单 tableView 的情商):

UITableViewDataSource, UITableViewDelegate

第 11 行的代码应该看起如此:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

鉴于 Swift 是平宗器安全的语言,编译器会报告说没以 UITableView 的
Datasource 和 Delegate 协议。我们会很快缓解这个题材。

紧接着在 storyboard 中上加一个 tableView 视图并拖延拽到 ViewController
文件中生成一个 IBOutlet,将那个命名吧 tableView。同时于是 IBOutlet
声明下方新增一个数组。

var dataArray = ["San Francisco", "San Diego", "Los Angeles", "San Jose", "Mountain View", "Sacramento"]

数组囊括了所有我们而于 tableView 显示的要素。

今日恳请于v iewDidLoad 方法的凡添加如下代码:

// section数量
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}
// 每个section的cell数量    
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.dataArray.count
}
// 填充每个cell的内容    
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: .Subtitle, reuseIdentifier: nil)

    cell.textLabel?.text = "\(self.dataArray[indexPath.row])"
    cell.detailTextLabel?.text = "Hello from sub title \(indexPath.row + 1)"

    return cell
}

而恐怕发现了,tvOS 中的 tableview 和 iOS 中之 tableView
非常相似。在地方的代码有中,我们告知 tableview
有微微行(rows),多少个片(section),以及每个单元格要显得的始末。

每当 viewDidLoad 方法吃,确保您管 tableview 的 delegate 和 datasource
设置也自我 self。

self.tableView.dataSource = self
self.tableView.delegate = self

当模拟器中运作应用。

不出意外,你应有看到一个 tableview 出现于界面被。

本,我们拿当 tableView
的右侧添加一个按钮(UIButton)。在模仿或真机上构建并运行,Whoo
!我们现足以按钮和 tableview 之间无缝切换了。

开创一个气候 App

当生一个稍品种遭到,我们用开一个概括的天气应用程序,显示当前之天气预报。在此类别中,我们用下好平静的天气
API:forecast.io,它吗包括 Dark Sky 在内许多 iOS 应用提供 API 支持。

先是你待在 developer.forecast.io
注册一个开发者账号。我们只是测试,免费的 API 调用(1000
次/天)应该足够用了。

在意下面 url:
https://api.forecast.io/forecast/d3250bf407f0579c8355cd39cdd4f9e1/37.7833,122.4167

forecast/后来的平失误数字(即 d3250bf40…)是 API Key
键值(千万不要将品种之 API Key 透露于别人);紧跟着 API Key
字符串后底是若想使分析天气数据位置的经度和纬度坐标。我选 San
Francisco,但是若得透过简单修改通过治理坐标值来显示其他地方的气象。

如若在浏览器中开拓该链接,你用注意到上报数据吧 JSON 格式。这是一个
Get请求。在 HTTP 世界面临,GET 用于取与下载数据。

以知道数据并将其出示到用中,我们需要分析其。解析 JSON 在 Swift
中直接是一个热议话题。目前时有发生各种各样的 JSON 解析库,诸如
SwiftyJSON、Alamofire
等。它们都是雅硬的资源,我强烈建议你先看。然而,在本教程中我们用下
NSJSONSerialization,一个 iOS 内置的类似。首先,打开 ViewController.swift
文件。didRecieveMemory警示函数在按照档受到没存在的含义,所以去其吧!

今,在 ViewDidLoad 中键入如下代码:

if let url = NSURL(string: "https://api.forecast.io/forecast/d3250bf407f0579c8355cd39cdd4f9e1/37.7833,122.4167") { }

此我们采取可选类型声明一个 url 变量。

NSJSONSerialization 需要传入 NSData 进行剖析。

if let data = NSData(contentsOfURL: url){ }

跟着,在方 data 花括号作用域中键入如下代码:

do {
      let parsed = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) // 1

     let newDict = parsed as? NSDictionary // 2
     print(newDict!["currently"]!["summary"])
   }
catch let error as NSError {
     print("A JSON parsing error occurred, here are the details:\n \(error)") // 3
}

俺们拿 NSJSONSerialization 对象包裹在 do-catch 语句子被。你也许针对 do
语词不太了解,这是 Swift 2 中的新特征。Do-Catch
语句是一个初的改进性错误处理机制。Do-Catch 语句之采用方法如下:

do {
    try expression // 不是必要的内容
    statements
} catch pattern 1 {
    statements
} catch pattern 2 where condition {
    statements
}

以首先实施代码中,我们设定了一个 NSJSONSerialization 对象,并传到 data
对象。注意,对象(parsed)在运用之前须优先转移成一个 NSDictionary 字典。

随后,在次履行代码中,我们指定一个称呼也 newDict
的变量并下as重大字用那变 NSDictionary。

末段,在第三尽代码中,我们捕获任何不当并打印至极限中。

公的通 ViewController 文件应该接近于下的代码。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        if let url = NSURL(string: "https://api.forecast.io/forecast/d3250bf407f0579c8355cd39cdd4f9e1/37.7833,122.4167") {
            if let data = NSData(contentsOfURL: url){
                do {
                    let parsed = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments)

                    let newDict = parsed as? NSDictionary
                    print(newDict!["currently"]!["summary"])
                }
                catch let error as NSError {
                    print("A JSON parsithng error occurred, here are the details:\n \(error)")
                }
            }
        }
    }
}

检查终端输出。你应当看到一个包裹了价值的可选类型(你沾的价应略带有不同,会依据不同之地理位置及气象来展示)。

今我们拿有 UILabel 链接到以中。拖拽两单 UILabel,一个受
currentTemp,另一个深受 currentSummary。仔细看下 forecast 的
API,你晤面小心到它回到时气象温度和气象的大概(当然还闹任何数据)。

于 newDict 变量下面放如下代码:

self.currentTemp.text = "\(newDict!["currently"]!["temperature"]!!)"
self.currentSummary.text = "\(newDict!["currently"]!["summary"]!!)"

代码实现了获取天气数据并正确显示到界面。每一样履行语词最后都以了还叹号符号(!!),用于强制解包
JSON 数据(否则其用吃打包到 Optional 中)。

以模拟器中构建并运行。

涉及的是!你早就就了天气预报项目!

其他 tvOS 特性

咱俩只不过接触了点 tvOS 的浅。正而你所知之,tvOS 建立于各种 iOS API
之上。但是,许多框架都于 tvOS
中改换除了。完整列表请圈即首文章。

除去,tvOS
的基础是关键事件(按钮、单元格、标签等当当选状态时会凸显显出来,此时啊聚焦状态)。幸运的是,系统活动处理大多数聚焦事件。只要您利用了
storyboard,默认会自动聚焦。你可以谷歌中找到有聚焦API。

刚而教程开始所涉及的,苹果支持 client-server 应用。这些用使用
TVML、TVJS 以及 TVMLKit,它们的功底是即刻最为盛行的 web
技术(HTML、JavaScript 等)。

当下得考虑的卓绝可怜挑战是创立的 tvOS 应用中,SDK
并无支持数据持久化存储。这是跟 iOS 不同,你切莫可知保留任何大小超过 1MB
的照片、图标等情节。因此而必配备一个后端服务,如
CloudKit、Parse、iCloud 等。建议您先了解下 tvOS
中对资源的需要(之前我形容的App
瘦包教程)。此外,应用大小限制于
200MB 以内。

妇孺皆知,tvOS 应用被来极其多克条件,我们用多加小心。

总结

每当本教程中我们大概了解了 tvOS
以及它们的各种特色。通过四只例项目我们看来了 tvOS
的雄强的远在,当然还有局限性。tvOS 与 iOS
共享许多形似的远在,但有些iOS框架却早就于移除了。

这里提供了整机的路文件。

每当列一中,我们贯彻了一个 hello,world
应用程序;随后项目二蒙实现了简易的猜谜游戏采用,向而展示聚焦引擎;项目三详细介绍了于
tvOS 中怎么样采取
tableView;最后,我们做已生文化以项目四遭受构建了一个简的气象应用程序,可以起互联网上下载天气数据。

苹果的 tvOS 应用企业给上周出产,授权世界各地的开发者分享他们之著述。

您以当见证者,看到 tvOS 和新的苹果电视永久性地改成 TV 行业!