Install
$ agentstack add skill-cruisediary-apple-app-review-skills-account-deletion-check ✓ 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.
About
Skill: Account Deletion Check
Purpose
Detects missing or insufficient in-app account deletion functionality required since June 30, 2022 under Guideline 5.1.1(v) for all apps that support account creation.
Apple Guideline
- Primary: 5.1.1(v) — Data Collection and Storage: Account Deletion
- Related: 5.1.1(i), 5.1.1(iii)
- Reference:
references/guidelines/5-legal.md
Real-World Rejection Cases
- Case: App supporting account creation rejected after June 30, 2022 for not having in-app account deletion
Source: https://developer.apple.com/news/?id=12m75xbj Root cause: Required since June 30, 2022 — all apps that support account creation must allow deletion within the app, not just via email request or external link
- Case: App offered "Deactivate Account" but not true deletion — rejected
Source: Apple Developer Forums thread/254032717 Root cause: Deactivation is not deletion — Apple requires permanent account and data deletion option; temporarily disabling access does not satisfy the requirement
- Case: App using Sign in with Apple did not revoke the Apple identity token when user deleted their account — rejected; account deletion was incomplete without credential revocation
Source: Apple TN3194 (developer.apple.com/documentation/technotes/tn3194) Root cause: Account deletion must include calling Apple's token revocation endpoint to invalidate the Sign in with Apple credential; local-only deletion without server-side token revocation is considered incomplete account deletion
Trigger
Invoke on any iOS/macOS project that includes user account creation, login, or sign-up flows.
Inputs
| Name | Type | Default | Description | |------|------|---------|-------------| | project_root | path | cwd | iOS/macOS project root | | shared_context | object | nil | Pre-collected context from appstore-full-audit Phase 1 |
Actions
Phase 1: Context Collection
Skip this phase if shared_context is provided.
Glob**/*.swift— collect all Swift source files.Glob**/Settings*View*or**/Account*View*or**/Profile*View*— locate account management UI files.Glob**/Auth*or**/Login*or**/Signup*or**/Register*— locate authentication flow files to confirm account creation exists.
Phase 2: Checks
- Account deletion UI element
Grep pattern "deleteAccount"|"Delete Account"|"delete_account"|"deleteUser"|"destroyAccount"|"Delete My Account"|"Remove Account" in **/*.swift. If absent → 🔴 CRITICAL. All apps with account creation must offer in-app deletion.
- Deactivation-only pattern without true deletion
Grep pattern "deactivate"|"suspend"|"disable" in **/*.swift — check account-settings context. If "deactivate"/"suspend" found but no "deleteAccount" found → 🔴 CRITICAL. Deactivation alone does not satisfy 5.1.1(v).
- Account deletion navigable from settings/profile
Glob **/Settings*View*, **/Profile*View*, **/Account*View* — Read each file. Verify a deletion action or navigation link to deletion is present. If account management views exist but deletion option is not surfaced → 🔴 CRITICAL.
- Backend deletion API call
Grep pattern "deleteAccount"|"DELETE /user"|"DELETE /account"|"DELETE /me"|deleteUser in **/*.swift — check network/API layer. If in-app deletion UI exists but no corresponding backend deletion call found → 🟠 HIGH. Account deletion must also erase backend data, not only local state.
Phase 3: Output
Collect all findings from Phase 2 and build the prioritised findings list below. Include file paths and line numbers. Omit tiers with no findings.
Output Format
## Account Deletion Check — Findings
### 🔴 CRITICAL — Guaranteed rejection
- [ ] TODO: Add in-app account deletion option — "Delete Account" action required for all apps with account creation — Guideline 5.1.1(v)
- [ ] TODO: Replace "Deactivate Account" with permanent "Delete Account" — deactivation does not satisfy Apple's deletion requirement — `AccountSettingsView.swift:44` — Guideline 5.1.1(v)
### 🟠 HIGH — Very likely rejection
- [ ] TODO: Confirm backend DELETE API is called when user triggers account deletion — no network deletion call found in account management code — `AccountViewModel.swift:112` — Guideline 5.1.1(v)
### 🟡 MEDIUM — Possible rejection
- [ ] TODO: Display a confirmation dialog explaining what data will be permanently deleted before finalizing account deletion
### 🟢 LOW — Best practice
- [ ] TODO: Follow Apple's account deletion guidance — inform users of any grace period or data retention policy as per applicable laws
Tools Used
Glob, Grep, Read
Constraints
- Read-only. No file edits.
- No network calls.
- Skip Phase 1 if
shared_contextis provided by orchestrating agent. - Works on Swift, Objective-C, React Native, Flutter projects.
Quick Commands
Run these in your project root to check manually:
# Check for account deletion implementation
!grep -rn "deleteAccount\|Delete Account\|delete_account\|destroyAccount\|deleteUser" . --include="*.swift"
# Check for deactivate-only (flag if no delete)
!grep -rn "deactivate\|suspend\|disable" . --include="*.swift" | grep -iv "disabled\|button\|view\|isEnabled"
# Check network layer for DELETE endpoint
!grep -rn "DELETE\|deleteAccount\|delete/user\|delete/account" . --include="*.swift" | grep -v "//"
Swift Anti-Pattern Reference
examples/swift/PrivacyPatterns.swift
Detection Steps
- Find target files
- Glob:
**/*.swift,**/*.m
- Search for rejection patterns
- Grep
createAccount\|signUp\|register\|SignUp\|CreateAccount— confirms account creation exists - Grep
deleteAccount\|delete_account\|removeAccount\|accountDeletion\|DeleteAccount— deletion implementation - Grep
deactivate\|suspend\|disable.*[Aa]ccount— deactivation-only pattern (insufficient) - Grep
ASAuthorizationAppleIDProvider\|revokeToken— Sign in with Apple token revocation
- Determine verdict
- Account creation found + no deletion pattern → 🔴 CRITICAL (Guideline 5.1.1(v), required since June 30, 2022)
- Only
deactivate/suspendfound withoutdelete→ 🔴 CRITICAL (deactivation ≠ deletion) - Sign in with Apple used + no
revokeToken→ 🟠 HIGH - Deletion found + revocation present → 🟢 pass
- Report
- File where account creation is found (line number)
- Confirm deletion is absent or only deactivation exists
- Fix: Implement Settings → Account → Delete Account with server-side data deletion and credential revocation
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: cruisediary
- Source: cruisediary/apple-app-review-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.