web-dev-qa-db-fra.com

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

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

14
Amar Kanala

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

Si vous initialisez votre AVAudioPlayer comme

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

0
Francois

Je pense que vous avez peut-être tous ajouté AVFoundation à la liste des cadres dans l'onglet Informations générales du 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é le var audioPlayer: AVAudioPlayer déclaration juste après la ligne de import AVFoundation ligne, il semblait fonctionner.

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

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. Vérifiez également suivant le tutoriel aussi si vous avez besoin d'autres exemples.

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

À votre santé!

0
Randika Vishman

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.

0
pulse4life

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

0
Here2Huynh