🖥️
続々: グローバル環境を汚染しないXcodeの開発環境構築
解決したい課題
- 前回の続: グローバル環境を汚染しないXcodeの開発環境構築では、Mintのインストールにgit submoduleを使用していたが、それをSwift Package Manager(SwiftPM)に差し替える。
- git submoduleは前提知識が必要で若干ハマりやすいため、色々な人が使う環境では可能であれば導入したくない。
結果
- Carthage、CocoaPods、XcodeGenなどよく利用する開発周辺ツールを使うプロジェクトで、XcodeとDockerのみで環境を構築
- 前回からの差分でMintのインストールは、git submoduleからSwiftPMに変更
- CococPodsはDockerで実行
- サンプルはyusuga/xcode-setup
Mint (in project directory)
├─ Carthage
├─ xcodegen
├─ swiftgen
└─ swiftlint
Docker
└─ CocoaPods
変更の詳細
MintをSwiftPMでインストール
本筋ではないが、MintをSwiftPMに変更するためにMintのgit submoduleを削除した時のメモ
- 参考: How do I remove a submodule?
- git submoduleの一覧を表示
❯ git submodule status
30101d25524043fd753d25d033b438f943a585b5 App/Mint (0.17.1-2-g30101d2)
- submoduleのファイルツリーと
.gitmodule
ファイル内のSubmoduleのエントリを削除
❯ git rm App/Mint
rm 'App/Mint'
- git submoduleの一覧を表示して消えていることを確認
❯ git submodule status
-
.git/modules
内のSubmoduleのディレクトリと.git/config
のエントリを削除- これらは別のリポジトリからフェッチせずに過去のcommitにchekcoutできるようにするためにある
❯ rm -rf .git/modules/App/Mint && \
git config --remove-section submodule.App/Mint
- SwiftPMでMintをインストール & 実行するMakeコマンドを追加
MINT_EXECUTABLE := xcrun -sdk macosx swift run --package-path $(SWIFT_PACKAGES_PATH) mint
mint := MINT_PATH=$(MINT_LIBRARY_DIR) $(MINT_EXECUTABLE)
mint_run := $(mint) run --mintfile $(MINTFILE_PATH)
- SwiftPM経由で
mint bootstrap
を実行- 初回のみgitリポジトリのフェッチとライブラリのビルドが走る
mint:
$(mint) bootstrap --mintfile $(MINTFILE_PATH)
- Makeコマンド経由で
mint run
を実行しやすくするためのコマンドを用意
mint_which:
$(make) mint_execute COMMAND='which'
mint_run:
$(make) mint_execute COMMAND='run'
mint_execute:
ifndef COMMAND
@echo "make mint_execute COMMAND=<コマンドを指定してください>\n例: make mint_execute COMMAND=run"
@exit 1
endif
ifndef OPTIONS
@echo "make mint_execute $(COMMAND) OPTIONS=<オプションを指定してください>\n例: make mint_execute COMMAND=run OPTIONS=xcodegen"
@exit 1
endif
$(mint) $(COMMAND) --mintfile $(MINTFILE_PATH) $(OPTIONS)
- Xcodeのビルドスクリプトで実行している、SwiftLintを変更
- CIから
mint run
を呼び出す場合もMakeコマンド経由だと楽 -
OPTIONS
周りの記述方法が気になるようだったら、それぞれMakeコマンドを用意する
- CIから
if make mint_which OPTIONS='swiftlint' >/dev/null; then
make mint_run OPTIONS='swiftlint --strict'
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
Makefileを更新
- 改修後のMakefile
今後
- XcodeGenが複雑なのでなくしたい。
- CocoaPodsもなくしたいがまだ手軽には無理そう
Discussion