SWIFT UI LOTTIE: Поток 1: EXC_BAD_INSTRUCTION (код = EXC_I386_INVOP, субкод = 0x0) - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь реализовать animationView с помощью 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 показывает мне анимацию, и в этом состоянии все в порядке. Я не использую раскадровку, она должна открывать представление и анимацию лотереи внутри.

What I have at this state

Когда я запускаю приложение, приложение вылетает и у менякод этого сообщения: Поток 1: EXC_BAD_INSTRUCTION (код = EXC_I386_INVOP, субкод = 0x0)

enter image description here

Как я понимаю, что-то не инициализировано и возвращаемое значениеявляется нулевым ... Я пытаюсь сделать то же самое, что и в этом уроке: https://www.youtube.com/watch?v=iuEqGyBYaE4

Что не так?

заранее спасибо

1 Ответ

1 голос
/ 08 ноября 2019

Это известная проблема. Вы можете увидеть здесь и здесь

Существует обходной путь, установив для удаления мертвого кода значение no в целевом приложении

DEAD_CODE_STRIPPING = NO

enter image description here

Точно так же вам может понадобиться изменить способ доступа к файлу лотереи из пакета.

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>) {

    }

}
...