如何解决Xcode 跟踪/BPT 陷阱:5
情况
你好, 我正在开发一个 iOS 应用程序,在构建我的项目时,我遇到了以下错误消息: 错误:跟踪/BPT 陷阱:5
我没有在网上找到任何解决此问题的方法,所以我想知道这里是否有人可以提供帮助。 我也遇到了 Cocoapods 和我的 Silicon Mac 的问题,所以我想列出我尝试修复的步骤:
设置
- M1 MacBook Pro,macOS 11.1
- XCode 12.4 版
- 带有用于 Firebase Swift、Auth、Firestore 和 Storage 的 Pods 的 Cocoapods
我尝试修复的步骤
- cmd + shift + k 用于清理构建文件夹
- 使用 Rosetta 关闭 XCode 并打开终端
- 删除 ~/Library/Developer/Xcode/Derived Data - 文件夹
- pod 在项目目录中解体
- 删除Podfile.lock、app.xcworkspace、Pods目录
- pod 安装
- 在 app 和 pods 项目构建设置中,将任何 iOS 模拟器 SDK 的排除架构设置为 arm64
- 将仅构建活动架构设置为是
- 将 Pods 项目转换为 Swift 5
- 构建 Pod 项目
- 构建应用项目
然后出现如下错误:
日志
来自 Merge swiftmodule (x86_64) 的日志条目: https://pastebin.com/MiSKGxB7 (日志方式要长,超过字符限制)。
代码
正如某处的错误所说,它是在尝试序列化 Baseviewmodel 类时发生的,这是我编写的包含该类的 Base.swift 文件中的代码:
import SwiftUI
import Firebase
import FirebaseFirestore
import Combine
protocol BaseModel: Identifiable,Codable {
var id: String? { get set }
var collection: String { get }
init()
}
class Baseviewmodel<T: BaseModel>: ObservableObject,Identifiable,Equatable {
@Published var model: T
var id: String {
didSet {
self.model.id = id
}
}
var cancellables = [AnyCancellable]()
private var db = Firestore.firestore()
required init(){
let model = T.init()
self.model = model
self.id = model.id ?? UUID().uuidString
}
required init(id: String) {
var model = T.init()
model.id = id
self.model = model
self.id = id
}
init(model: T) {
self.model = model
self.id = model.id ?? UUID().uuidString
}
static func ==(lhs: Baseviewmodel<T>,rhs: Baseviewmodel<T>) -> Bool {
lhs.model.id == rhs.model.id
}
func load(completion: @escaping (Bool) -> Void = {finished in}){
if let id = model.id {
self.id = id
db.collection(model.collection).document(id).getDocument { docSnapshot,error in
guard let doc = docSnapshot else {
print("Error fetching document: \(error!)")
return
}
do {
guard let data = try doc.data(as: T.self) else {
print("Document empty \(type(of: self.model)) with id \(id)")
return
}
self.model = data
self.loadSubData {finished in
if finished{
completion(true)
}
}
} catch {
print(error.localizedDescription)
}
}
}
}
func loadSubData(completion: @escaping(Bool) -> Void = {finished in}) {
fatalError("Must be overridden!")
}
func loadDataByIDs<T,S>(from list: [String],appender: @escaping (T) -> Void) where T: Baseviewmodel<S>,S: BaseModel {
for id in list {
let viewmodel = T.init(id: id)
viewmodel.load{finished in
if finished {
appender(viewmodel)
}
}
}
}
func save(){
do {
let _ = try db.collection(model.collection).addDocument(from: model)
} catch {
print(error)
}
}
func update(){
if let id = model.id {
do {
try db.collection(model.collection).document(id).setData(from: model)
} catch {
print(error.localizedDescription)
}
}
}
func delete(){
if let id = model.id {
db.collection(model.collection).document(id).delete() { error in
if let error = error {
print(error.localizedDescription)
}
}
}
}
}
解决方法
我遇到了同样的问题,更新 Quick/Nimble 后解决了。 我猜一些带有 x86 文件的 pod 项目需要更新以支持 M1
,作为记录,任何在 M1 上遇到这些奇怪错误的人都必须准确阅读 excode 编译错误。
如果他们说的是特定的类,则意味着 xcode 无法编译您的代码,您应该删除代码并尝试逐行编译。 我知道这很奇怪,看起来像编写 PHP 和刷新网页,但我确定这种类型的错误可能与平台迁移有关。
在我的情况下,我有一个很好的类,我开始重构,而不是 xcode 向我显示编译错误,它给出了这个神秘的 BPT5,在准确阅读 IDE 内部的描述时,我可以发现我的类是根本原因。
只需删除所有更改的代码,然后再次尝试编译...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。