Install
$ agentstack add skill-jakeintech-claude-ios-skills-ios-privacy ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Privacy & Compliance
Generate all privacy and compliance artifacts required for App Store submission.
Reference Material
Load the API reference from [reference.md](reference.md) before scanning.
1. Privacy Manifest (PrivacyInfo.xcprivacy)
Scan
Search all Swift files for required-reason API usage:
# UserDefaults
grep -r "UserDefaults\|@AppStorage\|defaults\." --include="*.swift" .
# File timestamps
grep -r "attributesOfItem\|modificationDate\|creationDate" --include="*.swift" .
# System boot time
grep -r "systemUptime\|mach_absolute_time" --include="*.swift" .
# Disk space
grep -r "attributesOfFileSystem\|systemFreeSize\|systemSize" --include="*.swift" .
Generate
Create PrivacyInfo.xcprivacy in the app target directory:
NSPrivacyTracking
NSPrivacyTrackingDomains
NSPrivacyCollectedDataTypes
NSPrivacyAccessedAPITypes
For each detected API, add the appropriate entry with reason code. See reference.md for codes.
Integrate
- Add
PrivacyInfo.xcprivacyto the app target inproject.yml - Run
xcodegen generate - Build to verify no warnings
2. App Privacy Nutrition Labels
Scan
Search code for data collection patterns (see reference.md for mappings):
# Health data
grep -r "HKHealthStore\|HealthKit" --include="*.swift" .
# Location
grep -r "CLLocationManager\|CoreLocation" --include="*.swift" .
# Contacts
grep -r "CNContactStore\|Contacts" --include="*.swift" .
# Photos
grep -r "PHPhotoLibrary\|PhotosUI" --include="*.swift" .
# Device identifiers
grep -r "identifierForVendor\|ASIdentifierManager" --include="*.swift" .
Generate
Create appstore/privacy-labels.json:
{
"dataTypes": [
{
"type": "HEALTH_AND_FITNESS",
"purposes": ["APP_FUNCTIONALITY"],
"linkedToIdentity": false,
"usedForTracking": false
}
]
}
Only include data types that are actually detected in the code. Do not over-declare.
Upload
Upload via asc if available:
asc apps privacy update --app-id $APP_ID --data-file appstore/privacy-labels.json
If asc can't handle privacy labels, use computer-use MCP to navigate App Store Connect > App Privacy and fill in the form fields matching the generated JSON.
3. Export Compliance
Scan
# Check for custom encryption
grep -r "CCCrypt\|SecKey\|OpenSSL\|libsodium\|CryptoKit" --include="*.swift" .
Determine
- If ONLY standard HTTPS (URLSession, no custom crypto): set
ITSAppUsesNonExemptEncryption = falsein Info.plist - If custom encryption found: flag for user review, guide through compliance documentation
Output
Store determination in appstore/export-compliance.json:
{
"usesNonExemptEncryption": false,
"reason": "App uses only standard HTTPS via URLSession"
}
Verify ITSAppUsesNonExemptEncryption is set correctly in project.yml Info.plist properties.
4. Age Rating Questionnaire
Analyze
Read docs/product-vision/00-product-bounds.md for:
- Hard boundaries (content exclusions)
- Content description
- Target audience
Generate
Create appstore/age-rating.json with answers to each category:
{
"cartoonOrFantasyViolence": "NONE",
"realisticViolence": "NONE",
"profanityOrCrudeHumor": "INFREQUENT_OR_MILD",
"matureOrSuggestiveThemes": "INFREQUENT_OR_MILD",
"horrorOrFearThemes": "NONE",
"medicalTreatmentInformation": "NONE",
"alcoholTobaccoDrugUse": "NONE",
"simulatedGambling": "NONE",
"sexualContentOrNudity": "NONE",
"unrestrictedWebAccess": "NONE",
"gamblingWithRealCurrency": "NONE"
}
Present to user for review — age rating affects App Store placement and requires human judgment.
Upload
Upload via asc or guide through browser if API doesn't support age ratings directly.
5. App Review Preparation
Generate Review Notes
Read the app's functionality from CLAUDE.md and brand book. Write clear notes for Apple reviewers:
- What the app does
- How to use key features
- Any features that require explanation
Demo Account (if login required)
If the app requires authentication:
- Remind user to create a demo account
- Store credentials in
appstore/review-notes.json(add to .gitignore!) - Format for App Store Connect review info
{
"notes": "App description for reviewers...",
"demoAccount": {
"username": "",
"password": ""
},
"attachments": []
}
Routing App Coverage File
If the app uses location-based features:
- Explain which features are location-dependent
- Generate or guide creation of a .geojson routing coverage file
gitignore
Ensure appstore/review-notes.json is in .gitignore (contains test credentials).
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Jakeintech
- Source: Jakeintech/claude-ios-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.