![[Swift 3.0][導入編] Swift Package Manager を試してみました](https://devio2023-media.developers.io/wp-content/uploads/2014/11/logo_swift_400x400.png)
[Swift 3.0][導入編] Swift Package Manager を試してみました
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Swift Package Manager
こんにちは!
モバイルアプリサービス部の田中孝明です。
2015年12月以降、SwiftがOSSになってからエコシステムが変わりつつあります。
Swift Package Manager
というライブラリ管理ツールが新たに追加されました。
Swift Package Manager
に関してはSwiftの公式のドキュメントのPackage Managerの項目にて詳しく記載されていますので、こちらを数回に分けて解説したいと思います。
Swiftのライブラリ管理
iOSにおけるライブラリ管理ツールはCocoaPods
やCarthage
が馴染み深かったのではないでしょうか?
ただし、いずれもmacOSでしか動作しません。
Swift Package Manager
はUbuntu
でも動作するため、Swiftをサーバーサイドで動作させる際に強力なライブラリ管理ツール隣ます。
今回は導入編ということで、サーバーサイドでOSSのライブラリを組み込むところまでやってみたいと思います。
Himotoki
JSONデコードライブラリのHimotokiはSwift Package Manager
に対応しています。
ライブラリ配下にPackage.swift
ファイルがあるのもその特徴です。
import PackageDescription
let package = Package(
name: "Himotoki"
)
記載されている内容に関しては別の回でまとめたいと思います。
Perfect
Server Side Swiftのframeworkの一つであるPerfectはバージョン2.0にてSwift Package Manager
のフルサポートが追加されました。
今回はこちらのframeworkを使用します。
ライブラリのインポート
Perfect配下のPackage.swift
ファイルのdependencies
にフォーマットに従ってライブラリのURLを追加します。
let package = Package(
name: "PerfectTemplate",
targets: [],
dependencies: [
.Package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", versions: Version(0,0,0)..<Version(10,0,0)),
.Package(url: "https://github.com/ikesyo/Himotoki.git", versions: Version(0,0,0)..<Version(10,0,0))
]
)
.Package
のurl
にはライブラリのgitのURLを入力します。
versions
には取り込むライブラリのバージョンを記載します。
ライブラリの指定が終われば、あとはswift build
コマンドを実行することで、ライブラリがプロジェクトに組み込まれます。
$ swift build
ビルドが成功すると、組み込まれたライブラリを使用することができます。
struct Message: Decodable {
let id: String?
let message: String
let created_at: String
let updated_at: String
// MARK: Decodable
static func decode(_ e: Extractor) throws -> Message {
return try Message(
id: e <|? "id",
message: e <| "message",
created_at: e <| "created_at",
updated_at: e <| "updated_at"
)
}
}
まとめ
今回はHimotokiを試行させていただきましたが、他のライブラリも徐々にではありますがSwift Package Manager
に対応しつつあります。
今後のライブラリ選定の基準としてCocoaPods
、Carthage
、Swift Package Manager
の全てに対応していることが条件となってくるのでは無いでしょうか?