iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
CocoaPodsやCarthageのようなパッケージ管理ツールの利用は、少々敬遠していたのだが、Xcode 11からSwift Package Managerと呼ばれるパッケージ管理ツールが利用できるようになったということで調べてみた。
swift.orgのPackage Managerを説明したページで、PlayingCardというサンプル・クラスのパッケージ構造が説明されているが、これをSwift Package Managerのツールを使って生成してみる。
以下のコマンドで、PlayingCardパッケージを生成する。
$ mkdir PlayingCard
$ cd PlayingCard
$ swift package init --type=executable
Creating executable package: PlayingCard
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/PlayingCard/main.swift
Creating Tests/
Creating Tests/LinuxMain.swift
Creating Tests/PlayingCardTests/
Creating Tests/PlayingCardTests/PlayingCardTests.swift
Creating Tests/PlayingCardTests/XCTestManifests.swift
gitでバージョン管理をされることを想定した.gitignoreや単体テスト関連の雛形ファイルが生成されている。
ソースファイルはSources/PlayingCard配下に置くことになる。main.swiftという雛形ファイルを生成されているので、これを削除して、swift.orgのPackage Managerで紹介されているPlayingCardのサンプルのPlayingCard.swiftとRank.swift、Suit.swiftを配置することになる。
PlayingCard
├── Package.swift
├── README.md
├── .gitignore
├── Sources
│ └── PlayingCard
│ ├── PlayingCard.swift
│ ├── Rank.swift
│ └── Suit.swift
└── Tests
├── LinuxMain.swift
└── PlayingCardTests
├── PlayingCard.swift
├── Rank.swift
├── Suit.swift
└── XCTestManifests.swift
上記では、Tests/PlayingCardTests配下もサンプルの内容に変更している。
Swiftのバージョンの違いが理由だと思うが、生成されたPacjage.swiftの内容は、swift.orgのサンプルと異なっている。
// swift-tools-version:5.2
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "PlayingCard",
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "PlayingCard",
dependencies: []),
.testTarget(
name: "PlayingCardTests",
dependencies: ["PlayingCard"]),
]
)
Package.swiftでは他パッケージとの依存関係が記述できる。
これをgithubなどで公開すれば、Xcodeの File > Swift Packages > Add Package Dependency... で利用できるようになる。