iOS 16๋ถํฐ๋ FamilyControls ํ๋ ์์ํฌ๋ฅผ ํตํด ์ฌ์ฉ์์ ์คํฌ๋ฆฐ ํ์ ๊ด๋ฆฌ์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์ ์ดํ ์ ์๋ค. ์ด๋ฅผ ํ์ฉํ๋ ค๋ฉด ์ฑ์์ ๊ถํ์ ์์ฒญํ๋ ๊ณผ์ ์ ๊ตฌํํด์ผ ํ๋ค.
FamilyControls๋ iOS์์ ์คํฌ๋ฆฐ ํ์ ๋ฐ ๊ฐ์กฑ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ์ดํ๊ธฐ ์ํ ํ๋ ์์ํฌ๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์๋ ๋๋ฐ์ด์ค ์ฌ์ฉ ์๊ฐ, ์ฑ ์ ํ ๋ฑ์ ์ค์ ํ ์ ์๋ค.
import Foundation
import FamilyControls
struct FamilyControlsManager {
let center = AuthorizationCenter.shared
func requestAuthorization(completionHandler: @escaping (() -> Void)) {
Task {
do {
try await center.requestAuthorization(for: FamilyControlsMember.individual)
print("์คํฌ๋ฆฐํ์ ๊ถํ ์ค์ ์ฑ๊ณต")
completionHandler()
} catch {
print("๊ถํ ์ค์ ์คํจ \(error.localizedDescription)")
completionHandler()
}
}
}
}
AuthorizationCenter.shared
: FamilyControls ๊ถํ ๊ด๋ฆฌ ๊ฐ์ฒด์ ์ฑ๊ธํค ์ธ์คํด์คrequestAuthorization(for:)
: ๊ถํ ์์ฒญ ๋ฉ์๋. ๊ฐ์ธ ์ฌ์ฉ์(FamilyControlsMember.individual
)์ ๊ถํ์ ์์ฒญTask
๋ฐ try await
: ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ๊ถํ ์์ฒญ์ ์ฒ๋ฆฌcompletionHandler
: ๊ถํ ์์ฒญ ์ฑ๊ณต ๋๋ ์คํจ ํ ์ถ๊ฐ ์์
์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํด๋ก์ private func requestScreenTimePermission() {
if #available(iOS 15.0, *) {
/// iOS 16.0 ์ด์์์ ๊ถํ ์์ฒญ
familyControlsManager.requestAuthorization(completionHandler: {
DispatchQueue.main.async {
self.navigateToMain()
}
})
} else {
/// iOS 15 ๋ฏธ๋ง์ผ ๊ฒฝ์ฐ ์ฒ๋ฆฌ
let alert = UIAlertController(
title: "์ง์๋์ง ์๋ ๋ฒ์ ",
message: "์ด ๊ธฐ๋ฅ์ iOS 15.0 ์ด์์์๋ง ์ง์๋ฉ๋๋ค.\n์ต์ ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธํด์ฃผ์ธ์.",
preferredStyle: .alert
)
alert.addAction(UIAlertAction(title: "ํ์ธ", style: .default, handler: { _ in
self.navigateToMain()
}))
DispatchQueue.main.async {
self.present(alert, animated: true, completion: nil)
}
}
}