<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">(I think this is the right place for this suggestion, but please let me know if I'm mistaken)</div><div class=""><br class=""></div>There is currently no supported way to have some dependencies only used for testing (`swift test`), and the workarounds for it, while workable, are unnecessary crude.<div class=""><br class=""></div><div class="">Currently, what a lot of projects are doing is defining a `.Package.test.swift` file that is then copied over `Package.swift` when tests are to be run (on external CI, for example). While this works, it adds a extra step and another point of failure (if you forget to add a new dependency to both `Package` files, for example.</div><div class=""><br class=""></div><div class="">What I propose is a new section of `Package.swift`, labelled either `testDependencies` or `devDependencies`, and the modules referenced within are only loaded/compiled when running `swift test`</div><div class=""><br class=""></div><div class=""><pre class="" style="color: inherit; margin-top: 15px; margin-bottom: 15px; font-family: Menlo, Consolas, 'Liberation Mono', Courier, monospace; font-size: 10pt; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; background-color: rgb(248, 248, 248); border: 1px solid rgb(204, 204, 204); overflow: auto; padding: 4px 8px; word-break: normal; word-wrap: normal;">// Package.swift
import PackageDescription
let package = Package(
    name: "Project",
    targets: [
      Target(name: "BoxioDebug", dependencies: ["Core"]),
    ],
    dependencies: [
<span class="Apple-tab-span" style="white-space:pre">        </span>//Same as before
    ],
    testDependencies: [
        .Package(url: "<a href="https://github.com/FooBar/PackageOnlyNeededForTesting.git" class="">https://github.com/FooBar/PackageOnlyNeededForTesting.git</a>", majorVersion: 1),
    ]
)
</pre><div class=""><br class="webkit-block-placeholder"></div><div class="">This solves having to manually switch out Package files or `.Package` statements inside one Package file when trying to run tests, and keeps all dependencies&nbsp;neatly organized in one file.</div><div class=""><br class=""></div><div class="">This change is purely additive and optional, no existing code needs to change for this to be added.</div><div class=""><br class=""></div><div class="">A real world example is a dependency on Quick (or another such testing framework), that itself uses XCTest, and thus crashes when being run outside of `swift test` (add Quick to Package.swift, run `swift build` and run the compiled binary). With the new `test[dev]Dependencies`, running `swift build` wouldn't even see Quick, and thus would compile and run correctly, but `swift test` would both see and use Quick for running the test suite.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><b class="">Other solutions considered:</b></div><div class="">Another potential solution is to only compile the dependencies that were actually used when running `swift build`, since that seems to be the cause of the above problem.</div><div class=""><br class=""></div><div class="">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class="">-thislooksfun (tlf)</div>

</div>

<br class=""></div></body></html>