PermissionKit
Request permission from a parent or guardian to modify a child's communication rules. PermissionKit creates communication safety experiences that let children ask for exceptions to communication limits set by their parents.
PermissionKit communication experiences are available only through iMessage. Use it for parent/guardian approval flows, not as a general in-app contact permission, moderation, or chat-safety framework.
Contents
- Availability and Setup
- Core Concepts
- Checking Communication Limits
- Creating Permission Questions
- Requesting Permission with AskCenter
- SwiftUI Integration with PermissionButton
- Handling Responses
- Significant App Update Topic
- Common Mistakes
- Review Checklist
- References
Availability and Setup
Import PermissionKit. Do not invent PermissionKit entitlement keys; verify
current Apple documentation and Xcode capabilities before adding signing
requirements.
Use this centralized version matrix and verify it against the current SDK:
Core Concepts
PermissionKit manages a flow where:
- A child encounters a communication limit in your app
- Your app creates a
PermissionQuestiondescribing the request - The system presents the question to the child for them to send to their parent
- The parent reviews and approves or denies the request
- Your app receives a
PermissionResponsewith the parent's decision
Key Types
Checking Communication Limits
Use CommunicationLimits.current to check whether the system already knows a
communication handle for your app. This is not an "are communication limits
enabled?" probe. If limits are not enabled, AskCenter.shared.ask(_:in:)
throws AskError.communicationLimitsNotEnabled; handle that path when asking.
knownHandles(in:) also requires the calling app to have a non-nil, nonempty
bundle identifier. Corrected code should guard Bundle.main.bundleIdentifier
before calling it.
Creating Communication Handles
Creating Permission Questions
Build a PermissionQuestion with the contact information and communication
action type.
Using CommunicationTopic with Person Information
Provide display names and avatars for a richer permission prompt.
Communication Actions
Requesting Permission with AskCenter
Use AskCenter.shared to request that the child send the permission question
to their parent or guardian. The async ask call starts the send flow; parent
decisions arrive later through responses(for:). If the child cancels the send
flow, the system does not deliver a PermissionResponse for that question.
SwiftUI Integration with PermissionButton
PermissionButton is a SwiftUI view that triggers the permission flow when
tapped. It uses the same response model as AskCenter: observe responses and
model a pending/canceled state instead of assuming every tap produces a parent
decision.
For richer SwiftUI flows, custom topics, and long-lived managers, read references/permissionkit-patterns.md [blocked].
Handling Responses
Listen for permission responses asynchronously. Track pending questions by
question.id, and give the UI a retry or expiration path because a child can
cancel the iMessage send flow without producing a response.
When combining known-handle checks with response handling, carry forward the
bundle-identifier guard from knownHandles(in:).
PermissionChoice Properties
Significant App Update Topic
Request permission for significant app updates that require parental approval. Your app determines what counts as significant based on applicable regulations and should consult qualified legal counsel for compliance interpretation. Use concise, understandable descriptions that state the concrete change parents are approving.
Common Mistakes
Review Checklist
- iMessage-only routing understood before choosing PermissionKit
- The centralized availability matrix is applied to every API in use
-
CommunicationHandlecreated with correctKind(phone, email, custom) - Known-handle examples guard a non-nil, nonempty bundle identifier before
knownHandles(in:) - Person information includes name components for a clear permission prompt
- Communication actions match the app's actual communication capabilities
- Response handling updates UI on the main actor
- Error states provide clear guidance to the user
References
- Extended patterns (response handling, multi-topic, UIKit): references/permissionkit-patterns.md [blocked]
- PermissionKit framework
- AskCenter
- PermissionQuestion
- PermissionButton
- PermissionResponse
- CommunicationTopic
- CommunicationHandle
- CommunicationLimits
- SignificantAppUpdateTopic
- AskError
- Creating a communication experience
