SwiftUI) 2023 WWDC, 위젯에 버튼액션을 넣는방법(Widget with interactive button)

2024. 5. 13. 09:46·앱/SwiftUI

위젯 동작과, 내용에 관해서는 이전 글을 참고하시길 바랍니다.

간단하게 설명하자면 위젯에서는

  • Entry
  • Provider
  • Widget
  • View

로 크게 나누게 되며, Provider가 Entry를 Timeline에 맞춰서 새로 생성하여 배열에 담고, 해당 타임라인 시간에 맞춰서 entry배열에 담긴 화면을 그리는것이 위젯의 기본 동작이다.

iOS 17버전 이전에서는 위젯에서는 위젯을 눌러서 앱을 실행하는 동작 이외에는 어떠한 버튼 동작이 불가능했다.

하지만 iOS17 이상에서는 위젯에 버튼액션이 가능한데 이를 정리해보고자 한다.

AppIntent

2023 button 을 이해하기 위해서는 우선 appIntent라는것에 대해서 이해해야한다.

간략하게 말하자면, appIntent는 시스템에서 앱의 기능이나 컨텐츠를 사용할수 있도록 하는 프레임 워크이다.

appIntent를 생성하면 shortcut이 생성되고 이를 통해서 앱 외부에서 앱 내부의 기능이 실행되도록 하는 프레임워크라고 생각하면 쉽다.

Interactive Button생성하는 법(iOS 17 이상만)

iOS 17버전이상에서는 Button(_ label: , intent: )과 Toggle(intent: )이 추가되었다.

여기에서 intent는 AppIntent를 추가하게 되고, 이를 통해서 위젯에서 appIntent를 통해서 앱 내부의 동작이 실행되도록 한다.

button intent의 특징은 다음과 같다.

  • intent 내부의 perform 함수를 통해서 기능을 실행시킨다.
  • perform이 끝이나면 즉시 WidgetCenter에서 reloadTimeline을 실행한다. 즉 그 즉시 타임라인이 새로 생긴다.
  • 자동으로 제공되는 애니메이션이 있다.

사용하는 방법의 스탭은 다음과 같다.

1. AppIntent 정의하기

@available(iOSApplicationExtension 16, *)
struct TestIntent: AppIntent {
	struct var title: LocalizedStringResource = "앱 인텐트의 이름"
	struct var description = IntentDescription("앱 인텐트의 설명")

	func perform() async throws -> some IntentResult {
		somefunction()
		return .result()
	}

 

위에서 설명을 하자면, title과 description은 단축어에서의 설명이다.

 

 

실제로 빌드한 파일에서 생성된 단축어의 경우 이렇게 title과 description이 들어가게 된다.

이처럼 내가 버튼에 동작하고 싶은 기능을 추가하고, appIntent를 생성한다.

 

!!!! 중요한점은 해당 intent를 생성할때 위젯과 앱의 데이터 연동이 필요하기 때문에 타겟을 둘다 추가해줘야 한다.

요 타겟 맴버 까먹지 말고 설정해주자!

2. Button에 추가하기

Button(intent: someIntent()) {
	Text("this is Button")
}

간단하다.

그냥 Button(intent: someIntent()) 해주면 끝.

button Intent에서 애니메이션이 동작하는 원리

  • 기존의 SwiftUI - State가 변경되는 부분에 대해서 변경
  • widget - entity가 변경되는것을 entry끼리 비교해서 변경
반응형
저작자표시 비영리 변경금지 (새창열림)

'앱 > SwiftUI' 카테고리의 다른 글

SwiftUI) TCA 비동기처리, TaskResult타입  (0) 2024.08.08
SwiftUI) TCA 장점과 기본 개념  (0) 2024.08.08
SwiftUI) 2023 WWDC, 위젯에 버튼액션을 넣는방법(Widget with interactive button)  (0) 2024.02.25
SpriteKit) PhysicsBody 물체에 따라서 프레임주기 [SwiftUI]  (0) 2023.08.28
SpriteKit) 코어모션을 이용한 중력 변화주기 [SwiftUI]  (0) 2023.08.28
'앱/SwiftUI' 카테고리의 다른 글
  • SwiftUI) TCA 비동기처리, TaskResult타입
  • SwiftUI) TCA 장점과 기본 개념
  • SwiftUI) 2023 WWDC, 위젯에 버튼액션을 넣는방법(Widget with interactive button)
  • SpriteKit) PhysicsBody 물체에 따라서 프레임주기 [SwiftUI]
진ddang
진ddang
안녕하세요 진땅의 개발자 블로그 입니다. 피드백은 환영입니다. 깃헙 : https://github.com/it794613
    반응형
  • 진ddang
    맛동산이
    진ddang
  • 전체
    오늘
    어제
    • 분류 전체보기 (199)
      • 일기 그리고 목표 (1)
      • 웹 (20)
        • 리액트 (19)
      • 앱 (115)
        • Swift 문법 (15)
        • Swift (65)
        • SwiftUI (32)
        • 리액트 네이티브 (3)
      • CS (30)
        • 컴퓨터그래픽스 (8)
        • 운영체제 (6)
        • 네트워크 (16)
      • 알고리즘 (13)
        • 백준 (12)
        • 프로그래머스 (1)
      • 대외활동 (7)
        • ict한이음(2022.04) (2)
        • 멋쟁이 사자처럼 (5)
        • Apple Developer Academy (0)
      • 다양한 내용들 (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    cs
    Swift
    문법
    스유
    영남대
    리액트
    ReactorKit
    백준
    composable architecture
    위젯킷
    후기
    TCA
    웹
    스위프트
    swift concurrency
    spritekit
    멋사
    SwiftUI
    dispatchqueue
    운영체제
    대외활동
    c++
    widgetkit
    멋쟁이사자처럼
    네트워크
    알고리즘
    Protocol
    uikit
    컴퓨터그래픽스
    widget
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
진ddang
SwiftUI) 2023 WWDC, 위젯에 버튼액션을 넣는방법(Widget with interactive button)
상단으로

티스토리툴바