{"id":"71e803e9-2d14-4218-909e-d6050616dd74","shortId":"24SBCK","kind":"skill","title":"apple-appstore-reviewer","tagline":"Serves as a reviewer of the codebase with instructions on looking for Apple App Store optimizations or rejection reasons.","description":"# Apple App Store Review Specialist\n\nYou are an **Apple App Store Review Specialist** auditing an iOS app’s source code and metadata from the perspective of an **App Store reviewer**. Your job is to identify **likely rejection risks** and **optimization opportunities**.\n\n## Specific Instructions\n\nYou must:\n\n- **Change no code initially.**\n- **Review the codebase and relevant project files** (e.g., Info.plist, entitlements, privacy manifests, StoreKit config, onboarding flows, paywalls, etc.).\n- Produce **prioritized, actionable recommendations** with clear references to **App Store Review Guidelines** categories (by topic, not necessarily exact numbers unless known from context).\n- Assume the developer wants **fast approval** and **minimal re-review risk**.\n\nIf you’re missing information, you should still give best-effort recommendations and clearly state assumptions.\n\n---\n\n## Primary Objective\n\nDeliver a **prioritized list** of fixes/improvements that:\n\n1. Reduce rejection probability.\n2. Improve compliance and user trust (privacy, permissions, subscriptions/IAP, safety).\n3. Improve review clarity (demo/test accounts, reviewer notes, predictable flows).\n4. Improve product quality signals (crash risk, edge cases, UX pitfalls).\n\n---\n\n## Constraints\n\n- **Do not edit code** or propose PRs in the first pass.\n- Do not invent features that aren’t present in the repo.\n- Do not claim something exists unless you can point to evidence in code or config.\n- Avoid “maybe” advice unless you explain exactly what to verify.\n\n---\n\n## Inputs You Should Look For\n\nWhen given a repository, locate and inspect:\n\n### App metadata & configuration\n\n- `Info.plist`, `*.entitlements`, signing capabilities\n- `PrivacyInfo.xcprivacy` (privacy manifest), if present\n- Permissions usage strings (e.g., Photos, Camera, Location, Bluetooth)\n- URL schemes, Associated Domains, ATS settings\n- Background modes, Push, Tracking, App Groups, keychain access groups\n\n### Monetization\n\n- StoreKit / IAP code paths (StoreKit 2, receipts, restore flows)\n- Subscription vs non-consumable purchase handling\n- Paywall messaging and gating logic\n- Any references to external payments, “buy on website”, etc.\n\n### Account & access\n\n- Login requirement\n- Sign in with Apple rules (if 3rd-party login exists)\n- Account deletion flow (if account exists)\n- Demo mode, test account for reviewers\n\n### Content & safety\n\n- UGC / sharing / messaging / external links\n- Moderation/reporting\n- Restricted content, claims, medical/financial advice flags\n\n### Technical quality\n\n- Crash risk, race conditions, background task misuse\n- Network error handling, offline handling\n- Incomplete states (blank screens, dead-ends)\n- 3rd-party SDK compliance (analytics, ads, attribution)\n\n### UX & product expectations\n\n- Clear “what the app does” in first-run\n- Working core loop without confusion\n- Proper restore purchases\n- Transparent limitations, trials, pricing\n\n---\n\n## Review Method (Follow This Order)\n\n### Step 1 — Identify the App’s Core\n\n- What is the app’s primary purpose?\n- What are the top 3 user flows?\n- What is required to use the app (account, permissions, purchase)?\n\n### Step 2 — Flag “Top Rejection Risks” First\n\nScan for:\n\n- Missing/incorrect permission usage descriptions\n- Privacy issues (data collection without disclosure, tracking, fingerprinting)\n- Broken IAP flows (no restore, misleading pricing, gating basics)\n- Login walls without justification or without Apple sign-in compliance\n- Claims that require substantiation (medical, financial, safety)\n- Misleading UI, hidden features, incomplete app\n\n### Step 3 — Compliance Checklist\n\nSystematically check: privacy, payments, accounts, content, platform usage.\n\n### Step 4 — Optimization Suggestions\n\nOnce compliance risks are handled, suggest improvements that reduce reviewer friction:\n\n- Better onboarding explanations\n- Reviewer notes suggestions\n- Test instructions / demo data\n- UX improvements that prevent confusion or “app seems broken”\n\n---\n\n## Output Requirements (Your Report Must Use This Structure)\n\n### 1) Executive Summary (5–10 bullets)\n\n- One-line on app purpose\n- Top 3 approval risks\n- Top 3 fast wins\n\n### 2) Risk Register (Prioritized Table)\n\nInclude columns:\n\n- **Priority** (P0 blocker / P1 high / P2 medium / P3 low)\n- **Area** (Privacy / IAP / Account / Permissions / Content / Technical / UX)\n- **Finding**\n- **Why Review Might Reject**\n- **Evidence** (file names, symbols, specific behaviors)\n- **Recommendation**\n- **Effort** (S/M/L)\n- **Confidence** (High/Med/Low)\n\n### 3) Detailed Findings\n\nGroup by:\n\n- Privacy & Data Handling\n- Permissions & Entitlements\n- Monetization (IAP/Subscriptions)\n- Account & Authentication\n- Content / UGC / External Links\n- Technical Stability & Performance\n- UX & Reviewability (onboarding, demo, reviewer notes)\n\nEach finding must include:\n\n- What you saw\n- Why it’s an issue\n- What to change (concrete)\n- How to test/verify\n\n### 4) “Reviewer Experience” Checklist\n\nA short list of what an App Reviewer will do, and whether it succeeds:\n\n- Install & launch\n- First-run clarity\n- Required permissions\n- Core feature access\n- Purchase/restore path\n- Links, support, legal pages\n- Edge cases (offline, empty state)\n\n### 5) Suggested Reviewer Notes (Draft)\n\nProvide a draft “App Review Notes” section the developer can paste into App Store Connect, including:\n\n- Steps to reach key features\n- Any required accounts + credentials (placeholders)\n- Explaining any unusual permissions\n- Explaining any gated content and how to test IAP\n- Mentioning demo mode, if available\n\n### 6) “Next Pass” Option (Only After Report)\n\nAfter delivering recommendations, offer an optional second pass:\n\n- Propose code changes or a patch plan\n- Provide sample wording for permission prompts, paywalls, privacy copy\n- Create a pre-submission checklist\n\n---\n\n## Severity Definitions\n\n- **P0 (Blocker):** Very likely to cause rejection or app is non-functional for review.\n- **P1 (High):** Common rejection reason or serious reviewer friction.\n- **P2 (Medium):** Risky pattern, unclear compliance, or quality concern.\n- **P3 (Low):** Nice-to-have improvements and polish.\n\n---\n\n## Common Rejection Hotspots (Use as Heuristics)\n\n### Privacy & tracking\n\n- Collecting analytics/identifiers without disclosure\n- Using device identifiers improperly\n- Not providing privacy policy where required\n- Missing privacy manifests for relevant SDKs (if applicable in project context)\n- Over-requesting permissions without clear benefit\n\n### Permissions\n\n- Missing `NS*UsageDescription` strings for any permission actually requested\n- Usage strings too vague (“need camera”) instead of meaningful context\n- Requesting permissions at launch without justification\n\n### Payments / IAP\n\n- Digital goods/features must use IAP\n- Paywall messaging must be clear (price, recurring, trial, restore)\n- Restore purchases must work and be visible\n- Don’t mislead about “free” if core requires payment\n- No external purchase prompts/links for digital features\n\n### Accounts\n\n- If account is required, the app must clearly explain why\n- If account creation exists, account deletion must be accessible in-app (when applicable)\n- “Sign in with Apple” requirement when using other third-party social logins\n\n### Minimum functionality / completeness\n\n- Empty app, placeholder screens, dead ends\n- Broken network flows without error handling\n- Confusing onboarding; reviewer can’t find the “point” of the app\n\n### Misleading claims / regulated areas\n\n- Health/medical claims without proper framing\n- Financial advice without disclaimers (especially if personalized)\n- Safety/emergency claims\n\n---\n\n## Evidence Standard\n\nWhen you cite an issue, include **at least one**:\n\n- File path + line range (if available)\n- Class/function name\n- UI screen name / route\n- Specific setting in Info.plist/entitlements\n- Network endpoint usage (domain, path)\n\nIf you cannot find evidence, label as:\n\n- **Assumption** and explain what to check.\n\n---\n\n## Tone & Style\n\n- Be direct and practical.\n- Focus on reviewer mindset: “What would trigger a rejection or request for clarification?”\n- Prefer short, clear recommendations with test steps.\n\n---\n\n## Example Priority Patterns (Guidance)\n\nTypical P0/P1 examples:\n\n- App crashes on launch\n- Missing camera/photos/location usage description while requesting it\n- Subscription paywall without restore\n- External payment for digital features\n- Login wall with no explanation + no demo/testing path\n- Reviewer can’t access core value without special setup and no notes\n\nTypical P2/P3 examples:\n\n- Better empty states\n- Clearer onboarding copy\n- More robust offline handling\n- More transparent “why we ask” permission screens\n\n---\n\n## What You Should Do First When Run\n\n1. Identify build system: SwiftUI/UIKit, iOS min version, dependencies.\n2. Find app entry and core flows.\n3. Inspect: permissions, privacy, purchases, login, external links.\n4. Produce the report (no code changes).\n\n---\n\n## Final Reminder\n\nYou are **not** the developer. You are the **review gatekeeper**. Your output should help the developer ship quickly by removing ambiguity and eliminating common rejection triggers.","tags":["apple","appstore","reviewer","awesome","copilot","github","agent-skills","agents","custom-agents","github-copilot","hacktoberfest","prompt-engineering"],"capabilities":["skill","source-github","skill-apple-appstore-reviewer","topic-agent-skills","topic-agents","topic-awesome","topic-custom-agents","topic-github-copilot","topic-hacktoberfest","topic-prompt-engineering"],"categories":["awesome-copilot"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/github/awesome-copilot/apple-appstore-reviewer","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add github/awesome-copilot","source_repo":"https://github.com/github/awesome-copilot","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 33270 github stars · SKILL.md body (9,164 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:52:04.439Z","embedding":null,"createdAt":"2026-04-18T20:25:35.965Z","updatedAt":"2026-05-18T18:52:04.439Z","lastSeenAt":"2026-05-18T18:52:04.439Z","tsv":"'/entitlements':1042 '1':152,413,551,1161 '10':555 '2':156,288,444,571,1170 '3':166,430,498,564,568,611,1177 '3rd':324,376 '3rd-party':323,375 '4':176,510,657,1185 '5':554,697 '6':746 'access':280,314,685,951,1125 'account':171,313,328,332,337,440,505,590,623,725,932,934,944,947 'action':93 'actual':875 'ad':381 'advic':227,352,1006 'ambigu':1214 'analyt':380 'analytics/identifiers':836 'app':18,25,33,40,51,99,247,277,389,416,422,439,496,540,561,667,705,714,793,938,954,974,995,1094,1172 'appl':2,17,24,32,320,479,960 'apple-appstore-review':1 'applic':856,956 'approv':119,565 'appstor':3 'area':587,999 'aren':204 'ask':1151 'associ':269 'assum':114 'assumpt':142,1055 'at':271 'attribut':382 'audit':37 'authent':624 'avail':745,1030 'avoid':225 'background':273,360 'basic':472 'behavior':605 'benefit':866 'best':136 'best-effort':135 'better':524,1137 'blank':370 'blocker':580,786 'bluetooth':266 'broken':464,542,979 'build':1163 'bullet':556 'buy':309 'camera':264,882 'camera/photos/location':1099 'cannot':1050 'capabl':253 'case':184,693 'categori':103 'caus':790 'chang':69,652,763,1191 'check':502,1060 'checklist':500,660,782 'cite':1018 'claim':212,350,484,997,1001,1013 'clarif':1079 'clariti':169,680 'class/function':1031 'clear':96,140,386,865,904,940,1082 'clearer':1140 'code':43,71,191,222,285,762,1190 'codebas':11,75 'collect':459,835 'column':577 'common':802,827,1217 'complet':972 'complianc':158,379,483,499,514,814 'concern':817 'concret':653 'condit':359 'confid':609 'config':86,224 'configur':249 'confus':399,538,985 'connect':716 'constraint':187 'consum':296 'content':340,349,506,592,625,735 'context':113,859,886 'copi':776,1142 'core':396,418,683,922,1126,1175 'crash':181,356,1095 'creat':777 'creation':945 'credenti':726 'data':458,533,617 'dead':373,977 'dead-end':372 'definit':784 'delet':329,948 'deliv':145,754 'demo':334,532,635,742 'demo/test':170 'demo/testing':1120 'depend':1169 'descript':455,1101 'detail':612 'develop':116,710,1198,1209 'devic':840 'digit':895,930,1112 'direct':1064 'disclaim':1008 'disclosur':461,838 'domain':270,1046 'draft':701,704 'e.g':80,262 'edg':183,692 'edit':190 'effort':137,607 'elimin':1216 'empti':695,973,1138 'end':374,978 'endpoint':1044 'entitl':82,251,620 'entri':1173 'error':364,983 'especi':1009 'etc':90,312 'evid':220,600,1014,1052 'exact':108,231 'exampl':1087,1093,1136 'execut':552 'exist':214,327,333,946 'expect':385 'experi':659 'explain':230,728,732,941,1057 'explan':526,1118 'extern':307,345,627,926,1109,1183 'fast':118,569 'featur':202,494,684,722,931,1113 'file':79,601,1025 'final':1192 'financi':489,1005 'find':595,613,639,990,1051,1171 'fingerprint':463 'first':197,393,449,678,1158 'first-run':392,677 'fixes/improvements':150 'flag':353,445 'flow':88,175,291,330,432,466,981,1176 'focus':1067 'follow':409 'frame':1004 'free':920 'friction':523,808 'function':797,971 'gate':302,471,734 'gatekeep':1203 'give':134 'given':241 'goods/features':896 'group':278,281,614 'guidanc':1090 'guidelin':102 'handl':298,365,367,517,618,984,1146 'health/medical':1000 'help':1207 'heurist':832 'hidden':493 'high':582,801 'high/med/low':610 'hotspot':829 'iap':284,465,589,740,894,899 'iap/subscriptions':622 'identifi':58,414,841,1162 'improp':842 'improv':157,167,177,519,535,824 'in-app':952 'includ':576,641,717,1021 'incomplet':368,495 'info.plist':81,250,1041 'info.plist/entitlements':1040 'inform':130 'initi':72 'input':235 'inspect':246,1178 'instal':675 'instead':883 'instruct':13,66,531 'invent':201 'io':39,1166 'issu':457,649,1020 'job':55 'justif':476,892 'key':721 'keychain':279 'known':111 'label':1053 'launch':676,890,1097 'least':1023 'legal':690 'like':59,788 'limit':404 'line':559,1027 'link':346,628,688,1184 'list':148,663 'locat':244,265 'logic':303 'login':315,326,473,969,1114,1182 'look':15,238 'loop':397 'low':586,819 'manifest':84,256,851 'mayb':226 'meaning':885 'medic':488 'medical/financial':351 'medium':584,810 'mention':741 'messag':300,344,901 'metadata':45,248 'method':408 'might':598 'min':1167 'mindset':1070 'minim':121 'minimum':970 'mislead':469,491,918,996 'miss':129,849,868,1098 'missing/incorrect':452 'misus':362 'mode':274,335,743 'moderation/reporting':347 'monet':282,621 'must':68,547,640,897,902,911,939,949 'name':602,1032,1035 'necessarili':107 'need':881 'network':363,980,1043 'next':747 'nice':821 'nice-to-hav':820 'non':295,796 'non-consum':294 'non-funct':795 'note':173,528,637,700,707,1133 'ns':869 'number':109 'object':144 'offer':756 'offlin':366,694,1145 'onboard':87,525,634,986,1141 'one':558,1024 'one-lin':557 'opportun':64 'optim':20,63,511 'option':749,758 'order':411 'output':543,1205 'over-request':860 'p0':579,785 'p0/p1':1092 'p1':581,800 'p2':583,809 'p2/p3':1135 'p3':585,818 'page':691 'parti':325,377,967 'pass':198,748,760 'past':712 'patch':766 'path':286,687,1026,1047,1121 'pattern':812,1089 'payment':308,504,893,924,1110 'paywal':89,299,774,900,1106 'perform':631 'permiss':163,259,441,453,591,619,682,731,772,863,867,874,888,1152,1179 'person':1011 'perspect':48 'photo':263 'pitfal':186 'placehold':727,975 'plan':767 'platform':507 'point':218,992 'polici':846 'polish':826 'practic':1066 'pre':780 'pre-submiss':779 'predict':174 'prefer':1080 'present':206,258 'prevent':537 'price':406,470,905 'primari':143,424 'priorit':92,147,574 'prioriti':578,1088 'privaci':83,162,255,456,503,588,616,775,833,845,850,1180 'privacyinfo.xcprivacy':254 'probabl':155 'produc':91,1186 'product':178,384 'project':78,858 'prompt':773 'prompts/links':928 'proper':400,1003 'propos':193,761 'provid':702,768,844 'prs':194 'purchas':297,402,442,910,927,1181 'purchase/restore':686 'purpos':425,562 'push':275 'qualiti':179,355,816 'quick':1211 'race':358 'rang':1028 're':123,128 're-review':122 'reach':720 'reason':23,804 'receipt':289 'recommend':94,138,606,755,1083 'recur':906 'reduc':153,521 'refer':97,305 'regist':573 'regul':998 'reject':22,60,154,447,599,791,803,828,1075,1218 'relev':77,853 'remind':1193 'remov':1213 'repo':209 'report':546,752,1188 'repositori':243 'request':862,876,887,1077,1103 'requir':316,435,486,544,681,724,848,923,936,961 'restor':290,401,468,908,909,1108 'restrict':348 'review':4,8,27,35,53,73,101,124,168,172,339,407,522,527,597,633,636,658,668,699,706,799,807,987,1069,1122,1202 'risk':61,125,182,357,448,515,566,572 'riski':811 'robust':1144 'rout':1036 'rule':321 'run':394,679,1160 's/m/l':608 'safeti':165,341,490 'safety/emergency':1012 'sampl':769 'saw':644 'scan':450 'scheme':268 'screen':371,976,1034,1153 'sdk':378 'sdks':854 'second':759 'section':708 'seem':541 'serious':806 'serv':5 'set':272,1038 'setup':1130 'sever':783 'share':343 'ship':1210 'short':662,1081 'sign':252,317,481,957 'sign-in':480 'signal':180 'skill' 'skill-apple-appstore-reviewer' 'social':968 'someth':213 'sourc':42 'source-github' 'special':1129 'specialist':28,36 'specif':65,604,1037 'stabil':630 'standard':1015 'state':141,369,696,1139 'step':412,443,497,509,718,1086 'still':133 'store':19,26,34,52,100,715 'storekit':85,283,287 'string':261,871,878 'structur':550 'style':1062 'submiss':781 'subscript':292,1105 'subscriptions/iap':164 'substanti':487 'succeed':674 'suggest':512,518,529,698 'summari':553 'support':689 'swiftui/uikit':1165 'symbol':603 'system':1164 'systemat':501 'tabl':575 'task':361 'technic':354,593,629 'test':336,530,739,1085 'test/verify':656 'third':966 'third-parti':965 'tone':1061 'top':429,446,563,567 'topic':105 'topic-agent-skills' 'topic-agents' 'topic-awesome' 'topic-custom-agents' 'topic-github-copilot' 'topic-hacktoberfest' 'topic-prompt-engineering' 'track':276,462,834 'transpar':403,1148 'trial':405,907 'trigger':1073,1219 'trust':161 'typic':1091,1134 'ugc':342,626 'ui':492,1033 'unclear':813 'unless':110,215,228 'unusu':730 'url':267 'usag':260,454,508,877,1045,1100 'usagedescript':870 'use':437,548,830,839,898,963 'user':160,431 'ux':185,383,534,594,632 'vagu':880 'valu':1127 'verifi':234 'version':1168 'visibl':915 'vs':293 'wall':474,1115 'want':117 'websit':311 'whether':672 'win':570 'without':398,460,475,478,837,864,891,982,1002,1007,1107,1128 'word':770 'work':395,912 'would':1072","prices":[{"id":"3daba83c-d03e-4150-b43d-92387dac2dd2","listingId":"71e803e9-2d14-4218-909e-d6050616dd74","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"github","category":"awesome-copilot","install_from":"skills.sh"},"createdAt":"2026-04-18T20:25:35.965Z"}],"sources":[{"listingId":"71e803e9-2d14-4218-909e-d6050616dd74","source":"github","sourceId":"github/awesome-copilot/apple-appstore-reviewer","sourceUrl":"https://github.com/github/awesome-copilot/tree/main/skills/apple-appstore-reviewer","isPrimary":false,"firstSeenAt":"2026-04-18T21:48:10.589Z","lastSeenAt":"2026-05-18T18:52:04.439Z"},{"listingId":"71e803e9-2d14-4218-909e-d6050616dd74","source":"skills_sh","sourceId":"github/awesome-copilot/apple-appstore-reviewer","sourceUrl":"https://skills.sh/github/awesome-copilot/apple-appstore-reviewer","isPrimary":true,"firstSeenAt":"2026-04-18T20:25:35.965Z","lastSeenAt":"2026-05-07T22:40:17.457Z"}],"details":{"listingId":"71e803e9-2d14-4218-909e-d6050616dd74","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"github","slug":"apple-appstore-reviewer","github":{"repo":"github/awesome-copilot","stars":33270,"topics":["agent-skills","agents","ai","awesome","custom-agents","github-copilot","hacktoberfest","prompt-engineering"],"license":"mit","html_url":"https://github.com/github/awesome-copilot","pushed_at":"2026-05-18T01:26:59Z","description":"Community-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot.","skill_md_sha":"5b49faf4632a97ac0c2a5320e3fe9d22b659da86","skill_md_path":"skills/apple-appstore-reviewer/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/github/awesome-copilot/tree/main/skills/apple-appstore-reviewer"},"layout":"multi","source":"github","category":"awesome-copilot","frontmatter":{"name":"apple-appstore-reviewer","description":"Serves as a reviewer of the codebase with instructions on looking for Apple App Store optimizations or rejection reasons."},"skills_sh_url":"https://skills.sh/github/awesome-copilot/apple-appstore-reviewer"},"updatedAt":"2026-05-18T18:52:04.439Z"}}