rn-store-skills 1.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -6
- package/package.json +5 -9
- package/skills/rn-store-compliance/SKILL.md +66 -61
- package/skills/rn-store-compliance/references/all-apps.md +90 -0
- package/skills/rn-store-compliance/references/app-types/ai.md +40 -0
- package/skills/rn-store-compliance/references/app-types/crypto-finance.md +42 -0
- package/skills/rn-store-compliance/references/app-types/games.md +38 -0
- package/skills/rn-store-compliance/references/app-types/health-fitness.md +39 -0
- package/skills/rn-store-compliance/references/app-types/kids.md +40 -0
- package/skills/rn-store-compliance/references/app-types/social.md +41 -0
- package/skills/rn-store-compliance/references/app-types/vpn.md +38 -0
- package/skills/rn-store-compliance/references/features/macos.md +67 -0
- package/skills/rn-store-compliance/references/features/subscriptions.md +54 -0
- package/skills/rn-store-compliance/references/features/ugc.md +57 -0
- package/skills/rn-store-compliance/references/{apple-guidelines.md → guidelines/apple.md} +56 -0
- package/skills/rn-store-compliance/references/pre-submission.md +97 -0
- package/skills/rn-store-compliance/references/react-native.md +221 -0
- package/skills/rn-store-compliance/references/rules/design.md +97 -0
- package/skills/rn-store-compliance/references/rules/entitlements.md +114 -0
- package/skills/rn-store-compliance/references/rules/metadata.md +153 -0
- package/skills/rn-store-compliance/references/rules/performance.md +231 -0
- package/skills/rn-store-compliance/references/rules/permissions.md +196 -0
- package/skills/rn-store-compliance/references/rules/privacy.md +119 -0
- package/skills/rn-store-compliance/references/rules/subscriptions.md +126 -0
- package/skills/rn-store-compliance/references/pre-submission-checklist.md +0 -116
- package/skills/rn-store-compliance/references/react-native-patterns.md +0 -377
- /package/skills/rn-store-compliance/references/{google-play-guidelines.md → guidelines/google-play.md} +0 -0
- /package/skills/rn-store-compliance/references/{handling-rejections.md → rejections.md} +0 -0
package/README.md
CHANGED
|
@@ -11,6 +11,8 @@ Every time you add a feature, fix a bug, or change configuration in a React Nati
|
|
|
11
11
|
- **Apple App Store Review Guidelines** — privacy, payments, permissions, design, metadata, and more
|
|
12
12
|
- **Google Play Store Policies** — target SDK, billing, data safety, content policies, and more
|
|
13
13
|
- **Common React Native rejection patterns** — Expo Go submissions, missing JS bundles, Hermes crashes, WebView-heavy apps, permission overuse
|
|
14
|
+
- **20+ specific rejection rules** — with detection patterns, fix steps, and example rejection messages
|
|
15
|
+
- **10 app-type checklists** — social, kids, health, games, AI, crypto, VPN, macOS, subscriptions, UGC
|
|
14
16
|
|
|
15
17
|
About 40% of app submissions get rejected on the first try. This skill helps you avoid that.
|
|
16
18
|
|
|
@@ -19,7 +21,7 @@ About 40% of app submissions get rejected on the first try. This skill helps you
|
|
|
19
21
|
### Via skills CLI (recommended)
|
|
20
22
|
|
|
21
23
|
```bash
|
|
22
|
-
npx skills add
|
|
24
|
+
npx skills add JohnAdib/rn-store-skills
|
|
23
25
|
```
|
|
24
26
|
|
|
25
27
|
### Via skillpm
|
|
@@ -55,11 +57,33 @@ cp -r skills/rn-store-compliance .windsurf/skills/
|
|
|
55
57
|
skills/rn-store-compliance/
|
|
56
58
|
├── SKILL.md ← main hub (loaded on trigger)
|
|
57
59
|
└── references/
|
|
58
|
-
├──
|
|
59
|
-
├──
|
|
60
|
-
|
|
61
|
-
├──
|
|
62
|
-
|
|
60
|
+
├── guidelines/
|
|
61
|
+
│ ├── apple.md ← Apple App Store Review Guidelines (1.x–5.x)
|
|
62
|
+
│ └── google-play.md ← Google Play Store policies
|
|
63
|
+
├── rules/ ← detection → fix → example rejection
|
|
64
|
+
│ ├── metadata.md ← trademarks, competitors, China, previews
|
|
65
|
+
│ ├── subscriptions.md ← ToS/PP links, misleading pricing, IAP
|
|
66
|
+
│ ├── privacy.md ← unnecessary data, privacy manifest
|
|
67
|
+
│ ├── design.md ← SIWA violations, minimum functionality
|
|
68
|
+
│ ├── entitlements.md ← unused entitlements, background modes
|
|
69
|
+
│ ├── performance.md ← crashes, Hermes, bundle size, ANR
|
|
70
|
+
│ └── permissions.md ← over-requesting, vague rationale, timing
|
|
71
|
+
├── app-types/ ← compliance by app category
|
|
72
|
+
│ ├── social.md ← social / messaging / community
|
|
73
|
+
│ ├── kids.md ← Kids Category (COPPA, parental gates)
|
|
74
|
+
│ ├── health-fitness.md ← health / fitness / medical
|
|
75
|
+
│ ├── games.md ← games / gambling / loot boxes
|
|
76
|
+
│ ├── ai.md ← AI / generative AI / China DST
|
|
77
|
+
│ ├── crypto-finance.md ← crypto / finance / trading
|
|
78
|
+
│ └── vpn.md ← VPN / networking
|
|
79
|
+
├── features/ ← compliance by feature
|
|
80
|
+
│ ├── subscriptions.md ← IAP, subscriptions, restore purchases
|
|
81
|
+
│ ├── ugc.md ← user-generated content, moderation
|
|
82
|
+
│ └── macos.md ← macOS / Mac App Store
|
|
83
|
+
├── all-apps.md ← universal checklist (every app)
|
|
84
|
+
├── react-native.md ← RN/Expo-specific patterns
|
|
85
|
+
├── pre-submission.md ← both-store submission checklist
|
|
86
|
+
└── rejections.md ← how to respond to and appeal rejections
|
|
63
87
|
```
|
|
64
88
|
|
|
65
89
|
The SKILL.md is a lightweight navigation hub. Claude loads only the reference files relevant to the current task, keeping context efficient.
|
|
@@ -72,6 +96,7 @@ The SKILL.md is a lightweight navigation hub. Claude loads only the reference fi
|
|
|
72
96
|
- Business (IAP, subscriptions, reader apps)
|
|
73
97
|
- Design (quality, copycats, minimum functionality, Sign in with Apple)
|
|
74
98
|
- Legal (privacy, ATT, PrivacyInfo.xcprivacy, nutrition labels)
|
|
99
|
+
- Complete guideline quick-index (50+ guidelines)
|
|
75
100
|
|
|
76
101
|
### Google Play Store
|
|
77
102
|
- Content policies (restricted content, deceptive behavior, ads)
|
|
@@ -80,6 +105,18 @@ The SKILL.md is a lightweight navigation hub. Claude loads only the reference fi
|
|
|
80
105
|
- Closed testing requirements
|
|
81
106
|
- Account deletion requirements
|
|
82
107
|
|
|
108
|
+
### Rejection Rules
|
|
109
|
+
- 20+ specific rules with grep/code detection patterns
|
|
110
|
+
- React Native-specific detection commands
|
|
111
|
+
- Step-by-step fix instructions
|
|
112
|
+
- Real example rejection messages from Apple and Google
|
|
113
|
+
|
|
114
|
+
### App-Type Checklists
|
|
115
|
+
- 7 app-type checklists (social, kids, health, games, AI, crypto, VPN)
|
|
116
|
+
- 3 feature checklists (subscriptions, UGC, macOS)
|
|
117
|
+
- Both Apple and Google requirements in each
|
|
118
|
+
- React Native library recommendations
|
|
119
|
+
|
|
83
120
|
### React Native Specific
|
|
84
121
|
- Permission handling (Info.plist / AndroidManifest.xml) with code examples
|
|
85
122
|
- Payment integration (react-native-iap, RevenueCat)
|
|
@@ -103,6 +140,10 @@ Works with any AI coding agent that supports the Agent Skills format:
|
|
|
103
140
|
|
|
104
141
|
The `docs/` folder contains research notes, official source links, changelog, and improvement backlog. See [docs/README.md](docs/README.md) for the structure.
|
|
105
142
|
|
|
143
|
+
## Related Projects
|
|
144
|
+
|
|
145
|
+
Inspired by [app-store-preflight-skills](https://github.com/truongduy2611/app-store-preflight-skills) by [@truongduy2611](https://github.com/truongduy2611) — an iOS/macOS App Store preflight checker. We expanded to both stores with React Native detection patterns, app-type checklists, and feature-specific compliance guides.
|
|
146
|
+
|
|
106
147
|
## Contributing
|
|
107
148
|
|
|
108
149
|
PRs welcome! If you know of a store guideline or rejection pattern we're missing, please open an issue or PR. See [docs/ideas/backlog.md](docs/ideas/backlog.md) for planned improvements.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rn-store-skills",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "React Native App Store & Google Play compliance skill for AI coding agents. Checks every code change against Apple and Google store guidelines to prevent rejections.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-skill",
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
"windsurf",
|
|
20
20
|
"ai-agent"
|
|
21
21
|
],
|
|
22
|
-
"author": "
|
|
22
|
+
"author": "John Adib <Mr.John.Adib@gmail.com> (https://MrAdib.com)",
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"repository": {
|
|
25
25
|
"type": "git",
|
|
26
|
-
"url": "https://github.com/
|
|
26
|
+
"url": "https://github.com/JohnAdib/rn-store-skills"
|
|
27
27
|
},
|
|
28
28
|
"homepage": "https://www.npmjs.com/package/rn-store-skills",
|
|
29
29
|
"files": [
|
|
@@ -32,11 +32,7 @@
|
|
|
32
32
|
"LICENSE"
|
|
33
33
|
],
|
|
34
34
|
"scripts": {
|
|
35
|
-
"
|
|
36
|
-
"prepublishOnly": "node scripts/validate.js"
|
|
37
|
-
"pack:check": "npm pack --dry-run",
|
|
38
|
-
"version:patch": "npm version patch && npm run publish:npm",
|
|
39
|
-
"version:minor": "npm version minor && npm run publish:npm",
|
|
40
|
-
"version:major": "npm version major && npm run publish:npm"
|
|
35
|
+
"validate": "node scripts/validate.js",
|
|
36
|
+
"prepublishOnly": "node scripts/validate.js"
|
|
41
37
|
}
|
|
42
38
|
}
|
|
@@ -13,8 +13,8 @@ description: >
|
|
|
13
13
|
App Tracking Transparency, IDFA, permissions, app signing, release build, or app bundle.
|
|
14
14
|
license: MIT
|
|
15
15
|
metadata:
|
|
16
|
-
author:
|
|
17
|
-
version: "
|
|
16
|
+
author: JohnAdib
|
|
17
|
+
version: "2.0.0"
|
|
18
18
|
tags:
|
|
19
19
|
- react-native
|
|
20
20
|
- expo
|
|
@@ -32,92 +32,97 @@ Apple App Store and Google Play Store guidelines. Your job is to catch issues th
|
|
|
32
32
|
rejections **before** they reach app review.
|
|
33
33
|
|
|
34
34
|
About 40% of app submissions get rejected on the first attempt. Most rejections come from
|
|
35
|
-
a small set of repeated mistakes
|
|
36
|
-
broken payment flows, or metadata issues. This skill helps you avoid all of them.
|
|
35
|
+
a small set of repeated mistakes. This skill helps you avoid all of them.
|
|
37
36
|
|
|
38
37
|
## How to Use This Skill
|
|
39
38
|
|
|
40
39
|
When a developer asks you to add or modify any feature in a React Native app:
|
|
41
40
|
|
|
42
41
|
1. **Build the feature** as requested
|
|
43
|
-
2. **Run the compliance check**
|
|
44
|
-
3. **Flag any violations** with the specific guideline
|
|
42
|
+
2. **Run the compliance check** — consult the relevant reference files below
|
|
43
|
+
3. **Flag any violations** with the specific guideline number and a concrete fix
|
|
45
44
|
4. **Summarize** what passed and what needs attention
|
|
46
45
|
|
|
47
|
-
If a change touches multiple areas (e.g., adding a subscription screen involves payments,
|
|
48
|
-
UI, and privacy), check all relevant reference files.
|
|
49
|
-
|
|
50
46
|
## Reference Files
|
|
51
47
|
|
|
52
|
-
This skill uses progressive loading. Only read
|
|
53
|
-
task — don't load everything at once.
|
|
48
|
+
This skill uses progressive loading. Only read what's relevant — don't load everything.
|
|
54
49
|
|
|
55
|
-
###
|
|
50
|
+
### Step 1: Always Load
|
|
56
51
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
61
|
-
- Business (3.x) — IAP, subscriptions, reader apps
|
|
62
|
-
- Design (4.x) — quality, copycats, minimum functionality, Sign in with Apple
|
|
63
|
-
- Legal (5.x) — privacy, ATT, PrivacyInfo.xcprivacy, nutrition labels
|
|
52
|
+
| File | Purpose |
|
|
53
|
+
|------|---------|
|
|
54
|
+
| `references/all-apps.md` | Universal checklist — every app, both stores |
|
|
55
|
+
| `references/react-native.md` | RN/Expo-specific patterns and checks |
|
|
64
56
|
|
|
65
|
-
|
|
66
|
-
or when preparing for App Store submission.
|
|
57
|
+
### Step 2: Load by App Type
|
|
67
58
|
|
|
68
|
-
|
|
59
|
+
Determine the app type and load the matching checklist:
|
|
69
60
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
61
|
+
| App Type | File |
|
|
62
|
+
|----------|------|
|
|
63
|
+
| Social / messaging / community | `references/app-types/social.md` |
|
|
64
|
+
| Kids Category | `references/app-types/kids.md` |
|
|
65
|
+
| Health / fitness / medical | `references/app-types/health-fitness.md` |
|
|
66
|
+
| Games / gambling | `references/app-types/games.md` |
|
|
67
|
+
| AI / generative AI | `references/app-types/ai.md` |
|
|
68
|
+
| Crypto / finance / trading | `references/app-types/crypto-finance.md` |
|
|
69
|
+
| VPN / networking | `references/app-types/vpn.md` |
|
|
76
70
|
|
|
77
|
-
|
|
78
|
-
integration, or when preparing for Play Store submission.
|
|
71
|
+
### Step 3: Load by Feature
|
|
79
72
|
|
|
80
|
-
|
|
73
|
+
If the app uses these features, load the matching checklist:
|
|
81
74
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
- AI/generative AI feature rules for both stores
|
|
88
|
-
- Age rating requirements
|
|
75
|
+
| Feature | File |
|
|
76
|
+
|---------|------|
|
|
77
|
+
| Subscriptions / IAP / loot boxes | `references/features/subscriptions.md` |
|
|
78
|
+
| User-generated content | `references/features/ugc.md` |
|
|
79
|
+
| macOS / Mac App Store | `references/features/macos.md` |
|
|
89
80
|
|
|
90
|
-
|
|
91
|
-
in React Native apps specifically.
|
|
81
|
+
### Step 4: Load Rules for Specific Issues
|
|
92
82
|
|
|
93
|
-
|
|
83
|
+
When you need detection patterns, fix steps, and example rejection messages:
|
|
94
84
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
85
|
+
| Category | File |
|
|
86
|
+
|----------|------|
|
|
87
|
+
| Metadata violations | `references/rules/metadata.md` |
|
|
88
|
+
| Subscription/payment issues | `references/rules/subscriptions.md` |
|
|
89
|
+
| Privacy violations | `references/rules/privacy.md` |
|
|
90
|
+
| Design rejections | `references/rules/design.md` |
|
|
91
|
+
| Entitlement/capability issues | `references/rules/entitlements.md` |
|
|
92
|
+
| Crashes / performance | `references/rules/performance.md` |
|
|
93
|
+
| Permission problems | `references/rules/permissions.md` |
|
|
98
94
|
|
|
99
|
-
|
|
95
|
+
### Step 5: Submission & Rejection
|
|
100
96
|
|
|
101
|
-
|
|
97
|
+
| Task | File |
|
|
98
|
+
|------|------|
|
|
99
|
+
| Pre-submission verification | `references/pre-submission.md` |
|
|
100
|
+
| Got a rejection / need to appeal | `references/rejections.md` |
|
|
102
101
|
|
|
103
|
-
|
|
104
|
-
on responding to App Store and Play Store rejections, including appeal processes.
|
|
102
|
+
### Full Store Guidelines
|
|
105
103
|
|
|
106
|
-
|
|
104
|
+
| Store | File |
|
|
105
|
+
|-------|------|
|
|
106
|
+
| Apple App Store Review Guidelines | `references/guidelines/apple.md` |
|
|
107
|
+
| Google Play Store Policies | `references/guidelines/google-play.md` |
|
|
107
108
|
|
|
108
109
|
## Quick Decision Guide
|
|
109
110
|
|
|
110
|
-
Use this to decide which reference files to read for common tasks:
|
|
111
|
-
|
|
112
111
|
| Task | Files to Read |
|
|
113
112
|
|------|--------------|
|
|
114
|
-
| Adding a new feature | `react-native
|
|
115
|
-
| Implementing payments/subscriptions | `
|
|
116
|
-
| Adding permissions (camera, location, etc.) | `react-native
|
|
117
|
-
| Adding push notifications | `react-native
|
|
118
|
-
| Adding user-generated content | `
|
|
119
|
-
| Privacy/data collection changes | `
|
|
120
|
-
| Preparing for submission | `pre-submission-
|
|
121
|
-
| Got a rejection | `
|
|
122
|
-
| Adding AI features | `
|
|
123
|
-
|
|
|
113
|
+
| Adding a new feature | `all-apps.md` + `react-native.md` + relevant app-type |
|
|
114
|
+
| Implementing payments/subscriptions | `features/subscriptions.md` + `rules/subscriptions.md` |
|
|
115
|
+
| Adding permissions (camera, location, etc.) | `rules/permissions.md` + `react-native.md` |
|
|
116
|
+
| Adding push notifications | `react-native.md` (push section) |
|
|
117
|
+
| Adding user-generated content | `features/ugc.md` + `app-types/social.md` |
|
|
118
|
+
| Privacy/data collection changes | `rules/privacy.md` + `guidelines/apple.md` (5.x) |
|
|
119
|
+
| Preparing for submission | `pre-submission.md` + `all-apps.md` |
|
|
120
|
+
| Got a rejection | `rejections.md` + matching `rules/*.md` |
|
|
121
|
+
| Adding AI features | `app-types/ai.md` + `rules/metadata.md` (China) |
|
|
122
|
+
| Building a kids app | `app-types/kids.md` |
|
|
123
|
+
| Building a health/medical app | `app-types/health-fitness.md` |
|
|
124
|
+
| Building a game | `app-types/games.md` + `features/subscriptions.md` |
|
|
125
|
+
| Crypto/finance app | `app-types/crypto-finance.md` |
|
|
126
|
+
| VPN app | `app-types/vpn.md` |
|
|
127
|
+
| macOS app | `features/macos.md` + `rules/entitlements.md` |
|
|
128
|
+
| Upgrading React Native | `react-native.md` + `rules/performance.md` |
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Universal Checklist — Every App, Both Stores
|
|
2
|
+
|
|
3
|
+
Master checklist loaded for every app regardless of type or category.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Pre-Submission Essentials
|
|
8
|
+
|
|
9
|
+
- [ ] App is final, complete, and tested on real devices
|
|
10
|
+
- [ ] No placeholder/Lorem ipsum content anywhere
|
|
11
|
+
- [ ] No beta/test/preview/demo labels in UI
|
|
12
|
+
- [ ] Backend services live during review
|
|
13
|
+
- [ ] Demo account provided if login required (pre-populated with data)
|
|
14
|
+
- [ ] IAP items findable and functional
|
|
15
|
+
- [ ] Review notes describe non-obvious features
|
|
16
|
+
|
|
17
|
+
## Metadata
|
|
18
|
+
|
|
19
|
+
- [ ] App name ≤ 30 chars, no trademark stuffing
|
|
20
|
+
- [ ] No pricing info or other app names in metadata
|
|
21
|
+
- [ ] No competitor platform names (no "Android" on Apple, no "iOS" on Google)
|
|
22
|
+
- [ ] Screenshots show actual app in use (current build)
|
|
23
|
+
- [ ] Category accurately reflects primary function
|
|
24
|
+
- [ ] What's New describes actual changes
|
|
25
|
+
- [ ] No unverifiable superlative claims ("best", "#1")
|
|
26
|
+
|
|
27
|
+
## Privacy & Data
|
|
28
|
+
|
|
29
|
+
- [ ] Privacy policy linked in store listing AND accessible in-app
|
|
30
|
+
- [ ] Privacy policy accurately describes ALL data collection (including SDKs)
|
|
31
|
+
- [ ] Consent obtained before collecting personal data
|
|
32
|
+
- [ ] Only request data relevant to core functionality
|
|
33
|
+
- [ ] Account deletion available if account creation offered
|
|
34
|
+
- [ ] Third-party SDK data collection declared
|
|
35
|
+
|
|
36
|
+
## Apple-Specific
|
|
37
|
+
|
|
38
|
+
- [ ] Sign in with Apple if any third-party login offered
|
|
39
|
+
- [ ] Don't re-ask name/email after SIWA
|
|
40
|
+
- [ ] App Tracking Transparency prompt if tracking users
|
|
41
|
+
- [ ] PrivacyInfo.xcprivacy present with Required Reason API declarations
|
|
42
|
+
- [ ] Privacy Nutrition Labels accurate in App Store Connect
|
|
43
|
+
- [ ] Uses iOS 26 SDK or later (as of April 2026)
|
|
44
|
+
- [ ] App preview videos: screen captures only (no device frames)
|
|
45
|
+
- [ ] No Apple device images in app icon
|
|
46
|
+
- [ ] Info.plist permission descriptions are specific
|
|
47
|
+
|
|
48
|
+
## Google-Specific
|
|
49
|
+
|
|
50
|
+
- [ ] Targets Android 15 (API 35) or later
|
|
51
|
+
- [ ] Published as AAB (not APK)
|
|
52
|
+
- [ ] Data Safety section matches privacy policy
|
|
53
|
+
- [ ] Closed testing completed (12+ testers, 14 days) for new apps
|
|
54
|
+
- [ ] POST_NOTIFICATIONS runtime permission handled (Android 13+)
|
|
55
|
+
- [ ] 16 KB page size compatibility for native libraries
|
|
56
|
+
|
|
57
|
+
## Design & UX
|
|
58
|
+
|
|
59
|
+
- [ ] Not a copycat of another app
|
|
60
|
+
- [ ] Provides meaningful functionality beyond a website
|
|
61
|
+
- [ ] No pixelated or stretched images
|
|
62
|
+
- [ ] Handles dark mode without breaking
|
|
63
|
+
- [ ] Text readable with sufficient contrast
|
|
64
|
+
|
|
65
|
+
## Business
|
|
66
|
+
|
|
67
|
+
- [ ] Digital content uses platform IAP
|
|
68
|
+
- [ ] Not forcing ratings/reviews
|
|
69
|
+
- [ ] Support URL with working contact method
|
|
70
|
+
- [ ] Developer identity accurate and verifiable
|
|
71
|
+
|
|
72
|
+
## Build Verification
|
|
73
|
+
|
|
74
|
+
- [ ] Release build tested on real device (not simulator)
|
|
75
|
+
- [ ] All deep links tested from cold start, background, and external apps
|
|
76
|
+
- [ ] Offline behavior: shows clear state, doesn't crash
|
|
77
|
+
- [ ] Memory usage acceptable on low-end devices
|
|
78
|
+
- [ ] App size under 200MB
|
|
79
|
+
- [ ] Certificate/signing valid and not expired
|
|
80
|
+
- [ ] Version number incremented above current live version
|
|
81
|
+
|
|
82
|
+
## Related Rules
|
|
83
|
+
|
|
84
|
+
- See `rules/metadata.md` for metadata rejection patterns
|
|
85
|
+
- See `rules/privacy.md` for privacy rejection patterns
|
|
86
|
+
- See `rules/design.md` for design rejection patterns
|
|
87
|
+
- See `rules/performance.md` for crash/performance patterns
|
|
88
|
+
- See `rules/permissions.md` for permission patterns
|
|
89
|
+
- See `rules/subscriptions.md` if app has subscriptions/IAP
|
|
90
|
+
- See `rules/entitlements.md` for entitlement/capability issues
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# AI / Generative AI Compliance
|
|
2
|
+
|
|
3
|
+
## Apple
|
|
4
|
+
|
|
5
|
+
- [ ] China distribution: remove all references to ChatGPT, OpenAI, GPT, Gemini, Claude, Anthropic, Midjourney, DALL-E (DST Guideline 5)
|
|
6
|
+
- [ ] China distribution: suppress AI functionality entirely or obtain MIIT generative AI license (DST Guideline 5)
|
|
7
|
+
- [ ] No false or misleading claims about AI capabilities (Guideline 1.4)
|
|
8
|
+
- [ ] Medical AI features must include disclaimers that AI is not a substitute for professional advice (Guideline 1.4.1)
|
|
9
|
+
- [ ] All AI features documented in App Review notes — explain what the AI does and how (Review Submission)
|
|
10
|
+
- [ ] Do not use AI brand names (GPT, ChatGPT, Gemini, etc.) in your app name unless you are the brand owner (Guideline 2.3.7)
|
|
11
|
+
- [ ] Content moderation required for all AI-generated output — filter harmful/illegal content (Guideline 1.2)
|
|
12
|
+
- [ ] Disclose AI data processing in privacy policy — what inputs are processed, where, and by whom (Guideline 5.1.1)
|
|
13
|
+
- [ ] Obtain user consent before processing user inputs through AI services (Guideline 5.1.1)
|
|
14
|
+
- [ ] AI features, credits, and token packs sold via IAP (Guideline 3.1.1)
|
|
15
|
+
|
|
16
|
+
## Google Play
|
|
17
|
+
|
|
18
|
+
- [ ] AI-generated content must not violate content policies — same rules as human-created content (Content Policy)
|
|
19
|
+
- [ ] Realistic AI images/video/audio of real people require provenance signals: watermarks or metadata (AI Content Policy)
|
|
20
|
+
- [ ] Disclose AI usage prominently in store description if AI is a core feature (Store Listing Policy)
|
|
21
|
+
- [ ] AI decisions affecting users may trigger regulatory requirements (transparency, appeal rights) (AI Policy)
|
|
22
|
+
- [ ] No AI for deceptive content — deepfakes for fraud, impersonation, or misinformation prohibited (Deceptive Behavior Policy)
|
|
23
|
+
|
|
24
|
+
## React Native Notes
|
|
25
|
+
|
|
26
|
+
- API key security: NEVER embed AI service keys in the JS bundle — they are trivially extractable via `react-native-decompiler` or Hermes bytecode inspection
|
|
27
|
+
- Pattern: proxy all AI calls through your backend; backend holds the API key
|
|
28
|
+
- `react-native-dotenv` does NOT protect keys — env vars are baked into the bundle at build time
|
|
29
|
+
- Content moderation wrapper: run AI responses through a moderation endpoint (OpenAI Moderation API, Perspective API) before displaying to user
|
|
30
|
+
- Consent modal: present before first AI interaction — explain what data is sent, to which service, and retention policy
|
|
31
|
+
- For China builds: use build flavors or runtime config to disable AI features — `Platform.constants` or a feature flag service
|
|
32
|
+
- IAP for AI credits: use consumable IAP via `react-native-iap` — track credit balance server-side, not client-side
|
|
33
|
+
- Expo Config Plugins can conditionally include/exclude AI-related native modules per build variant
|
|
34
|
+
|
|
35
|
+
## Related Rules
|
|
36
|
+
|
|
37
|
+
- [rules/api-key-security.md](../rules/api-key-security.md)
|
|
38
|
+
- [rules/in-app-purchases.md](../rules/in-app-purchases.md)
|
|
39
|
+
- [rules/privacy-policy.md](../rules/privacy-policy.md)
|
|
40
|
+
- [rules/china-distribution.md](../rules/china-distribution.md)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Crypto / Finance / Trading Compliance
|
|
2
|
+
|
|
3
|
+
## Apple
|
|
4
|
+
|
|
5
|
+
- [ ] Organization enrollment required — individual developer accounts will be rejected (Guideline 3.1.3)
|
|
6
|
+
- [ ] No on-device crypto mining — cloud mining display only is permitted (Guideline 3.1.5(b))
|
|
7
|
+
- [ ] Crypto exchanges must hold valid licenses in every jurisdiction served (Guideline 3.1.5(a))
|
|
8
|
+
- [ ] ICOs, futures, and securities trading: from established financial institutions only (Guideline 3.1.5(a))
|
|
9
|
+
- [ ] No offering cryptocurrency as reward for completing tasks (Guideline 3.1.5(b))
|
|
10
|
+
- [ ] No binary options trading apps (Guideline 3.2)
|
|
11
|
+
- [ ] CFD and FOREX apps must be properly licensed in served jurisdictions (Guideline 3.2)
|
|
12
|
+
- [ ] Loan apps: APR must not exceed 36%, repayment period > 60 days, terms clearly disclosed (Guideline 3.2)
|
|
13
|
+
- [ ] Banking and financial services: legal entity enrollment required (Guideline 3.2)
|
|
14
|
+
- [ ] NFTs purchased via IAP if they unlock content/features; external purchase links not permitted (except US) (Guideline 3.1.1)
|
|
15
|
+
- [ ] NFT browsing/viewing permitted without IAP, but no external purchase buttons (except US) (Guideline 3.1.1)
|
|
16
|
+
|
|
17
|
+
## Google Play
|
|
18
|
+
|
|
19
|
+
- [ ] Financial services apps must comply with local regulations in every jurisdiction served (Financial Services Policy)
|
|
20
|
+
- [ ] Crypto apps require proper licenses and registrations (Financial Services Policy)
|
|
21
|
+
- [ ] No deceptive financial claims — no guaranteed returns or misleading profit projections (Financial Services Policy)
|
|
22
|
+
- [ ] Loan apps: APR must be disclosed upfront, no predatory terms or hidden fees (Personal Loans Policy)
|
|
23
|
+
- [ ] Trading apps: risk disclaimers required and visible before first trade (Financial Services Policy)
|
|
24
|
+
- [ ] Content rating must reflect financial complexity and risk exposure (Content Rating Policy)
|
|
25
|
+
|
|
26
|
+
## React Native Notes
|
|
27
|
+
|
|
28
|
+
- Organization account ($99/yr Apple, $25 Google) required before development begins — cannot switch from individual to org mid-review
|
|
29
|
+
- Apple organization enrollment requires D-U-N-S number — apply early, takes 5-30 business days
|
|
30
|
+
- Financial data security: use `react-native-encrypted-storage` for sensitive data, never `AsyncStorage`
|
|
31
|
+
- SSL pinning: implement via `react-native-ssl-pinning` or `TrustKit` native module — financial apps are high-value targets for MITM
|
|
32
|
+
- Jailbreak/root detection: `react-native-jail-monkey` or `freeRASP` — financial apps should warn or restrict on compromised devices
|
|
33
|
+
- Biometric auth: `react-native-biometrics` or `expo-local-authentication` for transaction confirmation
|
|
34
|
+
- For NFT display: render metadata and images only — do not embed wallet connection or purchase flows in iOS builds (except US)
|
|
35
|
+
- WebView restrictions: Apple rejects financial apps that are just WebView wrappers around a web trading platform
|
|
36
|
+
|
|
37
|
+
## Related Rules
|
|
38
|
+
|
|
39
|
+
- [rules/organization-account.md](../rules/organization-account.md)
|
|
40
|
+
- [rules/in-app-purchases.md](../rules/in-app-purchases.md)
|
|
41
|
+
- [rules/data-encryption.md](../rules/data-encryption.md)
|
|
42
|
+
- [rules/financial-services.md](../rules/financial-services.md)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Games / Gambling Compliance
|
|
2
|
+
|
|
3
|
+
## Apple
|
|
4
|
+
|
|
5
|
+
- [ ] All in-game currency, items, and content purchased via IAP — no external payment links (Guideline 3.1.1)
|
|
6
|
+
- [ ] Loot boxes and gacha mechanics must disclose odds before purchase (Guideline 3.1.1)
|
|
7
|
+
- [ ] IAP currencies must not expire (Guideline 3.1.1)
|
|
8
|
+
- [ ] Restore Purchases mechanism required for non-consumable IAP and subscriptions (Guideline 3.1.1)
|
|
9
|
+
- [ ] Game enemies must not target a specific race, culture, government, or real entity (Guideline 5.3)
|
|
10
|
+
- [ ] Gambling and betting apps must hold valid licenses in every jurisdiction served (Guideline 5.3.3)
|
|
11
|
+
- [ ] Lottery apps permitted only from the lottery organization itself (Guideline 5.3.3)
|
|
12
|
+
- [ ] Age rating must honestly reflect violence, language, and mature content (Guideline 5.3)
|
|
13
|
+
|
|
14
|
+
## Google Play
|
|
15
|
+
|
|
16
|
+
- [ ] Real-money gambling requires valid gambling license per jurisdiction (Real-Money Gambling Policy)
|
|
17
|
+
- [ ] Geo-restrictions enforced — block users in unlicensed jurisdictions (Real-Money Gambling Policy)
|
|
18
|
+
- [ ] Loot box odds must be disclosed before purchase (Monetization Policy)
|
|
19
|
+
- [ ] Contests and sweepstakes require published official rules (Contests Policy)
|
|
20
|
+
- [ ] No content encouraging dangerous bets or challenges (Gambling Policy)
|
|
21
|
+
- [ ] Game ads must be appropriate for the declared content rating (Ad Policy)
|
|
22
|
+
|
|
23
|
+
## React Native Notes
|
|
24
|
+
|
|
25
|
+
- `react-native-iap` (v12+) for cross-platform IAP — handles consumables, non-consumables, and subscriptions
|
|
26
|
+
- `expo-in-app-purchases` deprecated — use `react-native-iap` or `react-native-purchases` (RevenueCat) instead
|
|
27
|
+
- Loot box odds UI: render odds table in a modal before the purchase button becomes active — Apple reviewers verify this flow
|
|
28
|
+
- Restore Purchases: must be a visible button (not buried in settings) — common rejection reason
|
|
29
|
+
- For gacha/loot mechanics: log all odds server-side for audit compliance
|
|
30
|
+
- `react-native-purchases` (RevenueCat) simplifies receipt validation, entitlement management, and cross-platform subscription state
|
|
31
|
+
- Gambling apps: cannot use Expo Go or development builds in production — Apple requires native binary review
|
|
32
|
+
- Age gating: implement at app launch for gambling apps — cannot rely on store age restrictions alone
|
|
33
|
+
|
|
34
|
+
## Related Rules
|
|
35
|
+
|
|
36
|
+
- [rules/in-app-purchases.md](../rules/in-app-purchases.md)
|
|
37
|
+
- [rules/subscriptions.md](../rules/subscriptions.md)
|
|
38
|
+
- [rules/age-rating.md](../rules/age-rating.md)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Health / Fitness / Medical Compliance
|
|
2
|
+
|
|
3
|
+
## Apple
|
|
4
|
+
|
|
5
|
+
- [ ] Medical apps must disclose data sources and methodology for accuracy claims (Guideline 1.4.1)
|
|
6
|
+
- [ ] Cannot claim sensor-only diagnostics — no x-ray, blood pressure, glucose, or SpO2 from phone sensors alone (Guideline 1.4.1)
|
|
7
|
+
- [ ] Include reminders for users to consult a doctor — do not replace professional medical advice (Guideline 1.4.1)
|
|
8
|
+
- [ ] Drug dosage databases sourced only from approved entities (FDA, EMA, etc.) (Guideline 1.4.1)
|
|
9
|
+
- [ ] HealthKit data must not be used for advertising, marketing, or data mining (Guideline 5.1.3)
|
|
10
|
+
- [ ] Must not write false or fabricated data to HealthKit (Guideline 5.1.3)
|
|
11
|
+
- [ ] Must not store personal health data in iCloud — use on-device or encrypted server storage (Guideline 5.1.3)
|
|
12
|
+
- [ ] Health research apps require informed consent and ethics board (IRB) approval (Guideline 5.1.3)
|
|
13
|
+
- [ ] Must be a legal entity (not individual developer) for regulated medical fields (Guideline 1.4.1)
|
|
14
|
+
|
|
15
|
+
## Google Play
|
|
16
|
+
|
|
17
|
+
- [ ] Health claims must be evidence-based with citations (Health Policy)
|
|
18
|
+
- [ ] Medical apps require proper disclaimers visible before use (Health Policy)
|
|
19
|
+
- [ ] Health Connect integration follows data sharing rules — request only necessary data types (Health Connect Policy)
|
|
20
|
+
- [ ] No selling health data to third parties (Health Policy)
|
|
21
|
+
- [ ] Health data must be encrypted in transit and at rest (Health Policy)
|
|
22
|
+
- [ ] Content rating reflects health-related content accurately (Content Rating Policy)
|
|
23
|
+
|
|
24
|
+
## React Native Notes
|
|
25
|
+
|
|
26
|
+
- `react-native-health` for HealthKit (iOS) — request only the data types you actually need; over-requesting triggers review flags
|
|
27
|
+
- `react-native-health-connect` for Health Connect (Android) — requires declaring permissions in `AndroidManifest.xml`
|
|
28
|
+
- `expo-health` (Expo SDK 50+) for cross-platform HealthKit/Health Connect access
|
|
29
|
+
- HealthKit entitlement must be added in Xcode — cannot be configured purely through RN config
|
|
30
|
+
- Health data storage: never persist raw health data in AsyncStorage or MMKV — use encrypted storage (`react-native-encrypted-storage`)
|
|
31
|
+
- For research apps: implement consent flow with `react-native-informed-consent` pattern — capture signature, date, version
|
|
32
|
+
- Apple requires HealthKit usage description strings even if you only read (not write) data
|
|
33
|
+
- Organization account required for medical apps on both stores
|
|
34
|
+
|
|
35
|
+
## Related Rules
|
|
36
|
+
|
|
37
|
+
- [rules/healthkit.md](../rules/healthkit.md)
|
|
38
|
+
- [rules/privacy-policy.md](../rules/privacy-policy.md)
|
|
39
|
+
- [rules/data-encryption.md](../rules/data-encryption.md)
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Kids Category Compliance
|
|
2
|
+
|
|
3
|
+
## Apple
|
|
4
|
+
|
|
5
|
+
- [ ] No external links without parental gate (Guideline 1.3)
|
|
6
|
+
- [ ] No purchasing opportunities without parental gate (Guideline 1.3)
|
|
7
|
+
- [ ] No third-party advertising of any kind (Guideline 1.3)
|
|
8
|
+
- [ ] No third-party analytics except those that do not collect IDFA, PII, or location (Guideline 1.3)
|
|
9
|
+
- [ ] COPPA and GDPR-K compliance verified (Guideline 5.1.4)
|
|
10
|
+
- [ ] No sending PII or device info to third parties (Guideline 5.1.4)
|
|
11
|
+
- [ ] Privacy policy (COPPA/GDPR compliant) accessible in-app and on App Store listing (Guideline 5.1.4)
|
|
12
|
+
- [ ] "For Kids" / "For Children" metadata reserved — only use if enrolled in Kids Category (Guideline 1.3)
|
|
13
|
+
- [ ] No ads in app extensions, widgets, iMessage apps, keyboards, or watchOS components (Guideline 1.3)
|
|
14
|
+
|
|
15
|
+
## Google Play
|
|
16
|
+
|
|
17
|
+
- [ ] Enrolled in Designed for Families program (Families Policy)
|
|
18
|
+
- [ ] Ads served only through Google Play certified ad networks (Families Policy)
|
|
19
|
+
- [ ] No personalized or interest-based advertising to children (Families Policy)
|
|
20
|
+
- [ ] No social features without parental controls (Families Policy)
|
|
21
|
+
- [ ] No behavioral tracking of children (Families Policy)
|
|
22
|
+
- [ ] Login not required unless it provides clear value to the child (Families Policy)
|
|
23
|
+
- [ ] All content appropriate for the declared age range (Families Policy)
|
|
24
|
+
- [ ] Target age group declared accurately in store listing (Families Policy)
|
|
25
|
+
|
|
26
|
+
## React Native Notes
|
|
27
|
+
|
|
28
|
+
- Parental gate implementation: use a math problem or multi-step gesture — Apple rejects simple "Are you over 13?" confirmations
|
|
29
|
+
- COPPA-compliant analytics alternatives: Firebase with analytics collection disabled for kids sessions, or self-hosted analytics with no PII
|
|
30
|
+
- Remove or gate all `Linking.openURL()` calls behind parental verification
|
|
31
|
+
- Strip all ad SDKs from kids builds — even dormant SDK code triggers rejection
|
|
32
|
+
- `react-native-age-gate` pattern: render different component trees based on verified age context
|
|
33
|
+
- Expo: disable `expo-tracking-transparency` entirely for kids apps — the prompt itself implies tracking
|
|
34
|
+
- Test with a clean device — reviewers check for any network calls to ad/analytics endpoints
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
|
|
38
|
+
- [rules/kids-category.md](../rules/kids-category.md)
|
|
39
|
+
- [rules/privacy-policy.md](../rules/privacy-policy.md)
|
|
40
|
+
- [rules/coppa-gdpr.md](../rules/coppa-gdpr.md)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Social / Messaging / Community Compliance
|
|
2
|
+
|
|
3
|
+
## Apple
|
|
4
|
+
|
|
5
|
+
- [ ] Content moderation system to filter objectionable material (Guideline 1.2)
|
|
6
|
+
- [ ] Report mechanism accessible from within content with timely responses (Guideline 1.2)
|
|
7
|
+
- [ ] Block abusive users functionality (Guideline 1.2)
|
|
8
|
+
- [ ] Published support contact visible in-app (Guideline 1.2)
|
|
9
|
+
- [ ] Sign in with Apple required if any third-party login offered (Guideline 4.8)
|
|
10
|
+
- [ ] Do not re-ask name/email after SIWA — use provided identity token (Guideline 4.8)
|
|
11
|
+
- [ ] Account deletion offered if account creation exists (Guideline 5.1.1)
|
|
12
|
+
- [ ] Allow access without social login if social is not core feature (Guideline 5.1.1)
|
|
13
|
+
- [ ] Privacy policy accessible in-app and on App Store listing (Guideline 5.1.1)
|
|
14
|
+
|
|
15
|
+
## Google Play
|
|
16
|
+
|
|
17
|
+
- [ ] Content moderation system with both automated and human review (UGC Policy)
|
|
18
|
+
- [ ] User reporting accessible from within the content itself (UGC Policy)
|
|
19
|
+
- [ ] Terms of service explicitly prohibiting objectionable content (UGC Policy)
|
|
20
|
+
- [ ] Block and mute users functionality (UGC Policy)
|
|
21
|
+
- [ ] DMCA/takedown process documented and operational (UGC Policy)
|
|
22
|
+
- [ ] Remove illegal content within 24 hours of report (UGC Policy)
|
|
23
|
+
- [ ] Account deletion available in-app (Data Deletion Policy)
|
|
24
|
+
- [ ] Data Safety section accurate and complete (Data Safety Policy)
|
|
25
|
+
|
|
26
|
+
## React Native Notes
|
|
27
|
+
|
|
28
|
+
- `expo-apple-authentication` for SIWA — handles identity token, name, email scoping
|
|
29
|
+
- `react-native-apple-authentication` as alternative for bare workflow
|
|
30
|
+
- Content moderation: integrate server-side (Perspective API, OpenAI moderation, AWS Rekognition) — never do client-only filtering
|
|
31
|
+
- Report UI pattern: contextual menu on content items (long-press or three-dot menu) leading to report flow
|
|
32
|
+
- Block/mute: maintain server-side block list, filter in API responses — do not rely on client-side filtering alone
|
|
33
|
+
- Account deletion must actually delete data server-side, not just disable the account
|
|
34
|
+
- `@invertase/react-native-apple-authentication` supports credential revocation listening
|
|
35
|
+
|
|
36
|
+
## Related Rules
|
|
37
|
+
|
|
38
|
+
- [rules/sign-in-with-apple.md](../rules/sign-in-with-apple.md)
|
|
39
|
+
- [rules/account-deletion.md](../rules/account-deletion.md)
|
|
40
|
+
- [rules/privacy-policy.md](../rules/privacy-policy.md)
|
|
41
|
+
- [rules/user-generated-content.md](../rules/user-generated-content.md)
|