19
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-29

はじめに

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で保存して終了する。

    バージョンの指定は下記

    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未満の最新 
    
  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
    

    下記のようなエラーが出た場合

    Carthage requires git 2.3.0 or later.
    

    XCodeのPreferences -> Locations -> Command Line Toolsを指定すると解決しました。

  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

  3. Command PhaseScriptExecution failed with a nonzero exit code

    久々にCarthageを使ったら上のエラーが出たがCarthageのアップデートで解決しました。
    ターミナルで下記コマンドを実行でアップデート

    brew upgrade carthage
    

さいごに

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

参考

19
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?