Swift 包管理器可执行应用程序,设置部署目标
Swift Package Manager executable app, set deployment target
我正在使用 Swift 包管理器创建 macOS 可执行文件。当我使用并非在所有 macOS 版本中都可用的东西时,我会遇到编译错误。两个重要的例子是 URL(fileURLWithPath: filePath, relativeTo: directoryToSearch)
和 url.hasDirectoryPath
.
使用 swift build
构建时,出现 error: 'init(fileURLWithPath:relativeTo:)' is only available on OS X 10.11 or newer
错误。我不关心任何旧的 OS 版本,因为它只是一个个人工具。如何将部署目标设置为 10.14,这样我就不必在我的代码中到处检查?
我发现 https://hirschmann.io/swift-package-manager/ 里面讨论了这个问题。然而,它的解决方案是创建一个包含部署目标集的 xcconfig
文件,并使用 swift package generate-xcodeproj --xcconfig-overrides ./main.xcconfig
将其应用于生成的 Xcode 项目。虽然它确实有效,但它只适用于 Xcode 项目,所以如果我只想执行 swift build
以获得独立的可执行文件以在 Xcode 之外使用,那么我不能。
我的包文件是由 swift package init --type executable
自动生成的,没有被更改。
// swift-tools-version:4.2
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "swift_converter",
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "swift_converter",
dependencies: []),
.testTarget(
name: "swift_converterTests",
dependencies: ["swift_converter"]),
]
)
这目前可能对您没有帮助,但即将推出的 Swift 5.0 将包含 specify the deployment target in the package manifest 的功能,使用如下语法:
...
platforms: [
.macOS(.v10_13), .iOS(.v12),
],
...
(同理for some other common build settings。)
在那之前,您可以像这样通过命令行参数覆盖默认部署目标:
$ swift build -Xswiftc "-target" -Xswiftc "x86_64-apple-macosx10.14"
您必须在每次调用 swift build
、swift run
、swift test
时包含这些参数。
我正在使用 Swift 包管理器创建 macOS 可执行文件。当我使用并非在所有 macOS 版本中都可用的东西时,我会遇到编译错误。两个重要的例子是 URL(fileURLWithPath: filePath, relativeTo: directoryToSearch)
和 url.hasDirectoryPath
.
使用 swift build
构建时,出现 error: 'init(fileURLWithPath:relativeTo:)' is only available on OS X 10.11 or newer
错误。我不关心任何旧的 OS 版本,因为它只是一个个人工具。如何将部署目标设置为 10.14,这样我就不必在我的代码中到处检查?
我发现 https://hirschmann.io/swift-package-manager/ 里面讨论了这个问题。然而,它的解决方案是创建一个包含部署目标集的 xcconfig
文件,并使用 swift package generate-xcodeproj --xcconfig-overrides ./main.xcconfig
将其应用于生成的 Xcode 项目。虽然它确实有效,但它只适用于 Xcode 项目,所以如果我只想执行 swift build
以获得独立的可执行文件以在 Xcode 之外使用,那么我不能。
我的包文件是由 swift package init --type executable
自动生成的,没有被更改。
// swift-tools-version:4.2
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "swift_converter",
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages which this package depends on.
.target(
name: "swift_converter",
dependencies: []),
.testTarget(
name: "swift_converterTests",
dependencies: ["swift_converter"]),
]
)
这目前可能对您没有帮助,但即将推出的 Swift 5.0 将包含 specify the deployment target in the package manifest 的功能,使用如下语法:
...
platforms: [
.macOS(.v10_13), .iOS(.v12),
],
...
(同理for some other common build settings。)
在那之前,您可以像这样通过命令行参数覆盖默认部署目标:
$ swift build -Xswiftc "-target" -Xswiftc "x86_64-apple-macosx10.14"
您必须在每次调用 swift build
、swift run
、swift test
时包含这些参数。