Swift Package Manager (SPM) の除外設定


Swift Package Manager (SPM) でハマったことを共有します。🍂

なおドキュメントにはバッチリ記載されている内容です。😅

ハマったこと

パッケージに *.swift を含まないフォルダを持たせる場合は Manifest File で除外設定 が必要です。

Tests or any subdirectory can be excluded via Manifest file.

Package.swift — The Manifest File

具体例を挙げます。

  • exclude: ["Documentation"]

パッケージ APIHimotoKit1Documentation フォルダは *.swift を含まないため次のとおり設定します。

Package.swift
import PackageDescription

let package = Package(
    name: "APIHimotoKit",
    dependencies: [
        .Package(url: "https://github.com/JPMartha/APIKit.git",
            Version(2, 0, 0)),
        .Package(url: "https://github.com/JPMartha/Himotoki.git",
            Version(2, 0, 0))
    ],
    exclude: ["Documentation"]
)

もし除外しなかったら…

ビルド時に怒られます🙇

error: NoSources("/.../Documentation")

補足

EARLY DAYS

Swift Package Manager はまだ初期の設計・開発段階です。🚧
下記の Swift.org コミュニティにて議論中で今後仕様が変わる可能性があります。👷🏻

など

今回のテスト環境

  • OS X 10.11.4
  • swift-DEVELOPMENT-SNAPSHOT-2016-03-24-a

今回の依存ライブラリ

  • JPMartha / APIKit forked from ishkawa/APIKit (諸事情で 2.0.0 を作るため Fork)
  • JPMartha / Himotoki forked from ikesyo/Himotoki (同上)

おまけ

2016-03-26 追記: 🚨この方法はなくなりそうな展開になっています。
https://github.com/apple/swift-package-manager/pull/223

本物の APIKitHimotoki はいずれも投稿時点で 2.0.0-beta.2 がプレリリースとして公開されており、すでに Manifest File を配置されています。

もしこれらを指定する場合は次のとおり設定します。(あくまで現状)

Package.swift
dependencies: [
    .Package(url: "https://github.com/ishkawa/APIKit.git",
        Version(2, 0, 0, prereleaseIdentifiers: ["beta", "2"])),
    .Package(url: "https://github.com/ikesyo/Himotoki.git",
        Version(2, 0, 0, prereleaseIdentifiers: ["beta", "2"]))
]

ほかにもありますが長くなるのでこのへんで締めます。💁


  1. 無断で作成した非公式ツールです。🙏