Erro Swift 5.1: [plugin] AddInstanceForFactory: Nenhuma fábrica registrada para o ID <CFUUID

15

O aplicativo falha com a seguinte mensagem de erro

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

O ponto de interrupção na falha parece estar relacionado ao AVAudioPlayer

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

Respostas:

1

Encontrei a solução em outro thread de stackoverflow sobre o AVAudioPlayer, aqui está:

Se você inicializar seu AVAudioPlayerlike

var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()OU wrongMusicPlayer = AVAudioPlayer()em qualquer método, remova-o e declare como var wrongMusicPlayer: AVAudioPlayer!

François
fonte
11
Eu não sei por que .. mas funcionou .. Obrigado.
Rafaela Lourenço
9
NÃO é a solução, infelizmente.
Phil
Por favor, adicione um link para os tópicos referidos. Valeu.
HenryRootTwo
11
Alguém já encontrou uma solução para isso? tendo o mesmo problema e esta resposta aceita não funciona para mim
alionthego 27/01
Não funciona para mim também
maddy110989
0

Acredito que a mensagem de erro seja um aviso para os simuladores, portanto, não é importante.

Acho que seu problema é um bug no seu código. Deve ser algo como isto:

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

Onde forResource é o nome do arquivo e ofType é a extensão. Você também pode usar o Bundle.main.url, que ficará assim:

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

Here2Huynh
fonte
0

Você pode usar do / catch para evitar a falha e examinar a exceção ou ignorar o problema try?. Para mim, isso só estava aparecendo no simulador ao chamar:

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

Eu acho que é seguro ignorá-lo no meu caso.

pulse4life
fonte
0

Acredito que todos vocês podem ter adicionado o AVFoundation à lista de estruturas na guia Informações gerais do projeto.

Código incorreto foi o seguinte:

import SwiftUI
import AVFoundation

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

var body: some View {

E depois que mudei a var audioPlayer: AVAudioPlayerdeclaração para logo após a linha import AVFoundation, ela parecia estar funcionando.

Então, o código a seguir funcionou para mim em um SwiftUIprojeto.

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")
            }
        }
    }
}

}

Eu estava inicialmente seguindo este tutorial do CodeWithChris e sua discussão também levou às mudanças acima. Verifique também o tutorial a seguir, se precisar de mais exemplos.

Espero que isso seja útil para alguém lá fora!

Felicidades!

Randika Vishman
fonte