JPMartha's Pancake

This blog is the way to brush up my poor English.

Carthage の extract-tool について調べたこと 🙋

前回同様、コマンドラインツールを作成する際に Carthage を参考にしたので、自分で挙動を理解しておくために調べました。

Thanks Carthage ! 😊

github.com

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

github.com

Xcode で Run Script Phase 追加

コマンドラインツールpancake)側に New Run Script Phase を追加します。

f:id:JPMartha:20160218071226p:plain

デフォルトはこのようになっています。

f:id:JPMartha:20160218072218p:plain

Carthage にあわせて Run ScriptExtract CLI Tool と名前を変更しています。

そのままでもよい気がしていますが未確認です。

f:id:JPMartha:20160218071238p:plain

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)

f:id:JPMartha:20160218041506p:plain

シェルスクリプトの内容

#!/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 フォルダを空にします。

f:id:JPMartha:20160218080945p:plain

Xcode でビルドします。

f:id:JPMartha:20160218191728p:plain

  • ビルドすると実行されます。

f:id:JPMartha:20160218192222p:plain

  • Release フォルダに pancake が生成されます。

f:id:JPMartha:20160218080856p:plain

おまけ

シェルスクリプト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 については こちらの記事 でも書きました。

参考