#はじめに
carthageの対応は簡単というのを聞いたので、やってみるとちょとつまずいたのでメモ。
#環境
- macOS High Sierra 10.13.2
- Xcode9.2
- swift4
#やり方
これ(AMNowClockView)を例に導入してみます。
Cocoa Touch Frameworkを選択する。
ライブラリのクラファイル、xib、リソースなどを追加する。
-
外部アクセスするクラスやプロパティにpublic修飾子をつける
public class AMNowClockView: UIView { public var clockBorderLineWidth:CGFloat = 5.0 }
何も修飾子をつけない場合、
internal
になるので外部からアクセスしたいものには全てpublic
修飾子をつける必要がある。 -
gitにpushする
-
gitにタグをpushする
ver.1.0とか適当にタグをつけてpushする。(何もない場合エラーになる)
これでライブラリのcarthage対応は完了
#導入方法
-
Homebrewのインストール
コマンドプロンプトで下記のコマンドを実行する。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
-
Carthageのインストール
コマンドプロンプトで下記のコマンドを実行する。
brew install carthage
-
ライブラリを導入するプロジェクトに移動する
コマンドプロンプトで下記のコマンドを実行してプロジェクトファイルに移動する。
cd プロジェクトファイルのパス
-
Cartfileの生成
コマンドプロンプトで下記のコマンドを実行する。
touch Cartfile
-
Cartfileの編集
コマンドプロンプトで下記のコマンドを実行する。
vim Cartfile
キーボードの
i
を押し入力モードにしてgithub "adventam10/AMNowClockView"
と入力する。
キーボードのesc
を押して入力モードを解除する。
コマンド:wq
と入力して、Enter
で保存して終了する。バージョンの指定は下記
github "adventam10/AMNowClockView" // 最新 github "adventam10/AMNowClockView" == 2.0 // 2.0 github "adventam10/AMNowClockView" >= 1.0 // 1.0以上の最新 github "adventam10/AMNowClockView" ~> 1.0 // 1.0以上2.0未満の最新
-
ライブラリをビルドする
コマンドプロンプトで下記のコマンドを実行する。
carthage update --platform iOS
もし下記のようなエラーが出た場合
xcrun: error: unable to find utility "xcodebuild", not a developer tool or in PATH
コマンドプロンプトで下記のコマンドを実行してパスを設定してやる必要がある。
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
下記のようなエラーが出た場合
Carthage requires git 2.3.0 or later.
XCodeのPreferences -> Locations -> Command Line Toolsを指定すると解決しました。
-
プロジェクトにライブラリを追加する
General→Linked Frameworks and Libraries→+→Add Other... から下記のようにライブラリを追加する。
-
Run Scriptを追加する
build Phases→+→New Run Script PhaseでRun Scriptを追加する。
上記画像の選択位置に/usr/local/bin/carthage copy-frameworks
と入力する。Input Filesに
$(SRCROOT)/Carthage/Build/iOS/AMNowClockView.framework
を追加する
以上でライブラリの導入は完了
#導入後の問題
-
IBDesignablesとIBInspectablesが無効になる
どうやらコンパイルされると、IBDesignableとIBInspectableの情報がなくなるようです。
External Frameworkの@IBDesignable/@IBInspectableを有効にする方法のように有効にする方法もあるようですが、現状は公式な方法で有効にすることは無理なようです。 -
xibのカスタムクラスの設定でエラーになる
xibのViewのカスタムクラスにライブラリのクラスを設定すると下記のようなエラーになる。
Unknown class AMNowClockView in Interface Builder file
今まであまり気にしたことがなかったが、どうやらModule
もちゃんと設定しなければいけないようです。
-
Command PhaseScriptExecution failed with a nonzero exit code
久々にCarthageを使ったら上のエラーが出たがCarthageのアップデートで解決しました。
ターミナルで下記コマンドを実行でアップデートbrew upgrade carthage
#さいごに
IBDesignablesとIBInspectablesが使えないのは残念...
#参考