gpt4 book ai didi

ios - 模块 'Builtin' 没有名为 convertUnownedUnsafeToGuaranteed 的成员

转载 作者:行者123 更新时间:2023-12-05 07:01:00 24 4
gpt4 key购买 nike

昨天我的 Mac 决定将 Xcode 11 自动更新到 12,但是哎呀,我仍然需要 Xcode 11。所以我直接从 https://developer.apple.com/download/more/ 安装了 11.7 .

现在我所有的项目都无法构建并出现错误 module 'Builtin' has no member named convertUnownedUnsafeToGuaranteed。它总是在编译某些框架(例如 Alamofire)时出现,但它在每个项目中都是不同的框架。这些项目都设置为使用 Swift 5。

我重新安装了 Xcode 12 命令行工具,但没有帮助。我尝试安装 Xcode 11 命令行工具,但安装程序告诉我我的操作系统太新(我使用的是 Big Sur 20A5374g)。

xcode-switch'ing 从一个到另一个没有帮助。任何数量的项目清理/删除构建文件夹也没有。

Google 说我是唯一遇到这种情况的人。还有谁?想法?

最佳答案

我不完全理解发生此错误时发生的内部问题,但我已找到在我的本地系统上解决它的方法。 (Mojave,Xcode 11.7)我的特殊问题是我插入了 iOS 14 SDK 代替了 Xcode 11.7 最初附带的 iOS 13 SDK。它只会在尝试构建任何快速代码时给我带来问题。 (我个人尽量避免像瘟疫一样)

我最终编写了一个脚本,在我的 iOS 14 和 iOS 13 SDK 文件夹之间来回切换以暂时“解决”这个问题,但从进一步调查来看,这似乎是我一直怀疑的:需要更新swift 工具链(ABI 稳定性就这么多,嗯?)

https://forums.swift.org/t/error-abort-trap-6-when-compiling-using-xcode-12-beta-12a6159-with-swift-5-2-4-release-toolchain/37942

较新版本的 Xcode 附带的 swift 工具链必须将此功能添加到“内置”(如上面链接中提到的类似)

我还没有尝试安装任何通过 swift 5.0 工具链的东西,但我认为尝试安装一个更新的工具链可能会更适本地缓解这个问题。

编辑:经过进一步调查,安装这些工具链不会让您构建到设备,但是,如果您准备好亲力亲为(如果这曾经再次发生,或发生在其他任何人身上)

如果您在文本编辑器中打开以下文件(我是在 vim 中打开的)/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/swift/Swift.swiftmodule/arm64-apple-ios.swiftinterface

并搜索“convertUnownedUnsafeToGuaranteed”,您应该会遇到此功能:

  @inlinable @_transparent public func _withUnsafeGuaranteedRef<Result>(_ body: (Instance) throws -> Result) rethrows -> Result {
var tmp = self
// Builtin.convertUnownedUnsafeToGuaranteed expects to have a base value
// that the +0 value depends on. In this case, we are assuming that is done
// for us opaquely already. So, the builtin will emit a mark_dependence on a
// trivial object. The optimizer knows to eliminate that so we do not have
// any overhead from this.
let fakeBase: Int? = nil
return try body(Builtin.convertUnownedUnsafeToGuaranteed(fakeBase,
&tmp._value))
}

您可以使用标准/* */将其注释掉,然后将其放在原位,它/应该/会通过该错误。

@inlinable public func _withUnsafeGuaranteedRef<Result>(_ body: (Instance) throws -> Result) rethrows -> Result {
let (guaranteedInstance, token) = Builtin.unsafeGuaranteed(_value)
let result = try body(guaranteedInstance)
Builtin.unsafeGuaranteedEnd(token)
return result
}

如果你想知道我在哪里找到这个函数,它在同一文件的 iOS 13.x SDK 版本中。位于:(如果你在任何地方安装了带有 iOS 13 SDK 的 XCode)/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/swift/Swift.swiftmodule/arm64.swiftinterface

如果您想查看正在构建的 iOS SDK 的确切路径,使用 xcrun 会非常有帮助:

xcrun --sdk iphoneos --show-sdk-path

产量:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk

据推测,您需要针对任何其他目标架构(即 arm64e-apple-ios.swiftinterface)等重复这些步骤。

关于ios - 模块 'Builtin' 没有名为 convertUnownedUnsafeToGuaranteed 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63957673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com