TipKit — Foundations Skill
Purpose
Route TipKit implementation tasks to the minimum required TipKit
Knowledge Contracts. v1 scope is in-app feature tips and onboarding hints
on iOS 17+ -- declaring tip content, gating display with rules and
donated events, one-time app configuration plus per-tip options, and
presenting/grouping/dismissing tips -- not custom TipViewStyle
authoring, not watchOS-specific presentation differences, and not
CloudKit sync of the tip datastore.
Routing
Load only the contracts relevant to the task. All paths relative to knowledge/tipkit/.
- Conforming a
structtoTip; implementingtitle/message/image; adding buttons viaactions/Tip.Action-> tip-declaration-and-content.md - Writing the
rulesproperty with the#Rule(_:)macro over aTips.Parameter-wrapped variable or aTips.Event; donating withsendDonation(_:)/donate(); combining multiple rules -> display-rules-and-event-triggers.md - Calling
Tips.configure(_:)at app launch;datastoreLocation(_:)/displayFrequency(_:); per-tipoptions(MaxDisplayCount,MaxDisplayDuration,IgnoresDisplayFrequency) -> tip-options-and-app-configuration.md - Presenting with
TipView/popoverTip(_:arrowEdge:action:)/TipUIView/TipUIPopoverViewController; grouping withTipGroup; dismissing withinvalidate(reason:)/Tip.InvalidationReason-> presenting-tips-and-tip-groups.md
Never load more than the contracts relevant to the specific question.
Stop Conditions
Stop and report if the requested topic has no matching Knowledge
Contract in knowledge/tipkit/ — do not guess or fall back to general
knowledge. Custom TipViewStyle/TipViewStyleConfiguration authoring
beyond the system default style is out of scope entirely -- not yet
built. watchOS-specific TipKit presentation differences are out of
scope entirely. Tips.ConfigurationOption.cloudKitContainer(_:) and any
cross-device sync of the tip datastore are out of scope entirely --
this is a real, documented TipKit capability (TipKit's datastore does
not sync by default, but can be configured to), not a fabricated
exclusion; report that boundary explicitly rather than routing to a
contract here.