我对在macOS 10.15.7上使用FileHandle.read(upToCount:)有问题;每当我try 这样做时,都会出现以下错误:

error: 'read(upToCount:)' is only available in macOS 10.15.4 or newer

此约束与我在以下位置看到的内容相匹配:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/swift/Foundation.swiftmodule/x86_64.swiftinterface
extension FileHandle {
  ...
  @available(OSX 10.15.4, iOS 13.4, watchOS 6.2, tvOS 13.4, *)
  public func read(upToCount count: Swift.Int) throws -> Foundation.Data?
  ...
}

我可以通过一个小测试来复制这个可用性问题;main.swift个左右:

@available(OSX 10.15.4, *)
func test() {}

test()

这给了我同样的一般错误:

error: 'test()' is only available in macOS 10.15.4 or newer

如果我将@available约束更改为OSX 10.15OSX 10.15.0,这将很好地编译,但OSX 10.15.1或更高版本将报告相同的错误,这似乎表明工具链认为构建目标是10.15.0.不过,看看swiftc在引擎盖下做了什么,它似乎使用了正确的SDK和三元组:

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift \
  -frontend \
  -c \
  -primary-file main.swift \
  -target x86_64-apple-darwin19.6.0 \
  -enable-objc-interop \
  -stack-check \
  -sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk \
  -color-diagnostics \
  -target-sdk-version 11.1 \
  -module-name main \
  -o /var/folders/ml/3hynjc6s5v96y4k_wfy3gt6r0000gn/T/main-9906ee.o

有人能解释一下发生了什么,我能做些什么来说服我的工具链,让我相信这些功能可以用来构建?

推荐答案

简短回答

使用:

-target x86_64-apple-macos10.15.7

冗长的回答

正如@wileke所建议的那样,看看Xcode做了什么,让我走上了正确的道路.Xcode中的新命令行项目通过了:

-target x86_64-apple-macos10.15

编译时发送到Swift后端,由于@available约束仍然失败,但将其修改为:

-target x86_64-apple-macos10.15.7

按预期工作.

令人恼火的是,在三个版本中使用相应的darwin个版本并不会导致与使用macos个版本相同的行为,但我想这是由于苹果公司只推出了一个基于达尔文的操作系统的时代遗留下来的.现在,一个给定的达尔文版本可能意味着macOS、iOS、tvOS等的不同版本,每个版本都有不同的可用API集.✌️

Swift相关问答推荐

如何根据列表中的项目数量创建多个变量?

Swift concurrency reload/await,支持只执行成功并重试

动画过程中的SwiftUI重绘视图

不能将符合协议的SWIFT类的实例分配给需要该协议的Objective-C属性

如何在SwiftUI的文本视图中显示NSMutableAttributedString?

如何为我的项目设置生命周期选项?

SwiftUI 拖放:如果没有上下文类型,则无法解析对成员‘first’的引用

当将新值推送到 NavigationStack 时,SwiftUI 的 navigationDestination 已在堆栈的早期声明

我如何在 swift 中的 viewdidload 之前进行委托?

子视图未在父视图 SwiftUI 中触发禁用状态更新

Swift Property Wrappers-Initialization 失败并显示无法将‘Double’类型的值转换为预期的参数类型

需要将 json 映射到 Swift 中的模型

如何在 Swift 中对单个单词进行词形还原

我们如何显示关于 UITextField 是 xCode Swift 的建议?

用于 Swift 编码的 iOS 应用程序的 Ffmpeg

macOS 守护进程应该由Command Line ToolXcode 模板制作吗?

What is "SwiftPM.SPMRepositoryError error 5"?

如何实现 Swift 的 Comparable 协议?

Swift - 导入我的 swift 类

UILabel 文本不换行