{"id":"71e803e9-2d14-4218-909e-d6050616dd74","shortId":"24SBCK","kind":"skill","title":"Apple Appstore Reviewer","tagline":"Awesome Copilot skill by Github","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"],"capabilities":["skill","source-github","category-awesome-copilot"],"categories":["awesome-copilot"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/github/awesome-copilot/apple-appstore-reviewer","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"install_from":"skills.sh"}},"qualityScore":"0.300","qualityRationale":"deterministic score 0.30 from registry signals: · indexed on skills.sh · published under github/awesome-copilot","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:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T17:40:17.640Z","embedding":null,"createdAt":"2026-04-18T20:25:35.965Z","updatedAt":"2026-04-22T17:40:17.640Z","lastSeenAt":"2026-04-22T17:40:17.640Z","tsv":"'/entitlements':1027 '1':137,398,536,1146 '10':540 '2':141,273,429,556,1155 '3':151,415,483,549,553,596,1162 '3rd':309,361 '3rd-party':308,360 '4':161,495,642,1170 '5':539,682 '6':731 'access':265,299,670,936,1110 'account':156,298,313,317,322,425,490,575,608,710,917,919,929,932 'action':78 'actual':860 'ad':366 'advic':212,337,991 'ambigu':1199 'analyt':365 'analytics/identifiers':821 'app':10,18,25,36,84,232,262,374,401,407,424,481,525,546,652,690,699,778,923,939,959,980,1079,1157 'appl':1,9,17,305,464,945 'applic':841,941 'approv':104,550 'appstor':2 'area':572,984 'aren':189 'ask':1136 'associ':254 'assum':99 'assumpt':127,1040 'at':256 'attribut':367 'audit':22 'authent':609 'avail':730,1015 'avoid':210 'awesom':4 'background':258,345 'basic':457 'behavior':590 'benefit':851 'best':121 'best-effort':120 'better':509,1122 'blank':355 'blocker':565,771 'bluetooth':251 'broken':449,527,964 'build':1148 'bullet':541 'buy':294 'camera':249,867 'camera/photos/location':1084 'cannot':1035 'capabl':238 'case':169,678 'categori':88 'category-awesome-copilot' 'caus':775 'chang':54,637,748,1176 'check':487,1045 'checklist':485,645,767 'cite':1003 'claim':197,335,469,982,986,998 'clarif':1064 'clariti':154,665 'class/function':1016 'clear':81,125,371,850,889,925,1067 'clearer':1125 'code':28,56,176,207,270,747,1175 'codebas':60 'collect':444,820 'column':562 'common':787,812,1202 'complet':957 'complianc':143,364,468,484,499,799 'concern':802 'concret':638 'condit':344 'confid':594 'config':71,209 'configur':234 'confus':384,523,970 'connect':701 'constraint':172 'consum':281 'content':325,334,491,577,610,720 'context':98,844,871 'copi':761,1127 'copilot':5 'core':381,403,668,907,1111,1160 'crash':166,341,1080 'creat':762 'creation':930 'credenti':711 'data':443,518,602 'dead':358,962 'dead-end':357 'definit':769 'delet':314,933 'deliv':130,739 'demo':319,517,620,727 'demo/test':155 'demo/testing':1105 'depend':1154 'descript':440,1086 'detail':597 'develop':101,695,1183,1194 'devic':825 'digit':880,915,1097 'direct':1049 'disclaim':993 'disclosur':446,823 'domain':255,1031 'draft':686,689 'e.g':65,247 'edg':168,677 'edit':175 'effort':122,592 'elimin':1201 'empti':680,958,1123 'end':359,963 'endpoint':1029 'entitl':67,236,605 'entri':1158 'error':349,968 'especi':994 'etc':75,297 'evid':205,585,999,1037 'exact':93,216 'exampl':1072,1078,1121 'execut':537 'exist':199,312,318,931 'expect':370 'experi':644 'explain':215,713,717,926,1042 'explan':511,1103 'extern':292,330,612,911,1094,1168 'fast':103,554 'featur':187,479,669,707,916,1098 'file':64,586,1010 'final':1177 'financi':474,990 'find':580,598,624,975,1036,1156 'fingerprint':448 'first':182,378,434,663,1143 'first-run':377,662 'fixes/improvements':135 'flag':338,430 'flow':73,160,276,315,417,451,966,1161 'focus':1052 'follow':394 'frame':989 'free':905 'friction':508,793 'function':782,956 'gate':287,456,719 'gatekeep':1188 'github':8 'give':119 'given':226 'goods/features':881 'group':263,266,599 'guidanc':1075 'guidelin':87 'handl':283,350,352,502,603,969,1131 'health/medical':985 'help':1192 'heurist':817 'hidden':478 'high':567,786 'high/med/low':595 'hotspot':814 'iap':269,450,574,725,879,884 'iap/subscriptions':607 'identifi':43,399,826,1147 'improp':827 'improv':142,152,162,504,520,809 'in-app':937 'includ':561,626,702,1006 'incomplet':353,480 'info.plist':66,235,1026 'info.plist/entitlements':1025 'inform':115 'initi':57 'input':220 'inspect':231,1163 'instal':660 'instead':868 'instruct':51,516 'invent':186 'io':24,1151 'issu':442,634,1005 'job':40 'justif':461,877 'key':706 'keychain':264 'known':96 'label':1038 'launch':661,875,1082 'least':1008 'legal':675 'like':44,773 'limit':389 'line':544,1012 'link':331,613,673,1169 'list':133,648 'locat':229,250 'logic':288 'login':300,311,458,954,1099,1167 'look':223 'loop':382 'low':571,804 'manifest':69,241,836 'mayb':211 'meaning':870 'medic':473 'medical/financial':336 'medium':569,795 'mention':726 'messag':285,329,886 'metadata':30,233 'method':393 'might':583 'min':1152 'mindset':1055 'minim':106 'minimum':955 'mislead':454,476,903,981 'miss':114,834,853,1083 'missing/incorrect':437 'misus':347 'mode':259,320,728 'moderation/reporting':332 'monet':267,606 'must':53,532,625,882,887,896,924,934 'name':587,1017,1020 'necessarili':92 'need':866 'network':348,965,1028 'next':732 'nice':806 'nice-to-hav':805 'non':280,781 'non-consum':279 'non-funct':780 'note':158,513,622,685,692,1118 'ns':854 'number':94 'object':129 'offer':741 'offlin':351,679,1130 'onboard':72,510,619,971,1126 'one':543,1009 'one-lin':542 'opportun':49 'optim':48,496 'option':734,743 'order':396 'output':528,1190 'over-request':845 'p0':564,770 'p0/p1':1077 'p1':566,785 'p2':568,794 'p2/p3':1120 'p3':570,803 'page':676 'parti':310,362,952 'pass':183,733,745 'past':697 'patch':751 'path':271,672,1011,1032,1106 'pattern':797,1074 'payment':293,489,878,909,1095 'paywal':74,284,759,885,1091 'perform':616 'permiss':148,244,426,438,576,604,667,716,757,848,852,859,873,1137,1164 'person':996 'perspect':33 'photo':248 'pitfal':171 'placehold':712,960 'plan':752 'platform':492 'point':203,977 'polici':831 'polish':811 'practic':1051 'pre':765 'pre-submiss':764 'predict':159 'prefer':1065 'present':191,243 'prevent':522 'price':391,455,890 'primari':128,409 'priorit':77,132,559 'prioriti':563,1073 'privaci':68,147,240,441,488,573,601,760,818,830,835,1165 'privacyinfo.xcprivacy':239 'probabl':140 'produc':76,1171 'product':163,369 'project':63,843 'prompt':758 'prompts/links':913 'proper':385,988 'propos':178,746 'provid':687,753,829 'prs':179 'purchas':282,387,427,895,912,1166 'purchase/restore':671 'purpos':410,547 'push':260 'qualiti':164,340,801 'quick':1196 'race':343 'rang':1013 're':108,113 're-review':107 'reach':705 'reason':789 'receipt':274 'recommend':79,123,591,740,1068 'recur':891 'reduc':138,506 'refer':82,290 'regist':558 'regul':983 'reject':45,139,432,584,776,788,813,1060,1203 'relev':62,838 'remind':1178 'remov':1198 'repo':194 'report':531,737,1173 'repositori':228 'request':847,861,872,1062,1088 'requir':301,420,471,529,666,709,833,908,921,946 'restor':275,386,453,893,894,1093 'restrict':333 'review':3,12,20,38,58,86,109,153,157,324,392,507,512,582,618,621,643,653,684,691,784,792,972,1054,1107,1187 'risk':46,110,167,342,433,500,551,557 'riski':796 'robust':1129 'rout':1021 'rule':306 'run':379,664,1145 's/m/l':593 'safeti':150,326,475 'safety/emergency':997 'sampl':754 'saw':629 'scan':435 'scheme':253 'screen':356,961,1019,1138 'sdk':363 'sdks':839 'second':744 'section':693 'seem':526 'serious':791 'set':257,1023 'setup':1115 'sever':768 'share':328 'ship':1195 'short':647,1066 'sign':237,302,466,942 'sign-in':465 'signal':165 'skill':6 'social':953 'someth':198 'sourc':27 'source-github' 'special':1114 'specialist':13,21 'specif':50,589,1022 'stabil':615 'standard':1000 'state':126,354,681,1124 'step':397,428,482,494,703,1071 'still':118 'store':11,19,37,85,700 'storekit':70,268,272 'string':246,856,863 'structur':535 'style':1047 'submiss':766 'subscript':277,1090 'subscriptions/iap':149 'substanti':472 'succeed':659 'suggest':497,503,514,683 'summari':538 'support':674 'swiftui/uikit':1150 'symbol':588 'system':1149 'systemat':486 'tabl':560 'task':346 'technic':339,578,614 'test':321,515,724,1070 'test/verify':641 'third':951 'third-parti':950 'tone':1046 'top':414,431,548,552 'topic':90 'track':261,447,819 'transpar':388,1133 'trial':390,892 'trigger':1058,1204 'trust':146 'typic':1076,1119 'ugc':327,611 'ui':477,1018 'unclear':798 'unless':95,200,213 'unusu':715 'url':252 'usag':245,439,493,862,1030,1085 'usagedescript':855 'use':422,533,815,824,883,948 'user':145,416 'ux':170,368,519,579,617 'vagu':865 'valu':1112 'verifi':219 'version':1153 'visibl':900 'vs':278 'wall':459,1100 'want':102 'websit':296 'whether':657 'win':555 'without':383,445,460,463,822,849,876,967,987,992,1092,1113 'word':755 'work':380,897 'would':1057","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-04-22T12:52:04.938Z"},{"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-04-22T17:40:17.640Z"}],"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","source":"skills_sh","category":"awesome-copilot","skills_sh_url":"https://skills.sh/github/awesome-copilot/apple-appstore-reviewer"},"updatedAt":"2026-04-22T17:40:17.640Z"}}