我正在使用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
错误。我不在乎任何旧的操作系统版本,因为它只是一个个人工具。我如何将部署目标设置为10.14,以便我不必在我的代码中撒上支票?
我找到了谈论这个问题的https://hirschmann.io/swift-package-manager/。但是,它的解决方案是使用部署目标集创建xcconfig
文件,并使用swift package generate-xcodeproj --xcconfig-overrides ./main.xcconfig
将其应用于生成的Xcode项目。虽然它确实有效,但它仅适用于Xcode项目,因此,如果我只想做swift build
以获得免费的Standable可执行文件以在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将包括使用这样的语法在包装清单中指定部署目标的能力:
...
platforms: [
.macOS(.v10_13), .iOS(.v12),
],
...
(对于其他一些常见的构建设置也是如此。)
在此之前,您可以通过这样的命令行参数覆盖默认部署目标:
$ swift build -Xswiftc "-target" -Xswiftc "x86_64-apple-macosx10.14"
您必须将这些参数包括在swift build
,swift run
,swift test
中。