tvOSライブラリ ピックアップ

[**tvOS Advent Calendar 2017**](https://qiita.com/advent-calendar/2017/tvos) 25日目担当の @dekatotoroです。
**[AbemaTV](https://itunes.apple.com/jp/app/abematv/id1074866833?mt=8)**のiOSアプリやtvOSアプリを開発しています。
本日は最終日です！

今日はAbemaTVのtvOSアプリで使っているライブラリの紹介と、tvOS特有のライブラリをピックアップしたいと思います 📺 
基本的にtvOS専用のライブラリというのは少なくて、多くのライブラリがiOSとtvOSの両方に対応しています。

# **AbemaTVで使っているtvOSライブラリ**
まずはAbemaTVの**tvOS**アプリで使っているライブラリを紹介したいと思います。
ほとんどiOSで使っているものと同じになります。

#### **DB**
[SQLite.swift](https://github.com/stephencelis/SQLite.swift)
#### **Reactive**
[RxSwift](https://github.com/ReactiveX/RxSwift)
[RxTV](https://github.com/toshi0383/RxTV)
[Action](https://github.com/RxSwiftCommunity/Action)
[RxDataSources](https://github.com/RxSwiftCommunity/RxDataSources)
#### **Network**
[swift-protobuf](https://github.com/apple/swift-protobuf)
[APIKit](https://github.com/ishkawa/APIKit)
#### **UI**
[ImageOverlay](https://github.com/toshi0383/ImageOverlay)
[FocusZPositionMutating](https://github.com/toshi0383/FocusZPositionMutating)
[GestureTV](https://github.com/toshi0383/GestureTV)
[HorizontalStickyHeaderLayout](https://github.com/toshi0383/HorizontalStickyHeaderLayout)

[Cartography](https://github.com/robb/Cartography)
[AttributedLabel](https://github.com/KyoheiG3/AttributedLabel)
[SpringIndicator](https://github.com/KyoheiG3/SpringIndicator)
[Cheetah](https://github.com/suguru/Cheetah)
#### **Image Loader**
[Kingfisher](https://github.com/onevcat/Kingfisher)
#### **Util**
[KeychainAccess](https://github.com/kishikawakatsumi/KeychainAccess)
[Reachability](https://github.com/ashleymills/Reachability.swift)
[SwiftDate](https://github.com/malcommac/SwiftDate)
[SwiftyUserDefaults](https://github.com/radex/SwiftyUserDefaults)
#### **Fabric**
[Fabric](https://docs.fabric.io/apple/fabric/overview.html)
[Crashlytics](https://fabric.io/kits/ios/crashlytics/summary)
#### **Tool**
[SwiftLint](https://github.com/realm/SwiftLint)
[SwiftGen](https://github.com/SwiftGen/SwiftGen)
[IBAnalyzer](https://github.com/fastred/IBAnalyzer)
[Sourcery](https://github.com/krzysztofzablocki/Sourcery)
#### **Test**
[Quick](https://github.com/Quick/Quick)
[Nimble](https://github.com/Quick/Nimble)
[SwiftCheck](https://github.com/typelift/SwiftCheck)

# **tvOSピックアップライブラリ**
tvOSに特化したライブラリを探してみました。
iOSで使えるものもありますが、なるべくtvOS特有のものを取り上げたいと思います。

### **[TVOSSlideViewController](https://github.com/svtek/TVOSSlideViewController)**
左右のドロワーを表示するライブラリで、panGestureで左右のドロワーを制御しています。

### **[side-navigation](https://github.com/Digipolitan/side-navigation)**
こちらもTVOSSlideViewControllerと同様左右のドロワーを表示するライブラリです。

### **[HorizontalStickyHeaderLayout](https://github.com/toshi0383/HorizontalStickyHeaderLayout)**
[アドベントカレンダーの6日目](https://qiita.com/toshi0383/items/cb9e4b262a6a5964fa40)で紹介がありますが、フォーカスに合わせて上下に動くStickyなセクションヘッダーのライブラリです。

### **[FocusZPositionMutating](https://github.com/toshi0383/FocusZPositionMutating)**
layerのzPositionを、フォーカスに合わせて自動で調整してフォーカスされたViewが一番上にくるようにしてくれます。
こちらは[アドベントカレンダーの12日目](https://qiita.com/toshi0383/items/ddc3dc742f0281917264)で紹介されています。

### **[ImageOverlay](https://github.com/toshi0383/ImageOverlay)**
tvOS11でUIImageView上にカスタムUIを表示するためにoverlayContentViewが追加されましたが、tvOS9、10の同様の機能を提供してくれるライブラリです。

### **[Re-Lax](https://github.com/asynchrony/Re-Lax)**
[アドベントカレンダーの11日目](https://qiita.com/dekatotoro/items/5d58c3abf1fc570ca1e8)で紹介したフォーカスエフェクトですが、Apple純正のエフェクトを忠実に再現しているライブラリです。

### **[RxTV](https://github.com/toshi0383/RxTV)**
tvOS用のRxSwiftのReactive Extension群です。
[アドベントカレンダーの15日目](https://qiita.com/toshi0383/items/90ea2d72fc6230ed4b24)で紹介があります。

### **[TVOSPicker](https://github.com/cemolcay/TVOSPicker)**
tvOS用の選択用UI部品

### **[TvOSTextViewer](https://github.com/dcordero/TvOSTextViewer)**
tvOS用の選択用UI部品

### **[TvOSMoreButton](https://github.com/cgoldsby/TvOSMoreButton)**
tvOS用のスクロールできるテキスト表示用UI部品

### **[TvLightSegments](https://github.com/macabeus/TvLightSegments)**
tvOS用のスクロールできるテキスト表示用UI部品

### **[TVOSToast](https://github.com/svtek/TVOSToast)**
tvOS用のスクロールできるテキスト表示用UI部品

### **[PopcornTimeTV](https://github.com/PopcornTimeTV/PopcornTimeTV)**
tvOS用のトーストUI部品

### **[antenna](https://github.com/lucasharding/antenna)**
こちらはライブラリではないですが、[USTVnow](https://watch.ustvnow.com/subscription)のAPIを使ったtvOSのライブTVアプリになります。


# **まとめ**
いかがでしょうか。
tvOSアプリを作る場合、多くはiOSアプリからの派生ではないでしょうか。
多くのライブラリはtvOSにも対応していますので、iOSとの共通化や同じ設計ができるのではないかと思います。また、フォーカスまわりの処理はtvOS特有なので、tvOSに特化したUI部品のライブラリもいくつかありました。
tvOS用のライブラリはまだまだ少ないので、今後良いものができたら公開していきたいと思います。


[**tvOS Advent Calendar 2017**](https://qiita.com/advent-calendar/2017/tvos) 最終日をお送りしました！ :santa: