【Swift】Carthageの導入と使い方!ライブラリ管理ツール

この記事からわかること

  • Swiftライブラリ管理ツールCarthageとは?
  • 導入方法使い方
  • Cartfile記入方法
  • Command PhaseScriptExecution failed with a nonzero exit code原因

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

公式リファレンス:Carthage

環境

Carthageとは?

CarthageとはiOSおよびmacOSのためのライブラリ管理ツール(依存関係管理ツール)の1つです。読み方は「カルタゴ」または「カッセージ」で、中身はSwiftを使用して書かれています。

似たような依存関係管理ツールとして「Swift Package Manager」や「Cocoa Pods」などがあります。

Carthageの特徴と違い

複数存在する依存関係管理ツールの中でもCarthageは以下のような特徴と違いを持っています。

Carthageは他のツールに比べて対応しているライブラリの種類はあまり多くはありませんSwiftで記述された管理ツールであり、依存関係を把握しやすく、ビルドが高速なのが大きなメリットです。しかしCocoa Podsなどに比べるとライブラリを導入するまでのステップが長いのは否めません。

インストール

Carthageは他のツールに比べてを使用するにはまずCarthage自体をHomebrewを使用してインストールする必要があります。>Homebrew(ホームブルー)とはmacOSのパッケージ管理システムです。

Homebrewを使用してCarthageをインストールするには以下のコマンドを実行します。

$ brew install carthage

ライブラリの導入方法

実際にライブラリを導入する流れを見ていきます。

  1. Cartfileの生成
  2. Cartfileに導入したいライブラリを記入
  3. プロジェクトに管理ファイルの導入
  4. Frameworks, Libraries, and Embedded Contentから追加
  5. 導入完了

Cartfileの生成

Carthageでライブラリを導入するためには「Cartfile」の生成が必須になってきます。Cocoa Podsの「PodFile」のようなものですが、自動で生成するコマンドはないようなのでtouchコマンドで手動で生成します。

$ cd プロジェクトディレクトリ
$ touch Cartfile

Cartfileに導入したいライブラリを記入

導入したいライブラリは「Cartfile」の中に記述します。今回は公式の解説に倣ってHTTP通信機能を提供しているAlamofireをインストールしてみます。

おすすめ記事:【Swift】Alamofireの導入と使い方!HTTP通信とAPI


github "Alamofire/Alamofire"

ターミナル操作が多いのでVimエディタで操作するのが楽かもしれません。その場合は以下コマンドを実行し、中に貼り付けたら:wqと入力し保存して終了します。

$ vim Cartfile

プロジェクトに管理ファイルの導入

これで準備が整ったのでプロジェクト内にライブラリを導入していきます。導入にはcarthage updateコマンドを使用します。

--platform iOS・・・プラットフォームは明示的に指定することで不要なmacOSwatchOSなどが含まれないようにします。
--use-xcframeworks・・・XCFrameworksを利用する
--cache-builds・・・キャッシュの削除

$ carthage update --platform iOS --use-xcframeworks --cache-builds

するとプロジェクトの中に「Cartfile.resolved」「Carthageディレクトリ」が自動で生成されます。ここでエラーが発生した人は「インストール時のエラー」を先に参照してください。

【Swift】Carthageの導入と使い方!ライブラリ管理ツール

続いてXcodeを起動し「プロジェクトファイル」>「General」>「Frameworks, Libraries, and Embedded Content」>「+」をクリックします。

【Swift】Carthageの導入と使い方!ライブラリ管理ツール

下部の「Add Other...」>「Add Files...」をクリックします。

【Swift】Carthageの導入と使い方!ライブラリ管理ツール

プロジェクトディレクトリ内の「Carthageディレクトリ」>「Build」>「ライブラリ.xcframeworkディレクトリ」を選択します。

【Swift】Carthageの導入と使い方!ライブラリ管理ツール

これでライブラリの導入は完了です。あとは使用したいファイルでimportをすれば使えるはずです。他の記事では「Run Script」などに記述していましたが省略しても問題なく動作することを確認できました。おそらくXCFrameworksを使用しない場合の方法だと思います。

使用例

import SwiftUI
import Alamofire

struct AlamofireView: View {
    
    func getArticles(){
        AF.request("https://appdev-room.com/api/article").response { response in
                do {
                    let articles = try JSONSerialization.jsonObject(with: response.data!, options: []) as? Array<Any>
                    print(articles)
                } catch {
                    print(error.localizedDescription)
                }
            }
        
    }
    
    var body: some View {
        Button {
            getArticles()
        } label: {
            Text("get")
        }
        
    }
}

コマンドの種類

バージョン確認

$ carthage version

ライブラリのアップデート

$ carthage update

インストール時のエラー

ライブライインストール時に以下のようなエラーが発生することがあります。解決方法はそれぞれの記事を参考にしてください。

failed with exit code 72:xcrun: error: unable to find utility "xcodebuild", not a developer tool or in PATH
*** Skipped downloading Alamofire binary due to the error:
	"Bad credentials"

ビルド時のエラー

このエラーはビルドする際に発生しました。

Could not find module 'Alamofire' for target 'arm64-apple-ios-simulator'; found: arm64-apple-ios

XCFrameworksを使用しない場合?

基本的な流れは同じですがXCFrameworksを使用しない場合はcarthage updateコマンドの引数はプラットフォームの指定のみです。

$ carthage update --platform iOS 

ここら辺はまだ情報が定かではないので分かり次第アップデートしておきます。

Run Scriptへの追加

とりあえずRun Scriptにコードを組み込む流れを解説しておきます。

Xcodeから「TARGET」>「Build Phases」>「Run Script」をクリックします。もしなければ上部の「+」をクリックし「New Run Script Phase」で追加してください。

【Swift】SwiftLint(静的解析ツール)の導入と使い方!アプリの中身をチェック

するとこのような感じになっています。

【Swift】SwiftLint(静的解析ツール)の導入と使い方!アプリの中身をチェック

そして上記の入力欄の部分に以下のコードを書き込んでおきます。

/opt/homebrew/bin/carthage copy-frameworks

Input Filesへの追加

さらにRun Scriptの下部にある「Input Files」にファイルを追加します。「」をクリックすると追加されるので中を以下のように書き換えます。

$(SRCROOT)/Carthage/Build/iOS/Alamofire.framework

XCFrameworksを使用しない場合はCarthageディレクトリ内の構成を少し変わっているので注意してください。

Command PhaseScriptExecution failed with a nonzero exit code

私の環境下ではXCFrameworksを使用しない場合で実行しようとするとCommand PhaseScriptExecution failed with a nonzero exit codeというエラーが発生しました。

これはRun Scriptが正常に実行されていない時に発生するものなので新しいバージョンでは対応していないのかもしれません。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index