Open7

【Swift】SPMでプロジェクトを新規作成する

ちっぴーちっぴー

Xcodenew 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つ目以降のパッケージを作る場合、はたしてどうするか。

ちっぴーちっぴー

よく分からんので、initしたときのものを元にお手製でいくことにした。

ちっぴーちっぴー

お手製で行くとごちゃつくのでbrew install swift-formatして、プロジェクトルートでswift-format -r . -iして整える。

ちっぴーちっぴー

多分、パッケージに記載する内容はこんな感じの意味合い。

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"]),
  ]
)