Xcode Trace/BPT 陷阱:5
Xcode Trace/BPT trap: 5
情况
你好,
我正在开发一个 iOS 应用程序,在构建我的项目时,我 运行 出现以下错误消息:
错误:Trace/BPT 陷阱:5
我没有在网上找到任何解决此问题的方法,所以我想知道这里是否有人可以提供帮助。
我也遇到了 Cocoapods 和我的 Silicon Mac 的问题,所以我想列出我尝试修复的步骤:
设置
- M1 Mac图书专业版,macOS 11.1
- XCode 版本 12.4
- Cocoapods with Pods for Firebase Swift、Auth、Firestore 和 Storage
我尝试修复的步骤
- cmd + shift + k 清理构建文件夹
- 关闭 XCode 并使用 Rosetta 打开终端
- 删除 ~/Library/Developer/Xcode/Derived 数据 - 文件夹
- pod 在项目目录中解体
- 删除Podfile.lock、app.xcworkspace、Pods目录
- 吊舱安装
- 在应用程序和 pods 项目中构建设置,将任何 iOS 模拟器 SDK 的排除架构设置为 arm64
- 将仅构建活动架构设置为是
- 将 Pods 项目转换为 Swift 5
- 构建Pods项目
- 构建应用项目
然后出现如下错误:
日志
来自 Merge swiftmodule 的日志实体 (x86_64):
https://pastebin.com/MiSKGxB7
(日志太长,超过字符限制)。
代码
正如某处的错误所说,它是在尝试序列化 class BaseViewModel 时发生的,这是我编写的包含 class 的 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 编译错误。
如果他们说的是特定的 class,则意味着 xcode 无法编译您的代码,您应该删除代码并尝试逐行编译。
我知道这很奇怪,看起来像是编程 PHP 和刷新网页,但我确信此类错误可能与平台迁移有关。
在我的情况下,我有一个 class 没问题,我开始重构,而不是 xcode 向我显示编译错误,它给出了这个神秘的 BPT5,在阅读里面的描述时在 IDE 中,我发现我的 class 是根本原因。
只需删除所有更改过的代码,然后尝试重新编译...
抱歉更新晚了。但就我而言,一般是 CocoaPods 或当时与 Apple Silicon 不兼容的 Firebase Pods。
我只是在使用 Swift 包管理器,并且它起作用了。
不过我不知道问题是否仍然存在,因为我没有在 M1 MacBook 上构建另一个应用程序。
情况
你好, 我正在开发一个 iOS 应用程序,在构建我的项目时,我 运行 出现以下错误消息: 错误:Trace/BPT 陷阱:5
我没有在网上找到任何解决此问题的方法,所以我想知道这里是否有人可以提供帮助。 我也遇到了 Cocoapods 和我的 Silicon Mac 的问题,所以我想列出我尝试修复的步骤:
设置
- M1 Mac图书专业版,macOS 11.1
- XCode 版本 12.4
- Cocoapods with Pods for Firebase Swift、Auth、Firestore 和 Storage
我尝试修复的步骤
- cmd + shift + k 清理构建文件夹
- 关闭 XCode 并使用 Rosetta 打开终端
- 删除 ~/Library/Developer/Xcode/Derived 数据 - 文件夹
- pod 在项目目录中解体
- 删除Podfile.lock、app.xcworkspace、Pods目录
- 吊舱安装
- 在应用程序和 pods 项目中构建设置,将任何 iOS 模拟器 SDK 的排除架构设置为 arm64
- 将仅构建活动架构设置为是
- 将 Pods 项目转换为 Swift 5
- 构建Pods项目
- 构建应用项目
然后出现如下错误:
日志
来自 Merge swiftmodule 的日志实体 (x86_64): https://pastebin.com/MiSKGxB7 (日志太长,超过字符限制)。
代码
正如某处的错误所说,它是在尝试序列化 class BaseViewModel 时发生的,这是我编写的包含 class 的 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 编译错误。
如果他们说的是特定的 class,则意味着 xcode 无法编译您的代码,您应该删除代码并尝试逐行编译。 我知道这很奇怪,看起来像是编程 PHP 和刷新网页,但我确信此类错误可能与平台迁移有关。
在我的情况下,我有一个 class 没问题,我开始重构,而不是 xcode 向我显示编译错误,它给出了这个神秘的 BPT5,在阅读里面的描述时在 IDE 中,我发现我的 class 是根本原因。
只需删除所有更改过的代码,然后尝试重新编译...
抱歉更新晚了。但就我而言,一般是 CocoaPods 或当时与 Apple Silicon 不兼容的 Firebase Pods。
我只是在使用 Swift 包管理器,并且它起作用了。
不过我不知道问题是否仍然存在,因为我没有在 M1 MacBook 上构建另一个应用程序。