Xcode Widget error Failed to show Widget 고치기
최근에 기존에 있던 앱에 기능을 추가해주고 싶어서
위젯 쪽을 해보는데 시뮬레이터에는 돌아가는데 실제 기기에서는 안돌아가는 아름다운(?) 버그가 나서
저와 같은 고통(?)을 겪으시는 분들을 위해 올려봅니다.
일단 제가 본 버그는 아래처럼 생겼습니다.
버그 내용
SendProcessControlEvent:toPid: encountered an error: Error Domain=com.apple.dt.deviceprocesscontrolservice Code=8 "Failed to show Widget 'com.testproject.TestWidget.TTestWiddget' error: Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace)., BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0x870a3aac0 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=1 "Failed to get descriptors for extensionBundleID (com.testproject.TestWidget.TTestWiddget)" UserInfo={NSLocalizedDescription=Failed to get descriptors for extensionBundleID (com.testproject.TestWidget.TTestWiddget)}}, FBSOpenApplicationRequestID=0x7cb6, NSLocalizedDescription=The request to open "com.apple.springboard" failed.}." UserInfo={NSLocalizedDescription=Failed to show Widget 'com.testproject.TestWidget.TTestWiddget' error: Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace)., BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0x870a3aac0 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=1 "Failed to get descriptors for extensionBundleID (com.testproject.TestWidget.TTestWiddget)" UserInfo={NSLocalizedDescription=Failed to get descriptors for extensionBundleID (com.testproject.TestWidget.TTestWiddget)}}, FBSOpenApplicationRequestID=0x7cb6, NSLocalizedDescription=The request to open "com.apple.springboard" failed.}., NSUnderlyingError=0x870aad9a0 {Error Domain=FBSOpenApplicationServiceErrorDomain Code=1 "The request to open "com.apple.springboard" failed." UserInfo={NSLocalizedFailureReason=The request was denied by service delegate (SBMainWorkspace)., BSErrorCodeDescription=RequestDenied, NSUnderlyingError=0x870a3aac0 {Error Domain=SBAvocadoDebuggingControllerErrorDomain Code=1 "Failed to get descriptors for extensionBundleID (com.testproject.TestWidget.TTestWiddget)" UserInfo={NSLocalizedDescription=Failed to get descriptors for extensionBundleID (com.testproject.TestWidget.TTestWiddget)}}, FBSOpenApplicationRequestID=0x7cb6, NSLocalizedDescription=The request to open "com.apple.springboard" failed.}}}
Domain: DTXMessage
Code: 1
User Info: {
DVTErrorCreationDateKey = "2023-04-18 08:18:27 +0000";
}
--
해결 방법
1. 프로젝트 > Targets 에 있는 Widget 클릭 > Build Settings > Deployment > iOS Deployment Target 을 변경해주세요.
-> 저는 테스트 기기 버전을 고려해 16.0 으로 변경했습니다.
2. 빌드 버전에 따라 작동하지 않는 부분이 생길수있습니다. 해당 부분은 주석처리 혹은 버전 처리를 해주세요.
-> 저는 자동으로 생성된 LiveActivity와 관련된 부분을 모두 주석으로 처리했습니다.
3. Edit Scheme.. 를 열어주세요.
4. Run > Arguments > Environment Variables > _XCWidgetKind 칸에 위젯 이름을 적어주세요.
-> 위젯이름은 코드에서 아래처럼 적혀있는 class 의 이름을 적어주시면 됩니다.
struct TTestWiddget: Widget {
let kind: String = "TTestWiddget"
var body: some WidgetConfiguration {
....
....
}
}
3일간의 사투(?) 끝에 저는 이렇게 했더니 해결이 되었습니다.
저와 같은 버그를 겪으시는 분들에게 도움이되길 바라며 올려봅니다.
오늘도 파이팅입니다ㅠ