rn-store-skills 1.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/LICENSE +21 -0
- package/README.md +112 -0
- package/package.json +42 -0
- package/skills/rn-store-compliance/SKILL.md +123 -0
- package/skills/rn-store-compliance/references/apple-guidelines.md +306 -0
- package/skills/rn-store-compliance/references/google-play-guidelines.md +258 -0
- package/skills/rn-store-compliance/references/handling-rejections.md +161 -0
- package/skills/rn-store-compliance/references/pre-submission-checklist.md +116 -0
- package/skills/rn-store-compliance/references/react-native-patterns.md +377 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 MrAdib
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# rn-store-skills
|
|
2
|
+
|
|
3
|
+
React Native App Store & Google Play compliance skill for AI coding agents.
|
|
4
|
+
|
|
5
|
+
Catches store rejection issues **before** you submit — in every chat where you write or modify React Native code.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
Every time you add a feature, fix a bug, or change configuration in a React Native / Expo app, this skill automatically checks your changes against:
|
|
10
|
+
|
|
11
|
+
- **Apple App Store Review Guidelines** — privacy, payments, permissions, design, metadata, and more
|
|
12
|
+
- **Google Play Store Policies** — target SDK, billing, data safety, content policies, and more
|
|
13
|
+
- **Common React Native rejection patterns** — Expo Go submissions, missing JS bundles, Hermes crashes, WebView-heavy apps, permission overuse
|
|
14
|
+
|
|
15
|
+
About 40% of app submissions get rejected on the first try. This skill helps you avoid that.
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
### Via skills CLI (recommended)
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx skills add johnad/rn-store-skills
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Via skillpm
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npx skillpm add rn-store-skills
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Manual (Claude web / claude.ai)
|
|
32
|
+
|
|
33
|
+
1. Download or zip the `skills/rn-store-compliance/` folder
|
|
34
|
+
2. Go to [claude.ai/customize/skills](https://claude.ai/customize/skills)
|
|
35
|
+
3. Upload the zip — it contains one SKILL.md + reference files that Claude loads on-demand
|
|
36
|
+
|
|
37
|
+
### Manual (any agent)
|
|
38
|
+
|
|
39
|
+
Copy `skills/rn-store-compliance/` into your project's skills directory:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Claude Code
|
|
43
|
+
cp -r skills/rn-store-compliance .claude/skills/
|
|
44
|
+
|
|
45
|
+
# Cursor
|
|
46
|
+
cp -r skills/rn-store-compliance .cursor/skills/
|
|
47
|
+
|
|
48
|
+
# Windsurf
|
|
49
|
+
cp -r skills/rn-store-compliance .windsurf/skills/
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Skill Structure
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
skills/rn-store-compliance/
|
|
56
|
+
├── SKILL.md ← main hub (loaded on trigger)
|
|
57
|
+
└── references/
|
|
58
|
+
├── apple-guidelines.md ← Apple App Store Review Guidelines (1.x–5.x)
|
|
59
|
+
├── google-play-guidelines.md ← Google Play Store policies
|
|
60
|
+
├── react-native-patterns.md ← RN-specific checks, 10 rejection patterns, AI rules
|
|
61
|
+
├── pre-submission-checklist.md ← both-store + platform-specific checklists
|
|
62
|
+
└── handling-rejections.md ← how to respond to and appeal rejections
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The SKILL.md is a lightweight navigation hub. Claude loads only the reference files relevant to the current task, keeping context efficient.
|
|
66
|
+
|
|
67
|
+
## Coverage
|
|
68
|
+
|
|
69
|
+
### Apple App Store
|
|
70
|
+
- Safety (objectionable content, kids, health apps)
|
|
71
|
+
- Performance (completeness, metadata accuracy, SDK requirements)
|
|
72
|
+
- Business (IAP, subscriptions, reader apps)
|
|
73
|
+
- Design (quality, copycats, minimum functionality, Sign in with Apple)
|
|
74
|
+
- Legal (privacy, ATT, PrivacyInfo.xcprivacy, nutrition labels)
|
|
75
|
+
|
|
76
|
+
### Google Play Store
|
|
77
|
+
- Content policies (restricted content, deceptive behavior, ads)
|
|
78
|
+
- Technical requirements (target SDK, AAB, 64-bit, billing library, foreground services)
|
|
79
|
+
- Store listing (screenshots, data safety, content rating)
|
|
80
|
+
- Closed testing requirements
|
|
81
|
+
- Account deletion requirements
|
|
82
|
+
|
|
83
|
+
### React Native Specific
|
|
84
|
+
- Permission handling (Info.plist / AndroidManifest.xml) with code examples
|
|
85
|
+
- Payment integration (react-native-iap, RevenueCat)
|
|
86
|
+
- Build configuration (ProGuard, Hermes, signing, EAS Build)
|
|
87
|
+
- 10 most common RN rejection patterns with fixes
|
|
88
|
+
- AI/generative AI feature rules for both stores
|
|
89
|
+
- Age rating requirements
|
|
90
|
+
|
|
91
|
+
## Compatibility
|
|
92
|
+
|
|
93
|
+
Works with any AI coding agent that supports the Agent Skills format:
|
|
94
|
+
|
|
95
|
+
- Claude Code / Claude.ai
|
|
96
|
+
- Cursor
|
|
97
|
+
- Windsurf
|
|
98
|
+
- Cline
|
|
99
|
+
- GitHub Copilot (via skills)
|
|
100
|
+
- Any agent supporting skills directories
|
|
101
|
+
|
|
102
|
+
## Research & Docs
|
|
103
|
+
|
|
104
|
+
The `docs/` folder contains research notes, official source links, changelog, and improvement backlog. See [docs/README.md](docs/README.md) for the structure.
|
|
105
|
+
|
|
106
|
+
## Contributing
|
|
107
|
+
|
|
108
|
+
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.
|
|
109
|
+
|
|
110
|
+
## License
|
|
111
|
+
|
|
112
|
+
MIT
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "rn-store-skills",
|
|
3
|
+
"version": "1.0.0",
|
|
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
|
+
"keywords": [
|
|
6
|
+
"agent-skill",
|
|
7
|
+
"react-native",
|
|
8
|
+
"expo",
|
|
9
|
+
"app-store",
|
|
10
|
+
"google-play",
|
|
11
|
+
"compliance",
|
|
12
|
+
"mobile",
|
|
13
|
+
"ios",
|
|
14
|
+
"android",
|
|
15
|
+
"store-guidelines",
|
|
16
|
+
"app-review",
|
|
17
|
+
"claude",
|
|
18
|
+
"cursor",
|
|
19
|
+
"windsurf",
|
|
20
|
+
"ai-agent"
|
|
21
|
+
],
|
|
22
|
+
"author": "johnad <johnad@justzapp.com>",
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "https://github.com/johnad/rn-store-skills"
|
|
27
|
+
},
|
|
28
|
+
"homepage": "https://www.npmjs.com/package/rn-store-skills",
|
|
29
|
+
"files": [
|
|
30
|
+
"skills",
|
|
31
|
+
"README.md",
|
|
32
|
+
"LICENSE"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"publish:npm": "npm publish --access public",
|
|
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"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rn-store-compliance
|
|
3
|
+
description: >
|
|
4
|
+
React Native app store compliance checker for Apple App Store and Google Play Store.
|
|
5
|
+
Use this skill whenever someone is building, modifying, or reviewing a React Native (or Expo)
|
|
6
|
+
app that will be published to the Apple App Store or Google Play Store. This includes adding
|
|
7
|
+
features, fixing bugs, implementing payments, handling permissions, adding push notifications,
|
|
8
|
+
integrating ads, setting up analytics, handling user data, creating onboarding flows, or any
|
|
9
|
+
code change — even small ones. The skill ensures every change is verified against current
|
|
10
|
+
Apple and Google store guidelines before shipping, preventing rejections. Trigger on any
|
|
11
|
+
mention of: React Native, Expo, iOS, Android, App Store, Google Play, mobile app, TestFlight,
|
|
12
|
+
app review, app submission, store rejection, in-app purchase, push notification, privacy policy,
|
|
13
|
+
App Tracking Transparency, IDFA, permissions, app signing, release build, or app bundle.
|
|
14
|
+
license: MIT
|
|
15
|
+
metadata:
|
|
16
|
+
author: johnad
|
|
17
|
+
version: "1.0.0"
|
|
18
|
+
tags:
|
|
19
|
+
- react-native
|
|
20
|
+
- expo
|
|
21
|
+
- app-store
|
|
22
|
+
- google-play
|
|
23
|
+
- compliance
|
|
24
|
+
- mobile
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
# React Native Store Compliance Skill
|
|
28
|
+
|
|
29
|
+
You are a React Native store compliance advisor. Every code change, feature addition, or
|
|
30
|
+
configuration update in a React Native / Expo project should be checked against both
|
|
31
|
+
Apple App Store and Google Play Store guidelines. Your job is to catch issues that cause
|
|
32
|
+
rejections **before** they reach app review.
|
|
33
|
+
|
|
34
|
+
About 40% of app submissions get rejected on the first attempt. Most rejections come from
|
|
35
|
+
a small set of repeated mistakes — wrong permission usage, missing privacy declarations,
|
|
36
|
+
broken payment flows, or metadata issues. This skill helps you avoid all of them.
|
|
37
|
+
|
|
38
|
+
## How to Use This Skill
|
|
39
|
+
|
|
40
|
+
When a developer asks you to add or modify any feature in a React Native app:
|
|
41
|
+
|
|
42
|
+
1. **Build the feature** as requested
|
|
43
|
+
2. **Run the compliance check** against the change — consult the relevant reference files below
|
|
44
|
+
3. **Flag any violations** with the specific guideline reference number and a concrete fix
|
|
45
|
+
4. **Summarize** what passed and what needs attention
|
|
46
|
+
|
|
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
|
+
## Reference Files
|
|
51
|
+
|
|
52
|
+
This skill uses progressive loading. Only read the reference files relevant to the current
|
|
53
|
+
task — don't load everything at once.
|
|
54
|
+
|
|
55
|
+
### Apple App Store Guidelines
|
|
56
|
+
|
|
57
|
+
Refer to [references/apple-guidelines.md](references/apple-guidelines.md) for the complete
|
|
58
|
+
Apple App Store Review Guidelines covering:
|
|
59
|
+
- Safety (1.x) — objectionable content, kids, health apps
|
|
60
|
+
- Performance (2.x) — completeness, metadata, SDK requirements
|
|
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
|
|
64
|
+
|
|
65
|
+
Read this file when the change involves any iOS-specific feature, Apple services integration,
|
|
66
|
+
or when preparing for App Store submission.
|
|
67
|
+
|
|
68
|
+
### Google Play Store Guidelines
|
|
69
|
+
|
|
70
|
+
Refer to [references/google-play-guidelines.md](references/google-play-guidelines.md) for
|
|
71
|
+
the complete Google Play Store policies covering:
|
|
72
|
+
- Content policies — restricted content, deceptive behavior, ads
|
|
73
|
+
- Technical requirements — target SDK, AAB, 64-bit, billing library, foreground services
|
|
74
|
+
- Store listing & metadata — screenshots, data safety, content rating
|
|
75
|
+
- Closed testing requirements
|
|
76
|
+
|
|
77
|
+
Read this file when the change involves any Android-specific feature, Google services
|
|
78
|
+
integration, or when preparing for Play Store submission.
|
|
79
|
+
|
|
80
|
+
### React Native Specific Patterns
|
|
81
|
+
|
|
82
|
+
Refer to [references/react-native-patterns.md](references/react-native-patterns.md) for
|
|
83
|
+
RN-specific compliance issues covering:
|
|
84
|
+
- Apple-specific RN checks (Info.plist, ATS, Sign in with Apple, background modes)
|
|
85
|
+
- Google-specific RN checks (AndroidManifest, ProGuard, signing, crash rates)
|
|
86
|
+
- 10 most common React Native rejection patterns
|
|
87
|
+
- AI/generative AI feature rules for both stores
|
|
88
|
+
- Age rating requirements
|
|
89
|
+
|
|
90
|
+
Read this file for every change — it contains the patterns most likely to cause rejection
|
|
91
|
+
in React Native apps specifically.
|
|
92
|
+
|
|
93
|
+
### Pre-Submission Checklist
|
|
94
|
+
|
|
95
|
+
Refer to [references/pre-submission-checklist.md](references/pre-submission-checklist.md)
|
|
96
|
+
for the complete pre-submission verification checklist. This covers both-store checks,
|
|
97
|
+
Apple-specific checks, and Google Play-specific checks.
|
|
98
|
+
|
|
99
|
+
Read this file when the developer is preparing a release build or submitting to either store.
|
|
100
|
+
|
|
101
|
+
### Handling Rejections
|
|
102
|
+
|
|
103
|
+
Refer to [references/handling-rejections.md](references/handling-rejections.md) for guidance
|
|
104
|
+
on responding to App Store and Play Store rejections, including appeal processes.
|
|
105
|
+
|
|
106
|
+
Read this file when a developer reports a rejection or asks how to respond to one.
|
|
107
|
+
|
|
108
|
+
## Quick Decision Guide
|
|
109
|
+
|
|
110
|
+
Use this to decide which reference files to read for common tasks:
|
|
111
|
+
|
|
112
|
+
| Task | Files to Read |
|
|
113
|
+
|------|--------------|
|
|
114
|
+
| Adding a new feature | `react-native-patterns.md` + relevant store guide |
|
|
115
|
+
| Implementing payments/subscriptions | `apple-guidelines.md` (section 3) + `google-play-guidelines.md` (billing) |
|
|
116
|
+
| Adding permissions (camera, location, etc.) | `react-native-patterns.md` (permissions section) |
|
|
117
|
+
| Adding push notifications | `react-native-patterns.md` + both store guides |
|
|
118
|
+
| Adding user-generated content | `apple-guidelines.md` (section 1.1) + `google-play-guidelines.md` (content) |
|
|
119
|
+
| Privacy/data collection changes | `apple-guidelines.md` (section 5.1) + `google-play-guidelines.md` (privacy) |
|
|
120
|
+
| Preparing for submission | `pre-submission-checklist.md` |
|
|
121
|
+
| Got a rejection | `handling-rejections.md` |
|
|
122
|
+
| Adding AI features | `react-native-patterns.md` (AI section) |
|
|
123
|
+
| Upgrading React Native version | `react-native-patterns.md` (all sections) |
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# Apple App Store Review Guidelines
|
|
2
|
+
|
|
3
|
+
Complete reference for Apple App Store Review Guidelines relevant to React Native apps.
|
|
4
|
+
Guideline numbers match Apple's official numbering at https://developer.apple.com/app-store/review/guidelines/
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. Safety (Guidelines 1.x)
|
|
9
|
+
|
|
10
|
+
### 1.1 Objectionable Content
|
|
11
|
+
|
|
12
|
+
Apps with user-generated content (UGC) must include all three:
|
|
13
|
+
- Content filtering or moderation (automated or manual)
|
|
14
|
+
- A reporting mechanism for offensive content
|
|
15
|
+
- The ability to block abusive users
|
|
16
|
+
|
|
17
|
+
If the app has any social features — comments, profiles, chat, photo/video sharing, forums —
|
|
18
|
+
all three are required. Missing even one will cause rejection.
|
|
19
|
+
|
|
20
|
+
Apps must not include content that is offensive, insensitive, upsetting, intended to disgust,
|
|
21
|
+
in exceptionally poor taste, or simply creepy. This includes content targeting specific
|
|
22
|
+
nationalities, ethnicities, or other groups.
|
|
23
|
+
|
|
24
|
+
### 1.2 User Safety
|
|
25
|
+
|
|
26
|
+
Apps must not encourage dangerous behavior. Specifically:
|
|
27
|
+
- Health/fitness apps must include disclaimers that they are not a substitute for medical advice
|
|
28
|
+
- Apps that encourage excessive consumption of alcohol, drug use, or risky physical activities
|
|
29
|
+
will be rejected
|
|
30
|
+
- Emergency service apps must include real emergency contact information
|
|
31
|
+
|
|
32
|
+
### 1.3 Kids Category
|
|
33
|
+
|
|
34
|
+
If targeting children under 13:
|
|
35
|
+
- No third-party analytics or advertising SDKs that aren't certified for children
|
|
36
|
+
- Must comply with COPPA (Children's Online Privacy Protection Act)
|
|
37
|
+
- No links out of the app without a parental gate
|
|
38
|
+
- No login requirement unless it provides clear value to the child
|
|
39
|
+
- No behavioral advertising
|
|
40
|
+
- Data collection must be minimal and clearly disclosed to parents
|
|
41
|
+
- Must not include links to external websites, social media, or purchasing opportunities
|
|
42
|
+
without age verification
|
|
43
|
+
|
|
44
|
+
### 1.4 Physical Harm
|
|
45
|
+
|
|
46
|
+
- Medical apps must clearly disclaim they are not FDA-approved (unless they actually are)
|
|
47
|
+
- Don't provide dosage calculators without proper disclaimers
|
|
48
|
+
- Apps that could present a physical safety risk (e.g., using the phone while driving) must
|
|
49
|
+
include appropriate warnings
|
|
50
|
+
- SOS/emergency features must connect to actual emergency services
|
|
51
|
+
|
|
52
|
+
### 1.5 Developer Information
|
|
53
|
+
|
|
54
|
+
- The developer name and contact info must be accurate and visible in the app and on the
|
|
55
|
+
store listing
|
|
56
|
+
- A valid support URL is required
|
|
57
|
+
- Apps must have a working contact mechanism (email, support form, etc.)
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## 2. Performance (Guidelines 2.x)
|
|
62
|
+
|
|
63
|
+
### 2.1 App Completeness
|
|
64
|
+
|
|
65
|
+
The app must be a finished product:
|
|
66
|
+
- No placeholder content ("Lorem ipsum", stock images used as real content)
|
|
67
|
+
- No broken links or buttons that do nothing
|
|
68
|
+
- No "coming soon" sections or empty features
|
|
69
|
+
- TestFlight/beta labels must be removed from all UI text and assets
|
|
70
|
+
- The app must not crash on launch or during any core user flows
|
|
71
|
+
- All features shown in screenshots must be functional
|
|
72
|
+
- Demo/test accounts must be provided to App Review if login is required
|
|
73
|
+
|
|
74
|
+
### 2.2 Beta Testing
|
|
75
|
+
|
|
76
|
+
- Don't reference "beta", "test", "preview", or "demo" in the App Store version
|
|
77
|
+
- Don't include TestFlight-specific UI or references
|
|
78
|
+
- The App Store version must be the final, production-ready build
|
|
79
|
+
|
|
80
|
+
### 2.3 Accurate Metadata
|
|
81
|
+
|
|
82
|
+
- Screenshots must reflect the actual app experience on the device size shown
|
|
83
|
+
- Don't show features that don't exist in the current version
|
|
84
|
+
- The app description must match actual functionality — no aspirational language
|
|
85
|
+
- Don't include competitor names or irrelevant keywords in metadata
|
|
86
|
+
- App name must not include generic terms like "best" or pricing info
|
|
87
|
+
- Category selection must accurately reflect the app's primary function
|
|
88
|
+
- What's New text should describe actual changes in this version
|
|
89
|
+
|
|
90
|
+
### 2.4 Hardware Compatibility
|
|
91
|
+
|
|
92
|
+
- If the app requires specific hardware (camera, GPS, ARKit, NFC), handle gracefully when
|
|
93
|
+
hardware is unavailable — show a clear message, don't crash
|
|
94
|
+
- Use `UIRequiredDeviceCapabilities` in Info.plist to prevent installation on incompatible devices
|
|
95
|
+
- Test on devices without the required hardware to verify graceful degradation
|
|
96
|
+
- iPad apps must support both orientations unless there's a compelling reason not to
|
|
97
|
+
|
|
98
|
+
### 2.5 Software Requirements
|
|
99
|
+
|
|
100
|
+
- Target the current or previous iOS SDK
|
|
101
|
+
- **As of April 2026, submissions must use iOS 26 SDK or later**
|
|
102
|
+
- Use a React Native CLI or Expo SDK version that supports the required minimum
|
|
103
|
+
- Don't use deprecated APIs without fallbacks
|
|
104
|
+
- Support the latest two major iOS versions at minimum
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 3. Business (Guidelines 3.x)
|
|
109
|
+
|
|
110
|
+
### 3.1.1 In-App Purchase (IAP)
|
|
111
|
+
|
|
112
|
+
**The most common rejection reason in this category.**
|
|
113
|
+
|
|
114
|
+
All digital goods and services MUST use Apple IAP:
|
|
115
|
+
- Subscriptions to digital content
|
|
116
|
+
- Premium features or feature unlocks
|
|
117
|
+
- Virtual currency, in-game items, loot boxes
|
|
118
|
+
- One-time purchases for digital content (e.g., additional filters, themes)
|
|
119
|
+
|
|
120
|
+
Physical goods and real-world services CAN use external payment:
|
|
121
|
+
- Physical merchandise (Stripe, etc.)
|
|
122
|
+
- Ride-sharing, food delivery, hotel bookings
|
|
123
|
+
- Real-world event tickets
|
|
124
|
+
- Person-to-person payments (e.g., Venmo-style)
|
|
125
|
+
|
|
126
|
+
**Never** link to an external website for purchasing digital content. Even mentioning that
|
|
127
|
+
content can be purchased elsewhere has caused rejections.
|
|
128
|
+
|
|
129
|
+
React Native implementation:
|
|
130
|
+
- `react-native-iap` — most popular, wraps StoreKit
|
|
131
|
+
- `expo-in-app-purchases` — Expo's built-in module
|
|
132
|
+
- RevenueCat — managed service, handles receipt validation
|
|
133
|
+
|
|
134
|
+
### 3.1.2 Subscriptions
|
|
135
|
+
|
|
136
|
+
Must clearly show:
|
|
137
|
+
- The price in the user's local currency
|
|
138
|
+
- The subscription duration (weekly, monthly, yearly)
|
|
139
|
+
- What happens when the subscription ends (access revoked, downgraded, etc.)
|
|
140
|
+
- Free trial details: when billing starts, how to cancel before being charged
|
|
141
|
+
|
|
142
|
+
Required elements on subscription screens:
|
|
143
|
+
- Link to Apple's subscription management page (`https://apps.apple.com/account/subscriptions`)
|
|
144
|
+
- Terms of Service link
|
|
145
|
+
- Privacy Policy link
|
|
146
|
+
- Clear disclosure of auto-renewal
|
|
147
|
+
|
|
148
|
+
Free trials must:
|
|
149
|
+
- Disclose the price that will be charged after the trial
|
|
150
|
+
- Make cancellation instructions clear
|
|
151
|
+
- Not auto-subscribe without explicit user consent
|
|
152
|
+
|
|
153
|
+
### 3.1.3 Reader Apps
|
|
154
|
+
|
|
155
|
+
Reader apps (Netflix, Spotify, Kindle-style) may:
|
|
156
|
+
- Link to their website for account creation
|
|
157
|
+
- Allow users to access previously purchased content
|
|
158
|
+
|
|
159
|
+
Reader apps must NOT:
|
|
160
|
+
- Include in-app purchase buttons for content
|
|
161
|
+
- Link directly to a purchase page on their website (allowed only for account creation)
|
|
162
|
+
|
|
163
|
+
### 3.2 Other Business Model Issues
|
|
164
|
+
|
|
165
|
+
- Don't create an app that is essentially a website wrapped in a WebView with no native
|
|
166
|
+
functionality — it must provide value beyond the mobile website
|
|
167
|
+
- Free apps cannot lock all content behind a paywall on first launch without offering a
|
|
168
|
+
meaningful free experience
|
|
169
|
+
- Don't artificially inflate download size or ratings
|
|
170
|
+
- Bait-and-switch tactics (free download but everything locked) will be rejected
|
|
171
|
+
- Multi-app developers: don't create apps that primarily exist to cross-promote other apps
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 4. Design (Guidelines 4.x)
|
|
176
|
+
|
|
177
|
+
### 4.0 Design Quality
|
|
178
|
+
|
|
179
|
+
The app must feel native and polished:
|
|
180
|
+
- Use proper safe area insets (`SafeAreaView` in React Native)
|
|
181
|
+
- Support Dynamic Type where possible (text should scale with system settings)
|
|
182
|
+
- Handle dark mode if the system supports it (at least don't break in dark mode)
|
|
183
|
+
- Use system UI conventions (swipe to go back, pull to refresh where expected)
|
|
184
|
+
- No pixelated or stretched images
|
|
185
|
+
- Consistent visual language throughout the app
|
|
186
|
+
- Text must be readable — sufficient contrast, appropriate font sizes
|
|
187
|
+
|
|
188
|
+
### 4.1 Copycats
|
|
189
|
+
|
|
190
|
+
- Don't clone another app's UI or functionality — bring your own design
|
|
191
|
+
- Don't use another company's trademarks, branding, or trade dress without written permission
|
|
192
|
+
- Don't mimic Apple's built-in apps in a confusing way
|
|
193
|
+
|
|
194
|
+
### 4.2 Minimum Functionality
|
|
195
|
+
|
|
196
|
+
The app must do something useful:
|
|
197
|
+
- Single-feature apps are fine if the feature is substantive and well-executed
|
|
198
|
+
- WebView-only apps will be rejected unless they add meaningful native features on top
|
|
199
|
+
- Apps that are primarily marketing material for a company will be rejected
|
|
200
|
+
- Calculator/flashlight/tip-calculator style apps are generally rejected unless they offer
|
|
201
|
+
something significantly unique
|
|
202
|
+
|
|
203
|
+
### 4.3 Spam
|
|
204
|
+
|
|
205
|
+
- Don't submit multiple apps that are essentially the same with different themes, data sets,
|
|
206
|
+
or minor variations (template apps)
|
|
207
|
+
- Don't duplicate built-in iOS functionality without significant added value
|
|
208
|
+
- Don't submit an app that is a repackaged version of another developer's app
|
|
209
|
+
|
|
210
|
+
### 4.5 Apple Sites and Services
|
|
211
|
+
|
|
212
|
+
If using Apple services, follow each service's specific guidelines:
|
|
213
|
+
- **Sign in with Apple**: REQUIRED if you offer any third-party social login (Google, Facebook,
|
|
214
|
+
Twitter, etc.). Must be offered as a login option alongside other providers. Must use the
|
|
215
|
+
Apple-provided UI button style.
|
|
216
|
+
- **Apple Maps**: Use MapKit for maps functionality on iOS
|
|
217
|
+
- **HealthKit**: Must explain data usage clearly, can't use health data for advertising
|
|
218
|
+
- **HomeKit**: Must support user-initiated control
|
|
219
|
+
- **SiriKit / App Intents**: Follow the specific interaction patterns
|
|
220
|
+
|
|
221
|
+
### 4.7 HTML5 Games/Apps
|
|
222
|
+
|
|
223
|
+
- Apps that are just HTML5/web content in a native wrapper will be rejected
|
|
224
|
+
- There must be meaningful native functionality beyond the WebView
|
|
225
|
+
- Performance must be comparable to native apps
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## 5. Legal (Guidelines 5.x)
|
|
230
|
+
|
|
231
|
+
### 5.1 Privacy
|
|
232
|
+
|
|
233
|
+
Apps must include a privacy policy:
|
|
234
|
+
- The privacy policy link must work and be accessible from within the app AND on the store listing
|
|
235
|
+
- Must be in plain language, not just legal boilerplate
|
|
236
|
+
- Must accurately describe what data is collected, how it's used, and who it's shared with
|
|
237
|
+
- Must request user permission before collecting personal data
|
|
238
|
+
- Must not collect data unrelated to the app's core functionality
|
|
239
|
+
|
|
240
|
+
#### App Tracking Transparency (ATT)
|
|
241
|
+
|
|
242
|
+
If using IDFA or tracking users across apps/websites owned by other companies:
|
|
243
|
+
- Must show the ATT prompt before any tracking occurs
|
|
244
|
+
- Use `react-native-tracking-transparency` or `expo-tracking-transparency`
|
|
245
|
+
- Don't gate app functionality on the user accepting tracking
|
|
246
|
+
- Don't incentivize users to allow tracking ("allow tracking for bonus coins")
|
|
247
|
+
- The ATT purpose string must clearly explain what data is collected and how it's used
|
|
248
|
+
|
|
249
|
+
#### PrivacyInfo.xcprivacy
|
|
250
|
+
|
|
251
|
+
Required manifest file declaring all privacy-related API usage:
|
|
252
|
+
- Must declare reasons for accessing APIs: UserDefaults, file timestamp APIs, disk space APIs,
|
|
253
|
+
system boot time, active keyboard APIs, user defaults
|
|
254
|
+
- React Native apps should audit ALL native modules (including transitive dependencies) for
|
|
255
|
+
API usage that requires declaration
|
|
256
|
+
- Common React Native libraries that need declarations: AsyncStorage, RNFS, react-native-device-info
|
|
257
|
+
- Xcode will warn about missing declarations during build
|
|
258
|
+
|
|
259
|
+
#### Privacy Nutrition Labels
|
|
260
|
+
|
|
261
|
+
Must accurately declare all data collection in App Store Connect:
|
|
262
|
+
- This includes data collected by ALL third-party SDKs, not just your own code
|
|
263
|
+
- Common React Native SDKs to audit:
|
|
264
|
+
- Firebase (Analytics, Crashlytics, Remote Config) — collects device ID, crash data, usage data
|
|
265
|
+
- Sentry — collects crash data, device info
|
|
266
|
+
- Amplitude / Mixpanel / Segment — collects usage analytics, device info
|
|
267
|
+
- Facebook SDK — collects device ID, usage data, potentially advertising data
|
|
268
|
+
- Google Sign-In — collects email, name, profile picture
|
|
269
|
+
- OneSignal / FCM — collects device tokens, notification interaction data
|
|
270
|
+
- Under-declaring will cause rejection; over-declaring is safer than under-declaring
|
|
271
|
+
|
|
272
|
+
### 5.1.2 Data Use and Sharing
|
|
273
|
+
|
|
274
|
+
- Data collected for one purpose can't be repurposed without consent
|
|
275
|
+
- Don't share user data with data brokers
|
|
276
|
+
- Third-party SDKs that share data must be disclosed
|
|
277
|
+
- Financial and health data have additional restrictions on sharing
|
|
278
|
+
|
|
279
|
+
### 5.2 Intellectual Property
|
|
280
|
+
|
|
281
|
+
- Don't use copyrighted content (music, images, text) without proper licensing
|
|
282
|
+
- Don't include Apple's proprietary icons, UI elements, or trademarks
|
|
283
|
+
- Open source license compliance — if using GPL libraries, your distribution must comply
|
|
284
|
+
|
|
285
|
+
### 5.3 Gaming, Gambling, Lotteries
|
|
286
|
+
|
|
287
|
+
- Real-money gambling requires specific licenses per jurisdiction
|
|
288
|
+
- Must implement geo-restrictions for gambling features
|
|
289
|
+
- Loot boxes and gacha mechanics must disclose odds of each item/tier
|
|
290
|
+
- Contests and sweepstakes must have official rules and eligibility requirements
|
|
291
|
+
|
|
292
|
+
### 5.4 VPN Apps
|
|
293
|
+
|
|
294
|
+
- Must use `NEVPNManager` API
|
|
295
|
+
- Can't harvest or sell user data
|
|
296
|
+
- Must clearly explain what data is routed through the VPN
|
|
297
|
+
- VPN profile installation must be user-initiated
|
|
298
|
+
|
|
299
|
+
### 5.6 Developer Code of Conduct
|
|
300
|
+
|
|
301
|
+
- Don't manipulate ratings or reviews (incentivized reviews, review farms)
|
|
302
|
+
- Don't use misleading marketing or fake social proof
|
|
303
|
+
- Respond to App Review communications within 14 days
|
|
304
|
+
- Don't attempt to deceive the review process (hidden features, different behavior during review)
|
|
305
|
+
- Use `SKStoreReviewController` for requesting reviews — don't build custom review prompts
|
|
306
|
+
that redirect to the App Store
|