[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1363":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":36,"readmeContent":37,"aiSummary":38,"trendingCount":15,"starSnapshotCount":15,"syncStatus":39,"lastSyncTime":40,"discoverSource":41},1363,"ios-marketing-capture","ParthJadhav\u002Fios-marketing-capture","ParthJadhav","Automate Multi-Locale asset creation for your iOS app.","",null,"Shell",249,14,236,0,1,5,13,3,49.33,"MIT License",false,"main",true,[26,27,28,29,30,31,32,33,34,35],"app-store","claude-code","codex","ios","localization","marketing","screenshots","skills","swiftui","xcode","2026-06-12 04:00:09","[![bloom-banner-01-light-tags-1500x500](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F31139b9d-1b89-44e8-b563-5bb7ba150b7b)](https:\u002F\u002Fbloom.parthjadhav.com)\n\n# iOS Marketing Capture\n\nA skill for AI-powered coding agents (Claude Code, Cursor, Windsurf, etc.) that automates marketing screenshot capture for SwiftUI iOS apps. It builds an in-app capture system, seeds demo data, snapshots every screen and UI element, and loops across all your locales automatically.\n\n#### Built for and used by Bloom - https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fbloom-coffee-shelf-recipe\u002Fid6759914524\n\n## What it does\n\n- Adds a `#if DEBUG`-gated capture system to your app target — zero production footprint\n- Seeds deterministic demo data so every screenshot looks populated and polished\n- Navigates to each screen programmatically via a step-based coordinator\n- Snapshots the full window including status bar, safe area, and presented sheets\n- Renders isolated elements (cards, widgets, charts) via `ImageRenderer` at 3x with transparency\n- Loops every locale automatically — one build, N relaunches with `-AppleLanguages`\n- Works with any SwiftUI navigation pattern: `TabView`, `NavigationStack`, `NavigationSplitView`\n\n## Install\n\n### Using npx skills (recommended)\n\n```bash\nnpx skills add ParthJadhav\u002Fios-marketing-capture\n```\n\nThis works with Claude Code, Cursor, Windsurf, OpenCode, Codex, and [40+ other agents](https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fskills#available-agents).\n\nInstall globally (available across all projects):\n\n```bash\nnpx skills add ParthJadhav\u002Fios-marketing-capture -g\n```\n\nInstall for a specific agent:\n\n```bash\nnpx skills add ParthJadhav\u002Fios-marketing-capture -a claude-code\n```\n\n### Manual (git clone)\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FParthJadhav\u002Fios-marketing-capture ~\u002F.claude\u002Fskills\u002Fios-marketing-capture\n```\n\n## Usage\n\nOnce installed, the skill triggers automatically when you ask your agent to:\n\n- Capture marketing screenshots for my iOS app\n- Generate locale screenshots across all languages\n- Render my widgets as isolated PNGs\n- Automate App Store screenshot capture\n\nOr just tell the agent what you need:\n\n```\n> Capture marketing screenshots for my app across all locales\n```\n\nThe agent will ask you about your screens, elements, locales, device, appearance, and seed data before writing any code.\n\n## Example prompts\n\nThese are good starting prompts because they provide context while still leaving room for the skill to guide the process.\n\n### Coffee app\n\n```text\nCapture marketing screenshots for my coffee tracking app.\nI want Home, Shelf, Coffee Detail, Brew Timer, and Settings.\nAlso render coffee cards and all my widgets as isolated elements.\nCapture across en, de, es, fr, ja.\n```\n\n### Habit tracker\n\n```text\nGenerate locale screenshots for my habit tracker app.\nI need the dashboard, habit detail, streak view, and settings.\nLight mode only, iPhone 17 simulator.\nAll 5 locales in my Localizable.xcstrings.\n```\n\n### Finance app\n\n```text\nCapture marketing assets for my finance app.\nI want the overview, transaction list, budget detail, and charts.\nRender the spending chart and category cards as isolated elements.\nEnglish and German only.\n```\n\n### Fitness app with widgets\n\n```text\nAutomate App Store screenshot capture for my workout app.\nCapture the main dashboard, workout detail mid-session, and history.\nRender all my WidgetKit widgets (small, medium, lock screen) as isolated PNGs.\n```\n\n## Better prompt tips\n\n- List the exact screens you want captured by tab name or navigation path\n- Mention any components you want rendered independently (cards, widgets, charts)\n- Specify locales explicitly or say \"all locales in my xcstrings\"\n- Say which simulator and iOS version you want\n- Mention if any screen needs to be captured in a non-default state (e.g. timer mid-countdown)\n- Say light only, dark only, or both\n\n## How it works\n\n### In-app capture mode, not XCUITest\n\nThe skill uses an in-app capture approach instead of XCUITest \u002F Fastlane:\n\n- **No test target surgery** — many projects have none, and adding one means fragile pbxproj edits\n- **Direct access to everything** — ViewModels, SwiftData, `ImageRenderer`, `UIWindow.drawHierarchy`\n- **Faster** — `xcodebuild build` once, then `simctl launch` per locale (no test-bundle overhead)\n- **Element renders require it** — `ImageRenderer` on widget views must run inside the app process\n\n### Step-based coordinator\n\nEach screenshot is a self-contained `CaptureStep`:\n\n```swift\nstruct CaptureStep {\n    let name: String                         \u002F\u002F \"01-home\"\n    let navigate: @MainActor () -> Void      \u002F\u002F put the app in the right state\n    let settle: Duration                     \u002F\u002F wait for animations\n    let cleanup: (@MainActor () -> Void)?    \u002F\u002F tear down before next step\n}\n```\n\nThe coordinator is a simple loop — no hardcoded screen sequences. The agent composes steps for your specific navigation architecture.\n\n### Navigation patterns\n\nThe skill covers three navigation architectures:\n\n| Pattern | How steps drive it |\n|---------|-------------------|\n| `TabView(selection:)` | `setTab(index)` |\n| `NavigationStack` + router | `router.push(.route)` \u002F `router.popToRoot()` |\n| `NavigationSplitView` | Set sidebar + detail selection bindings |\n\n### Element rendering\n\nIsolated components are rendered via `ImageRenderer` at 3x scale with natural background inside rounded corners and transparency outside:\n\n```swift\nMarketingElementHarness.renderElement(\n    name: \"card-morning-blend\",\n    width: 380,\n    cornerRadius: 20,\n    background: theme.background\n) {\n    CoffeeCard(coffee: coffee, theme: theme)\n        .padding(.horizontal, 16)\n        .padding(.vertical, 12)\n}\n```\n\nWidget rendering handles the quirks of rendering WidgetKit views outside the widget process (missing `containerBackground`, missing padding, `ProgressView` rendering bugs).\n\n## What gets generated\n\nThe skill guides the agent to create:\n\n```\nYourApp\u002F\n├── Debug\u002F\n│   └── MarketingCapture.swift      # Capture system (DEBUG-only)\n├── ContentView.swift               # Modified — DEBUG hook for seed + coordinator\n├── Views\u002F...\u002FTimerView.swift       # Modified — primed state hooks (if needed)\nscripts\u002F\n└── capture-marketing.sh            # Build + install + per-locale loop\n```\n\n### Output layout\n\n```\nmarketing\u002F\n    en\u002F\n        01-home.png\n        02-detail.png\n        03-settings.png\n        elements\u002F\n            card-morning-blend.png\n            widget-pulse-small.png\n            chart-cupping.png\n    de\u002F\n        ...\n    es\u002F\n        ...\n```\n\n## Known gotchas\n\nThe skill documents 11 real bugs discovered during development. These are all baked into the skill's guidance so the agent avoids them automatically:\n\n| # | Gotcha | What happens |\n|---|--------|--------------|\n| 1 | Live Activities persist across launches | Next locale crashes on stale SwiftData references |\n| 2 | Re-seeding per locale | CloudKit sync churn causes crashes |\n| 3 | VMs setup before seed | Hold stale empty snapshots |\n| 4 | Setting trigger binding to nil | Doesn't dismiss fullScreenCover — wrong screenshot |\n| 5 | NavigationPath can't be popped externally | Must capture clean stack before pushed detail |\n| 6 | `membershipExceptions` is an INCLUSION list | Widget target membership goes backwards |\n| 7 | `ImageRenderer` + `ProgressView` | Renders as prohibited symbol without explicit style |\n| 8 | `.containerBackground` outside WidgetKit | No-op — widget renders have no background |\n| 9 | iPhone 8 Plus gone on iOS 26 | Legacy 6.5\" simulator unavailable |\n| 10 | Locale launch argument format | Parens are mandatory: `(xx)` not `xx` |\n| 11 | SwiftUI animations in ImageRenderer | Captures frame 0, not the animated state |\n\n## Pairs well with\n\nUse [app-store-screenshots](https:\u002F\u002Fgithub.com\u002FParthJadhav\u002Fapp-store-screenshots) as a post-processing step to composite the captured PNGs into Apple-style marketing pages with device mockups, headlines, and gradients.\n\n## Requirements\n\n- Xcode 16+ (synchronized folder groups support)\n- iOS 17+ deployment target (for `ImageRenderer`, `@Observable`)\n- A simulator runtime matching your target iOS version\n- Python 3 (used by the shell script for JSON parsing)\n\n## Contributing\n\nContributions are welcome, especially around:\n\n- Support for additional navigation patterns\n- New gotcha documentation from real projects\n- Cross-agent compatibility improvements\n- Clearer docs and onboarding\n\n## License\n\nMIT\n","iOS Marketing Capture 是一个自动化生成多语言营销素材的工具，专为 SwiftUI iOS 应用设计。其核心功能包括在应用中构建基于 `#if DEBUG` 的截图系统、自动填充演示数据、遍历所有屏幕和 UI 元素并截取全窗口快照（含状态栏、安全区域及弹出视图），以及自动循环处理多种语言环境。此外，它还支持通过 `ImageRenderer` 以 3 倍分辨率渲染透明背景下的独立组件如卡片、小部件等。该工具非常适合需要为不同地区市场准备高质量视觉材料的应用开发者使用，尤其当目标是提高 App Store 上架效率或进行本地化营销时。",2,"2026-06-11 02:43:19","CREATED_QUERY"]