Edited at
tvOSDay 25

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

tvOS Advent Calendar 2017 25日目担当の @dekatotoroです。

AbemaTVのiOSアプリやtvOSアプリを開発しています。

本日は最終日です!

今日はAbemaTVのtvOSアプリで使っているライブラリの紹介と、tvOS特有のライブラリをピックアップしたいと思います 📺

基本的にtvOS専用のライブラリというのは少なくて、多くのライブラリがiOSとtvOSの両方に対応しています。


AbemaTVで使っているtvOSライブラリ

まずはAbemaTVのtvOSアプリで使っているライブラリを紹介したいと思います。

ほとんどiOSで使っているものと同じになります。


DB

SQLite.swift


Reactive

RxSwift

RxTV

Action

RxDataSources


Network

swift-protobuf

APIKit


UI

ImageOverlay

FocusZPositionMutating

GestureTV

HorizontalStickyHeaderLayout

Cartography

AttributedLabel

SpringIndicator

Cheetah


Image Loader

Kingfisher


Util

KeychainAccess

Reachability

SwiftDate

SwiftyUserDefaults


Fabric

Fabric

Crashlytics


Tool

SwiftLint

SwiftGen

IBAnalyzer

Sourcery


Test

Quick

Nimble

SwiftCheck


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

tvOSに特化したライブラリを探してみました。

iOSで使えるものもありますが、なるべくtvOS特有のものを取り上げたいと思います。


TVOSSlideViewController

左右のドロワーを表示するライブラリで、panGestureで左右のドロワーを制御しています。


side-navigation

こちらもTVOSSlideViewControllerと同様左右のドロワーを表示するライブラリです。


HorizontalStickyHeaderLayout

アドベントカレンダーの6日目で紹介がありますが、フォーカスに合わせて上下に動くStickyなセクションヘッダーのライブラリです。


FocusZPositionMutating

layerのzPositionを、フォーカスに合わせて自動で調整してフォーカスされたViewが一番上にくるようにしてくれます。

こちらはアドベントカレンダーの12日目で紹介されています。


ImageOverlay

tvOS11でUIImageView上にカスタムUIを表示するためにoverlayContentViewが追加されましたが、tvOS9、10の同様の機能を提供してくれるライブラリです。


Re-Lax

アドベントカレンダーの11日目で紹介したフォーカスエフェクトですが、Apple純正のエフェクトを忠実に再現しているライブラリです。


RxTV

tvOS用のRxSwiftのReactive Extension群です。

アドベントカレンダーの15日目で紹介があります。


TVOSPicker

tvOS用の選択用UI部品


TvOSTextViewer

tvOS用の選択用UI部品


TvOSMoreButton

tvOS用のスクロールできるテキスト表示用UI部品


TvLightSegments

tvOS用のスクロールできるテキスト表示用UI部品


TVOSToast

tvOS用のスクロールできるテキスト表示用UI部品


PopcornTimeTV

tvOS用のトーストUI部品


antenna

こちらはライブラリではないですが、USTVnowのAPIを使ったtvOSのライブTVアプリになります。


まとめ

いかがでしょうか。

tvOSアプリを作る場合、多くはiOSアプリからの派生ではないでしょうか。

多くのライブラリはtvOSにも対応していますので、iOSとの共通化や同じ設計ができるのではないかと思います。また、フォーカスまわりの処理はtvOS特有なので、tvOSに特化したUI部品のライブラリもいくつかありました。

tvOS用のライブラリはまだまだ少ないので、今後良いものができたら公開していきたいと思います。

tvOS Advent Calendar 2017 最終日をお送りしました! :santa: