ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

ํ”„๋กœ์ ํŠธ TipKit ๋„์ž… ๋ฐฐ๊ฒฝ

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ์ฃผ์ œ ์„ ์ •๋ถ€ํ„ฐ ๋””์ž์ธ, ๊ฐœ๋ฐœ๊นŒ์ง€ ํ˜ผ์ž ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์•ฑ์€ ๋งค์ผ ๋ฐค, ๋‹ฌ์„ ์ฐ์œผ๋ฉฐ ํ•˜๋ฃจ๋ฅผ ์ •๋ฆฌํ•˜๋Š” '๋‹ฌ ์‚ฌ์ง„ ๋‹ค์ด์–ด๋ฆฌ ์•ฑ'์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด, ์™œ TipKit์„ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ์„๊นŒ์š”?

 

 

 

ํ•ด๋‹น ์ด์œ ๋Š”

๋””์ž์ธ ๊ณผ์ •์—์„œ ๋‹ฌ ๋ชจ์–‘์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ฒ„ํŠผ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

์ด ์ปค์Šคํ…€ ๋ฒ„ํŠผ์€ ์‹œ๊ฐ์ ์œผ๋กœ '๋‹ฌ'์ด๋ผ๋Š” ์ปจ์…‰์„ ์ž˜ ๋ฐ˜์˜ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ,

์‚ฌ์šฉ์ž๋“ค์ด ์ด๋ฅผ ์‰ฝ๊ฒŒ ๋ฒ„ํŠผ์œผ๋กœ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ๋กœ์˜ ๋ณ€๊ฒฝ์ด๋‚˜ ๋‹ค๋ฅธ ๋ฒ„ํŠผ ์ด๋ฏธ์ง€์˜ ์‚ฌ์šฉ๋„ ๊ณ ๋ คํ•ด๋ดค์ง€๋งŒ,

๊ธฐ์กด์˜ ๋ฒ„ํŠผ์„ ์œ ์ง€ํ•˜๊ณ ์ž ๋‹ค๋ฅธ ๋ฐฉ์•ˆ์„ ๋ชจ์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

(์ œ๊ฐ€ ๋งŒ๋“  ๋‹ฌ ๋ฒ„ํŠผ์„ ํฌ๊ธฐํ•˜๊ณ  ์‹ถ์ง€ ์•Š์•˜์–ด์š” ๐Ÿฅฒ)

 

๊ทธ๋Ÿฌ๋˜ ์ค‘ TipKit์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๊ณ , ํ•ด๋‹น ํ”„๋ ˆ์ž„์›Œํฌ๋Š” iOS 17 ๋ฒ„์ „ ์ด์ƒ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” iOS ๋ฒ„์ „์„ ํฌ๊ฒŒ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ƒํ™ฉ์ด๊ธฐ์— TipKit์„ ๋„์ž…ํ•˜๊ธฐ์— ์ ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ด์ œ TipKit์ด ๋ฌด์—‡์ธ์ง€์™€ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ–ˆ๋Š”์ง€ ๊ฐ„๋žตํžˆ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


WWDC 2023: TipKit ์†Œ๊ฐœ

WWDC 2023์—์„œ ์ƒˆ๋กญ๊ฒŒ ์†Œ๊ฐœ๋œ ํ”„๋ ˆ์ž„์›Œํฌ์ธ TipKit์€ ์•ฑ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•„์š”ํ•œ ํŒ์„ ์‰ฝ๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•์Šต๋‹ˆ๋‹ค.

 

์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด, ์ƒํ™ฉ์— ๋”ฐ๋ผ ์š”์•ฝ๋œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ํšจ๊ณผ์ ์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ €๋Š” ์ด ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ์•ฑ ๋‚ด์˜ ๋‹ฌ ๋ชจ์–‘ ์ด๋ฏธ์ง€๊ฐ€ ์‹ค์ œ๋กœ ๋ฒ„ํŠผ์ž„์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ช…ํ™•ํžˆ ์•Œ๋ฆฌ๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

 

์šฐ์„  Tip ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•˜๊ณ , ์›ํ•˜๋Š” ์ œ๋ชฉ(title), ๋ฉ”์‹œ์ง€(message), ์ด๋ฏธ์ง€(image)๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ œ๋ชฉ์€ ํ•„์ˆ˜๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋ฉฐ, ๋ฉ”์‹œ์ง€์™€ ์ด๋ฏธ์ง€๋Š” ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ์˜ˆ์‹œ
struct FavoriteTip: Tip {
    var title: Text {
        Text("Save as a Favorite")
    }

    var message: Text? {
        Text("Your favorite backyards always appear at the top of the list.")
    }

    var image: Image? {
        Image(systemName: "star")
    }
}

 

Tip์ด ๋ณด์—ฌ์ง€๋Š” ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋ ค๋ฉด rules ํ”„๋กœํผํ‹ฐ๋ฅผ, 

Tip์˜ ํ‘œ์‹œ ์‹œ๊ฐ„์ด๋‚˜ ์ตœ๋Œ€ ํ‘œ์‹œ ํšŸ์ˆ˜ ๊ฐ™์€ ์˜ต์…˜์„ ์กฐ์ •ํ•˜๋ ค๋ฉด options ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค

 

