僕なりの方法です。新しいframeworkを追加するとそれ用のframeworkディレクトリが生成されます。それぞれのプラットフォームで利用出来る部品は異なりますが、ほとんどの部分で共有すると思うので、一つのファイルを使いまわしたい(必要であればmacroで分離すれば良い)。
ただ、iOS用のディレクトリに入っているファイルをwatchOSやtvOSの複数ターゲットに所属させるのもなんか気持ち悪い。どうせみんな同じなら一つのディレクトリで管理しちゃいたい。
ということで、Alamofireの構造を真似した独自のやり方で複数ターゲットに対応する方法を見出しました(もっと良い方法があればアドバイス頂きたいです)。
ターゲットを追加する
まずはターゲットを追加します。今回はtvOS用のターゲットを追加してみました。
ちょっと見づらいですが、bundleIdentifierはこんな感じです。
Product nameを変える
このままだとビルドできません。product nameはtarget nameを見ているのですが、それにハイフンが入るとビルドできないのでここを変えていきます。
直接フレームワーク名を入れてここを上書きます。
Info.plistのパスを変える
さらに、Info.plistもメインのディレクトリに移したいのでここのパスと名前を変えます。
名前は、Info-tvOS.plistという感じに変えて、メインのディレクトリにファイルを移し、settingsのパスを変更します。
これで、必要なファイルはメインのディレクトリの中に全てある状態になりました。
ファイルを複数ターゲットに所属させる
一つのディレクトリにまとまったのであとはそれぞれのファイルをターゲットに所属させていきます。
ここで、.hファイルはpublicにするのを忘れないようにします。さらに、Info.plistはターゲットに所属させる必要がないのでチェックが付いていたら外します。
忘れずに
Schemeをsharedにすることを忘れずに。
バージョンを上げて試してみる
これで、ビルドができれば完了です。tagをインクリメントしてtvOSでフレームワークが使えるか試してみましょう。