iOS用のCarthageフレームワークをwatchOSやtvOSに対応させる

March 06, 2016

僕なりの方法です。新しいframeworkを追加するとそれ用のframeworkディレクトリが生成されます。それぞれのプラットフォームで利用出来る部品は異なりますが、ほとんどの部分で共有すると思うので、一つのファイルを使いまわしたい(必要であればmacroで分離すれば良い)。

ただ、iOS用のディレクトリに入っているファイルをwatchOSやtvOSの複数ターゲットに所属させるのもなんか気持ち悪い。どうせみんな同じなら一つのディレクトリで管理しちゃいたい。

ということで、Alamofireの構造を真似した独自のやり方で複数ターゲットに対応する方法を見出しました(もっと良い方法があればアドバイス頂きたいです)。

ターゲットを追加する

まずはターゲットを追加します。今回はtvOS用のターゲットを追加してみました。

1

ちょっと見づらいですが、bundleIdentifierはこんな感じです。

Bundleidentifier

Product nameを変える

このままだとビルドできません。product nameはtarget nameを見ているのですが、それにハイフンが入るとビルドできないのでここを変えていきます。

SwiftValueSwitcher xcodeproj

直接フレームワーク名を入れてここを上書きます。

スクリーンショット 2016 03 06 19 29 17

Info.plistのパスを変える

さらに、Info.plistもメインのディレクトリに移したいのでここのパスと名前を変えます。

名前は、Info-tvOS.plistという感じに変えて、メインのディレクトリにファイルを移し、settingsのパスを変更します。

スクリーンショット 2016 03 06 19 16 14

これで、必要なファイルはメインのディレクトリの中に全てある状態になりました。

ファイルを複数ターゲットに所属させる

一つのディレクトリにまとまったのであとはそれぞれのファイルをターゲットに所属させていきます。

スクリーンショット 2016 03 06 19 18 04

ここで、.hファイルはpublicにするのを忘れないようにします。さらに、Info.plistはターゲットに所属させる必要がないのでチェックが付いていたら外します。

忘れずに

Schemeをsharedにすることを忘れずに。

スクリーンショット 2016 03 06 19 18

バージョンを上げて試してみる

これで、ビルドができれば完了です。tagをインクリメントしてtvOSでフレームワークが使えるか試してみましょう。


Profile picture

Written by morizotter who lives and works in Tokyo building useful things. You should follow them on Twitter