Widget 1탄

Eddy📱·2022년 7월 29일
0

SwiftUI

목록 보기
2/2
post-thumbnail

App extension

위젯, 액션시트에 버튼 추가, 사진 앱 내 사진 필터 등의 작업을 말한다.
앱을 확장하는 프로그램을 말한다.

App extension의 종류는 매우많다!

이외에도 아래에 더있는데 이는 굳이 다 확인해볼 필요는 없다! 이정도로 많이 가지고 있다정도만 알고있자

app extension 정의된 정책을 준수하는 범위의 작업을 수행한다.
그래서 제한된 범위내에서만 작업이 가능하다.

app extension이 app이라고 착각할 수 있지만 이 둘의 환경과 life cycle이 모두 다르다.

App , App Extension 관계

이걸 보면 Host App는 혼자 색상도 다르고, Containing App 과 App Extension만 연결되어 있으며 색상도 동일하다.

Containing App이 Host App에서 App Extension으로 동작하고 있다!

예시로는 유튜브라는 Containing App 이 있다.
메시지 앱을 보면 iMessage에서 키보드 치는 곳 위에 보면 유튜브같은게 있다 이게 바로 메시지앱이라는 Host App에 들어가는 App Extension를 말한다.

host app이란 유저가 app extension를 선택한 앱을 host app이라고 한다.
host app는 extension를 제공하기도 하고 유저 행동의 응답으로 요청을 보내야할 때 extension life cycle를 끝낸다.
extension는 host app으로부터 받은 요청을 끝난 후에 일반적으로 없앤다.

예를 들어, 유저가 OS X host app에서 Text를 선택하려면 Share button를 활성화한다. 그리고 공유 리스트로부터 app extension를 추가해서 소셜 공유 사이트에 text를 올리도록 도와준다.
host app는 유저의 선택으로부터 반응한다. 그래서 이런 식으로 app extension의 life cycle이 이루어져있다. 이는 아래에서 그림으로 볼 수 있다.

App Extension의 life cycle

앱의 라이프사이클과 다른 것은 그림을 보면 확인할 수 있다. 오히려 4번을 보게되면 hosting 앱에 라이프사이클이 달려있다.
첫 번째로 유저는 app extension를 선택하고 시스템은 app extension를 시작한다. 그리고 이것의 코드를 실행한 후 시스템은 app extension를 끝내는 방식으로 사이클이 이루어졌다.

앱 extension이 communicate하는 방법은 아래 그림과 같다

App extension, Containing App 이랑은 직접적으로 소통하지 않는다.
심지어 관련된 extension이 동작하는 동안에도 containing app는 실행되지 않는다.
위에 예시에서 iMessage를 켰을 떄 유튜브가 켜지지 않는 것과 동일한 맥락이다.

직접적인 소통은 없지만 Shared Resources를 활용해서 간접적으로는 소통이 가능하다.

간접적인 Shared Resource에는 App Group, KeyChain, Server 등이 있다.

그림을 보면 Host App이 App extension에 요청을 하면 그에 대한 응답을 받게 된다.

App extension는 그 요청을 바탕으로 URL를 열고 Containing App는 공유 자원을 읽고 쓰며 화면에 보여지도록 하는 것이다.

extension 중에도 Widget extension는 신기하게도 hosting app이 없다!!

그리고 메시지앱에서 유튜브 extension 실행하는데 위젯은 시스템이 바로 실행한다.

그러므로 일반적인 앱 확장과는 살짝 다르다.
하지만 app extension에는 포함되어있다. 이게 조금 의문이다!

13이전에는 Today Extension이 있었다.
이게 무엇이냐..? 사실 다들 알고 있다

Today Extension는 홈화면에서 왼쪽 스와이프 했을 때의 화면을 말한다.

13 이후에는 Widget Extension이 공식적으로 나오게 되었다.
Widget는 최근에 아이폰에서 커스텀가능한 것으로 유명해져서 대부분 알 것이다

Widget Extension는 Today Extension는 그대로 두고, 홈화면에서 대쉬보드로 바로 확인할 수 있게된다.

요번 WWDC에서도 widget이 실시간 반영하는 것도 가능하게 만들었다! 이에 대한 자세한 영상은 아래를 참고하면 좋을 것 같다.

Widget 작동방식은 아래와 같다

Provider, Entity는 System에게 업데이트 할 떄 무엇을 할지 결정해서 보내준다. 그리고 업데이트의 시간표를 전달해서 어느 시점에 업데이트를 해야하는지 시스템에 알려준다.

그리고 시스템은 이에 맞춰서 정해진 동작을 수행하고 이를 View에 업데이트한다.

그래서 EntryView를 정해진 시점에 갱신시키는 방식으로 Widget의 동작이 이루어져있다.

1탄에서는 간단하게 Widget의 용어와 App extension에 대해 알아보겠다!

2탄에서는 위젯 내부의 실제 기능들의 역할과 구현해야하는 방법에 대해 소개하도록 하겠다!

참고사이트
https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html
https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html

profile
Make a better world

0개의 댓글