Apple TVのtvOSについてざっくりとまとめた！

# tvOSの発表
日本時間きょう(2015/09/10)未明に発表されたtvOS。iPhone6sなどの発表もありましたが、Apple TVがアップデートされ、サードパーティー製アプリが開発できるようになったことが個人的には一番興味がわいたので調べてみました。

![スクリーンショット 2015-09-10 8.18.17.png](https://qiita-image-store.s3.amazonaws.com/0/45525/0fdd1b2d-0393-8426-9cb0-b04507e0127c.png)

新しいApple TV、だいぶ肉厚ですね。~~高さ倍くらいあるのか...？~~ 新しいほうが10mm背が高いみたいです。

**なお、ここに記載している内容はデベロッパーアカウントを保持していなくても閲覧可能なページ、ドキュメントを参考に書かれています。**

## 開発に必要なソフト

### SDKなど
こちらにあります。ひとまずここからいろいろな情報がゲットできると思うので、興味がある場合はブックマークしましょう。

* https://developer.apple.com/tvos/

### SDK
こちらのページでSDKやらtvOSのベータやらをダウンロード可能です。

* https://developer.apple.com/tvos/download/

### tvOS
以下からtvOSのベータバージョンがダウンロード可能です。

* https://developer.apple.com/tvos/download/

**現段階でtvOSを入れられるのは新しいApple TVのみ** のようです。第3世代までのApple TVはサポートしていないようなので注意してください。[10月に新しいApple TVが発売される](http://www.theverge.com/2015/9/9/9276215/new-apple-tv-announced-price-specs-release-date)のを待ちましょう。

### Xcode

tvOSの開発が可能なのはXcode7.1からです。きょうXcode7のGM seedが出ましたが、**tvOSが開発可能なのはXcode7.1から** なので注意しましょう。

### Parallax Previewer

layered app iconやlayered imagesというのがApple TV用に作成可能なようで、その確認のために使用できるビューワーみたいです。Photoshopを持っていることが前提のようですがこのアプリケーションでも編集は可能なようです。

### Parallax Exporter beta

Apple TVのアイコンを作成するためのPhotoshop用のプラグインです。


### App Programming Guide for tvOS

プログラミングガイドです。

* https://developer.apple.com/library/prerelease/tvos/documentation/General/Conceptual/AppleTV_PG/

### アーキテクチャ

全体像を把握するにはまずここを見るといいかもしれません。**tvOSのアプリはclient-serverモデルで動作する**ことがわかります。

* https://developer.apple.com/library/prerelease/tvos/documentation/General/Conceptual/AppleTV_PG/YourFirstAppleTVApp.html#//apple_ref/doc/uid/TP40015241-CH3-SW1


#### TVML

**TVMLというHTMLのようなもの**が用意されています。

* https://developer.apple.com/library/prerelease/tvos/documentation/LanguagesUtilities/Conceptual/ATV_Template_Guide/index.html#//apple_ref/doc/uid/TP40015064-CH41-SW1

#### TVJS
**TVML**を表示したりするのにJavaScriptを使用します。**TVJS**というフレームワークが用意されています。TVJSのリファレンスです。

* https://developer.apple.com/library/prerelease/tvos/documentation/TVMLJS/Reference/TVJSFrameworkReference/index.html#//apple_ref/doc/uid/TP40016076

[ここ](https://developer.apple.com/library/prerelease/tvos/documentation/LanguagesUtilities/Conceptual/ATV_Template_Guide/TextboxTemplate.html#//apple_ref/doc/uid/TP40015064-CH2-SW8)にいろいろなテンプレートが用意されていて、例えばアラートを表示する場合はこんな感じで記述するみたいです。

![スクリーンショット 2015-09-10 7.50.15.png](https://qiita-image-store.s3.amazonaws.com/0/45525/6167cc10-a066-3614-18d7-9dc5a06eddf6.png)
https://developer.apple.com/library/prerelease/tvos/documentation/LanguagesUtilities/Conceptual/ATV_Template_Guide/TextboxTemplate.html#//apple_ref/doc/uid/TP40015064-CH2-SW8

### Human Interface Guideline

tvOSのヒューマンインターフェースガイドラインです。

* https://developer.apple.com/tvos/human-interface-guidelines/

なお、このページの[Resources](https://developer.apple.com/tvos/human-interface-guidelines/resources/)にアイコンのテンプレートも含まれています。[サンプルコード](https://developer.apple.com/library/prerelease/tvos/samplecode/UICatalogFortvOS/Introduction/Intro.html)も取得可能です。

## 気になった点

ドキュメントを流し読みした際に気になった点をざっくりとまとめてみました。

### どうやって入力するのか？
[ヒューマンインターフェースガイドラインに載っている内容](https://developer.apple.com/tvos/human-interface-guidelines/remote-and-interaction/)を見る限り、Siri RemoteがApple TVのインターフェースとなるようです。

![スクリーンショット 2015-09-10 6.44.40.png](https://qiita-image-store.s3.amazonaws.com/0/45525/259d265a-116b-4788-c1a6-a752d611f06f.png)

上部にTouch Surfaceがあり、その下にMenu、Siri/Search、Play/Pause, Home, Volumeなどといったボタンが並んでいます。注目はTouch Surfaceのジェスチャーです。

以下の3種類のジェスチャーがあるようです。

* Swipe
* Click
* Tap

ClickとTapってどう違うのかちょっとわかりにくいですね。。。

この辺りは[プログラミングガイド](https://developer.apple.com/library/prerelease/tvos/documentation/General/Conceptual/AppleTV_PG/)に詳しくまとまっていました。Siri RemoteはLightningで充電するみたいです。

### 画像は`@1x`らしい
同じくヒューマンインターフェースガイドラインに書かれていたのですが、画像は`@1x`を使用するみたいです。

> All images on Apple TV are @1x resolution.

### こんな感じのUIエレメントが用意されているらしい

これまた[ヒューマンインターフェースガイドライン](https://developer.apple.com/tvos/human-interface-guidelines/ui-elements/)に記載されています。

* Tab Bars
    * Tab Bar Items
* Tables
    * Table Cells
* Collections
* Split Views
* Text Field
    * Keyboard
* Buttons
* Navigation Bars
* Page Controls
* Progress Indicators
* Segmented Controls
* Alerts

watchOSの時は画面が小さいこともあってか選択できるUIエレメントがすごく少なかったんですが、tvOSは大画面での使用が前提なのでSplit Views, Tab Bars, Collectionsなど多くの選択肢を一つの画面に入れ込めるので選択肢が多いですね。選びがいがありそうです。

### アイコンは複数枚の画像を重ねて作成する

個人的に面白いなぁ、と思ったのはLayered Imageです。パララックス効果を表現できるようです。ダウンロードページにあったParallax Previewerはこの確認のために必要そうですね。

* https://developer.apple.com/tvos/human-interface-guidelines/icons-and-images/

どうやらApple TVのアイコンは、フォーカスが当たった時にこのパララックス効果を使うらしく、2〜5枚のレイヤーを重ねて作成する必要があるみたいです。

> App icons must have between two and five layers to create a sense of depth and vitality as your icon comes into focus. 

これ作るのかなり楽しそうですね。デザイナーの腕の見せ所な気がしますね。

### セーフティーゾーンが必要
テレビなのでセーフティーゾーンを設ける必要があります。画面の端まで目いっぱいコンテンツを表示すると見づらくなってしまうので、通常映像内に文字や画像などのコンテンツを入れる際はある程度の余白をもたせて表示させる必要があります。

https://developer.apple.com/tvos/human-interface-guidelines/visual-design/

iOSの開発を仕事にする前はテレビの仕事をしていたのですが、その時は結構シビアにこの辺調整していました。ガイドラインをチェックしてみたら、やっぱりちゃんとありました。

### プロジェクトのセットアップが面倒っぽい

[このページ](https://developer.apple.com/library/prerelease/tvos/documentation/General/Conceptual/AppleTV_PG/YourFirstAppleTVApp.html#//apple_ref/doc/uid/TP40015241-CH3-SW1)のプロジェクトのセットアップ方法を見るとなんかすごく面倒に感じます。

出たばっかりだからと思うんですが、テンプレート選んだらいい感じにやってほしいですね。

## まとめ
ちょっと細かなところを調べられていないので全然まだまだしっかりとつかめていないのですが、なんとな〜くわかってきた感じがします。

ひとまずはどういうアプリがtvOSに適しているのかとか検討してみる必要があるかな、と感じています。近いうちにXcode7.1を入れていろいろ調べてみようと思います。

ひとまず、

* [Human Interface Guidelines]( https://developer.apple.com/tvos/human-interface-guidelines/)
* [App Programming Guide for tvOS](https://developer.apple.com/library/prerelease/tvos/documentation/General/Conceptual/AppleTV_PG/index.html#//apple_ref/doc/uid/TP40015241-CH12-SW1)

この2つのドキュメントにひととおり目を通してからXcodeで動作確認、という感じでしょうか

とりあえずデバッグがしやすかったらありがたいです。。。