Erreur Swift 5.1: [plug-in] AddInstanceForFactory: aucune fabrique enregistrée pour l'ID <CFUUID

15

L'application se bloque avec le message d'erreur suivant

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

Le point d'arrêt au crash semble être lié à AVAudioPlayer

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

Réponses:

1

J'ai trouvé la solution dans un autre thread stackoverflow sur AVAudioPlayer, le voici:

Si vous initialisez votre AVAudioPlayercomme

var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()OU wrongMusicPlayer = AVAudioPlayer()dans n'importe quelle méthode, veuillez le supprimer et simplement déclarer comme var wrongMusicPlayer: AVAudioPlayer!.

François
la source
1
Je ne sais pas pourquoi .. mais ça a fonctionné .. Merci.
Rafaela Lourenço
9
PAS la solution, malheureusement.
Phil
Veuillez ajouter un lien vers les fils de discussion mentionnés. THX.
HenryRootTwo
1
quelqu'un a-t-il déjà trouvé une solution à cela? ayant le même problème et cette réponse acceptée ne fonctionne pas pour moi
alionthego
Ne fonctionne pas aussi pour moi
maddy110989
0

Je crois que le message d'erreur est un avertissement pour les simulateurs, il n'est donc pas important.

Je pense que votre problème est un bug dans votre code. Devrait être quelque chose comme ça:

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

forResource est le nom du fichier et ofType est l'extension. Vous pouvez également utiliser Bundle.main.url qui ressemblera à ceci:

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

Here2Huynh
la source
0

Vous pouvez utiliser do / catch pour éviter le plantage et examiner l'exception, ou ignorer le problème avec try?. Pour moi, cela n'apparaissait que dans le simulateur lors de l'appel:

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

Je pense qu'il est prudent de l'ignorer dans mon cas.

pulse4life
la source
0

Je pense que vous avez peut-être tous ajouté AVFoundation à la liste des cadres dans l'onglet Informations générales sur le projet.

Le code erroné était le suivant:

import SwiftUI
import AVFoundation

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

var body: some View {

Et après avoir déplacé la var audioPlayer: AVAudioPlayerdéclaration juste après la ligne import AVFoundation, elle semblait fonctionner.

Le code suivant a donc fonctionné pour moi dans un SwiftUIprojet.

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

}

Je suivais initialement ce tutoriel de CodeWithChris et sa discussion a également conduit au changement ci-dessus. Consultez également le didacticiel suivant si vous avez besoin d'autres exemples.

J'espère que cela sera utile à quelqu'un d'entre vous!

À votre santé!

Randika Vishman
la source