skills/legal/privacy-policy/SKILL.md
Generate privacy policies, terms of service, and EULAs for Apple platform apps. Detects data collection patterns, third-party SDKs, and generates region-specific legal documents with Apple Privacy Nutrition Label mapping. Use when user needs legal documents or data collection disclosure for App Store submission.
npx skillsauth add rshankras/claude-code-apple-skills privacy-policyInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Generate ready-to-use privacy policies, terms of service, and EULAs tailored to your app's data practices, third-party services, and target markets.
Disclaimer: This skill generates template legal documents based on common indie app scenarios. Consult a qualified lawyer for apps handling sensitive data (health, financial, children's data), apps with complex data sharing arrangements, or apps operating in highly regulated industries. These templates are a strong starting point -- not a substitute for legal counsel.
Use this skill when the user:
Before generating documents, gather context from the project.
Glob: **/privacy*.md, **/privacy*.html, **/privacy*.txt
Glob: **/terms*.md, **/terms*.html, **/terms*.txt
Glob: **/eula*.md, **/eula*.html, **/eula*.txt
Glob: **/legal/**
If existing documents found, ask user whether to replace or update them.
Grep: "Firebase" or "GoogleAnalytics" or "Crashlytics"
Grep: "Mixpanel" or "Amplitude" or "PostHog"
Grep: "AdMob" or "AppLovin" or "UnityAds"
Grep: "FacebookSDK" or "GoogleSignIn" or "SignInWithApple"
Grep: "Sentry" or "Bugsnag" or "DataDog"
Grep: "RevenueCat" or "Adapty" or "Qonversion"
Grep: "TelemetryDeck" or "Plausible" or "CountlySDK"
Note detected SDKs to auto-populate data collection sections.
Grep: "UserDefaults" -- Local preferences storage
Grep: "CoreData" or "SwiftData" or "NSPersistentContainer" -- Local database
Grep: "CloudKit" or "CKContainer" -- Cloud sync
Grep: "URLSession" or "Alamofire" -- Network calls
Grep: "HealthKit" or "HKHealthStore" -- Health data
Grep: "CLLocationManager" or "CoreLocation" -- Location data
Grep: "AVCaptureSession" or "PHPhotoLibrary" -- Camera/photos
Grep: "Contacts" or "CNContactStore" -- Contacts access
Grep: "ATTrackingManager" -- App Tracking Transparency
Grep: "ASAuthorizationAppleIDProvider" -- Sign in with Apple
Grep: "NSCameraUsageDescription" or "NSPhotoLibraryUsageDescription"
Grep: "NSLocationWhenInUseUsageDescription" or "NSLocationAlwaysUsageDescription"
Grep: "NSHealthShareUsageDescription" or "NSHealthUpdateUsageDescription"
Grep: "NSContactsUsageDescription" or "NSMicrophoneUsageDescription"
Grep: "NSUserTrackingUsageDescription"
Ask the user via AskUserQuestion:
Read templates.md for the document templates.
Based on configuration answers, include or exclude sections:
| Answer | Sections Added | |--------|---------------| | No user data | Minimal privacy policy (no collection, no sharing) | | Anonymous analytics | Analytics disclosure, third-party services list | | Account with email | Account data, authentication, data retention | | Personal info | Full data collection, user rights, data portability | | Health/financial | Sensitive data handling, enhanced security, additional consent | | Children under 13 | COPPA section, parental consent, limited data collection |
Replace template placeholders with detected or user-provided values:
[APP_NAME] -- App display name[DEVELOPER_NAME] -- Developer or company name[CONTACT_EMAIL] -- Privacy contact email[EFFECTIVE_DATE] -- Document effective date[WEBSITE_URL] -- Developer website or privacy page URLInclude sections based on target markets:
GDPR (European Union users):
CCPA (California users):
DPDP (India users):
COPPA (children under 13):
Based on detected data practices, generate a mapping for App Store Connect:
Apple Privacy Nutrition Label Mapping
=====================================
Data Types to Declare:
- [ ] Contact Info: Email Address -- Used for: App Functionality, Account
- [ ] Identifiers: User ID -- Used for: App Functionality
- [ ] Usage Data: Product Interaction -- Used for: Analytics
- [ ] Diagnostics: Crash Data -- Used for: App Functionality
- [ ] Diagnostics: Performance Data -- Used for: Analytics
Data Linked to User: [List items linked to user identity]
Data Used to Track: [List items used for cross-app tracking, if any]
Tracking: [Yes/No -- triggers ATT requirement if Yes]
Generate documents in Markdown format. Place files based on user's hosting preference:
docs/privacy-policy.md, docs/terms-of-service.md, docs/eula.mdResources/Legal/privacy-policy.md, etc.docs/ with guidance for in-app integrationWhen submitting to the App Store, Apple asks about data practices. Map generated privacy policy to these questions:
| Apple Question | Where to Find Answer | |---------------|---------------------| | Do you or your third-party partners collect data? | "Information We Collect" section | | Data types collected | Privacy Nutrition Label mapping (Step 4) | | Is data linked to user identity? | "How We Use Information" section | | Is data used for tracking? | "Third-Party Services" section |
Declare these data types based on your app's practices:
| If Your App... | Declare These Types | |----------------|-------------------| | Has user accounts | Contact Info, Identifiers | | Uses analytics | Usage Data (Product Interaction) | | Has crash reporting | Diagnostics (Crash Data, Performance Data) | | Shows ads | Identifiers (Device ID), Usage Data | | Uses location | Location (Precise or Coarse) | | Accesses photos | Photos or Videos | | Accesses health data | Health & Fitness | | Uses Sign in with Apple | Contact Info (Email), Identifiers (User ID) |
ATT is required when your app:
ATT is NOT required for:
docs/ folder in your repo/docshttps://yourusername.github.io/yourapp/privacy-policy// Option 1: WKWebView for hosted HTML
import WebKit
struct LegalDocumentView: UIViewRepresentable {
let url: URL
func makeUIView(context: Context) -> WKWebView { WKWebView() }
func updateUIView(_ webView: WKWebView, context: Context) {
webView.load(URLRequest(url: url))
}
}
// Option 2: Bundled Markdown rendered as Text
struct PrivacyPolicyView: View {
var body: some View {
ScrollView {
Text(LocalizedStringKey(privacyPolicyMarkdown))
.padding()
.textSelection(.enabled)
}
.navigationTitle("Privacy Policy")
}
}
After generation, provide:
docs/
├── privacy-policy.md # Privacy policy with region-specific sections
├── terms-of-service.md # Terms of service (if requested)
└── eula.md # End-user license agreement (if requested)
Provide a checklist the user can follow in App Store Connect.
NSUserTrackingUsageDescription to Info.plistgenerators/consent-flow -- GDPR/CCPA consent UI generationgenerators/account-deletion -- Account deletion flow (App Store requirement)generators/permission-priming -- Pre-permission UI for ATTmonetization/ -- Subscription terms and pricing disclosuresdevelopment
Build, install, and launch an iOS app on a physical iPhone or iPad entirely from the command line (no Xcode GUI), using xcodebuild + devicectl. Use when the user wants to run, test, or screenshot their app on a real device without opening Xcode.
development
Comprehensive iOS development guidance including Swift best practices, SwiftUI patterns, UI/UX review against HIG, and app planning. Use for iOS code review, best practices, accessibility audits, or planning new iOS apps.
development
Build, install, launch, and screenshot an iOS app in the Simulator to verify a change visually. Use when the user wants to run the app, see a change live, screenshot the running app, or confirm a UI fix actually works (not just that it compiles).
development
Audits skills in this repo for consistency, API drift, and structural gaps. Produces a prioritized report grouped by severity (Critical/High/Medium/Low). Use when asked to "audit skills", "check the skill repo for drift", or when planning bulk skill cleanup. Read-only — does not apply fixes.