[SwiftUI]AddInstanceForFactory: No factory registered for id 오류 해결하기
맥북용 어플에서 warning이 발생되었다. 오류 내용은 다음과 같으며, AVAudioPlayer와 연관이 있다.
AddInstanceForFactory: No factory registered for id <CFUUID 0x6xxxxxx0> F8xxxxx-BxE8-1xx6-xx31-xxxxxxxCD46
현재 개발되어 사용중인 코드는 다음과 같다.
import Foundation
import AVKit
class SoundSetting: ObservableObject {
//1. soundSetting의 단일 인스턴스를 만듬
/// singleton ? :
/*싱글 톤은 한 번만 생성 된 다음 사용해야하는 모든 곳에서 공유해야하는 객체입니다 */
static let instance = SoundSetting()
var audioPlayer: AVAudioPlayer?
enum LoopOption: Int {
case Loop = -1 // 무한반복
case OnePlay = 0 // 1회 재생
case TwoPlay = 1 // 2회재생
}
func onPlaySound(sound: SoundOption, loop: LoopOption) {
guard let url = Bundle.main.url(forResource: sound.rawValue, withExtension: ".mp3") else { return }
// guard let url = URL(string: "") else { return }
do {
audioPlayer = try AVAudioPlayer(contentsOf: url)
audioPlayer?.numberOfLoops = loop.rawValue
audioPlayer?.play()
} catch let error {
print("재생하는데 오류가 발생했습니다. \(error.localizedDescription)")
}
}
func onStopSound() {
// print(" : ---> 노래중지 호출됨")
audioPlayer?.stop() // 재생중인 플레이어 정지
}
func onPauseSound() {
audioPlayer?.pause() // 재생중인 플레이어 일시중지
}
}
이 오류는 AVAudioPlayer
가 초기화되면서 발생할 수 있는 문제 중 하나이다. 주로 AVAudioPlayer
와 관련된 리소스를 초기화하거나 접근하는 데 문제가 있을 때 나타난다.
오류 원인은?
- 리소스 파일 경로 문제
Bundle.main.url(forResource:withExtension:)
가 유효하지 않거나, 제공된 파일명이 잘못되었을 가능성이 있다..mp3
파일이 프로젝트에 추가되지 않았거나,Target Membership
설정이 올바르지 않을 수도 있다.
AVAudioPlayer
인스턴스화 문제AVAudioPlayer
가 초기화 중 문제가 발생하면 위와 같은 오류가 나타날 수 있다.- 싱글톤 문제
싱글톤SoundSetting
이 제대로 초기화되지 않았거나, 메모리 관리 문제로 예상치 못한 동작이 발생할 수 있다. - 루프 값 설정 문제
audioPlayer?.numberOfLoops
에 전달된 값이 예상하지 못한 방식으로 동작할 수도 있다. 기본적으로-1
은 무한 루프를 나타내지만, AVAudioPlayer가 이에 대해 예외를 던질 수 있다.
해결 방법
var audioPlayer: AVAudioPlayer? 선언을 var audioPlayer: AVAudioPlayer!로 변경해보아도 오류는 동일하게 발생된다. 두가지 선언 방법 모두 노래는 정상적으로 재생된다.
아래 코드로 로그를 찍어본결과 파일경로가 찍힌다.
if let url = Bundle.main.url(forResource: sound.rawValue, withExtension: "mp3") {
print("파일 경로: \(url)")
} else {
print("리소스 파일을 찾을 수 없습니다.")
}
TextField는 내가 만든 어플에서 사용되지않는다.
해결방법이 없는것인가?
애플 개발자 포럼에도 동일한 오류 관련 글이 올라와 있다.
https://forums.developer.apple.com/forums/thread/698496
[관련자료]