SWIFT UI LOTTIE:线程 1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

SWIFT UI LOTTIE : Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

我正在尝试使用 Lottie 和 SwiftUI 实现动画视图。

这是我的代码:

import SwiftUI
import Lottie

struct ContentView: View {
var body: some View {
    
    AnimationsView()
    }
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
    ContentView()
}
}
struct AnimationsView : UIViewRepresentable {

func makeUIView(context: UIViewRepresentableContext<AnimationsView>) -> 
AnimationView {
   let aniView = AnimationView()
    let animation = Animation.named("Switch", subdirectory: "TestAnimations")
    aniView.animation = animation
    aniView.play()
    return aniView
    }
func updateUIView(_ uiView: AnimationView, context: 
UIViewRepresentableContext<AnimationsView>) {

    }
}

我已将 Lottie 的最新版本添加为 Swift 包依赖项。 SwiftUI 中的预览显示动画,在此状态下一切正常。我没有使用情节提要它应该打开视图和里面的 lottie 动画。

当我 运行 应用程序时,应用程序崩溃并且我有此消息代码:线程 1:EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)

据我所知,有些东西没有初始化,return 值为 null ...我正在尝试做与本教程中相同的事情:https://www.youtube.com/watch?v=iuEqGyBYaE4

怎么了?

这是一个已知问题。可以看到here and here

有一个变通方法,就是在应用的目标中将死代码剥离设置为 no

DEAD_CODE_STRIPPING = NO

同样,您可能还需要更改从捆绑包访问 lottie 文件的方式。

struct AnimationsView: UIViewRepresentable {

    func makeUIView(context: UIViewRepresentableContext<AnimationsView>) -> AnimationView {
        let aniView = AnimationView()
        // its always a good idea to check that the file exists and throw an error if it doesn't. 
        guard let animation = Animation.named("Switch", bundle: .main) else {
            fatalError("Couldn't load animation")
        }
        aniView.animation = animation
        aniView.loopMode = .repeat(10.0)
        return aniView
    }

    func updateUIView(_ uiView: AnimationsView.UIViewType, context: UIViewRepresentableContext<AnimationsView>) {

    }

}