iOSアプリ開発者がtvOSアプリを開発する前に確認すべき5つのこと

f:id:cyberz-dev-writer:20160204174547j:plain

参考画像:How to update your Apple TV software - iDownloadBlogより

はじめに

どうも。OPENREC事業部でiOSエンジニアをしている辰己です。
OPENRECというのはスマホゲームに特化した高画質プレイ動画録画共有SDKのことです。そして、そのSDKで録画されたプレイ動画と有名な実況主さんたちが投稿した実況動画や攻略動画を観れるアプリであるOPENREC.tviOS版の開発を担当しているのが僕です。
毎日たくさんの実況動画がアップされて盛り上がっていますので、ぜひAppStoreGooglePlayからダウンロードしてみてくださいね!

さて、2015年10月30日、ついに第4世代AppleTVが発売されましたね! そして、以前のAppleのプレスイベント(Appleが機能を拡充したApple TVを発表。出荷予定は10月)で発表があったように、AppleTVには新OSであるtvOSが搭載され、AppStoreもでき、アプリ開発者がAppleTV向けのアプリもリリースできるようになりました。
その波に乗っかり、2015年12月にOPENREC.tvもAppleTVに対応致しました!
AppleTVに対応するにあたって、プロジェクトのメンバーの一人として僕も実装を担当させていただきました。
その経験を踏まえ、今回はそのAppleTVの新OSであるtvOSが今までのiOSの開発とどれほど違いがあるのかをまとめていこうと思います。

1. 開発環境の違い

まずは、iOSアプリ開発との開発環境の違いについて説明しようと思います。

2. セーフティゾーンって何?

f:id:cyberz-dev-writer:20160209103824j:plain

参考画像:Adjust the picture on Apple TV (4th generation)より

前章の項目の一つとして出てきたセーフティゾーンですが、tvOSアプリを作る際には非常に重要なルールの一つとなるので、ここでもう一度取り上げようと思います。
セーフティゾーンとは、テレビやプロジェクターには画面の上下左右を切り取って表示するオーバースキャンと呼ばれる方式を採用しているものがあるため、その領域が切り取られてもコンテンツには影響が出ないように考慮して設ける領域のことです。
上記の画像でいうと、内側の黒い領域の外側を囲っている灰色の部分のことです。
つまり、tvOSアプリでは、このセーフティーゾーンを考慮して画面のレイアウトを行う必要があるということです。AppleTVだと、左右に90pt、上下に60pt 分のセーフティゾーンを設ける必要があります。
これを満たしていないと、Appleの審査でReject(却下)されてしまいますので、実装の際は注意しましょう。

3. 使用可能なFramework一覧

続いて、iOS開発の際に使用していたFrameworkの中でtvOSに使用できるFrameworkの一覧はAppleのApp Programming Guide for tvOSに記載されている全42種類です。 AppleTVの発売が発表された頃から WebKitが含まれない かもという衝撃の記事が拡散されていましたが、このリストを見て事実なのだと確信しました。
iOS9.1からtvOSになるにあたって削除・追加されたFrameworkの一覧はtvOS Developer Libraryに記載されています。
ちなみに、個人的に削除されて残念だなと感じたFrameworkが3種類あります。
1つ目はWebKitです。これがないとWebサイトが表示でき無いので、大画面でネットサーフィンしたいという人はしょんぼりですね(UIKit 内のUIWebViewもtvOSでは使用禁止になっています)。 導入を待ち望むばかりです。
2つ目はMultipeerConnectivityです。これを使うとAppleTV同士のBluetooth通信が簡単にできて面白そう!と考えていたのですが、削除されていました。その代わりにCoreBluetoothは残してくれていますね。実装はMultipeerConnectivityに比べると数倍大変ですが。
3つ目はReplayKitです。ゲームに関するフレームワークがバッチリ対応されている(GameKit, GameplayKit, SpriteKit, Metal, MetalKitなど)のに、Apple純正のプレイ動画録画FrameworkであるReplayKitが対応していないというのは驚きでした。

4. __TVOS_PROHIBITEDについて

さらに、tvOSで使用可能なFrameworkの中にはtvOSでは使えない "__TVOS_PROHIBITED" とタグ付けされたtvOSでは 非推奨メソッドやプロパティが多数存在します。
詳しい内容はgithubより "__TVOS_PROHIBITED" でgrepした結果を載せてあるgonzalolarralde/tvos_prohibited.mdにまとめられていました。
ただ、ほとんどのものが テレビでは使わないであろう メソッドやプロパティなので、開発には大きな支障が出ることはなさそうです。

5. CocoaPodsによるライブラリについて

CocoaPodsもすでにtvOSには対応しています。しかし、iOSで使用していたライブラリそのものがtvOSに対応しているわけではないため、現状ではCocoaPodsからは使えないライブラリがほとんでです。その中でも早くも対応していたのがAFNetworkingです。バージョンは "3.0.0-beta.1" とベータ版ではあるのですが、Objective-CでもSwiftでも問題なく使用できます。 導入する際のPodfileの中身は以下の通りです。

source 'https://github.com/CocoaPods/Specs.git'

platform :tvos, '9.0'

target :"[プロジェクト名]" do
pod 'AFNetworking', '3.0.0-beta.1'
end

また、CocoaPodsに対応したわけではないのですが、有名どころのライブラリの一つである SDWebImage のissueを読んでいるとtvOSに対応したようなので、その導入方法も以下に解説しておきます。

  1. リポジトリから zip でソースをダウンロードする
  2. 解凍したディレクトリ内の "SDWebImage" ディレクトリ内のコードを全てプロジェクトにインポート
  3. tvOS ではMapKitが使えないので、MapKitを含んでいる MKAnnotationView+WebCache.hと ~.m をプロジェクトから削除する
  4. あとは、#import "SDWebImage.h" で使用できる

最後に

本日はここまでです。tvOSの開発はまだまだ未知なことが起きそうなので、今後も開発しながらどんどん知見を増やしていこうと思います。 次回は実装編を予定しています。 最後まで読んでいただき、ありがとうございました。