스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
Screen Time API의 새로운 기능
사용자가 기기와의 관계를 관리하도록 돕는 한편 개인 정보를 최우선으로 보호하는 앱을 빌드하는 방법을 알아보세요. Screen Time API에 대해 안내하고, 핵심 제한 기능 및 기기 활동 보고서와 같은 기능을 사용하여 탁월한 경험을 만드는 동시에 기기의 소유자, 부모 및 보호자에게 측정 가능한 제어 기능을 제공하는 방법을 알려드리겠습니다.
리소스
-
다운로드
♪ ♪
안녕하세요, Screen Time의 소프트웨어 엔지니어 MaryAshley Etefia입니다 COVID-19는 디지털 건강과 생산성 자원에 대해 증가하는 수요를 대응하도록 저희에게 큰 압력을 가했습니다 판데믹은 균형에 대한 사회적 필요성을 증대시키고 개인 공간을 잘 관리하는 능력에 대해 시험에 들게 했습니다 우리 모두에게요 작년에 여러분들의 앱에서 사용자가 자녀의 기기 사용을 관리할 수 있도록 개발하게 해주는 모든 Screen Time API를 소개했습니다 우리는 여러분들께서 이 API를 창의적이고 생산적인 방법으로 사용해온 것을 보게되어 매우 기뻤습니다 여러분들이 다르게 생각해보는 우리 문화를 포용해주니 좋네요 또한 작년에 주신 피드백에 대해 매우 감사드립니다 iOS 16의 Screen Time API의 새로운 기능을 소개하기 앞서 iOS 15 때의 몇 가지 주요 사항을 요약하겠습니다 작년에는 Screen Time API에 세 가지 새로운 프레임워크인 FamilyControls, ManngedSettings DeviceActivity를 도입했습니다 iOS 15에서 이러한 프레임워크로 자녀 보호 앱에 새로운 가능성을 열었습니다 세 가지 모두 다시 한번 빠르게 살펴보겠습니다 FamilyControl은 Screen Time API에 대한 액세스 권한을 부여하기 때문에 관문의 역할을 합니다 이 프레임워크는 자녀 보호 앱이 삭제되는 것을 방지하고 앱과 웹 사이트를 식별하는데 opaque token을 사용해 사용자의 개인 정보를 보호합니다 ManagedSettings는 Screen Time과 마찬가지로 앱 사용 제한, 웹 트래픽 필터링을 적용할 수 있게 하지만 앱의 브랜딩 및 기능에 맞춰 설정할 수 있게 합니다 DeviceActivity는 이 프레임워크의 시작과 끝 뿐만 아니라 앱이나 웹 사이트의 사용량이 임계치를 넘었을 때마다 코드를 실행할 수 있게 합니다 iOS 16에서는 세 프레임워크 모두에 흥미로운 업데이트가 있죠 이번 업데이트로 API 사용이 더 쉬워질 뿐 아니라 사용자 경험도 향상시킬 것입니다 데모 앱 Worklog로 자세한 내용을 살펴보겠습니다 이 앱은 특정 수치들이 충족될 때까지 특정 앱의 사용을 제한해 전문가들에게 좋은 습관을 장려합니다 이 iPhone 주인인 아니야가 어떻게 iOS 16의 Screen Time API로 이런 제한들을 걸 수 있는지 보여드리겠습니다 먼저 FamilyControls입니다 iOS 15에서의 FamilyControls는 iCloud 승인을 통해서만 자녀의 기기를 승인할 수 있었습니다 이제 iOS 16에서는 FamilyControls가 자신의 기기에서 개별 사용자를 승인할 수 있게 되었음을 기쁘게 알려드립니다 이 새로운 승인 방법은 앱에서 Screen Time API로 자녀 보호 기능 이상을 구현하는 데 사용됩니다 기존 자녀 보호 승인과는 다르게 개별 승인에선 하나의 기기에서 여러 앱을 사용할 수 있습니다 또한 개별 승인은 자녀 보호를 위한 것이 아니므로 iCloud 로그아웃과 앱 삭제에 대한 내적 제한이 적용되지 않습니다 새로운 승인의 사용 방법을 알아보겠습니다 먼저 앱이 시되면 FamilyControls에 대한 승인을 요청해야 합니다 AuthorizationCenter.shared를 사용해 Worklog가 시작될 때 이를 요청합니다 요청 후에는 승인 상태가 업데이트되거나 오류가 발생합니다 이 앱은 이 iPhone에서 실행된 적이 없으므로 requestAuthorization은 경고와 함께 승인을 요청합니다 허용을 탭하면 계속하기 위해 사용자가 FaceID, TouchID 또는 기기 암호를 사용해 인증하라는 메시지가 표시됩니다 성공적으로 인증되면 requestAuthorization을 다시 호출해도 경고 메시지가 다시 표시되지 않고 계속 진행됩니다 앱이 FamilyControls로 승인되면 설정에 이 앱에 대한 스위치 두 개가 추가됩니다 Screen Time 설정의 Apps with Screen TimeAccess List 아래에 하나 그리고 해당 앱 설정에서 Screen Time Restrictions라는 이름으로 하나입니다 부모나 개인 사용자는 두 스위치 중 하나로 FamilyControls에서 앱 승인을 취소할 수 있습니다 이렇게 새로운 개별 승인을 사용하는 것은 자녀 보호 승인을 사용하는 것만큼 간단합니다 또한 비동기를 이용해 둘 모두에 좋은 발전을 이뤄냈습니다 이번에는 ManagedSettings의 새로운 점을 살펴보겠습니다 개발자들이 ManagedSettings를 특히 ManagedSettingsStore를 훨씬 더 사용하기 쉽게 개선되었습니다 익숙하지 않은 분들을 위해 설명드리자면 ManagedSettingsStore는 현재 사용자나 기기에 설정을 적용하는 데이터 저장소입니다 iOS 15에선 프로세스당 하나의 ManagedSettingsStore만 허용됐습니다 또한 앱과 DeviceActivity의 확장 프로그램은 ManagedSettingsStore가 별도로 필요해서 DeviceActivity에 대한 응답에서 설정을 변경하기 어려웠습니다 iOS 16에서는 프로세스마다 고유한 이름을 가진 최대 50개의 ManagedSettingsStore를 만들 수 있습니다 이 명명된 ManagedSettingsStore들은 앱과 모든 앱 확장프로그램에서 자동으로 공유되며 모든 명명된 ManagedSettingsStore에서 모든 설정을 한 번에 제거할 수 있죠 Worklog가 명명된 ManagedSettingsStore를 어떻게 쓰는지 보겠습니다 Worklog가 처음 실행되고 아니야의 기기가 성공적으로 승인되면 gaming이라는 ManagedSettingsStore를 만듭니다 이 ManagedSettingsStore에는 게임에 대한 제한이 포함되는데 Worklog가 모든 게임 웹 사이트를 차단하는 것이 포함합니다 Worklog에는 이 앱이 시작되자마자 SNS 앱과 웹 사이트를 차단하는 'Social'이라는 ManagedSettingsStore도 있습니다 하지만 Worklog를 사용할 때 아니야가 'Allow for Evenings' 버튼을 클릭하면 오후 5시에서 8시 사이에만 SNS를 허용하는 DeviceActivitySchedule을 생성합니다 오후 5시가 되면 DeviceActivityMonitor가 해당 ManagedSettingsStore인 'Social'에 대한 제한을 해제하죠 오후 8시가 되면 이 시간이 끝나 아니야의 기기에서 SNS와 웹 사이트를 다시 제한합니다 이런 질문들이 있을 수 있습니다 "'gaming' ManagedSettingsStore가 게임 웹 사이트를 제한했는데 "'social' ManagedSettingsStore의 모든 설정을 지우면 gaming' ManagedSettingsStore와 설정과 충돌합니까?" 그렇지 않습니다 항상 가장 제한적인 설정이 우선하므로 아니야의 기기에서 게임 웹 사이트는 여전히 제한된 상태로 유지됩니다 이 명명된 ManagedSettingsStore는 매우 강력한 기능이고 ManagedSettings를 사용하는 앱 개발을 훨씬 쉽게 만들죠 이게 전부가 아닙니다 DeviceActivity 프레임워크에도 매우 흥미로운 기능을 추가했어요 iOS 15에서는 DeviceActivity를 통해 앱과 웹 사이트에 대한 사용량 허용치와 사용 시간대에 반응했습니다 iOS 16에서는 DeviceActivity에는 앱에서 SwiftUI를 사용해 완전히 맞춤화된 사용 보고서를 만들 수 있게 됩니다 사용량 데이터는 새로운 확장점에 제공되어 사용자에게 표시될 데이터와 화면에 표현될 방식을 사용자 정의 할 수 있죠 이러한 보고서인 DeviceActivityReport는 최종 사용자에게 완벽한 보안과 더불어 사용자 경험을 완전히 개인화할 수 있게 합니다 Worklog에서 이렇게 DeviceActivityReport.Context와 DeviceActivityFilter를 설정할 수 있습니다 DeviceActivityReport.Context는 DeviceActivityData를 어떤 타입으로 그릴지 보고서에 전달하는 맞춤형 타입으로 생각할 수 있습니다 DeviceActivityFilter를 특정해 어떤 DeviceActivityReport.Contex든 시간대를 개인화할 수 있습니다 다음으로 DeviceActivityReportScene에 무엇을 표현할지 정하기 위해 DeviceActivityReportScene 내부에서 DeviceActivityReport.Contex를 정의합니다 여기서 content로 PieChartView.Configuration을 정의해 이 보고서에 대한 SwiftUI 뷰를 정합니다 그런 다음 makeConfiguration에서 아니야의 DeviceActivityData를 매핑해서 파이 차트 뷰를 설정합니다 DeviceActivity 프레임워크는 새로 사용량 데이터를 가져올 때마다 makeConfiguration을 호출하므로 직접 호출할 필요가 없습니다 여기서 아니야의 DeviceActivityData로 PieChartView.Configuration이 파이 차트 뷰에 대한 뷰 모델의 역할을 수행하는 것을 볼 수 있습니다 마지막으로 확장 프로그램의 body에서 DeviceActivityReport를 정의해 맞춤형 SwiftUI 보고서를 표현할 수 있습니다 Worklog용으로 만든 파이 차트 보고서는 DeviceActivityReport를 사용자화하는 여러 흥미로운 방법 중 하나일 뿐입니다 여기까지 iOS 16 Screen Time API 새 기능 소개를 마칩니다 보시다시피 Screen Time API는 핵심적인 제한과 기기 활동 모니터링과 같은 기능들은 계속해서 지원합니다 정리하자면 이제 개별 사용자가 옵션을 사용해 기기당 여러 응용 프로그램을 FamilyControls로 승인할 수 있습니다 그리고 ManagedSettingsStores는 이제 앱과 앱 확장 프로그램이 설정을 로컬에서 공유합니다 이제 결과적으로 앱에서 여러개의 명명된 ManagedSettingsStores를 관리할 수 있습니다 마지막으로 사용자화가 가능한 Device Activity에는 사용량 데이터를 사용자에게 공개하며 개인 정보를 보호하는 새로운 UI가 도입됩니다 이러한 개선 및 추가 사항들로 여러분들의 앱에 사용자가 더 많아질 것이라 믿습니다 이번 업데이트에 영감을 주시고 디지털 건강과 생산성 공간에 대한 여러분들의 기여에 감사드립니다 여러분들께서 Screen Time API를 사용하는 흥미로운 새 방법들이 기대됩니다 여러분들의 어떤 피드백도 환영하며 여러분들과 사용자들이 이 기술에 더 쉽게 접근할 수 있게 노력하겠습니다 고맙습니다
-
-
3:12 - Request aAhuthorization
// APP: Request Authorization import SwiftUI import FamilyControls @main struct Worklog: App { let center = AuthorizationCenter.shared var body: some Scene { WindowGroup { VStack {…} .onAppear { Task { do { try await center.requestAuthorization(for: .individual) } catch { print("Failed to enroll Aniyah with error: \(error)") } } } } }
-
5:13 - Managed settings store
// MONITOR EXTENSION: Handle Social category at start/end of interval import DeviceActivity import ManagedSettings class WorklogMonitor: DeviceActivityMonitor { let database = BarkDatabase() override func intervalDidStart(for activity: DeviceActivityName) { super.intervalDidStart(for: activity) let socialStore = ManagedSettingsStore(named: .social) socialStore.clearAllSettings() } override func intervalDidEnd(for activity: DeviceActivityName) { super.intervalDidEnd(for: activity) let socialStore = ManagedSettingsStore(named: .social) let socialCategory = database.socialCategoryToken socialStore.shield.applicationCategories = .specific([socialCategory]) socialStore.shield.webDomainCategories = .specific([socialCategory]) } }
-
7:02 - Device activity report and filter
// APP: Top-level view import SwiftUI import DeviceActivity extension DeviceActivityReport.Context { static let pieChart = Self(“Pie Chart") } @main struct Worklog: App { private let thisWeek = DateInterval(...) @State private var context: DeviceActivityReport.Context = .pieChart @State private var filter = DeviceActivityFilter(segment: .daily(during: thisWeek)) var body: some Scene { WindowGroup { GeometryReader { geometry in VStack(alignment: .leading) { DeviceActivityReport(context: context, filter: filter) .frame(height: geometry.size.height * 0.75) } }
-
7:24 - Device activity report
// REPORT EXTENSION: Configure Custom Device Activity Report import SwiftUI import DeviceActivity struct PieChartReport: DeviceActivityReportScene { let context: DeviceActivityReport.Context = .pieChart let content: (PieChartView.Configuration) -> PieChartView func makeConfiguration(representing data: [DeviceActivityData]) -> PieChartView.Configuration { var totalUsageByCategory: [ActivityCategory:TimeInterval] totalUsageByCategory = data.map(…) return PieChartView.Configuration(totalUsageByCategory: totalUsageByCategory) } }
-
7:55 - Configure Custom Device Activity Report
// REPORT EXTENSION: Configure Custom Device Activity Report import SwiftUI import DeviceActivity struct PieChartView: View { struct Configuration { let totalUsageByCategory: [ActivityCategory:TimeInterval] } let configuration: Configuration var body: some View { // A complex view that renders a bar graph based on Aniyah’s usage per category. PieChart(usage: configuration.totalUsageByCategory) } }
-
8:05 - Present custom report
// REPORT EXTENSION: Draw Custom Device Activity Report import SwiftUI import DeviceActivity @main struct WorklogReportExtension: DeviceActivityReportExtension { var body: some DeviceActivityReportScene { PieChartReport { configuration in PieChartView(configuration: configuration) } } }
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.