iOS14 위젯 템플릿을 IntentConfiguration으로 만듭니다.

iOS14에서 추가된 위젯 템플릿을 IntentConfiguration에서 만듭니다.
("위젯 편집"메뉴가 표시되는 분)
가능한 한 Xcode의 자동 생성을 사용합니다.
템플릿이므로 아무런 기능이 없지만 위젯을 양산 할 때의 기초가되기를 기대합니다.

앱 만들기



아직 UIKit로 만든 앱이 대부분이라고 생각하기 때문에 UIKit App Delegate를 선택했습니다.
이름은 신용 카드 앱을 가정하여 LeaderCard로 지정했습니다.


Widget Extension 만들기



여기에서 +를 누릅니다.


Widget Extension을 선택하고 Next를 누릅니다.

Include Configuration Intent를 선택하십시오. (←여기 소중!)
체크하지 않으면 StaticConfiguration가 됩니다.
위젯 이름은 LeaderCardWidget입니다.


Intent Handler 만들기



여기에서 +를 누릅니다.


Intents Extension을 선택하고 Next를 누릅니다.

Include UI Extension를 확인하지 않습니다. (←여기 소중!)Starting Point 선택 None. (←여기 소중!)
Intent Handler 이름은 LeaderCardIntent입니다.


intentdefinition 설정


LeaderCardWidget 폴더에 생성된 LeaderCardWidget.intentdefinision를 엽니다.

아래쪽에 있는 +를 눌러 New Type를 선택합니다.

유형 이름으로 Card를 설정합니다. Card 의 내용은 만지지 않아도 됩니다.


Parameters



아래 그림과 같이 설정한다.


Parameter



Parameter는 소문자로 card 로 설정한다. (←여기 소중!)

자동 생성되는 클래스ConfigurationIntent의 프로퍼티명이 되어 있기 때문입니다.

디스플레이 이름



여기에 지정한 문자열은 아래 그림의 위치에 표시됩니다.


유형


Card를 선택합니다.

Configurable



확인하십시오.

동적 옵션



확인하십시오.

Prompt Label



여기에 지정한 문자열은 아래 그림의 위치에 표시됩니다.


Target Membership


LeaderCardWidgetExtensionLeaderCardIntent를 확인하십시오. (←여기 소중!)


Intent Handler의 최소 코딩



초기 상태

IntentHandler.swift
class IntentHandler: INExtension {

    override func handler(for intent: INIntent) -> Any {
        // This is the default implementation.  If you want different objects to handle different intents,
        // you can override this and return the handler you want for that particular intent.

        return self
    }

}
ConfigurationIntentHandling 프로토콜을 추가합니다.

그러면 protocol stub를 추가하거나 듣기 때문에 Fix를 누릅니다.
provideCardOptionsCollection 메서드가 추가됩니다.

code 부분에 completion(nil, nil)를 쓴다.
(템플릿이므로 아무것도 작동하지 않습니다.)

IntentHandler.swift
class IntentHandler: INExtension {
    func provideCardOptionsCollection(for intent: ConfigurationIntent, with completion: @escaping (INObjectCollection<Card>?, Error?) -> Void) {
        completion(nil, nil)
    }

    override func handler(for intent: INIntent) -> Any {
        // This is the default implementation.  If you want different objects to handle different intents,
        // you can override this and return the handler you want for that particular intent.

        return self
    }

}

완성



이제 템플릿이 완성되었습니다.
실행하면 다음과 같은 화면이 표시됩니다.
이것에 살을 붙여 목적의 위젯에 접근해 가게 됩니다.





GitHub



여기에 Template repository를 만들고 있으므로, 괜찮으시면 이용하십시오.
iOS14-Widget-IntentConfiguration-template

개발 환경


  • Xcode 12.1
  • iOS 14.0 - 14.1
  • 좋은 웹페이지 즐겨찾기