일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Complication
- spring
- Delegate Pattern
- app intents
- github
- Apple Developer Academy
- fcm
- widgetkit
- Sendbird
- UITableView
- Coding Test
- Swift
- Flutter
- watchkit
- ios
- createml
- Tuist
- Project
- coreml
- tabman
- task.yield()
- cloud functions
- WWDC22
- SwiftUI
- backend
- UIStackView
- 코테
- swift concurrency
- Firebase
- UIDatePicker
- Today
- Total
azhy의 iOS 이야기
[iOS] Shortcuts을 사용해보자 본문
2024년 10월 7일에 작성됨
Shortcuts?
Shortcuts은 단축어를 뜻합니다.
음.. 저는 개인적으로 단축어를 안 써봤지만 분명 잘 쓰시는 분이 계실게 분명하니까 iOS 개발자라면 당연히 알아야 하고 기능을 제공해야 하지 않을까요..?
App Intents
Shortcuts을 알아보기 전에 먼저 App Intents에 대해서 알고 넘어가야 합니다.
App Intents는 앱의 기능을 외부에서 사용하는데 공통적인 인터페이스라고 볼 수 있습니다.
이미지에서 볼 수 있듯이 Siri, Sportlight, Shortcuts 기능을 사용하려면 App Intents를 구현해야 합니다.
(그리고 코드를 재사용하여 WidgetKit과 함께 컨트롤 및 인터랙티브 위젯을 생성할 수 있다고 하네용..?)
WWDC24에서도 App Intent에 관해서 소개를 했는데 향후 Apple Intelligence를 공부하려면 App Intents 프레임워크는 무조건 알아야 할 것 같네요.. 해당 영상은 밑에 남겨둘게요!
Intent 세팅
자자 그럼 다시 Shortcuts에 대해서 들어가 봅시다.
저는 단축어를 통해 앱에 진입하면 바로 오늘 날짜 일기 작성 뷰로 이동하는 기능을 추가하고 싶었습니다.
우선 위에서도 이야기했듯이 Shortcuts을 사용하려면 App Intents 세팅이 먼저 되어야 합니다.
struct OpenAppIntent: AppIntent {
static var title: LocalizedStringResource = "오늘 일기 쓰기"
static var description = IntentDescription("오늘 날짜 일기 작성 화면으로 이동합니다")
static var openAppWhenRun: Bool = true
@MainActor
func perform() async throws -> some IntentResult {
ShortcutManager.shared.delegate?.shortcutShowTodayRecordTrigger()
return .result()
}
}
부끄럽지만 제 프로젝트 코드를 가져왔습니다.. 여기서 openAppWhenRun, perform() 이 친구들이 매우 중요합니다.
기본적으로 시스템은 백그라운드에서 제한된 모드로 앱을 시작합니다.
그리고 인텐트가 실행될 때 시스템은 perform()를 호출합니다. 이 동작들을 재정의하고 포그라운드로 전환시키는 역할을 ‘openAppWhenRun = true’ 이 친구가 합니다.
단순하게!! 어떤 단축어를 실행했을 때 어떤 뷰로 이동한다거나 어떤 함수가 실행됐으면 좋겠다 싶은 것들을 perform() 안에다 구현하면 됩니다.
단축어 생성
// tile style
final class ShortcutsProvider: AppShortcutsProvider {
static var shortcutTileColor = ShortcutTileColor.navy
static var appShortcuts: [AppShortcut] {
AppShortcut(intent: OpenAppIntent(),
phrases: ["오늘 일기 쓰기 \(.applicationName)"])
}
}
// systemImage style
final class ShortcutsProvider: AppShortcutsProvider {
static var appShortcuts: [AppShortcut] {
AppShortcut(intent: OpenAppIntent(),
phrases: ["오늘 일기 쓰기 \(.applicationName)"],
shortTitle: "오늘 일기 쓰기",
systemImageName: "pencil.circle")
}
}
단축어 만드는 건 정말 간단합니다. 우선 이렇게 코드를 작성합니다.
ShortcutsProvider.updateAppShortcutParameters()
그리고 AppDelegate 혹은 SceneDelegate에서updateAppShortcutParameters()를 호출하면 시스템이 Shortcuts을 등록합니다. 그럼 바로 아래처럼 단축어를 확인할 수 있습니다.
Shortcut Style
제가 직접 shortcuts을 만들어보면서 왼쪽처럼 tile style, 오른쪽처럼 systemImage style 두 가지 스타일이 있었습니다. 필요에 따라서 만들면 될 거 같아요.
systemImage style로 만드실 때 주의하실 점은 phrases 하고 shortTitle 값이 똑같으면 안 됩니다!!!!
추가로 systemImage style로 만드시면 default는 아래처럼 나옵니다.
여기서 박스 컬러를 변경하고 싶으시면 info.plist에 값들을 세팅해 주시면 됩니다.
<dict>
<key>CFBundlePrimaryIcon</key>
<dict>
<key>NSAppIconActionTintColorName</key>
<string>azBlack</string>
<key>NSAppIconComplementingColorNames</key>
<array>
<string>azWhite</string> # color 1
<string>azWhite</string> # color 2
</array>
</dict>
</dict>
NSAppIconActionTintColorName : 단축어에서 보이는 앱 아이콘 색깔
NSAppIconComplementingColorNames : 박스 컬러 (color 1, 2를 다르게 주면 그라데이션 형태로 들어감)
'iOS' 카테고리의 다른 글
CPS Style (1) | 2024.12.25 |
---|---|
[iOS] 비트맵 이미지와 벡터 이미지 (2) | 2024.11.14 |
[iOS] 재미있었던 CreateML 사용 후기 (0) | 2024.11.14 |
[iOS] Static Framework & Dynamic Framework (feat. Tuist) (0) | 2024.11.14 |
[iOS] HIG, Human Interface Guide (0) | 2024.11.14 |