iOS
Swift
Carthage
swift4

自作ライブラリのCarthage(カルタゴ)対応

はじめに

carthageの対応は簡単というのを聞いたので、やってみるとちょとつまずいたのでメモ。

環境

  • macOS High Sierra 10.13.2
  • Xcode9.2
  • swift4

やり方

これ(AMNowClockView)を例に導入してみます。

  1. 新規プロジェクト作成

    car_project.png
    Cocoa Touch Frameworkを選択する。

  2. ライブラリのファイルを追加

    car_addclass.png
    ライブラリのクラファイル、xib、リソースなどを追加する。

  3. Manage Schemesからsharedにチェック
     car_scheme.png
    car_shared.png

  4. 外部アクセスするクラスやプロパティにpublic修飾子をつける

    public class AMNowClockView: UIView {
    
    public var clockBorderLineWidth:CGFloat = 5.0
    }
    

    何も修飾子をつけない場合、internalになるので外部からアクセスしたいものには全てpublic修飾子をつける必要がある。

  5. gitにpushする

  6. gitにタグをpushする

    ver.1.0とか適当にタグをつけてpushする。(何もない場合エラーになる)

これでライブラリのcarthage対応は完了

導入方法

  1. Homebrewのインストール

    コマンドプロンプトで下記のコマンドを実行する。

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    
  2. Carthageのインストール

    コマンドプロンプトで下記のコマンドを実行する。

    brew install carthage
    
  3. ライブラリを導入するプロジェクトに移動する

    コマンドプロンプトで下記のコマンドを実行してプロジェクトファイルに移動する。

    cd プロジェクトファイルのパス
    
  4. Cartfileの生成

    コマンドプロンプトで下記のコマンドを実行する。

    touch Cartfile
    
  5. Cartfileの編集

    コマンドプロンプトで下記のコマンドを実行する。

    vim Cartfile
    

    キーボードのiを押し入力モードにしてgithub "adventam10/AMNowClockView"と入力する。
    キーボードのescを押して入力モードを解除する。
    コマンド:wqと入力して、Enterで保存して終了する。

  6. ライブラリをビルドする

    コマンドプロンプトで下記のコマンドを実行する。

    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
    
  7. プロジェクトにライブラリを追加する

    General→Linked Frameworks and Libraries→+→Add Other... から下記のようにライブラリを追加する。
    car_add_framework.png
         car_path.png

  8. Run Scriptを追加する

    build Phases→+→New Run Script PhaseでRun Scriptを追加する。
    car_add_runscript.png
         car_runscript.png
    上記画像の選択位置に/usr/local/bin/carthage copy-frameworksと入力する。

    Input Filesに$(SRCROOT)/Carthage/Build/iOS/AMNowClockView.frameworkを追加する
    car_add_inputfiles.png

以上でライブラリの導入は完了

導入後の問題

  1. IBDesignablesとIBInspectablesが無効になる

    どうやらコンパイルされると、IBDesignableとIBInspectableの情報がなくなるようです。
    External Frameworkの@IBDesignable/@IBInspectableを有効にする方法のように有効にする方法もあるようですが、現状は公式な方法で有効にすることは無理なようです。

  2. xibのカスタムクラスの設定でエラーになる

    xibのViewのカスタムクラスにライブラリのクラスを設定すると下記のようなエラーになる。
    Unknown class AMNowClockView in Interface Builder file
    今まであまり気にしたことがなかったが、どうやらModuleもちゃんと設定しなければいけないようです。
    car_module.png

さいごに

IBDesignablesとIBInspectablesが使えないのは残念...

参考