Skip to content
Development
Skill

/app-extensions

Generates app extension infrastructure for Share Extensions, Action Extensions, Keyboard Extensions, and Safari Web Extensions with data sharing via App Groups. Use when user wants to add a share extension, action extension, keyboard extension, Safari web extension, or any app

From plugin
rshankras-apple-skills
603183 skills
Install
$ npx -y skills add rshankras/claude-code-apple-skills --skill app-extensions --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/app-extensions

Context preview

The summary Claude sees to decide when to auto-load this skill.

Generates app extension infrastructure for Share Extensions, Action Extensions, Keyboard Extensions, and Safari Web Extensions with data sharing via App Groups. Use when user wants to add a share extension, action extension, keyboard extension, Safari web extension, or any app

SKILL.md

app-extensions.SKILL.md
name: app-extensions
description: Generates app extension infrastructure for Share Extensions, Action Extensions, Keyboard Extensions, and Safari Web Extensions with data sharing via App Groups. Use when user wants to add a share extension, action extension, keyboard extension, Safari web extension, or any app extension type.
allowed-tools: [Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion]
last_verified: 2026-07-16
review_by: 2027-06-22
os_version: iOS 27 / macOS 27

App Extensions Generator

Generate production app extension infrastructure -- Share Extensions for receiving content from other apps, Action Extensions for manipulating content in-place, Keyboard Extensions for custom input, and Safari Web Extensions for browser integration. Includes App Group data sharing between the host app and extensions.

When This Skill Activates

Use this skill when the user:

  • Asks to "add a share extension" or "share sheet extension"
  • Wants to "receive content from other apps" or "accept shared content"
  • Mentions "action extension" or "content manipulation extension"
  • Wants to "add a custom keyboard" or "keyboard extension"
  • Asks about "Safari extension" or "Safari web extension"
  • Mentions "app extension" or "extension target" generically
  • Wants to "share data between app and extension" or "App Groups"

Pre-Generation Checks

1. Project Context Detection

  • [ ] Check deployment target (iOS 16+ / macOS 13+)
  • [ ] Check Swift version (requires Swift 5.9+)
  • [ ] Identify project structure (find .xcodeproj or Package.swift)
  • [ ] Identify source file locations

2. Existing Extension Detection

Search for existing extension targets:

Glob: **/*Extension*/*.swift, **/*Extension*/Info.plist
Grep: "NSExtensionPointIdentifier" or "NSExtensionPrincipalClass"

If existing extensions found:

  • Ask if user wants to add another or modify existing
  • Identify existing App Groups configuration

3. App Groups Detection

Check for existing App Groups setup:

Glob: **/*.entitlements
Grep: "com.apple.security.application-groups"

If App Groups exist, reuse the existing group identifier.

Configuration Questions

Ask user via AskUserQuestion:

1. **What type of extension?**

  • Share Extension (accept content from other apps, display share UI)
  • Action Extension (manipulate content in-place -- transform text, edit images)
  • Keyboard Extension (custom input keyboard with KeyboardViewController)
  • Safari Web Extension (inject JavaScript/CSS into web pages)

2. **What content types does it handle?**

  • Text (plain text, rich text)
  • URLs (web links, deep links)
  • Images (photos, screenshots)
  • Files (documents, PDFs, archives)
  • All (any content type)

3. **Does the extension need to share data with the main app?**

  • Yes -- needs App Groups (shared UserDefaults, shared file container, shared Keychain)
  • No -- extension is self-contained

Generation Process

Step 1: Read Templates

Read `templates.md` for production Swift code.

Step 2: Create Extension Files

Based on extension type selected:

**Share Extension:** 1. `ShareViewController.swift` -- Main share extension view controller with content handling 2. `Info.plist` -- Extension configuration with activation rules

**Action Extension:** 3. `ActionViewController.swift` -- Action extension with content manipulation 4. `Info.plist` -- Extension configuration

**Keyboard Extension:** 5. `KeyboardViewController.swift` -- Custom keyboard with UIInputViewController 6. `Info.plist` -- Keyboard extension configuration

**Safari Web Extension:** 7. `SafariWebExtensionHandler.swift` -- Native message handler 8. `manifest.json` -- Web extension manifest 9. `content.js` -- Content script template

Step 3: Create Shared Infrastructure

If data sharing selected: 10. `SharedDataManager.swift` -- App Group data sharing helper

Step 4: Determine File Location

Extensions are separate targets:

  • Share Extension -> `ShareExtension/`
  • Action Extension -> `ActionExtension/`
  • Keyboard Extension -> `KeyboardExtension/`
  • Safari Web Extension -> `SafariWebExtension/`
  • Shared code -> `Shared/` or within main app target

Output Format

After generation, provide:

Files Created

**Share Extension:**

ShareExtension/
├── ShareViewController.swift  # Main share extension view controller
└── Info.plist                 # Extension activation rules & config

**Action Extension:**

ActionExtension/
├── ActionViewController.swift # Content manipulation controller
└── Info.plist                 # Extension activation rules & config

**Keyboard Extension:**

KeyboardExtension/
├── KeyboardViewController.swift # UIInputViewController subclass
└── Info.plist                   # Keyboard extension config

**Safari Web Extension:**

SafariWebExtension/
├── SafariWebExtensionHandler.swift # Native message handler
└── Resources/
    ├── manifest.json               # Web extension manifest
    ├── content.js                  # Content script
    └── popup.html                  # Popup UI (optional)

**Shared (if data sharing enabled):**

Shared/
└── SharedDataManager.swift    # App Group data sharing

Integration Steps

**1. Add Extension Target in Xcode:**

  • File > New > Target
  • Select the extension type (Share, Action, Keyboard, Safari Web)
  • Configure bundle identifier: `com.yourapp.ShareExtension`
  • Xcode creates the target with boilerplate -- replace with generated code

**2. Configure App Groups (if data sharing):**

  • Select main app target > Signing & Capabilities > Add "App Groups"
  • Add group: `group.com.yourapp.shared`
  • Select extension target > Signing & Capabilities > Add "App Groups"
  • Add the same group identifier

**3. Share code between targets:**

  • Add shared files to both the app and extension targets
  • Or create a shared framework target

Extension Content Handling

**Accept shared URLs:**

if provider.hasItemConformingToTypeIdentifier(
Read more
Ships withrshankras-apple-skills

A collection of Claude Code skills for iOS, macOS, watchOS, visionOS, and Apple platform development. These skills help you plan and build apps, maintain code quality, ensure HIG compliance, and guide you from idea to App Store.

Get the whole plugin
Stats
603
Stars
51
Forks
Active
Maintenance
Swift
Language
MIT
License
16d ago
Last commit
9mo ago
Created

Repo: rshankras/claude-code-apple-skills

Other skills on rshankras-apple-skills.