Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Generates infrastructure for exporting app content to social platforms (Instagram Stories, TikTok, Twitter/X) with platform-specific formatting, aspect ratios, and metadata. Use when user wants social media export, share to stories, or platform-specific sharing pipelines.
.claude/skills/rshankras-social-export/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-10 | ✗→✓ | ▲ Improved | 229% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 84% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 128% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 100% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 141% | 0% |
Generate a production social export pipeline with platform-specific formatters, aspect ratio handling, branding overlays, and a complete SwiftUI export flow. Different from share-card (which creates the visual image) — this handles the full export pipeline to each social platform.
Use this skill when the user:
Search for existing social export or sharing code:
Glob: **/*SocialExport*.swift, **/*ShareExport*.swift, **/*StoryExport*.swift
Grep: "UIActivityViewController" or "instagram-stories" or "SocialPlatform"If existing share infrastructure found:
Check for frameworks already in use:
Grep: "import Photos" or "import PhotosUI" or "import LinkPresentation"
Grep: "UIDocumentInteractionController" or "UIActivityViewController"If Photos framework is used, export pipeline can integrate save-to-library as a fallback.
Ask user via AskUserQuestion:
Read templates.md for production Swift code.
Generate these files:
SocialPlatform.swift — Enum for supported platforms with requirements (aspect ratio, max file size, URL scheme)ExportConfiguration.swift — Configuration struct for export options (platform, quality, branding, watermark)SocialExporter.swift — Protocol + platform-specific implementations for each social networkContentFormatter.swift — Formats content per platform (resize, crop to aspect ratio, add metadata)ExportPreviewView.swift — SwiftUI preview showing how content will look on each platformSocialExportSheet.swift — Complete export flow with platform picker, preview, and share actionCheck project structure:
Sources/ exists -> Sources/SocialExport/App/ exists -> App/SocialExport/SocialExport/After generation, provide:
SocialExport/
├── SocialPlatform.swift # Platform enum with requirements
├── ExportConfiguration.swift # Export options configuration
├── SocialExporter.swift # Protocol + platform exporters
├── ContentFormatter.swift # Resize, crop, metadata
├── ExportPreviewView.swift # Platform-specific preview
└── SocialExportSheet.swift # Complete export flow UIExport an image to Instagram Stories:
swiftlet config = ExportConfiguration( platform: .instagramStories, quality: .high, branding: .cornerLogo(UIImage(named: "AppLogo")!) ) let exporter = SocialExporter() try await exporter.export(image: myImage, configuration: config)
Present the export sheet:
swiftstruct ContentDetailView: View { let content: AppContent @State private var showExportSheet = false var body: some View { VStack { ContentView(content: content) Button("Share to Social") { showExportSheet = true } } .sheet(isPresented: $showExportSheet) { SocialExportSheet(image: content.renderedImage) } } }
Quick share with fallback:
swiftlet exporter = SocialExporter() // Tries platform-specific export first, falls back to share sheet try await exporter.export( image: shareImage, configuration: .init(platform: .instagramStories), fallbackToShareSheet: true, presentingViewController: viewController )
swift@Test func instagramStoriesExportFormatsCorrectly() async throws { let formatter = ContentFormatter() let testImage = UIImage.testSolidColor(.red, size: CGSize(width: 1000, height: 1000)) let formatted = try formatter.format(testImage, for: .instagramStories) // Instagram Stories expects 9:16 aspect ratio (1080x1920) #expect(formatted.size.width == 1080) #expect(formatted.size.height == 1920) } @Test func fallsBackToShareSheetWhenAppNotInstalled() async throws { let exporter = MockSocialExporter(installedApps: []) let config = ExportConfiguration(platform: .instagramStories) let result = try await exporter.export( image: UIImage.testSolidColor(.blue, size: CGSize(width: 500, height: 500)), configuration: config, fallbackToShareSheet: true ) #expect(result == .fallbackUsed) } @Test func brandingOverlayApplied() async throws { let formatter = ContentFormatter() let logo = UIImage.testSolidColor(.white, size: CGSize(width: 50, height: 50)) let config = ExportConfiguration( platform: .general, branding: .cornerLogo(logo) ) let image = UIImage.testSolidColor(.red, size: CGSize(width: 1080, height: 1080)) let result = try formatter.format(image, for: config.platform, branding: config.branding) // Image should still be the correct size after overlay #expect(result.size.width == 1080) #expect(result.size.height == 1080) }
Instagram Stories uses URL scheme + pasteboard for background images:
swift// Key details: // - URL scheme: instagram-stories://share?source_application=YOUR_APP_ID // - Pasteboard: set image data with key "com.instagram.sharedSticker.backgroundImage" // - Aspect ratio: 9:16 (1080x1920) // - Max file size: ~12 MB for images // - Supports background image, sticker image, and background color
Always provide UIActivityViewController as a fallback when the target app is not installed:
swift// Check canOpenURL before attempting URL scheme // If unavailable, present UIActivityViewController with formatted content // Include UTType metadata for proper previews in share sheet
For video content, use AVAssetExportSession to transcode to platform-required formats:
swift// Instagram/TikTok: H.264, 9:16, max 60s (Stories) or 3min (Reels) // Twitter/X: H.264, max 2:20, max 512 MB // General: H.264, original aspect ratio
instagram-stories in LSApplicationQueriesSchemes (Info.plist)source_application parameterData on the pasteboard, not UIImage| Platform | Stories | Feed Post | Reels/Short | |----------|---------|-----------|-------------| | Instagram | 9:16 (1080x1920) | 1:1 (1080x1080) or 4:5 (1080x1350) | 9:16 (1080x1920) | | TikTok | 9:16 (1080x1920) | 9:16 (1080x1920) | 9:16 (1080x1920) | | Twitter/X | 16:9 (1200x675) | 16:9 or 1:1 | N/A |
| Platform | Image Max | Video Max | |----------|-----------|-----------| | Instagram Stories | ~12 MB | ~100 MB (H.264) | | TikTok | ~10 MB | ~287 MB | | Twitter/X | 5 MB (JPEG/PNG) | 512 MB (H.264) |
UIApplication.shared.canOpenURL() requires LSApplicationQueriesSchemes in Info.plistUIPasteboard.general must be accessed on the main threadUIApplication.shared.open() must be called on the main threadgenerators/share-card — Generate the visual share image/cardgenerators/watermark-engine — Advanced watermark and branding overlaysOther measured skills in the registry, with their headline benchmark lift.