Tip | Apple Developer Documentation

Tips.Rule | Apple Developer Documentation


๋‚ด ์•ฑ์— TipKit ์ ์šฉํ•˜๊ธฐ

์ œ ์•ฑ์—์„œ๋Š” ๋‹ฌ ๋ชจ์–‘ ๋ฒ„ํŠผ์˜ ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ…์ŠคํŠธ๋งŒ ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. 

์ด๋ฅผ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด title์„ ๊ตฌํ˜„ํ•˜์—ฌ TipKit์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

import TipKit

struct MoonButtonTip: Tip {
    var title: Text {
        Text("๋‹ฌ ์‚ฌ์ง„ ์ฐ๊ธฐ!")
    }
    
    var message: Text? {
            Text("๋‹ฌ ์‚ฌ์ง„์„ ์ฐ์–ด๋ณด์„ธ์š”.")
        }
}

 

Tip์„ ์œ„์˜ ์ฝ”๋“œ๋กœ ์ƒ์„ฑํ•œ ํ›„, ์•ฑ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. 

์•„๋ž˜ ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ˜์Œ ์•ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ Tip์ด ๋ณด์—ฌ์ง€๋ฉฐ, ํ•œ ๋ฒˆ๋งŒ ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

import TipKit

@main
struct Dal_DaApp: App {
    
    var body: some Scene {
        WindowGroup {
            ContentView()
                .task {
                    try? Tips.configure([
                        .displayFrequency(.immediate),
                        .datastoreLocation(.applicationDefault)
                    ])
                }
        }
    }
}

 

 

๋งˆ์ง€๋ง‰์œผ๋กœ, Popover ํƒ€์ž…์˜ Tip์„ ์‚ฌ์šฉํ•˜์—ฌ, 

๋‹ค์Œ๊ณผ ๊ฐ™์ด View์—์„œ ๋‹ฌ ์ด๋ฏธ์ง€ ๋ฒ„ํŠผ์— ํŒ์„ ๋ณด์—ฌ์ฃผ๋„๋ก ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

// ์ƒ๋žต
private let moonButtonTip = MoonButtonTip()
// ์ƒ๋žต
NavigationLink {
    CameraView()
} label: {
    Image(Asset.moonButton.fileName)
}
.popoverTip(moonButtonTip)

 

์ถ”๊ฐ€๋กœ Tip์€ ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์ด Popoverํƒ€์ž…๊ณผ Inline ํƒ€์ž…์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

์ƒํ™ฉ์— ๋”ฐ๋ผ ํƒ€์ž…์„ ์„ ํƒํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ขŒ: Popover Type, ์šฐ: Inline Type

 


๋งˆ๋ฌด๋ฆฌ(+ ์•„์‰ฌ์šด ์ )

TipKit์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์— ์ฒ˜์Œ ์ ‘์†ํ–ˆ์„ ๋•Œ

๋‹ฌ ์ด๋ฏธ์ง€๊ฐ€ ๋ฒ„ํŠผ์ž„์„ ์•Œ๋ ค์ฃผ๋Š” ํŒ์„ ์ œ๊ณตํ•˜์—ฌ ๋‹ฌ ๋ชจ์–‘์ด ๋ฒ„ํŠผ์ž„์„ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

TipKit์€ ๋‹ค์–‘ํ•œ ์„ค์ •์„ ํ†ตํ•ด ํŒ์˜ ํ‘œ์‹œ ์กฐ๊ฑด์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,

์•„์ง๊นŒ์ง€ Tip View๋ฅผ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ปค์Šคํ…€ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ๋“ค์–ด ํ”„๋กœ์ ํŠธ์˜ ์ปจ์…‰์— ๋งž๊ฒŒ background color๋ฅผ ๋ฐ”๊ฟ”์ฃผ๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ

์‚ฌ์šฉ์ž ๋ชจ๋“œ์— ๋”ฐ๋ฅธ(๋ผ์ดํŠธ, ๋‹คํฌ ๋ชจ๋“œ) ์ƒ‰์ƒ ๋ณ€๊ฒฝ๋งŒ ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.

(ํ˜น์‹œ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๊ด€๋ จ ์ž๋ฃŒ๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š” ๐Ÿฅฒ)

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ œ๊ฐ€ TipKit์„ ์™œ ์‚ฌ์šฉํ–ˆ๊ณ , ์–ด๋–ป๊ฒŒ ์ ์šฉํ–ˆ๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋งŒ ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์›ํ•˜์‹œ๋ฉด WWDC ์˜์ƒ๊ณผ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”!

 

์ž˜๋ชป๋œ ๋‚ด์šฉ์ด๋‚˜ ๊ถ๊ธˆํ•˜์‹  ์ ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š”. ๐Ÿค“

์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“ ์ฐธ๊ณ  ์ž๋ฃŒ

TipKit | Apple Developer Documentation

Tip | Apple Developer Documentation

Make features discoverable with TipKit - WWDC23 - Videos - Apple Developer