Ошибка Swift 5.1: [плагин] AddInstanceForFactory: фабрика не зарегистрирована для идентификатора <CFUUID

15

Приложение вылетает со следующим сообщением об ошибке

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

Кажется, что точка останова при сбое связана с AVAudioPlayer

let path = Bundle.main.path(forResource: "menu_background.mp3", ofType:nil)!
audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path)) ---> breakpoint
Амар Канала
источник

Ответы:

1

Я нашел решение в другом потоке stackoverflow о AVAudioPlayer, вот оно:

Если вы инициализируете свой AVAudioPlayerлайк

var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()ИЛИ wrongMusicPlayer = AVAudioPlayer()в любом методе, пожалуйста, удалите его и просто объявите как var wrongMusicPlayer: AVAudioPlayer!

Francois
источник
1
Я не знаю почему .. но это сработало .. Спасибо.
Рафаэла Лоуренсо
9
НЕ решение, к сожалению.
Фил
Пожалуйста, добавьте ссылку на упомянутые темы. Спасибо.
HenryRootTwo
1
кто-нибудь уже нашел решение этой проблемы? у меня та же проблема, и этот принятый ответ не работает для меня
alionthego
У меня тоже не работает
maddy110989
0

Я считаю, что сообщение об ошибке является предупреждением для симуляторов, поэтому оно не важно.

Я думаю, что ваша проблема - ошибка в вашем коде. Должно быть что-то вроде этого:

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

Где forResource - это имя файла, а ofType - это расширение. Вы также можете использовать Bundle.main.url, который будет выглядеть так:

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

Here2Huynh
источник
0

Вы можете использовать do / catch, чтобы избежать сбоя и изучить исключение, или игнорировать проблему вместе с try?. Для меня это было только в симуляторе при вызове:

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

Я думаю, что это безопасно игнорировать в моем случае.

pulse4life
источник
0

Я полагаю, что вы все могли добавить AVFoundation в список фреймворков на вкладке «Общая информация о проекте».

Ошибочный код был следующим:

import SwiftUI
import AVFoundation

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

var body: some View {

И после того, как я переместил var audioPlayer: AVAudioPlayerдекларацию сразу после строки, import AVFoundationона, казалось, работала.

Поэтому следующий код работал для меня в 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")
            }
        }
    }
}

}

Первоначально я следовал этому руководству CodeWithChris, и его обсуждение также привело к изменению выше. Также проверьте следующее руководство, если вам нужны дополнительные примеры.

Надеюсь, что это будет полезно для кого-то из вас там!

Ура!

Рандика Вишман
источник