読者です 読者をやめる 読者になる 読者になる

try! Swift 書き起こし 📺 (Apple TV) #tryswiftconf Day1-4

try! Swift 2016

https://twitter.com/NeoNacho

新しいApple TV向けの設計、開発方法の概要、tvOSのUIコンポーネントフレームワークiOSとの違い、既存のアプリケーションを移植する方法を説明します。

tvOS

f:id:niwatako:20160302120021j:plain

Jobsが光入ってから2015年ようやく製品に出荷されました。

テレビの未来はバグ

というのは嘘です

テレビの未来

tvOS と iOS は似ているところが多いです。何があって何がないでしょうか。 右側がアップルTVのみのものです

f:id:niwatako:20160302120143j:plain

真ん中に共通フレームワークがあってUIKitがあります。

アドレスブックがかけているのは理にかなっていますが重要なものがない

f:id:niwatako:20160302120219j:plain

フル機能のTwitterクライアントは作れませんね?URLが開けない。あと認証でOAuthが利用できない。

f:id:niwatako:20160302120254j:plain

デバイス間ローカル通信が出来ない。iPhoneアプリと連携したいのに。認証にも使えそうですよね。でもいまはLowレベルAPIでしか出来ません。

もう一つ大きな違いとしてローカルストレージがありません。

f:id:niwatako:20160302120341j:plain

500KBのUserDefaultか、クラウド。 オンデマンドリソースは、使っていなかったら端末から消されてしまいます。500KBのUserDefault以外はどこかのタイミングで消えうる。

既存アプリをテレビに移行するf:id:niwatako:20160302120602j:plain

f:id:niwatako:20160302120517j:plain f:id:niwatako:20160302120530j:plain

なんのへんこうがなくてもPodSpecにtvOSを追加する必要がある。一次利用ならこれが使える f:id:niwatako:20160302120645j:plain パックマンゲームを作ってみました。新たなターゲットを作るだけで出来た。 f:id:niwatako:20160302120654j:plain

DOOMもやってみました。Githubにあったので。 f:id:niwatako:20160302120702j:plain

アラート周りが変わっていて、UISliderもないしバックグラウンドオーディオもなかった。さまざまなC++コンパイラ関係でコード変更がたくさんあった。そしてNIBが使われていた

iOSのNIBはTVでは全く使えない。そこでちょっとしたツールを作りました。XMLの変換を行います。このツールで変換します。配列を直すぐらいは手動でする非必要はありましたが、スタートポイントとしては十分なものが出来ました。

f:id:niwatako:20160302120759j:plain

実際にどうやってTVアプリを動かすのでしょうか。SiriRemoteというリモコンがあります。タッチパッドとマイクがついています。

f:id:niwatako:20160302120936j:plain

ここに新しいフォーカスという概念があります。一度にフォーカスできるエレメントは一つだけです。どのViewがフォーカスされているか確認できて、ユーザーはタッチパッドでフォーカスを動かすことが出来る

Demo

単純なストーリーボードで2つボタンが有り、ラベルがあります。これを実行します。リモートを使ってフォーカスを動かします。どれがフォーカスされているか分かりますね?カスタムビヘイビアで色を変えています。ラベルはデフォルトではフォーカスできません。

f:id:niwatako:20160302121257j:plain f:id:niwatako:20160302121328j:plain f:id:niwatako:20160302121335j:plain f:id:niwatako:20160302121340j:plain f:id:niwatako:20160302121420j:plain

デバッグでは _whyIsThisViewNotFucusable というプライベートメソッドでなぜフォーカスできないかが分かる。 デフォルトのフォーカスエンジンのビヘイビアに対してUIGestureRecognizerを利用することが出来ます。iOSと似たアプローチになります。

UIPressというLowレベルのAPIも利用できます。

f:id:niwatako:20160302121620j:plain

TextInput

f:id:niwatako:20160302121638j:plain

以前は最悪でした。キーボードが1行だったからです。ではマイクがないのか?あるけどAPIはない。HandOffがなくてiPhone側から制御出来ない。

テキスト認証の際にはVoucherを利用することをオススメします。 f:id:niwatako:20160302121734j:plain

そうすることで煩雑な部分を排除できます。

GameController

f:id:niwatako:20160302121828j:plain

f:id:niwatako:20160302121840j:plain

ゲームコントローラフレームワークを用いる。iOSと比較して良いのはSiriRemoteがゲームコントローラとして扱える。Siriモードをカスタムゲームコントローラに合わせて実装すれば1度で済む。

f:id:niwatako:20160302121934j:plain

ゲームコントローラが接続されたことを認識する

f:id:niwatako:20160302121946j:plain

ValueChangedHanderはXY座標のスワイプに応じて画面上でキャラクターを動かせる

f:id:niwatako:20160302122036j:plain せっかくボタンが使えるが、SiriRemoteが使えないとAppleの審査で許可されないので、実装するには不向き。。 f:id:niwatako:20160302122049j:plain

SpriteKit Demo

Storyboardのようなもので設定をするとコードを書いていないのに動きます

TVML

XMLJavaScriptでtvOS向けのUIが作れる。iTunesなどはこれで実装されている。早く開発したければこれは一つの選択肢

まとめ

f:id:niwatako:20160302122425j:plain

Apple Watch と比べると完成度が高い。ユーザー入力はなるべく割愛すべし。

f:id:niwatako:20160302122457j:plain

f:id:niwatako:20160302122506j:plain 是非フィードバックをお願いします。

【気に入った記事は はてなブックマーク

はてなブックマークアプリiOS開発チームから来ました! はてなブックマークにはSwift特集があります! 良い記事を見逃さないように、ご利用ください! http://b.hatena.ne.jp/hotentry/it/Swift

そして良いまとめ記事があったらはてなブックマークでブックマークしましょう! try! Swift の記事で盛り上がると嬉しいです!