Community-maintained Agent Skills for complete Swift and Apple-platform app delivery.
89%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Medium
Suggest reviewing before use
Covers the iOS 27 additions: on-screen entity annotations for Siri, new intent and entity protocols, and the AppIntentsTesting framework. API names come from Apple's App Intents updates page, the iOS 27 release notes, and WWDC26 sessions 343 and 295. Exact signatures are not reproduced here; confirm them in the 27 SDK.
Tell the system which entity is on screen so people can act on it by asking Siri.
| Situation | Annotation |
|---|---|
| One primary entity fills the screen | .userActivity on the view, with the entity attached to the NSUserActivity |
| One of many entities on screen | .appEntityIdentifier on each entity's view |
A List with selection | .appEntityIdentifier(forSelectionType:) on the list; the system fetches identifiers lazily and finds selected entities scrolled off screen |
| Custom canvas or non-standard subview | Custom view annotation |
| UIKit / AppKit | AppEntityAnnotatable, UICollectionViewAppIntentsDataSource, appEntityUIElementProvider |
Per-row annotations disappear when the row leaves the view hierarchy; use the collection annotation for long lists. Implement displayRepresentations on an entity query so Siri can read lightweight text without fetching full content. Annotate the real entity ID, not a related identifier (a test in session 295 caught a view passing a calendar identifier instead of the event ID).
| API | Purpose |
|---|---|
supportedModes (IntentModes) | Foreground, background, or both; read currentMode in perform() |
allowedExecutionTargets (IntentExecutionTargets) | Whether the app, an App Intents extension, or a widget extension may run an intent or entity query |
LongRunningIntent | Extends background runtime through performBackgroundTask, with progress |
CancellableIntent, IntentCancellationReason | Cleanup on cancellation; distinguishes cancel from timeout |
UndoableIntent | Reverses the intent's effect |
RunSystemShortcutIntent | Lets interactive widgets run shortcuts, system actions, or open another app |
ProvidesDialog | Return a custom IntentDialog |
ShowsSnippetView | Return a SwiftUI view as the response |
AppIntentError(description:) | Localized failure text, or wrap an error that conforms to CustomLocalizedStringResourceConvertible |
| API | Purpose |
|---|---|
SyncableEntity | Stable entity identifiers across devices so a task can continue on another device |
OwnershipProvidingEntity | Ownership state so Siri confirms destructive actions on shared or public entities. Conform only entities people can share; keep the state current. Siri treats entities as private by default |
RelevantEntities | Lets Apple Intelligence suggest media entities (songs, albums) during workouts |
IntentValueRepresentation | In transferRepresentation, bridges entities to system intent value types |
EntityCollection | Stores identifiers only; resolves AppEntity instances on demand |
AppUnionValue, AppUnionValueCasesProviding | Union-type Shortcuts parameters with picker UI |
IndexedEntityQuery | System retrieves indexed entities by identifier from Spotlight; supports reindexing |
IntentValueQuery | Structured search when entities are not all indexed ahead of time |
IntentDonationManager | Donate UI interactions |
.system.searchInApp (renamed from the iOS 17 .system search schema): lets people search in your app with Siri without indexed entities.NavigationSession start/stop) and Clock (stopwatch start, stop, pause, lap). AudioSearch pairs with IntentValueQuery.notes.createNote and notes.updateNote accept a name of type AttributedString. calendar.deleteEvents is renamed calendar.deleteEvent.CSSearchableIndex.indexAppEntities populates the Spotlight semantic index. UNMutableNotificationContent.appEntityIdentifiers annotates notifications. Now Playing appEntityIdentifiers are ordered most to least specific. AlarmConfiguration.appEntityIdentifier annotates alarms and timers.
Out-of-process testing of intents, entities, queries, Spotlight indexing, and view annotations without UI scripting.
Setup:
import AppIntentsTesting in an XCTestCase. The test target does not import app code; it needs only the app's bundle identifier.Core API (names from session 295):
IntentDefinitions(...) with the app bundle identifier exposes every intent, entity, and query.intents[...] returns an IntentDefinition; makeIntent builds an instance; run() executes in the app; read results through value (dynamic member lookup, e.g. result.value.title).AppEnum parameters take the raw string value. Custom types need IntentValueConvertibleWrapper.entities(matching:) on an entity definition runs its string query on device. Passing a string for an entity parameter calls the string query and uses the first match.spotlightQuery() returns Spotlight-indexed representations matching a string.viewAnnotations() on an entity definition returns the annotations the system sees on screen; assert the count and read entity.run() result into the next, like Shortcuts.Test-only intents seed and reset data and navigate directly to screens. Declare them inside #if DEBUG and mark them non-discoverable (session 295 uses isDiscoverable: false), so only tests can reach them. A test-only intent may wrap any app functionality, including features that do not use App Intents yet. Confirm the exact declaration in the 27 SDK.
Test layers: unit-test actions, data, and queries first; integration-test Spotlight, view annotations, and cross-app behavior; still test manually in Siri and Shortcuts.
OwnershipProvidingEntity, or letting ownership state go stale.#if DEBUG and non-discoverable settings.LongRunningIntent removes the need for cancellation handling.#available(iOS 27, *)..tessl-plugin
skills
accessorysetupkit
references
activitykit
adattributionkit
references
alarmkit
references
app-clips
app-intents
app-store-optimization
app-store-review
apple-on-device-ai
appmigrationkit
audioaccessorykit
references
authentication
references
avfoundation-audio
references
avkit
background-processing
references
browserenginekit
callkit
references
carplay
cloudkit
contacts-framework
references
core-bluetooth
references
core-data
core-haptics
references
core-motion
references
core-nfc
references
coreml
references
cryptokit
cryptotokenkit
debugging-instruments
device-integrity
references
energykit
references
eventkit
family-controls
references
financekit
focus-engine
gamekit
git-branching-workflow
references
healthkit
references
homekit
references
ios-accessibility
ios-app-workflow
references
ios-ettrace-performance
ios-localization
ios-memgraph-analysis
ios-networking
ios-simulator
references
metrickit
references
musickit
references
natural-language
paperkit
references
passkit
references
pdfkit
pencilkit
references
permissionkit
references
photokit
push-notifications
quicklook
references
realitykit
references
relevancekit
references
scenekit
sensorkit
shazamkit
references
speech-recognition
references
spritekit
storekit
swift-api-design-guidelines
swift-architecture
references
swift-charts
swift-codable
references
swift-code-review
swift-concurrency
swift-formatstyle
references
swift-language
swift-security
references
swift-testing
swiftdata
swiftlint
swiftui-animation
swiftui-gestures
references
swiftui-layout-components
swiftui-liquid-glass
references
swiftui-patterns
swiftui-performance
swiftui-responsive-layout
swiftui-uikit-interop
swiftui-webkit
tabletopkit
tipkit
vision-framework
weatherkit
references