요청된 (systemMedium) 위젯 패밀리는 현재 위젯 종류에서 지원하지 않습니다.


WidgetKit을 사용하여 위젯 기능을 구현하던 중 마주한 오류다. 시뮬레이터 혹은 실기기를  통해 빌드할 때 테스트하는 환경(scheme)에서 위젯이 지원하지 않는 크기(widget Family)가 요청될 경우 발생하는 오류다. 위젯 관련 기능을 처음 만들다보니 한참을 헤맸다. 

 

struct weatherFitWidget: Widget {
    let kind: String = "WeatherFitWidget"

    var body: some WidgetConfiguration {
        AppIntentConfiguration(kind: kind, intent: ConfigurationAppIntent.self, provider: Provider()) { entry in
            weatherFitWidgetEntryView(entry: entry)
                .containerBackground(.fill.tertiary, for: .widget)
        }
        .contentMarginsDisabled()
        .configurationDisplayName("추천 옷차림")
        .description("현재 기온에 맞는 옷차림을 추천합니다.")
        .supportedFamilies([.systemSmall]) //위젯이 지원하는 크기 종류
    }
}

위젯에는 Small, Medium, Large 크기의 widgetFamily가 있다.

 

마지막 라인의 supportedFamilies() 함수를 통해 지원하는 위젯의 크기를 정해줄 수 있는데, 본인은 작은 사이즈의 위젯만 우선적으로 서비스할 생각이라 .systemSmall 하나만 지원하게 작성하였다.  *여러 개를 지원할 경우 지원하고 싶은 종류를 다 적으면 된다.


Edit Scheme 메뉴

 

작동 환경을 테스트하려고 빌드하게 될 경우, xcode에는 ".systemMedium 사이즈의 위젯을 설치하라" scheme이 작성되어있는데 해당 프로젝트는 .systemSmall 사이즈만 지원을 하니 거기서 문제가 발생한 것. 아마 처음 widgetExtension을 생성하면서 생성되는 기본 scheme으로 추정된다.

 

xcode의 메뉴 중  "Product - Scheme - Edit Scheme" 메뉴로 진입하면 테스트 환경에서 어떤 사이즈의 위젯을 설치할지 설정해 줄 수 있다. 들어가 보니 systemMedium으로 설정이 되어있어서 systemSmall로 바꾸어주니 오류가 사라졌다.

MKMapView를 사용하는 프로젝트를 다루던 중 시뮬레이터로 빌드 시 지도 부분이 그리드 화면으로 표시되는 문제가 발생했다. 순간 코드가 잘못되었나 생각이 들었지만, 실기기로 빌드해보면 정상 동작했다. 해당 문제는 시뮬레이터에서 발생한 문제로 개인적인 추측으로는 지도를 불러오는 데에 문제가 생긴 모양이다. 여러 가지 설정을 찾아보니 기기를 재설정하는 메뉴가 있었고 해당 메뉴로 해결할 수 있었다.

시뮬레이터 메뉴에 Device - Erase All Content and Settings를 누르면 나오는 확인창에 Erase를 선택하면 시뮬레이터가 재설정되고 정상적으로 지도를 불러오는 모습을 확인할 수 있다.

+ Recent posts