Open10
【Swift】SPMでプロジェクトを新規作成する
適当にGitHubに空リポジトリを作成する
Xcode
でnew project
して、App
を作成する
preview
でエラーが出たら、以下のマーク部分が揃っているか、該当のエミュレーターは立ち上がるかなどをいじると、何か知らんけど立ち上がった。
App
と並列にLibrary
ディレクトリを追加し、移動。
swift package init --name [xxx] --type library
でライブラリを作成する。
すると、Sources/[xxx]
Tests/[xxx]
Swift.package
とかが作られる。
swift package init --name [yyy] --type library
を打っても既にSwift.package
があるとコマンドは通らない。
2つ目以降のパッケージを作る場合、はたしてどうするか。
多分、パッケージに記載する内容はこんな感じの意味合い。
import PackageDescription
let package = Package(
name: "Library",
// MEMO: [Library]以外で公開したい場合に定義する
products: [
// .library(
// name: "Network",
// targets: ["Network"])
],
// MEMO: [Library]内で使用する外部パッケージがある場合に定義する
dependencies: [
// .package(url: "https://github.com/pointfreeco/swift-composable-architecture", from: "1.9.1"),
// .package(url: "https://github.com/pointfreeco/swift-dependencies", from: "1.2.0"),
// .package(url: "https://github.com/zunda-pixel/LicenseProvider", from: "1.1.1"),
],
// MEMO: 各パッケージ同士の依存関係を定義する
targets: [
.target(
name: "Common"),
.target(
name: "Data",
dependencies: ["Common", "Model", "Network"]),
.target(
name: "Designsystem",
dependencies: ["Common"]),
.target(
name: "Domain",
dependencies: ["Common", "Data", "Model"]),
.target(
name: "Model",
dependencies: ["Common"]),
.target(
name: "Network",
dependencies: [
"Common"
// MEMO: 外部パッケージを依存する場合、以下のように定義する
// .product(name: "ComposableArchitecture", package: "swift-composable-architecture"),
]),
.testTarget(
name: "DomainTests",
dependencies: ["Domain"]),
.testTarget(
name: "DataTests",
dependencies: ["Data"]),
.testTarget(
name: "NetworkTests",
dependencies: ["Network"]),
]
)
Package.swift
の更新をしたら、updateする
swift package update
Xcode のインデントが気に食わない時は こうよ。
swift-format -r . -i
Xcode 16 以降であれば、 Ctl + Shift + i でおk。
Swift 6.0 にあげたときに SPM が追いついてこないとき
swift --version #バージョン確認
swift package --version #バージョン確認
swift package tools-version #バージョン確認
swift package tools-version --set-current #問題なさそうなら、これで更新