Lightweight, instantly-available versions of your iOS app for in-the-moment experiences or demos. Targets iOS 26+ / Swift 6.3 unless noted.
Works with
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionapp-clipsExecute the skills CLI command in your project's root directory to begin installation:
Fetches app-clips from dpearson2699/swift-ios-skills and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate app-clips. Access via /app-clips in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Create detailed user stories, acceptance criteria, and feature specs
Example
Generate user stories for 'password reset feature' with acceptance criteria, edge cases, and test scenarios
Reduce spec writing time by 50%, ensure comprehensive coverage
Research competitors, compare features, identify gaps
Example
Analyze 5 competitor products, create feature comparison matrix, suggest differentiation opportunities
Complete competitive research in 2 hours instead of 2 days
Evaluate features using frameworks (RICE, ICE, Kano) and create prioritized backlogs
Example
Score 20 feature ideas using RICE framework, generate prioritized roadmap with rationale
0
total installs
0
this week
372
GitHub stars
0
upvotes
Run in your terminal
0
installs
0
this week
372
stars
Lightweight, instantly-available versions of your iOS app for in-the-moment experiences or demos. Targets iOS 26+ / Swift 6.3 unless noted.
An App Clip is a separate target in the same Xcode project as your full app:
com.apple.developer.on-demand-install-capable entitlement and a Parent Application Identifiers entitlement linking back to the full app.com.example.MyApp.Clip.Use Swift packages or shared source files. Add files to both targets, or use the APPCLIP active compilation condition:
// In App Clip target Build Settings → Active Compilation Conditions: APPCLIP
#if !APPCLIP
// Full-app-only code (e.g., background tasks, App Intents)
#else
// App Clip specific code
#endif
Prefer local Swift packages for shared modules — add the package as a dependency of both targets.
Create a shared asset catalog included in both targets to avoid duplicating images and colors.
App Clips receive an NSUserActivity of type NSUserActivityTypeBrowsingWeb on launch. Handle it with onContinueUserActivity:
@main
struct DonutShopClip: App {
var body: some Scene {
WindowGroup {
ContentView()
.onContinueUserActivity(
NSUserActivityTypeBrowsingWeb
) { activity in
handleInvocation(activity)
}
}
}
private func handleInvocation(_ activity: NSUserActivity) {
guard let url = activity.webpageURL,
let components = URLComponents(url: url, resolvingAgainstBaseURL: true)
else { return }
// Extract path/query to determine context
let locationID = components.queryItems?
.first(where: { $0.name == "location" })?.value
// Update UI for this location
}
}
For UIKit scene-based apps, implement scene(_:willConnectTo:options:) for cold launch and scene(_:continue:) for warm launch.
Key rule: The full app must handle all invocation URLs identically — when a user installs the full app, it replaces the App Clip and receives all future invocations.
Configure experiences in App Store Connect after uploading a build containing the App Clip.
https://appclip.apple.com/id?=<bundle_id>&key=valueFor custom URLs (not the default Apple-generated link), add entries to the Associated Domains entitlement and host an AASA file:
appclips:example.com
App Clip binaries must stay within strict uncompressed size limits (measured via App Thinning Size Report):
| iOS Version | Maximum Uncompressed Size |
|---|---|
| iOS 15 and earlier | 10 MB |
| iOS 16 | 15 MB |
| iOS 17+ (digital invocations only) | 100 MB |
| iOS 17+ (via demo link, all invocations) | 100 MB |
The 100 MB limit on iOS 17+ for non-demo links requires: digital-only invocations, no physical invocation support (no App Clip Codes / NFC / QR), and the App Clip must not support iOS 16 or earlier.
Measure size: Archive the app → Distribute → Export as Ad Hoc/Development with App Thinning → check App Thinning Size Report.txt.
Use Background Assets to download additional content post-launch (e.g., game levels) if needed. App Clip downloads cannot use isEssential.
| Method | Requirements |
|---|---|
| App Clip Codes | Advanced experience or demo link; NFC-integrated or scan-only |
| NFC tags | Encode invocation URL in NDEF payload |
| QR codes | Encode invocation URL; works with default or advanced experience |
| Safari Smart Banners | Associate App Clip with website; add <meta> tag |
| Maps | Advanced experience with place association |
| Messages | Share invocation URL as text; limited preview with demo links |
| Siri Suggestions | Location-based; requires advanced experience for location suggestions |
| Other apps | iOS 17+; use Link Presentation or UIApplication.open(_:) |
Add this meta tag to your website to show the App Clip banner:
<meta name="apple-itunes-app"
content="app-id=YOUR_APP_ID, app-clip-bundle-id=com.example.MyApp.Clip,
app-clip-display=card">
When a user installs the full app, it replaces the App Clip. Use a shared App Group container to migrate data:
// In both targets: add App Groups capability with the same group ID
// App Clip — write data
func saveOrderHistory(_ orders: [Order]) throws {
guard let containerURL = FileManager.default.containerURL(
forSecurityApplicationGroupIdentifier: "group.com.example.myapp.shared"
) else { return }
let data = try JSONEncoder().encode(orders)
let fileURL = containerURL.appendingPathComponent("orders.json")
try data.write(to: fileURL)
}
// Full app — read migrated data
func loadMigratedOrders() throws -> [Order] {
guard let containerURL = FileManager.default.containerURL(
forSecurityApplicationGroupIdentifier: "group.com.example.myapp.shared"
) else { return [] }
let fileURL = containerURL.appendingPathComponent("orders.json")
guard FileManager.default.fileExists(atPath: fileURL.path) else { return [] }
let data = try Data(contentsOf: fileURL)
return try JSONDecoder().decode([Order].self, from: data)
}
// Write (App Clip)
let shared = UserDefaults(suiteName: "group.com.example.myapp.shared")
shared?.set(userToken, forKey: "authToken")
// Read (Full app)
let shared = UserDefaults(suiteName: "group.com.example.myapp.shared")
let token = shared?.string(forKey: "authToken")
Starting iOS 15.4, App Clip keychain items are accessible to the corresponding full app via the parent-application-identifiers and associated-appclip-app-identifiers entitlements. Use distinct kSecAttrLabel values to distinguish App Clip vs. full app entries.
Store the ASAuthorizationAppleIDCredential.user in the shared container so the full app can silently verify without re-prompting login.
Display an overlay recommending the full app from within the App Clip:
struct OrderCompleteView: View {
@State private var showOverlay = false
var body: some Make data-driven prioritization decisions faster
Draft PRDs, status updates, and stakeholder presentations
Example
Create executive summary of Q3 roadmap, monthly progress report, feature launch announcement
Save 3-5 hours/week on communication overhead
Prerequisites
Time Estimate
30-60 minutes to see productivity improvements
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use for user story writing, competitive research, roadmap prioritization, stakeholder communication, and PRD drafting. Best for reducing repetitive documentation and research work.
✗ Avoid when
Avoid for strategic product vision (requires deep customer empathy), pricing decisions (needs market and financial expertise), or when face-to-face customer discovery is more valuable than speed.
ceorkm/mobile-app-ui-design
mattpocock/skills
parcadei/continuous-claude-v3
cursor/plugins
ailabs-393/ai-labs-claude-skills
ailabs-393/ai-labs-claude-skills
app-clips has been reliable in day-to-day use. Documentation quality is above average for community skills.
app-clips reduced setup friction for our internal harness; good balance of opinion and flexibility.
app-clips is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
Keeps context tight: app-clips is the kind of skill you can hand to a new teammate without a long onboarding doc.
I recommend app-clips for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
Solid pick for teams standardizing on skills: app-clips is focused, and the summary matches what you get after install.
app-clips has been reliable in day-to-day use. Documentation quality is above average for community skills.
app-clips is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
Useful defaults in app-clips — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
app-clips is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
showing 1-10 of 49