Swift 5.1 Error: [plugin] AddInstanceForFactory: No factory registered for id <CFUUID
Swift 5.1 Error: [plugin] AddInstanceForFactory: No factory registered for id <CFUUID
应用程序崩溃并显示以下错误消息
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
crash的断点好像和AVAudioPlayer有关
let path = Bundle.main.path(forResource: "menu_background.mp3", ofType:nil)!
audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path)) ---> breakpoint
我在另一个关于 AVAudioPlayer 的 Whosebug 线程中找到了解决方案,这里是:
如果您将 AVAudioPlayer
初始化为
var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()
或 wrongMusicPlayer = AVAudioPlayer()
在任何方法中然后请删除它并像 var wrongMusicPlayer: AVAudioPlayer
!.
一样声明
我认为错误消息是对模拟器的警告,因此并不重要。
我认为您的问题是代码中的错误。应该是这样的:
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
您可以使用 do/catch 来避免崩溃并检查异常,或者与 try?
一起忽略该问题。对我来说,这只是在调用时出现在模拟器中:
try? AVAudioSession.sharedInstance().setCategory(.playback)
我认为在我的情况下忽略它是安全的。
我相信你们都可能已将 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 and its discussion also led to above change. Also checkout following tutorial 的教程。
希望这对你们中的某些人有所帮助!
干杯!
我认为这与 AVAudioPlayer 在模拟器设备能够排队并播放声音之前超出范围有关......或类似的东西。我是 Swift 的新手,我对 iOS API 的经验为零。
这是我在尝试放置后发现的:
var player: AVAudioPlayer!
根据上面线条的位置,声音将播放或不播放。
无论如何,我的模拟器设备总是会出现以下错误:
AddInstanceForFactory: No factory registered for id
(I'm on a Late 2013 MacBook Pro + MacOS Catalina + Xcode 11.7 and I tested this on an iPhone SE 2 simulator running iOS 13.7)
虽然错误不断发生,但我很高兴我至少可以在模拟器上播放声音...
出现错误,无法播放声音...
import UIKit
import AVFoundation
class ViewController: UIViewController {
func playTheSound() {
// initializing the "player" variable within the "playTheSound()" function will cause the "AddInstanceForFactory: No factory registered for id" error and the sound WILL NOT play on the simulator
var player: AVAudioPlayer!
let url = Bundle.main.url(forResource: "funny_sound", withExtension: "mp3")
player = try! AVAudioPlayer(contentsOf: url!)
player.play()
}
}
出现错误,声音正常播放
import UIKit
import AVFoundation
class ViewController: UIViewController {
// initializing the "player" variable at the class level will still cause the "AddInstanceForFactory: No factory registered for id" error to happen, but the sound will still play on the simulator
var player: AVAudioPlayer!
func playTheSound() {
let url = Bundle.main.url(forResource: "funny_sound", withExtension: "mp3")
player = try! AVAudioPlayer(contentsOf: url!)
player.play()
}
}
类似问题 - 使用首选项 > 声音 > 输出不同于 Logictech USB 耳机导致应用程序执行完美并播放声音 w/o 问题。在模拟器之外从来都不是问题 - 设备上的代码运行良好。
长话短说;博士
这是一个特别棘手和迟钝的问题。我还遇到了一个意想不到的问题:
没有工厂注册 id
稍等片刻后,还出现了其他几个控制台报告的错误,包括:
HALC_ProxyIOContext::IOWorkLoop:服务器启动失败,错误:
AQMEIO.cpp:182:AwaitIOCycle: 15.000 秒后超时
CA_UISoundClient.cpp:244:StartPlaying_block_invoke: CA_UISoundClientBase::StartPlaying: AddRunningClient 失败
尝试播放声音时出错。 Xcode 12.2,Mac OSX Catalina 10.15.7,模拟器 运行 iOS 14.2。
代码以前曾在模拟器的早期版本上运行过。
始终正确导入 AVFoundation 并声明 AVAudioPlayer class 属性 为:
var audioPlayer: AVAudioPlayer!
就我而言,它似乎与 Mac OSX 中的音频驱动程序有关。这个问题只发生在我将 Mac 系统偏好设置 > 声音 > 输出设置为我的 Logitech USB 耳机时。代码在以下情况下有效:通过我的 LG 显示器播放,通过我的 AirPods Pro 播放,以及在模拟器外和设备上执行时 > 我的 iPhone 11 Pro.
在重新启动之前花了一个多小时尝试诊断问题,并注意到当耳机未用于输出时音频正常工作。将“首选项”>“声音”>“输出”设置切换为 Logitech USB 耳机以外的设置可立即解决所有其他播放实例中的问题。
甚至不确定将此问题作为 Apple 错误提交到何处,但希望它对某人有所帮助。我假设这是一个 OS 特定问题,而不是会导致 w/the 应用程序或代码出现问题的问题。
在我的情况下完全不同...
问题在执行...后解决了...
var player = AVAudioPlayer()
它没用在...
var player:AVAudioPlayer!
(Xcode 12.2)
我在 Here2Huynh 的回答中找到了解决方案。
let path = Bundle.main.path(forResource: "menu_background.mp3", ofType:nil)!
此处更改
ofType:nil
到
ofType: "mp3"
然后again.There就是使用模拟器没有报错
对了,我用的是swiftui项目
我想我已经解决了这个问题(很难证明是否定的,因为错误是零星的)。我在单独的 class:
中有我的 AVAudioPlayer
import SwiftUI
import AVFoundation
var audioPlayer: AVAudioPlayer?
class AudioManager {
var userSettings = UserSettings()
func playSoundEffect(_ assetName:String) {
if !userSettings.soundDisabled {
guard let audioData = NSDataAsset(name: assetName)?.data else {
fatalError("Unable to find asset \(assetName)")
}
do {
audioPlayer = try AVAudioPlayer(data: audioData)
audioPlayer?.prepareToPlay()
audioPlayer?.play()
} catch {
print(error.localizedDescription)
}
}
// audioPlayer?.stop()
}
func stopPlay() {
audioPlayer?.setVolume(0.0, fadeDuration: 0.25)
}
}
然后,在我需要播放音频的SwiftUI视图中,一定要import AVFoundation
。
import SwiftUI
import AVFoundation
struct MyView: View {
...
let audioManager = AudioManager()
...
}
应用程序崩溃并显示以下错误消息
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
crash的断点好像和AVAudioPlayer有关
let path = Bundle.main.path(forResource: "menu_background.mp3", ofType:nil)!
audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path)) ---> breakpoint
我在另一个关于 AVAudioPlayer 的 Whosebug 线程中找到了解决方案,这里是:
如果您将 AVAudioPlayer
初始化为
var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()
或 wrongMusicPlayer = AVAudioPlayer()
在任何方法中然后请删除它并像 var wrongMusicPlayer: AVAudioPlayer
!.
我认为错误消息是对模拟器的警告,因此并不重要。
我认为您的问题是代码中的错误。应该是这样的:
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
您可以使用 do/catch 来避免崩溃并检查异常,或者与 try?
一起忽略该问题。对我来说,这只是在调用时出现在模拟器中:
try? AVAudioSession.sharedInstance().setCategory(.playback)
我认为在我的情况下忽略它是安全的。
我相信你们都可能已将 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 and its discussion also led to above change. Also checkout following tutorial 的教程。
希望这对你们中的某些人有所帮助!
干杯!
我认为这与 AVAudioPlayer 在模拟器设备能够排队并播放声音之前超出范围有关......或类似的东西。我是 Swift 的新手,我对 iOS API 的经验为零。
这是我在尝试放置后发现的:
var player: AVAudioPlayer!
根据上面线条的位置,声音将播放或不播放。
无论如何,我的模拟器设备总是会出现以下错误:
AddInstanceForFactory: No factory registered for id
(I'm on a Late 2013 MacBook Pro + MacOS Catalina + Xcode 11.7 and I tested this on an iPhone SE 2 simulator running iOS 13.7)
虽然错误不断发生,但我很高兴我至少可以在模拟器上播放声音...
出现错误,无法播放声音...
import UIKit
import AVFoundation
class ViewController: UIViewController {
func playTheSound() {
// initializing the "player" variable within the "playTheSound()" function will cause the "AddInstanceForFactory: No factory registered for id" error and the sound WILL NOT play on the simulator
var player: AVAudioPlayer!
let url = Bundle.main.url(forResource: "funny_sound", withExtension: "mp3")
player = try! AVAudioPlayer(contentsOf: url!)
player.play()
}
}
出现错误,声音正常播放
import UIKit
import AVFoundation
class ViewController: UIViewController {
// initializing the "player" variable at the class level will still cause the "AddInstanceForFactory: No factory registered for id" error to happen, but the sound will still play on the simulator
var player: AVAudioPlayer!
func playTheSound() {
let url = Bundle.main.url(forResource: "funny_sound", withExtension: "mp3")
player = try! AVAudioPlayer(contentsOf: url!)
player.play()
}
}
类似问题 - 使用首选项 > 声音 > 输出不同于 Logictech USB 耳机导致应用程序执行完美并播放声音 w/o 问题。在模拟器之外从来都不是问题 - 设备上的代码运行良好。
长话短说;博士 这是一个特别棘手和迟钝的问题。我还遇到了一个意想不到的问题: 没有工厂注册 id
稍等片刻后,还出现了其他几个控制台报告的错误,包括: HALC_ProxyIOContext::IOWorkLoop:服务器启动失败,错误: AQMEIO.cpp:182:AwaitIOCycle: 15.000 秒后超时 CA_UISoundClient.cpp:244:StartPlaying_block_invoke: CA_UISoundClientBase::StartPlaying: AddRunningClient 失败
尝试播放声音时出错。 Xcode 12.2,Mac OSX Catalina 10.15.7,模拟器 运行 iOS 14.2。 代码以前曾在模拟器的早期版本上运行过。 始终正确导入 AVFoundation 并声明 AVAudioPlayer class 属性 为: var audioPlayer: AVAudioPlayer!
就我而言,它似乎与 Mac OSX 中的音频驱动程序有关。这个问题只发生在我将 Mac 系统偏好设置 > 声音 > 输出设置为我的 Logitech USB 耳机时。代码在以下情况下有效:通过我的 LG 显示器播放,通过我的 AirPods Pro 播放,以及在模拟器外和设备上执行时 > 我的 iPhone 11 Pro.
在重新启动之前花了一个多小时尝试诊断问题,并注意到当耳机未用于输出时音频正常工作。将“首选项”>“声音”>“输出”设置切换为 Logitech USB 耳机以外的设置可立即解决所有其他播放实例中的问题。
甚至不确定将此问题作为 Apple 错误提交到何处,但希望它对某人有所帮助。我假设这是一个 OS 特定问题,而不是会导致 w/the 应用程序或代码出现问题的问题。
在我的情况下完全不同...
问题在执行...后解决了... var player = AVAudioPlayer()
它没用在... var player:AVAudioPlayer!
(Xcode 12.2)
我在 Here2Huynh 的回答中找到了解决方案。
let path = Bundle.main.path(forResource: "menu_background.mp3", ofType:nil)!
此处更改
ofType:nil
到
ofType: "mp3"
然后again.There就是使用模拟器没有报错
对了,我用的是swiftui项目
我想我已经解决了这个问题(很难证明是否定的,因为错误是零星的)。我在单独的 class:
中有我的 AVAudioPlayerimport SwiftUI
import AVFoundation
var audioPlayer: AVAudioPlayer?
class AudioManager {
var userSettings = UserSettings()
func playSoundEffect(_ assetName:String) {
if !userSettings.soundDisabled {
guard let audioData = NSDataAsset(name: assetName)?.data else {
fatalError("Unable to find asset \(assetName)")
}
do {
audioPlayer = try AVAudioPlayer(data: audioData)
audioPlayer?.prepareToPlay()
audioPlayer?.play()
} catch {
print(error.localizedDescription)
}
}
// audioPlayer?.stop()
}
func stopPlay() {
audioPlayer?.setVolume(0.0, fadeDuration: 0.25)
}
}
然后,在我需要播放音频的SwiftUI视图中,一定要import AVFoundation
。
import SwiftUI
import AVFoundation
struct MyView: View {
...
let audioManager = AudioManager()
...
}