[Swift] 自作のパッケージをCocoaPods、Carthage、Swift Package Manager対応させる
自作のSwift製ライブラリをSwiftで用いられる主要なパッケージマネージャー(CocoaPods、Carthage、Swift Package Manager)に対応させるお話です。
環境
Mac OS 10.14.6
Swift 5.0.1
CocoaPods 1.7.1
Carthage 0.33.0
前提
プロジェクトの名前はSwiftyPyString
とします。
以降必要な部分はこれを自身の環境のものと置き換えてください。
また、プロジェクトのルートを./
と表します。
Swift Package Manager
色々都合がいいのでプロジェクトをSwift Package Manager
(以降SwiftPM
)を利用して作成するところから始めます。
適当なディレクトリに移動して、作成したいプロジェクト名のディレクトリを作成します。
mkdir SwiftyPyString
cd SwiftyPyString
作成したディレクトリの中に移動してパッケージを初期化します。
swift package init
こんな具合にファイルが作成されます。
Creating library package: SwiftyPyString
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/SwiftyPyString/SwiftyPyString.swift
Creating Tests/
Creating Tests/LinuxMain.swift
Creating Tests/SwiftyPyStringTests/
Creating Tests/SwiftyPyStringTests/SwiftyPyStringTests.swift
Creating Tests/SwiftyPyStringTests/XCTestManifests.swift
Sources/SwiftyPyString/SwiftyPyString.swift
にプログラムの本体をガリガリ書いていくわけですが、本題ではないので中身については省略します。
Package.swift
が今回の本命です。
import PackageDescription
let package = Package(
name: "SwiftyPyString",
products: [
.library(
name: "SwiftyPyString",
targets: ["SwiftyPyString"]),
],
dependencies: [
// ここに依存パッケージを記述
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
.target(
name: "SwiftyPyString",
dependencies: []),
.testTarget(
name: "SwiftyPyStringTests",
dependencies: ["SwiftyPyString"]),
]
)
基本的に自動的に作成された状態のままで問題ないですが、依存パッケージがあれば必要に応じてdependencies
部分に追記します。
SwiftPM
はこの状態でGitHub
などに上げておけば利用できるようになります。
CocoaPods
続いてCocoaPods
への対応です。
プロジェクトルートで
pod spec create SwiftyPyString
を実行すると、SwiftyPyString.podsec
が作成されます。
余計なコメントを消して最低限、以下の内容を書いておけば、だいたいOKです。
Pod::Spec.new do |spec|
# ライブラリ名
spec.name = "SwiftyPyString"
# バージョン
spec.version = "1.0.0"
# 短い説明
spec.summary = "A library that provides Swift with string operations equivalent to Python."
# 長めの説明
spec.description = <<-DESC
A library that provides Swift with string operations equivalent to Python.
SwiftyPyString is a string extension for Swift.
This library provide Python compliant String operation methods.
DESC
# プロジェクトのHP
spec.homepage = "https://github.com/ChanTsune/SwiftyPyString"
# ライセンス
spec.license = "MIT"
# 作者の名前
spec.author = "ChanTsune"
# マルチプラットフォームの場合プラットフォームごとにターゲットのOSのバージョン
spec.ios.deployment_target = "8.0"
spec.osx.deployment_target = "10.10"
spec.watchos.deployment_target = "2.0"
spec.tvos.deployment_target = "9.0"
# プロジェクトのホスト先
spec.source = { :git => "https://github.com/ChanTsune/SwiftyPyString.git", :tag => "#{spec.version}" }
# ソースファイル
spec.source_files = "Sources/**/*.{swift}"
spec.requires_arc = true
# swiftのバージョン
spec.swift_version = "5.0"
end
この時のバージョン名(spec.version
)はあとで、git
のリポジトリにつけるタグと同じでなければならないので覚えておくようにしましょう。
podsec
ファイルが書けたら以下のコマンドで正しく書けているか確認しましょう。
pod lib lint
特に問題がなければ
SwiftyPyString passed validation.
と表示されます。
ここまで出来たらgitにpushしてタグを付けておきます。
タグは、podsec
ファイルのバージョンと合わせましょう。
ユーザー登録
pod trunk register "メールアドレス" "名前"
pod trunk me
で登録した情報が確認出来ればOKです。
公開
cocoapodsにpodspecを登録します。
pod trunk push SwiftyPyString.podspec
Carthage
最後にCarthage
への対応です。
Xcodeのプロジェクトファイルが必要になるので作ります。
swift package generate-xcodeproj
プロジェクトルートで上記コマンドを実行すると、Xcodeのプロジェクトファイルが作成されます。
Xcodeで作成されたプロジェクトファイルを開いて、Manage Schemesからsharedにチェックを入れます。
あとはcocoapods対応の時と同様にgitにタグを付けます。
最後に
以上、自作のライブラリをCocoaPods、Carthage、Swift Package Manager対応させるお話でした。