Skip to content
Back to skills

1487 Shortcuts 48e1440a

ASecurity

Registers intents for automatic discovery in Shortcuts app and Siri:

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
datagoswift

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 1487-shortcuts_48e1440a --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 1487 Shortcuts 48e1440a?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 1487 Shortcuts 48e1440a
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-1487-shortcuts-48e1440a/badge)](https://www.skillsdirectory.com/skills/tools-only-1487-shortcuts-48e1440a)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# Shortcuts Integration

## AppShortcutsProvider

Registers intents for automatic discovery in Shortcuts app and Siri:

```swift
struct LibraryAppShortcuts: AppShortcutsProvider {
    static var appShortcuts: [AppShortcut] {
        AppShortcut(
            intent: OpenCurrentlyReading(),
            phrases: [
                "Open Currently Reading in \(.applicationName)",
                "Show my reading list in \(.applicationName)"
            ],
            shortTitle: "Open Reading List",
            systemImageName: "books.vertical.fill"
        )
    }
}
```

| Property | Required | Purpose |
|----------|----------|---------|
| `intent` | Yes | The AppIntent instance to invoke |
| `phrases` | Yes | Siri trigger phrases (must include app name) |
| `shortTitle` | Yes | Brief description for UI |
| `systemImageName` | Yes | SF Symbol for visual display |

## Phrase Requirements

**Critical**: Every phrase MUST include `.applicationName`:

```swift
// BAD: Missing app name
phrases: ["Open my books", "Show reading list"]  // Won't be discoverable

// GOOD: Includes app name
phrases: [
    "Open my books in \(.applicationName)",
    "Show reading list with \(.applicationName)"
]
```

**Limits**:
- Maximum 1,000 total phrases per app (including parameter variations)
- Use natural language that reads well when spoken

## Localization

Phrases must be in `AppShortcuts.strings` (or `AppShortcuts.xcstrings` for iOS 18+):

```strings
// AppShortcuts.strings
"Open Currently Reading in ${applicationName}" = "Open Currently Reading in ${applicationName}";
```

**Critical**: Using `Localizable.strings` for phrases does NOT work.

## Parameterized Phrases

Include parameters using `\(.$parameterName)`:

```swift
AppShortcut(
    intent: OpenBook(),
    phrases: [
        "Open \(\.$book) in \(.applicationName)",
        "Read \(\.$book) with \(.applicationName)"
    ],
    shortTitle: "Open Book",
    systemImageName: "book"
)
```

**Warning**: Custom `AppEntity` parameters in phrases may prevent shortcuts from appearing. Test thoroughly.

## iOS 17+ Extensions

Define `AppShortcutsProvider` in App Intents extensions (not main app) for faster startup:

```swift
// In App Intents Extension target
struct BookShortcuts: AppShortcutsProvider {
    static var appShortcuts: [AppShortcut] { ... }
}
```

Extensions skip UI, analytics, and non-critical initialization.

## Discovery Issues

Common reasons shortcuts don't appear:

| Issue | Solution |
|-------|----------|
| Missing in Shortcuts app | Check Project Target > General > Supported Intents |
| Xcode version mismatch | Try Xcode beta or release; use `xcode-select` |
| App Intents in Swift Package | Move to main app bundle (pre-iOS 17) |
| Release build issues | Mark all App Intents as `public` |
| Metadata processor failure | Simplify custom types; check build logs |

## Migration from SiriKit

When migrating from INIntent to AppIntent:

```swift
struct OpenBookIntent: AppIntent {
    // Conform for migration
    static var intentClassName: String? = "OpenBookIntent"
}
```

**Warning**: `CustomIntentMigratedAppIntent` conformance breaks iOS 16 even with availability annotations.

## Multilingual Considerations

- App names in different languages than Siri's language cause recognition failures
- Test with Siri language matching app language settings
- Consider region-specific phrase variations

## Critical Anti-Patterns

```swift
// BAD: Phrase without app name
AppShortcut(
    intent: OpenBook(),
    phrases: ["Open my book"],  // Not discoverable by Siri
    ...
)

// GOOD: App name included
AppShortcut(
    intent: OpenBook(),
    phrases: ["Open my book in \(.applicationName)"],
    ...
)
```

```swift
// BAD: Localization in wrong file
// Localizable.strings - WRONG FILE
"Open book" = "Open book";

// GOOD: Use AppShortcuts.strings
// AppShortcuts.strings - CORRECT FILE
"Open book in ${applicationName}" = "Open book in ${applicationName}";
```

```swift
// BAD: Complex entity parameter in phrase (may fail)
AppShortcut(
    intent: ProcessBook(),
    phrases: ["Process \(\.$complexEntity) in \(.applicationName)"],
    ...
)

// GOOD: Simple parameters or none
AppShortcut(
    intent: ProcessBook(),
    phrases: ["Process current book in \(.applicationName)"],
    ...
)
```

## Review Questions

1. **Do all phrases include `.applicationName`?** Required for Siri discovery.
2. **Are phrases in `AppShortcuts.strings`?** `Localizable.strings` doesn't work.
3. **Is the app bundle correct?** Swift Package intents won't appear (pre-iOS 17).
4. **Are custom entity parameters tested in phrases?** Complex entities may break discovery.
5. **Is migration handled carefully?** `CustomIntentMigratedAppIntent` breaks iOS 16.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.