Skip to content

Instantly share code, notes, and snippets.

@skyofdwarf
Last active May 4, 2022 01:56
Show Gist options
  • Save skyofdwarf/5636110f9600c51c46f6d1a1a0234695 to your computer and use it in GitHub Desktop.
Save skyofdwarf/5636110f9600c51c46f6d1a1a0234695 to your computer and use it in GitHub Desktop.
iOS 위젯(Today Extension)개발 참고

iOS Extension 노트

Widget(Today Extension)

생존주기

위젯 인스턴스는 표시될 때마다 재실행되는 것은 아니다

위젯이 떠 있는 알림센터를 벗어났다가(홈화면/화면잠금 등) 다시 알림센터의 위젯으로 돌아오는 경우, 기본 뷰컨트롤러(TodayViewController)가 메모리 해제 되었다가 다시 생성돼서 위젯 자체가 재실행되는 것으로 알았으나 이전 인스턴스가 유지되어 있고 그대로 사용되는 것을 확인 했다.

다른 extension 개발은 안해봐서 이 곳에 언급된 life cycle과 별개의 동작인지를 모르겠다. 시스템이 메모리상황에 따라 언젠가 죽이고 필요 시 재실행하지 않을 까 예상한다.

Xcode에서 실행할 경우는 재실행하기 때문에 위젯이 새롭게 생성된다

UI 구성

앱 개발과 동일하게 UINavigationController, UITabBarController, present(:animated:completion:) 이용 가능하다. 특히, UINavigationController/UITabBarController로 구성하면 각 UIViewController에서 extensionContext 접근이 가능하니 유용하게 이용하자.

iOS 버전별 사항

iOS 13에서 extensionContext.widgetLargestAvailableDisplayMode.compact로 변경 시

애니메이션 되는 widget의 높이와 컨텐츠뷰의 높이가 동기화 되지 않는다.(배경 색으로 확인)

viewWillTransition(to:with:) 호출이 되지 않음(iOS 13)

높이 조절시 로그

# 사용자버튼 클릭 시
widgetActiveDisplayModeDidChange: expanded: false, maxSize: (359.0, 110.0)
will layout subviews
did layout subviews
viewWillTransition: size: (359.0, 110.0)
will layout subviews
did layout subviews



# 높이 조절 시
will layout subviews
did layout subviews
viewWillTransition: size: (359.0, 400.0)
will layout subviews
did layout subviews


# 모드 변경시
## compact
compact
widgetActiveDisplayModeDidChange: expanded: false, maxSize: (359.0, 110.0)
will layout subviews
did layout subviews
viewWillTransition: size: (359.0, 110.0)
will layout subviews
did layout subviews


## expanded
expanded
widgetActiveDisplayModeDidChange: expanded: true, maxSize: (359.0, 660.0)
will layout subviews
did layout subviews
viewWillTransition: size: (359.0, 300.0)
will layout subviews
did layout subviews
did layout subviews
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment