rshankras/privacy-publish
Turn drafted legal docs (privacy policy, terms) into hosted pages and set the App Store Connect Privacy Policy / Support / Marketing URLs via the ASC REST API. Use at Phase 6 / submission, after legal drafts exist. The App Privacy "nutrition label" stays manual (Apple exposes no API) — this prints the exact answers to click.
npx skills add https://github.com/rshankras/claude-code-apple-skills --skill privacy-publish
Close the "hosted legal pages + ASC URLs" gap: render .planning/legal/{privacy,terms}.md → host them → PATCH the Privacy/Support URLs onto the App Store version. The one thing with no API — the App Privacy nutrition label — is handed off as a precise checklist.
> Depends on the user's web infra, so ask once, remember. Hosting choice is theirs; the ASC URL-setting is the automatable part.
.planning/legal/privacy.md, .planning/legal/terms.md (from legal/privacy-policy)._shared/asc-api/ set up (README).ASC="python3 <path to asc.py>" — resolve asc.py relative to this SKILL.md file's location (../../_shared/asc-api/asc.py), never the project cwd. Known install locations:~/.claude/swiftship-skills/_shared/asc-api/asc.py.claude/skills/_shared/asc-api/asc.py (project) or ~/.claude/skills/_shared/asc-api/asc.py (global)_shared/ tree ships with the plugin.appInfoLocalization and appStoreVersionLocalization (get their ids first)..md if the host renders it).AskUserQuestion once, then remember in .planning/):POST /wp-json/wp/v2/pages with an application password.claude-in-chrome (detect → preview → confirm → act → fall back, per TOOL-HANDOFF.md).--apply):appInfoLocalizations (privacyPolicyUrl): $ASC PATCH /v1/appInfoLocalizations/<id> '{"data":{"type":"appInfoLocalizations","id":"<id>","attributes":{"privacyPolicyUrl":"https://…/privacy"}}}' --apply
appStoreVersionLocalizations (supportUrl, marketingUrl) — PATCH the current version's en-US localization id.Sources/PrivacyInfo.xcprivacy (e.g. *Data Not Collected*, no tracking) for the user to click in ASC ▸ App Privacy. Do not claim this step is automated.--apply (captured 2026-07).Take rshankras/privacy-publish from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.