Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
18
Help us understand the problem. What is going on with this article?
@am10

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

More than 1 year has passed since last update.

はじめに

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が使えないのは残念...

参考

18
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
am10
engineerlife
技術力をベースに人生を謳歌する人たちのコミュニティです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
18
Help us understand the problem. What is going on with this article?