SwiftData 应用程序仅在通过 TestFlight 部署时才会崩溃

问题描述 投票:0回答:1

这个 SwiftData 问题让我难住了。我的应用程序在通过电缆上传时工作正常,但当通过 TestFlight 部署时,它在尝试首次获取数据时启动时立即崩溃。

这是崩溃报告的屏幕截图......

我已尝试以下方法来解决该问题:

  1. 针对
    Debug
    Release
    禁用 Swift Compiler - Code Generation 配置为 No Optimization
  2. 我尝试从
    fetch
    修饰符而不是
    task()
     调用 
    onAppear()
  3. 我在通过 TestFlight 重新安装之前从设备中删除了该应用程序
  4. 我在不同的设备上使用不同的 iCloud 帐户进行了尝试。

这是在 ViewModel 中调用

fetch()
的代码。

func refresh(_ ctx: ModelContext) {
    records.removeAll()
    
    let wRecs: [WeightRecord] = fetchAll(ctx)
    records.append(contentsOf: wRecs)
    
    let bpRecs: [BloodPressureRecord] = fetchAll(ctx)
    records.append(contentsOf: bpRecs)
    
    let mdRecs: [MedicationTakenRecord] = fetchAll(ctx)
    records.append(contentsOf: mdRecs)
    
    let bmRecs: [BowelMovementRecord] = fetchAll(ctx)
    records.append(contentsOf: bmRecs)
    
    let seRecs: [SideEffectRecord] = fetchAll(ctx)
    records.append(contentsOf: seRecs)
    
    let fdRecs: [FoodConsumedRecord] = fetchAll(ctx)
    records.append(contentsOf: fdRecs)
    
    let pmpRecs: [PumpChangeRecord] = fetchAll(ctx)
    records.append(contentsOf: pmpRecs)
    
    records.sort { lRec, rRec in
        lRec.recordedOn < rRec.recordedOn
    }
}

func fetchAll<R: PersistentModel & Record>(_ ctx: ModelContext) -> [R] {
    let fetchDescriptor = FetchDescriptor<R>(
        sortBy: [SortDescriptor(\.recordedOn)]
    )
    
    return (try? ctx.fetch(fetchDescriptor)) ?? []
}

有什么想法我可能做错了什么吗?

swift swiftui ios17 swift-data
1个回答
0
投票

我也有同样的问题。一切正常,直到应用程序发布到 TestFlight。当我在 Xcode 应用程序方案中将应用程序置于发布模式时,我注意到同样的崩溃。

问题是我在模型中隐式展开了可选值 - 因为 SwiftData 与 iCloud 同步要求所有属性都是可选值或具有默认值。 这似乎导致 FetchDescriptor 在调用 Fetch 时强制打开属性并崩溃。 这在调试中没有引起任何问题,但在发布中崩溃了。

将我的属性更改为选项解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.