Hello Swift Package Manager community,

I'd like to give you an update on the state of SwiftPM in Swift 4. We've 
implemented a number of evolution proposal this Spring:

• SE-0152 [ 
https://github.com/apple/swift-evolution/blob/master/proposals/0152-package-manager-tools-version.md
 ] introduced a "tools version", stored in a comment at the top of the 
Package.swift manifest, which allows you to declare what version of the Swift 
tools your package requires, and to avoid resolving package dependencies 
against package versions which require newer tools than those you are using. 
The tools version is also used to control whether to enable new features such 
as the revised package manifest API, and to determine which Swift language 
version is used to interpret the manifest.

• SE-0158 [ 
https://github.com/apple/swift-evolution/blob/master/proposals/0158-package-manager-manifest-api-redesign.md
 ] redesigned the Package manifest API, adopting the Swift API design 
guidelines and cleaning up some problems in our API. Existing packages can 
continue to use the old Package manifest API until they update their Swift 
tools version.

• SE-0151 [ 
https://github.com/apple/swift-evolution/blob/master/proposals/0151-package-manager-swift-language-compatibility-version.md
 ] introduced a property to control which Swift language version should be used 
to compile a package's sources. If this property is not set, the default is 
determined by the package's Swift tools version.

• SE-0146 [ 
https://github.com/apple/swift-evolution/blob/master/proposals/0146-package-manager-product-definitions.md
 ] added explicit control over what products a package vends to clients, and 
what targets are used to build each product. Packages using the new manifest 
API must declare any products which they wish their package to vend.

• SE-0175 [ 
https://github.com/apple/swift-evolution/blob/master/proposals/0175-package-manager-revised-dependency-resolution.md
 ] removed the conditional "pinning" feature and replaced it with a simpler 
"resolved package versions" file ("Package.resolved"), along with improvements 
to SwiftPM's dependency resolution behaviors.

• SE-0150 [ 
https://github.com/apple/swift-evolution/blob/master/proposals/0150-package-manager-branch-support.md
 ] added support for packages which depend on a branch, rather than a tagged 
version, of other packages. This is especially useful during bringup of a new 
package, and in-between tagged releases. In order to enforce stability for 
tagged versions, a tagged package version must only depend on other packages' 
tagged versions, not on branches.

• SE-0162 [ 
https://github.com/apple/swift-evolution/blob/master/proposals/0162-package-manager-custom-target-layouts.md
 ] added API for controlling where the source files for each target should be 
found. This allows SwiftPM to support source trees that don't conform to the 
standard package layout conventions.

• SE-0149 [ 
https://github.com/apple/swift-evolution/blob/master/proposals/0149-package-manager-top-of-tree.md
 ] added support for a "--path" flag to `swift package edit`, allowing users to 
take full control over an edited dependency and share it between multiple 
top-level packages.

In addition to these proposals, we've made other significant improvements:

• On macOS, package manifest interpretation and the package build are now 
sandboxed, to help mitigate the effects of maliciously crafted manifests.

• Many error messages and diagnostics have been improved, including information 
about conflicts during dependency resolution.

• Xcode project generation has been improved, and now allows schemes to 
reference package targets across regenerations of the project.

• There have been a host of smaller improvements and bugfixes.

All these changes are available in the Xcode 9 beta released today, and in the 
Swift 4.0 Development snapshots available at 
https://swift.org/download/#snapshots.

Xcode 9 lays the groundwork for first-class, native support in Xcode for Swift 
packages with the preview version of its new build system. This build system 
provides the flexibility and extensibility needed to allow Xcode to support new 
build models, such as Swift packages. Additionally, considerable work has gone 
into the SwiftPM library vended by the SwiftPM project, which will support 
integrating Swift packages into tools like Xcode.

So what's left in SwiftPM 4? First, we will be implementing SE-0179 [ 
https://github.com/apple/swift-evolution/blob/master/proposals/0179-swift-run-command.md
 ], support for a `swift package run` command. Beyond that, we expect to start 
winding down this release and looking ahead to the next, though we are still 
open to suggestions or evolution proposals for modest features and fixes.

There are a few features that we originally considered for SwiftPM 4 which are 
unlikely to be included in this release at this point: performance test 
support, support for configuration files, support for repositories which 
contain more than one package, and build settings support. With the possible 
exception of configuration files, these are likely to be a high priority for 
the next release. In particular, the core team has done work on a design for 
build settings which we expect to invite comment and discussion on early in the 
next release; this is a fairly consequential feature, and we want to make sure 
to get it right. Since that feature is not landing in SwiftPM 4, we are 
considering adding some package properties in SwiftPM 4 that will help 
alleviate some of the biggest pain points here, such as a C++ language version 
property.

Other features we will likely consider for the next release cycle include 
support for package resources (such as image assets), license and metadata 
support, explicit support for handling source control forking, and a generic 
mechanism for invoking build tools that the package manager doesn't natively 
support. Finally, we do anticipate supporting a centralized package index at 
some point in the future, and we may begin laying the groundwork for that in 
the upcoming year.

As always, we appreciate the support, feedback, contributions, and adoption 
we've gotten from the package manager community. We're looking forward to 
working with you all over the upcoming year to make SwiftPM even better.

        - Rick Ballard
        Swift Package Manager release manager

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to