[๐ŸŒŸ] Screen Time API ๊ถŒํ•œ ์„ค์ • ๋„์ „ํ•˜๊ธฐ (4) - SceneDelegate๋ฅผ ํ™œ์šฉํ•œ ๊ถŒํ•œ ์ฒดํฌ

Edenยท2025๋…„ 1์›” 25์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
104/129
post-thumbnail

์˜ค๋Š˜์€ ์•ฑ์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ Screen Time API ๊ถŒํ•œ ์ƒํƒœ์— ๋”ฐ๋ผ ์ดˆ๊ธฐ ํ™”๋ฉด์„ ๋™์ ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. SceneDelegate๋ฅผ ํ™œ์šฉํ•ด ๊ถŒํ•œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ , ์ ์ ˆํ•œ ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.


๋ชฉํ‘œ

  1. Screen Time API ๊ถŒํ•œ ์ƒํƒœ ํ™•์ธ
  2. ๊ถŒํ•œ ์ƒํƒœ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ดˆ๊ธฐ ํ™”๋ฉด์œผ๋กœ ์„ค์ •

๊ตฌํ˜„ ๊ณผ์ •

1. AuthorizationCenter๋ฅผ ์‚ฌ์šฉํ•œ ๊ถŒํ•œ ์ฒดํฌ

๋จผ์ €, ๊ถŒํ•œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด AuthorizationCenter.shared.authorizationStatus๋ฅผ ํ™œ์šฉํ–ˆ์–ด์š”. ์•„๋ž˜๋Š” ๊ถŒํ•œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

์˜ˆ์‹œ)

import DeviceActivity

guard let authorizationStatus = AuthorizationCenter.shared.authorizationStatus else {
    fatalError("Authorization status could not be retrieved.")
}
  • AuthorizationStatus๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ์Šน์ธํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

2. SceneDelegate ์ˆ˜์ •

SceneDelegate์—์„œ ๊ถŒํ•œ ์ƒํƒœ์— ๋”ฐ๋ผ ์ดˆ๊ธฐ ํ™”๋ฉด์„ ์„ค์ •ํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        guard let scene = (scene as? UIWindowScene) else { return }
       
        let window = UIWindow(windowScene: scene)
        let rootViewController: UIViewController
        
        // FamilyControls์˜ ๊ถŒํ•œ ์ƒํƒœ ํ™•์ธ
        let authorizationsStatus = AuthorizationCenter.shared.authorizationStatus
        if authorizationsStatus == .approved {
            // ๊ถŒํ•œ์ด ์Šน์ธ๋œ ์ƒํƒœ -> StarListViewController๋กœ ์‹คํ–‰
            rootViewController = StarListViewController()
        } else {
            // ๊ถŒํ•œ ๋ฏธ์Šน์ธ ์ƒํƒœ -> PermissionViewController๋กœ ์‹คํ–‰
            rootViewController = PermissionViewController()
        }
        let navigationController = UINavigationController(rootViewController: rootViewController)
        window.rootViewController = navigationController
        window.makeKeyAndVisible()
        self.window = window
    }

๐Ÿ” ๋กœ์ง ์„ค๋ช…

  1. AuthorizationCenter.shared.authorizationStatus๋กœ ๊ถŒํ•œ ์ƒํƒœ๋ฅผ ํ™•์ธ
  2. .approved ์ƒํƒœ์ผ ๊ฒฝ์šฐ StarListViewController๋ฅผ ์ดˆ๊ธฐ ํ™”๋ฉด์œผ๋กœ ์„ค์ •
  3. ๊ถŒํ•œ์ด ์—†๊ฑฐ๋‚˜ ๋ฏธ์Šน์ธ ์ƒํƒœ์ผ ๊ฒฝ์šฐ PermissionViewController๋กœ ์ด๋™

๊ฒฐ๊ณผ ํ™”๋ฉด

๊ถŒํ•œ ์ƒํƒœ์— ๋”ฐ๋ฅธ ํ™”๋ฉด ์ „ํ™˜

  • ๊ถŒํ•œ ์Šน์ธ๋จ: ์•ฑ ์‹คํ–‰ ์‹œ ๋ฐ”๋กœ StarListViewController๋กœ ์ด๋™
  • ๊ถŒํ•œ ๋ฏธ์Šน์ธ: ๊ถŒํ•œ ํ—ˆ์šฉ์„ ์š”์ฒญํ•˜๋Š” PermissionViewController ํ‘œ์‹œ

๋Š๋‚€ ์ 

์ด๋ฒˆ ์ž‘์—…์„ ํ†ตํ•ด Screen Time API ๊ถŒํ•œ ์„ค์ • ํ๋ฆ„์„ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์•ฑ์˜ ์ดˆ๊ธฐ ํ™”๋ฉด์„ ๋™์ ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ณผ์ •์—์„œ SceneDelegate๋ฅผ ํ™œ์šฉํ•ด ๋กœ์ง์„ ๊น”๋”ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ธ€์—์„œ๋Š” PermissionViewController์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ถŒํ•œ์„ ์Šน์ธํ•˜๋Š” ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๊ถŒํ•œ ์š”์ฒญ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

profile
Frontend๐ŸŒ and iOS๏ฃฟ

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด