Błąd Swift 5.1: [wtyczka] AddInstanceForFactory: Brak fabrycznej rejestracji dla identyfikatora <CFUUID

14

Aplikacja ulega awarii z następującym komunikatem o błędzie

2019-10-12 20:01:34.332334-0700 Awesome App[26368:3535170] [plugin] AddInstanceForFactory: No factory registered for id <CFUUID 0x600002903280> F8BB1C28-BAE8-11D6-9C31-00039315CD46

Punkt przerwania w chwili awarii wydaje się być związany z AVAudioPlayer

let path = Bundle.main.path(forResource: "menu_background.mp3", ofType:nil)!
audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path)) ---> breakpoint
Amar Kanala
źródło

Odpowiedzi:

1

Znalazłem rozwiązanie w innym wątku overoverflow o AVAudioPlayer, oto:

Jeśli zainicjujesz swoje AVAudioPlayerpolubienie

var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()LUB wrongMusicPlayer = AVAudioPlayer()w jakikolwiek sposób, usuń go i po prostu Deklaruj jak var wrongMusicPlayer: AVAudioPlayer!

Francois
źródło
1
Nie wiem dlaczego .. ale zadziałało .. Dzięki.
Rafaela Lourenço,
9
NIE rozwiązanie, niestety.
Phil
Dodaj link do wymienionych wątków. Dzięki.
HenryRootTwo
1
czy ktoś znalazł rozwiązanie tego problemu? ten sam problem i ta zaakceptowana odpowiedź nie działa dla mnie
alionthego
Dla mnie też nie działa
maddy110989
0

Uważam, że komunikat o błędzie jest ostrzeżeniem dla symulatorów, dlatego nie jest ważny.

Myślę, że twój problem jest błędem w kodzie. Powinno być coś takiego:

let path = Bundle.main.path(forResource: "menu_background", ofType:"mp3") audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path!)) ---> breakpoint

Gdzie forResource to nazwa pliku, a ofType to rozszerzenie. Możesz także użyć pliku Bundle.main.url, który będzie wyglądał następująco:

let path = Bundle.main.url(forResource: "menu_background", withExtension:"mp3") audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path!)) ---> breakpoint

Here2Huynh
źródło
0

Możesz użyć do / catch, aby uniknąć awarii i zbadać wyjątek, lub zignorować problem razem z try?. Dla mnie było to widoczne tylko w symulatorze podczas dzwonienia:

try? AVAudioSession.sharedInstance().setCategory(.playback)

Myślę, że w moim przypadku jest to bezpieczne.

puls4life
źródło
0

Myślę, że wszyscy mogliście dodać AVFoundation do listy ram w zakładce Informacje ogólne projektu.

Błędny kod był następujący:

import SwiftUI
import AVFoundation

struct PlayerDetailView: View {
@State private var downloadedFilePath: URL = nil
var audioPlayer: AVAudioPlayer

var body: some View {

Po przeniesieniu var audioPlayer: AVAudioPlayerdeklaracji na linię tuż po import AVFoundationlinii wydawało się, że działa.

Więc poniższy kod działał dla mnie w SwiftUIprojekcie.

import SwiftUI
import AVFoundation
var audioPlayer: AVAudioPlayer!

struct PlayerDetailView: View {
@State private var downloadedFilePath: URL = nil

var body: some View {
    VStack {
        Button("Play the Downloaded Track") {
            if let downloadedPath = self.downloadedFilePath?.path, FileManager().fileExists(atPath: downloadedPath) {
                do {
                    audioPlayer = try AVAudioPlayer(contentsOf: self.downloadedFilePath!)
                    guard let player = audioPlayer else { return }

                    player.prepareToPlay()
                    player.play()
                } catch let error {
                    print(error.localizedDescription)
                }
            } else {
                print("The file doesn not exist at path || may not have been downloaded yet")
            }
        }
    }
}

}

Początkowo śledziłem ten samouczek CodeWithChris, a jego dyskusja doprowadziła również do powyższych zmian. Również kasaSprawdź poniższy samouczek, jeśli potrzebujesz dalszych przykładów.

Mam nadzieję, że będzie to pomocne dla kogoś z was!

Twoje zdrowie!

Randika Vishman
źródło