【Swift】ライブラリ Example を Carthage で管理する方法


はじめに

Carthage でライブラリを管理する場合 Cartfile に github "ReactiveX/RxSwift" といった感じで設定を記述すると思います。実は、ここにはローカルリポジトリを指定することも可能です。

この機能を使って scheme を分けて example を作成しているライブラリを Carthage で管理する方法をご紹介します。

この記事は AkkeyLab/RxScreenProtectKit というライブラリを作成・公開するにあたって学んだことをまとめたものになります。


問題

ドキュメント にもある通り git "file:///directory/to/project" "branch" という形式で記述すればいいことがわかります。

しかし、相対パス指定ができません(私の環境・方法では)。


解決策

echo "git \"file://$($(dirname $0); pwd)\"" >> Cartfile

Cartfile の保存場所がライブラリの保存場所と同じ場合、このスクリプトを実行することで、問題を解決できます。やってることとしてはカレントディレクトリの絶対パスを生成して Cartfile に追加しているだけの単純なものです。

git "file:///Users/name/Development/RxScreenProtectKit"

成功例も載せておきます。


おわりに

AkkeyLab/RxScreenProtectKit にも導入しておりますが、 example プロジェクトを動かしたい人用のスクリプトを準備しておくといいかもしれません。ここにも載せておきます。


#!/bin/bash

function command_exists {
command -v "$1" > /dev/null;
}

echo "git \"file://$($(dirname $0); pwd)\"" >> Cartfile

# carthage
if ! command_exists brew ; then
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew update
brew upgrade --all
brew doctor
brew -v
fi

if ! command_exists carthage ; then
brew install carthage
fi

carthage update --platform iOS --no-use-binaries --cache-builds

# SwiftLint
if ! command_exists swiftlint ; then
brew install swiftlint
fi


追記

Screen Shot 2019-07-12 at 16.27.40.png

実は Embedded Binaries の項目にビルドすることで自動生成される framework ファイルを追加する方法が一般的だと思います。ライブラリ開発時にサンプルを頻繁に使う場合、確実にこのほうが効率的です。この記事は方法の一つとしてご覧ください。