[iOS] 위젯 만들기 (error: Please adopt containerBackground Api)

Sehee·2024년 6월 20일

iOS 개발하기

목록 보기
5/16
post-thumbnail

시작하며,

위젯 러버로써, iOS 위젯을 어떻게 만드는지 궁금해서 해봤다


위젯 추가하기

프로젝트는 기존에 앱 프로젝트 생성하는 것과 동일하게 프로젝트를 생성했다

  1. 상단 메뉴에서 File > New > Target 클릭

  2. widget Extension을 선택하고 Next

  3. Product Name을 입력하고 Finish 하면 끝이다

  4. Build Settings에서 iOS Development Target을 가장 최신 버전으로 선택해주자

  5. 아무것도 건들지 않고 빌드를 해보면 아래처럼 비어있는 위젯을 만날 수 있다


Issue : 위젯 내용 안보임?!

빌드했을 때, 위젯에 아래와 같은 문구가 뜬다

Please adopt containerBackground Api

iOS 17 이상인 경우 발생하는 이슈라고 한다

개발자 문서를 보면 다음의 예제를 따라하면 해결할 수 있다고 한다

Text("")
.containerBackground(for: .navigation) {
	// ...
}

View가 적힌 코드에 적용해보았다

struct LogWidgetEntryView : View {
    var entry: Provider.Entry

    var body: some View {

		Text(entry.date, style: .time)
        .containerBackground(for: .widget) {
        	// ...
        } 
    }
}

iOS 17.0 이상인 경우에만 발생하는 이슈라고 하는데, iOS 17.0 이하 버전에서도 쓸 수 있게 하려면 예외처리를 해줘야하는 듯 하다

struct LogWidgetEntryView : View {
    @Environment(\.widgetFamily) private var widgetFamily
    
    var entry: Provider.Entry

    var body: some View {
        Text(entry.date, style: .time)
            .widgetBackground()
    }
}

extension View {
    func widgetBackground() -> some View {
        if #available(iOSApplicationExtension 17.0, *) {
            return containerBackground(for: .widget) {
                // ...
            }
        } else {
            return background()
        }
    }
}

View의 extension을 만들어주고, iOS 17.0 이상인 경우엔 containerBackground()를, 이하인 경우엔 background()를 리턴하도록 해봤다

잘 동작한다!!


마치며,

이제 위젯을 생성하는 것까진 했다
역시나, 시작이 반이다

profile
디자인하는 개발자

0개의 댓글