
-
PermissionKit으로 자녀의 안전 강화하기
PermissionKit을 이용해 앱에서 자녀의 커뮤니케이션 안전을 강화하는 방법을 알아보세요. 이와 같이 새로운 프레임워크를 사용하여 연령에 맞는 커뮤니케이션 경험을 만들고 Family Sharing을 활용하여 부모의 승인을 받는 방법을 보여드립니다. 메시지와 원활하게 연동되는 권한 요청을 구현하고, 부모의 답변을 처리하며, 자녀인 사용자를 위한 UI를 조정하는 방법을 학습할 수 있습니다. 이 세션을 최대한 활용하려면 WWDC25에서 ‘앱에서 연령에 맞는 경험 제공하기'를 먼저 시청하는 것이 좋습니다.
챕터
- 0:00 - 서론
- 2:40 - PermissionKit 소개
- 3:26 - 자녀를 위해 UI 조정하기
- 4:38 - '질문'을 위한 경험 만들기
- 7:02 - 부모/법적 보호자의 답변
- 10:27 - 자녀를 보호하기 위한 추가 방법
리소스
- Declared Age Range
- Design safe and age‑appropriate experiences for your apps and games
- PermissionKit
관련 비디오
WWDC25
-
비디오 검색…
안녕하세요, 저는 Family 팀의 엔지니어인 Andrew입니다 ‘PermissionKit으로 자녀의 안전 강화하기’ 세션에 오신 것을 환영합니다
자녀를 안전하게 보호하는 것은 부모의 가장 중요한 책임이죠 디지털 환경에서 자녀의 안전은 자녀와 부모 또는 보호자 간의 대화에서 시작됩니다
특히 자녀가 온라인에서 누구와 소통하는지는 매우 중요합니다 이러한 대화를 앱에서 시작하기는 어려울 수 있으며 상당한 기술적 오버헤드가 발생합니다 부모가 자녀와 소통하기에 가장 좋은 위치는 이미 많이 사용하고 있는 앱인 메시지입니다 iOS, iPadOS, macOS 26에서 PermissionKit을 채택하면 메시지에서 자녀와 부모가 대화를 나눌 수 있습니다
PermissionKit을 사용하면 자녀가 새로운 사람과 소통하기 위해 부모에게 승인을 요청할 수 있죠 이 세션에서는 먼저 PermissionKit 프레임워크를 소개하겠습니다
그다음 이 새로운 API를 통해 자녀의 안전을 고려하며 앱의 UI를 조정하는 방법을 보여 드릴게요
이어서, 메시지로 자녀가 부모나 보호자에게 승인을 요청할 수 있는 커뮤니케이션 승인 질문을 만드는 방법을 다루고
부모나 보호자의 답변을 듣고 응답하는 방법을 보여 드리며 마무리하겠습니다 이 비디오에서는 앱에 통신 기능이 구현되어 있으며 모든 사용자의 연령이나 연령 범위를 확인할 방법이 있다고 가정하겠습니다 제가 보여 드릴 PermissionKit API는 현재 사용자가 어린이로 확인된 경우에만 사용해야 합니다 현재 사용자가 어린이인지 확인하기 위한 자체 계정 시스템이 없다면 새로운 Declared Age Range API를 사용하세요
부모는 자녀가 자신의 계정과 연결된 연령 범위를 공유하도록 허용할 수 있으며 개발자는 이 범위를 Declared Age Range API를 통해 요청할 수 있죠 WWDC25의 ‘앱에서 연령에 맞는 경험 제공하기’로 자세히 알아보세요
PermissionKit이 여러분의 앱에 적합한지 결정할 때 고려해야 할 사항이 몇 가지 더 있습니다
PermissionKit은 사용자의 가족 공유 그룹을 활용하여 어린이를 부모 및 보호자와 연결합니다
즉, 사용자가 가족 공유 그룹의 일원이어야 PermissionKit의 모든 기능을 활용할 수 있습니다 요청이 생성되었을 때 자녀가 가족 공유 그룹에 속하지 않으면 API는 기본 응답을 반환합니다 또한 부모나 보호자가 자녀에 대해 커뮤니케이션 제한을 활성화해야 합니다 커뮤니케이션 제한이 활성화되지 않았을 때도 API가 기본 응답을 반환합니다
먼저 PermissionKit을 소개해 드리겠습니다 PermissionKit은 요청자와 승인 부여자 모두를 위해 일관되고 우수한 승인 경험을 빠르고 쉽게 만들 수 있도록 하는 새 프레임워크입니다 iOS, iPadOS, macOS 26에서 PermissionKit을 채택하면 온라인에서 자녀를 안전하게 보호할 수 있습니다 PermissionKit을 사용하면 메시지 앱에서 자녀와 가족 공유 그룹에 속한 부모 또는 보호자 사이에 대화를 시작할 수 있습니다 앱에서 자녀는 메시지를 통해 새로운 사람과의 커뮤니케이션을 위한 승인을 요청할 수 있죠 이에 따라 생성된 메시지 대화에서 부모는 직접 자녀의 요청을 승인하거나 거부할 수 있습니다
이제 PermissionKit을 채택하는 방법을 설명할게요 먼저 연령에 맞게 UI를 조정하는 방법부터 다루겠습니다 Landmarks 앱에서는 랜드마크를 보고 관련 정보를 확인할 수 있죠 좋아하는 랜드마크에 대해 사용자들이 대화를 나눌 수 있도록 앱에 새 채팅 기능을 추가하는 예시를 보여 드릴게요 Landmarks는 모든 연령대를 대상으로 한 앱이므로 PermissionKit을 구현하기에 좋습니다
자녀 보호를 위해 엡에서 모르는 발신자가 보낸 콘텐츠는 숨겨야죠 메시지 미리보기, 프로필 사진 등 어린이에게 부적절할 수 있는 기타 민감한 콘텐츠가 여기에 해당합니다
우선 CommunicationLimits 싱글톤의 knownHandles(in:) 메서드에 await를 적용하는 방법이 있습니다 이 API는 handle 집합을 입력으로 받아 최적화된 검색을 실행하고 시스템에서 알려진 handle의 하위 집합을 반환합니다 자체 데이터베이스에 정보가 있다면 API에 제공할 수 있습니다 이미 자체 시스템에 데이터가 있다면 완전히 새로 시작하지 않아도 됩니다 그다음, 어린이가 상호 작용하려는 handle 또는 handle 집합이 이미 알려진 handle만 포함하는지 확인합니다 handle이 알려진 경우에만 가려진 콘텐츠를 표시하세요
다음으로, 어린이가 부모로부터 승인을 요청할 수 있도록 질문을 생성하고 전송하는 방법을 설명하겠습니다 PermissionKit은 자녀의 승인 요청에 대한 세부 정보를 모두 포함하는 질문 추상화를 제공합니다 각 질문에는 이 질문을 자세히 설명하는 topic이 포함되어 있습니다 예를 들어, CommunicationTopic은 자녀가 소통하려는 사용자 또는 사용자 그룹에 대한 모든 정보를 포함합니다 이 정보에는 사용자의 handle이 최소한 포함됩니다 구체적으로는 사용자의 전화번호, 이메일 주소 사용자 이름과 같은 식별자가 있죠
이제 코드를 살펴보겠습니다 알 수 없는 handle을 전달하는 PermissionQuestion을 만듭니다
특정 handle에 대한 메타데이터도 추가할 수 있습니다 메타데이터는 가능한 한 많이 추가하는 것이 좋습니다 제공된 메타데이터는 시스템에 의해 부모 및 보호자에게 표시되며 자녀의 요청을 승인하거나 거부할 때 도움이 될 수 있습니다 메타데이터를 추가하려면 CommunicationTopic을 생성하세요
CommunicationTopic은 PersonInformation을 사용합니다
PersonInformation에는 handle, 이름, 이미지에 대한 어포던스가 있습니다 topic에 action을 설정할 수도 있습니다
선택된 action은 자녀가 지정된 사용자와 어떻게 커뮤니케이션을 시도하고 있는지와 일치해야 합니다
선택된 action에 따라 시스템이 부모에게 요청을 표시할 때 사용할 문구가 결정됩니다
이 예시에서는 message를 사용했지만 call, video 등 다른 요소도 제공할 수 있습니다
마지막으로 사용자 정의된 communicationTopic으로 PermissionQuestion을 초기화합니다
이제, 아까 만든 PermissionQuestion을 사용하여 SwiftUI 뷰 내에서 CommunicationLimitsButton을 초기화합니다
자녀가 버튼을 탭하면 시스템 알림이 표시되며 자녀는 메시지를 통해 부모 및 보호자에게 질문을 전송할지 선택할 수 있습니다
UIKit 앱의 경우 CommunicationLimits 싱글톤을 사용하여 자녀의 기기에서 Ask 흐름을 시작하세요 시스템이 UI를 표시할 때 사용할 UIViewController를 전달해야 합니다
AppKit 앱에서도 CommunicationLimits 싱글톤을 사용하여 자녀의 기기에서 Ask 흐름을 시작할 수 있습니다 NSWindow를 제공하면 됩니다
승인 요청 경험에 관한 내용은 여기까지입니다 이제 부모나 보호자가 선택한 응답을 처리하는 일만 남았습니다 부모가 메시지 내에서 응답하면 자녀의 기기 백그라운드에서 앱이 실행됩니다 이러한 응답은 수신될 때마다 처리해야 합니다
앱이 실행된 직후 CommunicationLimits 싱글톤에서 AsyncSequence를 가져와 백그라운드 작업에서 반복하면 승인 업데이트를 받았을 때 앱에서 알 수 있습니다 응답이 수신되면 UI를 업데이트하거나 자체 데이터베이스에 새로운 데이터를 게시할 수 있습니다
이게 전부입니다 매우 간단하죠 이 모든 과정이 Landmarks에서 어떻게 진행되는지 설명하겠습니다 왼쪽 기기는 자녀의 기기이며 오른쪽 기기는 부모의 기기입니다 자녀의 기기에서 Landmarks는 새 채팅 뷰를 표시하고 있죠
알 수 없는 모든 handle의 메시지 미리보기는 기본적으로 자녀로부터 숨겨져 있습니다
이러한 대화 중 하나를 탭하면 메시지 내용이 자녀로부터 숨겨져 있으며 부모나 보호자로부터 승인을 요청해야 답장할 수 있다고 알립니다
자녀가 커뮤니케이션 제한 버튼을 탭하면 알림이 표시됩니다 이 알림을 통해 자녀는 부모와 보호자에게 메시지를 전송하는 것에 동의할 수 있습니다 또한 자녀는 부모나 보호자로부터 스크린 타임 암호를 받는 방식으로 직접 승인을 받을 수도 있습니다 자녀가 알림에서 승인을 요청하는 옵션을 탭하면 메시지 작성 윈도우가 표시됩니다 수신자 필드에 자녀의 가족 공유 그룹에 속한 부모와 보호자가 미리 입력되고 요청 내용은 텍스트 뷰에 표시됩니다
자녀는 ‘이름 추가 또는 편집’ 버튼을 탭하여 이 사용자에 대해 이름을 지정할 수 있습니다 PermissionQuestion API를 통해 사용자에 대한 메타데이터를 제공했다면 그 메타데이터가 여기에 표시됩니다 이 메타데이터는 부모 및 보호자가 자신의 기기에서 요청을 검토할 때 표시됩니다
자녀가 전송 버튼을 탭하면 다른 iMessage와 마찬가지로 요청이 부모 및 보호자에게 전송됩니다
이제 부모의 기기에 주목하세요 부모가 메시지를 통해 자녀의 요청을 받았습니다
부모는 이 말풍선에서 바로 거부하거나 요청을 검토하도록 선택할 수 있습니다
검토하기로 한 경우, 이 요청에 대한 추가 정보를 본 다음 요청을 승인하거나 거부할 수 있죠
부모가 어떤 선택을 하든 자녀는 부모의 선택을 알리는 알림을 자동으로 받게 됩니다 알림이 자녀에게 전달될 때 부모의 선택이 백그라운드에서 앱으로 바로 전달됩니다 UI와 로컬 캐시를 업데이트하거나 서버에 정보를 게시하는 것과 같은 방식으로 이 선택에 응답하세요
부모가 승인했으므로 자녀는 Landmarks에서 이 사용자의 메시지를 보고 답장할 수 있습니다 지금까지 PermissionKit을 채택하는 방법을 다루었습니다 앱에서 자녀의 안전을 강화할 때 고려할 만한 사항이 있습니다 PermissionKit에서 얻은 정보를 자체 서버에 저장하여 PermissionKit을 기반으로 자체 웹사이트와 같은 Apple 플랫폼 외 환경에도 유사한 경험을 추가하세요 그리고 PermissionKit만 사용하지 마세요 Apple이 제공하는 다른 가족 및 자녀의 안전 관련 API가 앱에 적절한지 확인해 보세요 다음은 Apple의 API로 자녀를 보호하는 방법의 예시입니다 새로운 Sensitive Content Analysis API는 라이브 스트리밍 영상 통화에서 과도한 노출을 감지하고 차단하여 커뮤니케이션에서 자녀의 안전을 강화합니다 새로운 Declared Age Range API는 어린이에게 안전하고 연령에 맞는 경험을 구축할 수 있도록 합니다
Screen Time 프레임워크는 부모와 보호자가 자녀의 웹 사용을 감독하는 데 필요한 도구를 제공합니다 마지막으로 Family Controls 프레임워크는 앱에서 자체 유해 콘텐츠 차단 기능을 제공할 수 있도록 돕습니다
PermissionKit으로 앱에서 자녀의 안전을 개선하는 방법을 배웠으니 다음 활동을 해보세요 먼저 각 사용자의 연령 범위를 파악하세요 자체 서버의 데이터나 새로운 Declared Age Range API를 사용할 수 있습니다 그다음, 어린이를 고려하여 앱의 UI를 조정하고 PermissionKit을 채택하세요 부모 및 보호자의 승인을 요청하는 질문을 구현하고 응답을 처리하세요
PermissionKit을 소개하는 세션을 시청해 주셔서 감사합니다
-
-
4:03 - Tailor your UI for children
import PermissionKit let knownHandles = await CommunicationLimits.current.knownHandles(in: conversation.participants) if knownHandles.isSuperset(of: conversation.participants) { // Show content } else { // Hide content }
-
5:15 - Create a question
import PermissionKit var question = PermissionQuestion(handles: [ CommunicationHandle(value: "dragonslayer42", kind: .custom), CommunicationHandle(value: "progamer67", kind: .custom) ])
-
5:38 - Create a question - additional metadata
import PermissionKit let people = [ PersonInformation( handle: CommunicationHandle(value: "dragonslayer42", kind: .custom), nameComponents: nameComponents, avatarImage: profilePic ), PersonInformation( handle: CommunicationHandle(value: "progamer67", kind: .custom) ) ] var topic = CommunicationTopic(personInformation: people) topic.actions = [.message] var question = PermissionQuestion(communicationTopic: topic)
-
6:25 - Ask a question - SwiftUI
import PermissionKit import SwiftUI struct ContentView: View { let question: PermissionQuestion<CommunicationTopic> var body: some View { // ... CommunicationLimitsButton(question: question) { Label("Ask Permission", systemImage: "paperplane") } } }
-
6:43 - Ask a question - UIKit
import PermissionKit import UIKit try await CommunicationLimits.current.ask(question, in: viewController)
-
6:54 - Ask a question - AppKit
import PermissionKit import AppKit try await CommunicationLimits.current.ask(question, in: window)
-
7:19 - Parent/guardian responses
import PermissionKit import SwiftUI struct ChatsView: View { @State var isShowingResponseAlert = false var body: some View { List { // ... } .task { let updates = CommunicationLimits.current.updates for await update in updates { // Received a response! self.isShowingResponseAlert = true } } } }
-
-
- 0:00 - 서론
PermissionKit은 iOS, iPadOS, macOS 26용 새로운 프레임워크로, 권한 요청을 간소화하고 새로운 커뮤니케이션 승인을 위해 자녀와 부모 또는 보호자 간의 메시지 대화를 용이하게 해줍니다.
- 2:40 - PermissionKit 소개
PermissionKit을 사용하면 자녀는 메시지 앱 내에서 부모나 보호자에게 허가를 요청하여 온라인으로 새로운 사람들과 커뮤니케이션할 수 있습니다. 프레임워크는 가족 공유 그룹을 활용하고 커뮤니케이션 제한을 활성화해야 합니다. 이 서비스는 앱 내에서 자녀들과 부모들이 온라인 상호작용에 관해 공개적으로 대화할 수 있도록 하여 개발자가 자녀들과 부모들이 더 안전하게 커뮤니케이션할 수 있는 환경을 조성하도록 돕도록 설계되었습니다.
- 3:26 - 자녀를 위해 UI 조정하기
PermissionKit은 연령대에 적절한 앱을 만드는 데 도움이 됩니다. Landmarks 예제 앱의 경우, 새로운 채팅 기능을 통해 자녀들을 위해 알 수 없는 발신자가 보낸 콘텐츠를 숨깁니다. 커뮤니케이션 제한 ‘knownHandles(in:)’ 메서드를 사용하여 시스템이나 데이터베이스가 핸들을 인식하는지 확인하고 알려진 핸들의 자녀들에게만 콘텐츠를 표시합니다.
- 4:38 - '질문'을 위한 경험 만들기
자녀들이 부모들에게 보낼 수 있는 승인 요청 질문을 만들어 보세요. 이러한 질문으로는 자녀들이 연락하고 싶어 하는 사람(핸들, 이름, 이미지)과 커뮤니케이션 방법(메시지, 전화, 영상 통화)에 대한 세부 정보를 포함한 커뮤니케이션과 같은 주제가 있을 수 있습니다. ‘CommunicationTopic’으로 ‘PermissionQuestion’을 초기화한 다음 ‘CommunicationLimitsButton’을 만들어 시스템 프롬프트를 트리거하여 자녀들이 메시지를 통해 부모에게 승인을 요청하도록 할 수 있습니다. UIKit 및 AppKit 앱은 커뮤니케이션 제한 싱글톤을 사용하여 자녀들의 기기에서 질문 흐름을 시작할 수 있습니다.
- 7:02 - 부모/법적 보호자의 답변
메시지에서 부모의 응답을 받으면 자녀들의 기기에서 백그라운드로 앱이 실행됩니다. 그런 다음 앱은 커뮤니케이션 제한 싱글톤에서 ‘AsyncSequence’를 가져와서 권한 업데이트를 모니터링합니다. 시스템에서 응답을 받으면 앱이 UI 또는 데이터베이스를 적절히 업데이트합니다. Landmarks 앱 예제에서 앱은 부모의 허락을 받을 때까지 자녀들이 알 수 없는 핸들에서 오는 메시지의 미리보기와 내용을 숨깁니다. 자녀들은 새로운 연락처와 커뮤니케이션하도록 허가를 요청할 수 있고 부모는 메시지 앱에서 이러한 요청을 검토하고 승인하거나 거부할 수 있습니다. 그러면 자녀의 앱에 부모의 결정이 통보되어 승인된 경우 자녀는 메시지를 보고 이에 응답할 수 있습니다.
- 10:27 - 자녀를 보호하기 위한 추가 방법
앱에 라이브 스트리밍 내 누드 감지, 사용자 연령 확인, 보호자 관리 기능 활성화 등 아동 안전을 강화하는 새로운 API와 프레임워크가 추가되었습니다. 사용자 연령을 파악하고, 앱 UI를 조정하며, PermissionKit을 구현하여 자녀들을 위해 연령에 적합하고 안전한 환경을 만듭니다.