このエントリはiOS Advent Calendar 2015の8日目のエントリです。
「iOS」のAdvent Calendarですが、ちょっと拡大解釈して今日は tvOS のお話です。
はじめに
Apple TVは2015年10月に発売されたもので第4世代になります。
第3世代までのApple TVはプリインストールのアプリや、ネットワーク経由で追加される公式アプリしか動作させられませんでした。
第4世代ではOSとしてtvOSを搭載し、AppStoreからアプリをインストールできる様になりました。そして、アプリの開発が一般のデベロッパにも解放されました。
tvOSはiOSをベースに開発されており、アプリの開発環境にはXcodeを使用します。
MacにApple TVをUSBケーブル(Type-C)で接続すればiPhoneと同じ様に実機デバッグできるし、シミュレータも用意されています。
iOSと似ているのは開発環境だけではありません。
iOSエンジニアであれば見覚えがあるであろう、Storyboard、UIKit、各種Frameworkを使用して、Objective-CやSwiftで開発することができます。
CocoaPodsのライブラリを使う
と言う訳で、iOSの知見を活かしてtvOSの開発をする訳ですが、iOS開発に欠かせない周辺ツールの筆頭と言えば何と言ってもCocoaPodsですよね。
もちろんtvOS開発でも使えます。
Podfileをこんな風に書きましょう。
[code]
platform :tvos, ‘9.0’
use_frameworks!
pod ‘Alamofire’
[/code]
ポイントとしては、platformにtvosを指定することぐらい、ですね。
Podfileを書いたらpod installすると.xcworkspaceができるところも同じです。
…ということで喜び勇んで開発を始めると悲しいメッセージを見ることがあります。
これは「このライブラリはtvOSに対応していないよ」のメッセージです。
10月のApple TV発売直後はほとんどのライブラリがこの状態でした。
12月現在ではかなりのライブラリがtvOSに対応しているのですが、それでもまだ一部のライブラリは対応していません。
こんな時はライブラリがtvOSに対応するまで待っても良いのですが、少しの作業でtvOS非対応のライブラリをtvOSでも使うことができます。
ライブラリをtvOS対応させる
と言ってもたいそうなことではありません。
CocoaPodsのライブラリは、.podspec という名前のファイルが含まれ、そこにサポートするOSのタイプやバージョンが書かれています。
tvOSに対応していないCocoaPodsライブラリの多くは、そのままtvOSで動くのに .podspec でtvOSのサポートが指定されていないために、上記の様なエラーになっています。
例えば、SocketRocketの0.4.1は以下の様になっています。
[code]
Pod::Spec.new do |s|
s.name = "SocketRocket"
s.version = ‘0.4.1’
s.summary = ‘A conforming WebSocket (RFC 6455) client library.’
s.homepage = ‘https://github.com/square/SocketRocket’
s.authors = ‘Square’
s.license = ‘Apache License, Version 2.0’
s.source = { :git => ‘https://github.com/square/SocketRocket.git’, :tag => s.version.to_s }
s.source_files = ‘SocketRocket/*.{h,m}’
s.requires_arc = true
s.ios.deployment_target = ‘6.0’
s.osx.deployment_target = ‘10.8’
s.ios.frameworks = ‘CFNetwork’, ‘Security’
s.osx.frameworks = ‘CoreServices’, ‘Security’
s.libraries = "icucore"
end
[/code]
ここでは、12~13行目でiOSの6.0以上、OS Xの10.8以上が指定されています。
…ということは、と思ったあなた、正解です。
ここに
[code]
s.tvos.deployment_target = "9.0"
[/code]
を追加すれば、このライブラリはtvOSでも使うことができる様になります。
ライブラリへのパッチ
CocoaPodsを使ってライブラリをインストールする時には上記の様にPodfileにライブラリ名を書きます。
ここで、ライブラリ名だけ、または、ライブラリ名とバージョン名だけを書くとそのライブラリはcocoapods.orgから検索されてインストールされます。
実はPodfileにはGitのリポジトリURLを書くことも可能です。ということは、自分でGitリポジトリにソースを置いて、そのソースをPodfileから参照することも可能なのです。
CocoaPodsのライブラリの多くはGitHubにホストされていますので以下のステップでtvOS非対応のライブラリもtvOSで使うことができる様になります。
1. 対象のライブラリのGitHubリポジトリをフォークする
2. GitHub上でpodspecファイルを開いてEditボタンを押す
3. ターゲット設定をしている場所を探して「s.tvos.deployment_target = “9.0”」を追記、[Commit changes]ボタンを押す
4. PodfileにGitリポジトリのパスを書く
[code]
platform :tvos, ‘9.0’
use_frameworks!
pod ‘Alamofire’
pod "SocketRocket", :git => ‘https://github.com/hasegawa-tomoki/SocketRocket.git’
[/code]
5. pod update !
これでtvOS非対応のライブラリをtvOSで使うことができます!
豊富なiOS資産を活かしてtvOSアプリを楽しく開発しましょう!!
“Apple TV” by Max Lewis – Flickr. Licensed under CC 表示 2.0 via ウィキメディア・コモンズ – https://commons.wikimedia.org/wiki/File:Apple_TV.jpg#/media/File:Apple_TV.jpg