CarthageでInput File Listsにxcfilelistを渡す利点と方法
Table of Contents
xcfilelist
で依存ライブラリを管理すると楽です
この記事はxcfilelist
を使ってCarthage
の環境を構築する方法と利点について説明します。
Carghage
の基本や使い方の詳細は「Carthageの使い方を体系的に理解する
」にまとめてあります。
Carthage公式解説に出てくるxcfilelist
Carthageのインストール解説記事には、xcfilelist
を使った解説は見かけません。
大抵Input Files
に直接パスを指定する記事が多いです。
しかし、Carthageの公式ではxcfilelist
を使っており、むしろそっちがメインにも見えます。
xcfilelistの正体
xcfilelist
はXcodeのファイル一覧を表すファイル・タイプです。
といってもただのテキストファイルです。
テキストエディタでファイルパスを列挙して、ファイル保存時に拡張子を.xcfilelist
とするだけです。
xcfilelistを使う場所
公式では英文でxcfilelist
を見かけますが、これを使う場所がパッと見では分かりません。
xcfilelist
を使う場所は下の画像のInput File Lists
とOutput File List
です。
この中にxcfilelist
のパスを指定します。
Input File Listsを使う利点
Input Files
でframeworkのパスを指定するほうが仕組み理解という点では分かりやすいです。
Input File Lists
を使う利点がないと使う気にならないと思います。
使う利点は、一度xcfilelist
のパスを指定すれば、Run Script
の使いにくいUIを使わなくて済みます。
またフレームワークの追加や削除時にxcodeproj
がフレームワークのリンク設定のみなので衝突時の範囲が狭くなります。
xcfilelistを用意する
xcfilelist
はパスさえ合っていればどこに置いても問題ないですが、
他環境でも動くようにまずはgit管理下が必須だと思います。
次に編集しやすさ、環境パスが使える、Xcodeで使うファイルと考えたら
プロジェクトディレクトリ配下に置くことが最適です。
中身は次のようにInput Files
で指定するパスを並べるだけです。
これを.xcfilelist
として保存すれば準備は整います。
ファイル名は何でもいいです。
$(SRCROOT)/Carthage/Build/iOS/AdjustSdk.framework
$(SRCROOT)/Carthage/Build/iOS/SKPhotoBrowser.framework
$(SRCROOT)/Carthage/Build/iOS/SDWebImage.framework
$(SRCROOT)/Carthage/Build/iOS/AFNetworking.framework
$(SRCROOT)/Carthage/Build/iOS/AdjustSdkWebBridge.framework
$(SRCROOT)/Carthage/Build/iOS/PAYJP.framework
$(SRCROOT)/Carthage/Build/iOS/AdjustSdkIm.framework
$(SRCROOT)/Carthage/Build/iOS/SVProgressHUD.framework
$(SRCROOT)/Carthage/Build/iOS/SwiftyJSON.framework
xcfilelistをInput File Listsに渡す
XcodeのBuild Phases
のCarthage
用スクリプトフェイズのInput File Lists
に先程用意した.xcfilelist
のパスを指定します。
先程の用意した場所であれば、$(SRCROOT)/$(PROJECT_NAME)/carthage-input-file-list.xcfilelist
になります。
Output File Listsもxcfilelistを使う
Output File Lists
も同様にxcfilelist
として出力パスを列挙しておけばxcfilelist
のパスを指定するだけです。
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/AdjustSdk.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SKPhotoBrowser.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SDWebImage.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/AFNetworking.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/AdjustSdkWebBridge.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/PAYJP.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/AdjustSdkIm.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SVProgressHUD.framework
$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)/SwiftyJSON.framework
こちらもInput File Lists
と同じ場所場所であればOutput File Lists
で指定するパスは、$(SRCROOT)/$(PROJECT_NAME)/carthage-output-file-list.xcfilelist
になります。
Output File Listsを指定する理由
Output Files
やOutput File Lists
でコピー先のパスを指定しますが、実は指定しなくてもコピー処理は成功し、動作も問題ありません。
なぜ指定するのかは「CarthageのビルドフェイズでOutput Files指定による速度調査
」に詳細をまとめてます。
後からでも対応できる
この対応は、プロジェクトが初期段階でも後からでも対応できます。
ライブラリが多くても手間はそこまで変わりません。