Carthage の extract-tool について調べたこと 🙋
前回同様、コマンドラインツールを作成する際に Carthage を参考にしたので、自分で挙動を理解しておくために調べました。
Thanks Carthage ! 😊
Carthage の extract-tool とは
Carthage の script
フォルダにある extract-tool
という名前のシェルスクリプトです。
ざっくり言うと
ビルド時に /…略…/Release/pancake.app/Contents/MacOS/
の pancake
を /…略…/Release/
へコピーします。
- 言い換えると
pancake.app
からpancake
を抜き出します。 extract
= 抜き出す、解凍するなどの意味がありますが命名理由はわかりません。- Build Configuration を Release にしているためで Debug だと
/…略…/Debug/
になります。
挙動確認
前提
- あくまでこのファイルだけを対象とします。
- 作成中の ツール をサンプルとして説明します。→
extract-tool
Xcode で Run Script Phase 追加
コマンドラインツール(pancake
)側に New Run Script Phase を追加します。
デフォルトはこのようになっています。
Carthage にあわせて Run Script → Extract CLI Tool と名前を変更しています。
そのままでもよい気がしていますが未確認です。
Carthage では . script/extract-tool
ですがサンプルでは scripts フォルダにあるので次のとおり設定しています。
- Shell
/bin/bash
- 1
. scripts/extract-tool
- Input Files
$(BUILT_PRODUCTS_DIR)/$(EXECUTABLE_PATH)
- Output FIles
$(BUILT_PRODUCTS_DIR)/$(EXECUTABLE_NAME)
シェルスクリプトの内容
#!/bin/bash # # Extracts the pancake CLI tool from its application bundle. Meant to be run # as part of an Xcode Run Script build phase. cp -v "${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}" "${BUILT_PRODUCTS_DIR}/${EXECUTABLE_NAME}"
- ファイル名を表示(
-v
)してコピー(cp
)します。
いつどのように実行されるのか
確認のため Release フォルダを空にします。
Xcode でビルドします。
- ビルドすると実行されます。
- Release フォルダに
pancake
が生成されます。
おまけ
シェルスクリプトに echo
を追記して $ make install
コマンドを実行しても同様です。
echo "いつRunするの?" cp -v "${BUILT_PRODUCTS_DIR}/${EXECUTABLE_PATH}" "${BUILT_PRODUCTS_DIR}/${EXECUTABLE_NAME}"
- 長いので省略しますが
pancake
をビルドしたあとに実行されます。
いつRunするの?
/…略…/Release/pancake.app/Contents/MacOS/pancake -> /…略…/Release/pancake
extract-tool については こちらの記事 でも書きました。