Note: This is in reverse chronological order, so newer entries are added to the top.
-
[#3310]
- Improvements
Adding a dependency requirement can now be done with the convenience initializer
.package(url: String, revision: String). -
[#3292]
- Improvements
Adding a dependency requirement can now be done with the convenience initializer
.package(url: String, branch: String).
-
-
Improvements
Packagemanifests can now have any combination of leading whitespace characters. This allows more flexibility in formatting the manifests.SR-13566 The Swift tools version specification in each manifest file now accepts any combination of horizontal whitespace characters surrounding
swift-tools-version, if and only if the specified version ≥5.4. For example,//swift-tools-version: 5.4and// swift-tools-version: 5.4are valid.All Unicode line terminators are now recognised in
Packagemanifests. This ensures correctness in parsing manifests that are edited and/or built on many non-Unix-like platforms that use ASCII or Unicode encodings. -
API Removal
ToolsVersionLoader.Error.malformedToolsVersion(specifier: String, currentToolsVersion: ToolsVersion)is replaced byToolsVersionLoader.Error.malformedToolsVersionSpecification(_ malformation: ToolsVersionSpecificationMalformation).ToolsVersionLoader.split(_ bytes: ByteString) -> (versionSpecifier: String?, rest: [UInt8])andToolsVersionLoader.regexare together replaced byToolsVersionLoader.split(_ manifest: String) -> ManifestComponents. -
Source Breakages for Swift Packages
The package manager now throws an error if a manifest file contains invalid UTF-8 byte sequences.
-
-
The
swiftLanguageVersionsproperty no longer takes its Swift language versions via a freeform Integer array; instead it should be passed as a newSwiftVersionenum array. -
The
Packagemanifest now accepts a new type of target,systemLibrary. This deprecates "system-module packages" which are now to be included in the packages that require system-installed dependencies. -
Packages can now specify a dependency as
package(path: String)to point to a path on the local filesystem which hosts a package. This will enable interconnected projects to be edited in parallel. -
The
generate-xcodeprojhas a new--watchoption to automatically regenerate the Xcode project if changes are detected. This uses thewatchmantool to detect filesystem changes. -
Scheme generation has been improved:
- One scheme containing all regular and test targets of the root package.
- One scheme per executable target containing the test targets whose dependencies intersect with the dependencies of the exectuable target.
-
SR-6978 Packages which mix versions of the form
vX.X.XwithY.Y.Ywill now be parsed and ordered numerically. -
#1489 A simpler progress bar is now generated for "dumb" terminals.
-
#1485 Support has been added to automatically generate the
LinuxMainfiles for testing on Linux systems. On a macOS system, runswift test --generate-linuxmain. -
SR-5918
Packagemanifests that include multiple products with the same name will now throw an error.
-
The generated Xcode project creates a dummy target which provides autocompletion for the manifest files. The name of the dummy target is in format:
<PackageName>PackageDescription. -
--specifieroption forswift testis now deprecated. Use--filterinstead which supports regex.
-
The package manager now supports writing Swift 3.0 specific tags and manifests, in order to support future evolution of the formats used in both cases while still allowing the Swift 3.0 package manager to continue to function.
-
Test modules now must be named with a
Testssuffix (e.g.,Foo/Tests/BarTests/BarTests.swift). This name also defines the name of the Swift module, replacing the oldBarTestSuitemodule name. -
It is no longer necessary to run
swift buildbefore runningswift test(it will always regenerates the build manifest when necessary). In addition, it now accepts (and requires) the same-Xcc, etc. options as are used withswift build. -
The
Packageinitializer now requires thename:parameter.