@jhm1909/ag-kit 0.1.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/.agent/ARCHITECTURE.md +189 -0
- package/.agent/known-registries.json +181 -0
- package/.agent/mcp_config.json +19 -0
- package/.agent/rules/clean-code.md +107 -0
- package/.agent/rules/documents.md +177 -0
- package/.agent/rules/git-workflow.md +68 -0
- package/.agent/rules/nano-banana.md +46 -0
- package/.agent/rules/research.md +35 -0
- package/.agent/rules/skill-loading.md +100 -0
- package/.agent/rules/skill-suggestion.md +47 -0
- package/.agent/rules/testing.md +52 -0
- package/.agent/rules/workflow-advisor.md +108 -0
- package/.agent/rules/workflow-skill-convention.md +127 -0
- package/.agent/skills/ai-engineer/SKILL.md +824 -0
- package/.agent/skills/ai-engineer/references/agentic-patterns.md +329 -0
- package/.agent/skills/ai-engineer/references/evaluation.md +493 -0
- package/.agent/skills/ai-engineer/references/llm.md +490 -0
- package/.agent/skills/ai-engineer/references/rag-advanced.md +444 -0
- package/.agent/skills/ai-engineer/references/serving-optimization.md +531 -0
- package/.agent/skills/ai-engineer/vector-db/README.md +137 -0
- package/.agent/skills/app-builder/SKILL.md +75 -0
- package/.agent/skills/app-builder/agent-coordination.md +71 -0
- package/.agent/skills/app-builder/feature-building.md +53 -0
- package/.agent/skills/app-builder/project-detection.md +34 -0
- package/.agent/skills/app-builder/scaffolding.md +118 -0
- package/.agent/skills/app-builder/tech-stack.md +41 -0
- package/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/.agent/skills/backend-developer/SKILL.md +763 -0
- package/.agent/skills/backend-developer/references/general-patterns.md +65 -0
- package/.agent/skills/backend-developer/references/go-echo.md +68 -0
- package/.agent/skills/backend-developer/references/go-gin.md +76 -0
- package/.agent/skills/backend-developer/references/java-springboot.md +83 -0
- package/.agent/skills/backend-developer/references/node-express.md +64 -0
- package/.agent/skills/backend-developer/references/node-nestjs.md +69 -0
- package/.agent/skills/backend-developer/references/python-django.md +67 -0
- package/.agent/skills/backend-developer/references/python-fastapi.md +80 -0
- package/.agent/skills/blockchain-engineer/SKILL.md +975 -0
- package/.agent/skills/blockchain-engineer/references/deployment.md +28 -0
- package/.agent/skills/blockchain-engineer/references/evm.md +14 -0
- package/.agent/skills/blockchain-engineer/references/mechanisms.md +32 -0
- package/.agent/skills/blockchain-engineer/references/solidity.md +32 -0
- package/.agent/skills/business-analysis/SKILL.md +85 -0
- package/.agent/skills/business-analysis/references/best-practices/diagrams.md +141 -0
- package/.agent/skills/business-analysis/references/domains/ai-agent.md +94 -0
- package/.agent/skills/business-analysis/references/domains/blockchain-dapp.md +86 -0
- package/.agent/skills/business-analysis/references/domains/ecommerce.md +77 -0
- package/.agent/skills/business-analysis/references/domains/education.md +42 -0
- package/.agent/skills/business-analysis/references/domains/fintech.md +44 -0
- package/.agent/skills/business-analysis/references/domains/fnb.md +82 -0
- package/.agent/skills/business-analysis/references/domains/healthtech.md +44 -0
- package/.agent/skills/business-analysis/references/domains/internal-tools.md +38 -0
- package/.agent/skills/business-analysis/references/domains/marketplace.md +52 -0
- package/.agent/skills/business-analysis/references/domains/saas.md +36 -0
- package/.agent/skills/business-analysis/references/workflows/collaboration.md +41 -0
- package/.agent/skills/business-analysis/scripts/verify_mermaid.py +86 -0
- package/.agent/skills/business-analysis/templates/brd.md +46 -0
- package/.agent/skills/business-analysis/templates/change-request.md +41 -0
- package/.agent/skills/business-analysis/templates/prd-functional.md +38 -0
- package/.agent/skills/business-analysis/templates/use-case.md +40 -0
- package/.agent/skills/business-analysis/templates/user-story-detailed.md +36 -0
- package/.agent/skills/code-review/SKILL.md +113 -0
- package/.agent/skills/code-review/references/code-review-reception.md +209 -0
- package/.agent/skills/code-review/references/differential_review.md +59 -0
- package/.agent/skills/code-review/references/requesting-code-review.md +105 -0
- package/.agent/skills/code-review/references/spec_compliance.md +43 -0
- package/.agent/skills/code-review/references/verification-before-completion.md +139 -0
- package/.agent/skills/context-engineering/SKILL.md +68 -0
- package/.agent/skills/context-engineering/references/context-compression.md +84 -0
- package/.agent/skills/context-engineering/references/context-degradation.md +93 -0
- package/.agent/skills/context-engineering/references/context-fundamentals.md +75 -0
- package/.agent/skills/context-engineering/references/context-optimization.md +82 -0
- package/.agent/skills/context-engineering/references/evaluation.md +89 -0
- package/.agent/skills/context-engineering/references/memory-systems.md +88 -0
- package/.agent/skills/context-engineering/references/multi-agent-patterns.md +90 -0
- package/.agent/skills/context-engineering/references/project-development.md +97 -0
- package/.agent/skills/context-engineering/references/tool-design.md +86 -0
- package/.agent/skills/debugging/SKILL.md +60 -0
- package/.agent/skills/debugging/references/defense-in-depth.md +130 -0
- package/.agent/skills/debugging/references/root-cause-tracing.md +177 -0
- package/.agent/skills/debugging/references/systematic-debugging.md +295 -0
- package/.agent/skills/debugging/references/verification-before-completion.md +142 -0
- package/.agent/skills/designer/SKILL.md +159 -0
- package/.agent/skills/designer/concepts/apple-glass.md +48 -0
- package/.agent/skills/designer/concepts/aurora-gradients.md +26 -0
- package/.agent/skills/designer/concepts/bento-grids.md +14 -0
- package/.agent/skills/designer/concepts/claymorphism.md +27 -0
- package/.agent/skills/designer/concepts/neo-brutalism.md +32 -0
- package/.agent/skills/designer/data/app-interface.csv +31 -0
- package/.agent/skills/designer/data/charts.csv +26 -0
- package/.agent/skills/designer/data/colors.csv +162 -0
- package/.agent/skills/designer/data/design.csv +1776 -0
- package/.agent/skills/designer/data/icons.csv +106 -0
- package/.agent/skills/designer/data/landing.csv +35 -0
- package/.agent/skills/designer/data/products.csv +162 -0
- package/.agent/skills/designer/data/react-performance.csv +45 -0
- package/.agent/skills/designer/data/styles.csv +85 -0
- package/.agent/skills/designer/data/typography.csv +74 -0
- package/.agent/skills/designer/data/ui-reasoning.csv +162 -0
- package/.agent/skills/designer/data/ux-guidelines.csv +100 -0
- package/.agent/skills/designer/references/accessibility.md +172 -0
- package/.agent/skills/designer/references/branding.md +88 -0
- package/.agent/skills/designer/references/color-theory.md +139 -0
- package/.agent/skills/designer/references/creation.md +118 -0
- package/.agent/skills/designer/references/design-systems.md +219 -0
- package/.agent/skills/designer/references/frontend_design_aesthetics.md +57 -0
- package/.agent/skills/designer/references/layout.md +200 -0
- package/.agent/skills/designer/references/motion.md +92 -0
- package/.agent/skills/designer/references/review.md +100 -0
- package/.agent/skills/designer/references/trends.md +209 -0
- package/.agent/skills/designer/references/typography.md +190 -0
- package/.agent/skills/designer/scripts/remove_background.py +135 -0
- package/.agent/skills/designer/scripts/ui-search/__pycache__/core.cpython-314.pyc +0 -0
- package/.agent/skills/designer/scripts/ui-search/__pycache__/design_system.cpython-314.pyc +0 -0
- package/.agent/skills/designer/scripts/ui-search/core.py +217 -0
- package/.agent/skills/designer/scripts/ui-search/design_system.py +1067 -0
- package/.agent/skills/designer/scripts/ui-search/search.py +114 -0
- package/.agent/skills/designer/templates/design-motion-spec.md +30 -0
- package/.agent/skills/devops-engineer/SKILL.md +90 -0
- package/.agent/skills/devops-engineer/docker-compose/README.md +47 -0
- package/.agent/skills/devops-engineer/references/ci-cd-pipelines.md +76 -0
- package/.agent/skills/devops-engineer/references/cloud-providers.md +57 -0
- package/.agent/skills/devops-engineer/references/codebase-normalization.md +104 -0
- package/.agent/skills/devops-engineer/references/container-orchestration.md +69 -0
- package/.agent/skills/devops-engineer/references/iac-tools.md +63 -0
- package/.agent/skills/devops-engineer/references/observability-security.md +45 -0
- package/.agent/skills/devops-engineer/references/vercel-supabase.md +17 -0
- package/.agent/skills/devops-engineer/templates/release-notes.md +8 -0
- package/.agent/skills/frontend-developer/SKILL.md +125 -0
- package/.agent/skills/frontend-developer/react-nextjs/README.md +90 -0
- package/.agent/skills/frontend-developer/references/angular.md +52 -0
- package/.agent/skills/frontend-developer/references/composition_patterns.md +60 -0
- package/.agent/skills/frontend-developer/references/core-performance.md +68 -0
- package/.agent/skills/frontend-developer/references/modern-signals.md +43 -0
- package/.agent/skills/frontend-developer/references/react_performance_rules.md +55 -0
- package/.agent/skills/frontend-developer/references/vue-nuxt.md +55 -0
- package/.agent/skills/frontend-developer/scripts/validate_compliance.py +65 -0
- package/.agent/skills/frontend-developer/threejs/README.md +89 -0
- package/.agent/skills/frontend-developer/threejs/animation.md +552 -0
- package/.agent/skills/frontend-developer/threejs/fundamentals.md +488 -0
- package/.agent/skills/frontend-developer/threejs/geometry.md +548 -0
- package/.agent/skills/frontend-developer/threejs/interaction.md +660 -0
- package/.agent/skills/frontend-developer/threejs/lighting.md +481 -0
- package/.agent/skills/frontend-developer/threejs/loaders.md +623 -0
- package/.agent/skills/frontend-developer/threejs/materials.md +520 -0
- package/.agent/skills/frontend-developer/threejs/postprocessing.md +602 -0
- package/.agent/skills/frontend-developer/threejs/router.json +181 -0
- package/.agent/skills/frontend-developer/threejs/shaders.md +642 -0
- package/.agent/skills/frontend-developer/threejs/textures.md +628 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/.agent/skills/game-development/SKILL.md +167 -0
- package/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/.agent/skills/lead-architect/SKILL.md +85 -0
- package/.agent/skills/lead-architect/references/application-architecture.md +70 -0
- package/.agent/skills/lead-architect/references/infrastructure.md +51 -0
- package/.agent/skills/lead-architect/references/process.md +42 -0
- package/.agent/skills/lead-architect/references/system-architecture.md +62 -0
- package/.agent/skills/lead-architect/references/web-fullstack.md +82 -0
- package/.agent/skills/lead-architect/templates/adr.md +62 -0
- package/.agent/skills/lead-architect/templates/rfc.md +46 -0
- package/.agent/skills/lead-architect/templates/sdd.md +62 -0
- package/.agent/skills/lead-architect/templates/technical-spec.md +61 -0
- package/.agent/skills/marketer/SKILL.md +66 -0
- package/.agent/skills/marketer/remotion-best-practices/SKILL.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/3d.md +86 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/animations.md +29 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/assets.md +78 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/audio.md +172 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/calculate-metadata.md +104 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/can-decode.md +75 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/charts.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/compositions.md +146 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/display-captions.md +126 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/extract-frames.md +229 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/fonts.md +152 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/get-video-duration.md +58 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/gifs.md +138 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/images.md +130 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/import-srt-captions.md +67 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/lottie.md +68 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/measuring-dom-nodes.md +35 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/measuring-text.md +143 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/sequencing.md +106 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/tailwind.md +11 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/text-animations.md +20 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/timing.md +179 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/transcribe-captions.md +19 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/transitions.md +122 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/trimming.md +53 -0
- package/.agent/skills/marketer/remotion-best-practices/rules/videos.md +171 -0
- package/.agent/skills/mcp-builder/SKILL.md +76 -0
- package/.agent/skills/mcp-builder/references/evaluation.md +602 -0
- package/.agent/skills/mcp-builder/references/mcp_best_practices.md +249 -0
- package/.agent/skills/mcp-builder/references/node_mcp_server.md +970 -0
- package/.agent/skills/mcp-builder/references/python_mcp_server.md +719 -0
- package/.agent/skills/mobile-developer/SKILL.md +83 -0
- package/.agent/skills/mobile-developer/api-routes/SKILL.md +389 -0
- package/.agent/skills/mobile-developer/building-ui/SKILL.md +335 -0
- package/.agent/skills/mobile-developer/building-ui/references/animations.md +220 -0
- package/.agent/skills/mobile-developer/building-ui/references/controls.md +270 -0
- package/.agent/skills/mobile-developer/building-ui/references/form-sheet.md +227 -0
- package/.agent/skills/mobile-developer/building-ui/references/gradients.md +106 -0
- package/.agent/skills/mobile-developer/building-ui/references/icons.md +213 -0
- package/.agent/skills/mobile-developer/building-ui/references/media.md +198 -0
- package/.agent/skills/mobile-developer/building-ui/references/route-structure.md +229 -0
- package/.agent/skills/mobile-developer/building-ui/references/search.md +248 -0
- package/.agent/skills/mobile-developer/building-ui/references/storage.md +121 -0
- package/.agent/skills/mobile-developer/building-ui/references/tabs.md +368 -0
- package/.agent/skills/mobile-developer/building-ui/references/visual-effects.md +197 -0
- package/.agent/skills/mobile-developer/building-ui/references/webgpu-three.md +605 -0
- package/.agent/skills/mobile-developer/cicd-workflows/SKILL.md +107 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/fetch.js +109 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/package.json +11 -0
- package/.agent/skills/mobile-developer/cicd-workflows/scripts/validate.js +84 -0
- package/.agent/skills/mobile-developer/data-fetching/SKILL.md +508 -0
- package/.agent/skills/mobile-developer/deployment/SKILL.md +207 -0
- package/.agent/skills/mobile-developer/deployment/references/app-store-metadata.md +479 -0
- package/.agent/skills/mobile-developer/deployment/references/ios-app-store.md +355 -0
- package/.agent/skills/mobile-developer/deployment/references/play-store.md +246 -0
- package/.agent/skills/mobile-developer/deployment/references/testflight.md +58 -0
- package/.agent/skills/mobile-developer/deployment/references/workflows.md +200 -0
- package/.agent/skills/mobile-developer/dev-client/SKILL.md +181 -0
- package/.agent/skills/mobile-developer/tailwind-setup/SKILL.md +501 -0
- package/.agent/skills/mobile-developer/upgrading-expo/SKILL.md +116 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/new-architecture.md +79 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/react-19.md +79 -0
- package/.agent/skills/mobile-developer/upgrading-expo/references/react-compiler.md +59 -0
- package/.agent/skills/mobile-developer/use-dom/SKILL.md +434 -0
- package/.agent/skills/modern-python/SKILL.md +122 -0
- package/.agent/skills/project-manager/SKILL.md +110 -0
- package/.agent/skills/project-manager/references/ba-collaboration.md +62 -0
- package/.agent/skills/project-manager/references/discovery_process.md +52 -0
- package/.agent/skills/project-manager/references/jobs_to_be_done.md +51 -0
- package/.agent/skills/project-manager/references/prd_development.md +52 -0
- package/.agent/skills/project-manager/references/rules-guide.md +55 -0
- package/.agent/skills/project-manager/references/skill-creation.md +98 -0
- package/.agent/skills/project-manager/references/strategic-frameworks.md +62 -0
- package/.agent/skills/project-manager/references/task-decomposition.md +194 -0
- package/.agent/skills/project-manager/references/workflows-guide.md +44 -0
- package/.agent/skills/project-manager/router.json +160 -0
- package/.agent/skills/project-manager/scripts/compare_skill.py +177 -0
- package/.agent/skills/project-manager/scripts/encoding_utils.py +36 -0
- package/.agent/skills/project-manager/scripts/init_skill.py +190 -0
- package/.agent/skills/project-manager/scripts/quick_validate.py +123 -0
- package/.agent/skills/project-manager/templates/pm-strategy-one-pager.md +6 -0
- package/.agent/skills/project-manager/templates/prd-strategic.md +38 -0
- package/.agent/skills/project-manager/templates/skill-questionnaire.md +118 -0
- package/.agent/skills/project-manager/templates/user-story-simple.md +14 -0
- package/.agent/skills/prompt-engineer/SKILL.md +319 -0
- package/.agent/skills/prompt-engineer/skill-creator/README.md +47 -0
- package/.agent/skills/qa-tester/SKILL.md +142 -0
- package/.agent/skills/qa-tester/assets/README.md +8 -0
- package/.agent/skills/qa-tester/references/accessibility_testing.md +35 -0
- package/.agent/skills/qa-tester/references/agent_browser.md +38 -0
- package/.agent/skills/qa-tester/references/automation/api_testing.md +23 -0
- package/.agent/skills/qa-tester/references/automation/best_practices.md +14 -0
- package/.agent/skills/qa-tester/references/automation/jest_vitest.md +26 -0
- package/.agent/skills/qa-tester/references/automation/playwright.md +30 -0
- package/.agent/skills/qa-tester/references/e2e_testing.md +46 -0
- package/.agent/skills/qa-tester/references/integration_testing.md +39 -0
- package/.agent/skills/qa-tester/references/performance_testing.md +44 -0
- package/.agent/skills/qa-tester/references/property_based_testing.md +44 -0
- package/.agent/skills/qa-tester/references/security_audit.md +53 -0
- package/.agent/skills/qa-tester/references/security_testing.md +30 -0
- package/.agent/skills/qa-tester/references/sharp_edges.md +49 -0
- package/.agent/skills/qa-tester/references/static_analysis.md +52 -0
- package/.agent/skills/qa-tester/references/supply_chain_audit.md +54 -0
- package/.agent/skills/qa-tester/references/test_case_standards.md +96 -0
- package/.agent/skills/qa-tester/references/test_report_template.md +32 -0
- package/.agent/skills/qa-tester/references/unit_testing.md +50 -0
- package/.agent/skills/qa-tester/references/visual_testing.md +32 -0
- package/.agent/skills/qa-tester/templates/uat-plan.md +34 -0
- package/.agent/skills/research-first/SKILL.md +118 -0
- package/.agent/skills-manifest.json +264 -0
- package/.agent/workflows/absorb.md +176 -0
- package/.agent/workflows/bootstrap.md +91 -0
- package/.agent/workflows/brainstorm.md +168 -0
- package/.agent/workflows/break-tasks.md +77 -0
- package/.agent/workflows/commit.md +349 -0
- package/.agent/workflows/custom-behavior.md +64 -0
- package/.agent/workflows/debug.md +65 -0
- package/.agent/workflows/development.md +49 -0
- package/.agent/workflows/documentation.md +221 -0
- package/.agent/workflows/gen-tests.md +53 -0
- package/.agent/workflows/guide.md +196 -0
- package/.agent/workflows/implement-feature.md +182 -0
- package/.agent/workflows/install-skill.md +193 -0
- package/.agent/workflows/qa.md +54 -0
- package/.agent/workflows/ui-ux-design.md +108 -0
- package/LICENSE +21 -0
- package/README.md +258 -0
- package/cli/index.js +345 -0
- package/cli/migrate-skills.js +113 -0
- package/cli/verify.js +291 -0
- package/package.json +49 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
# Submitting to iOS App Store
|
|
2
|
+
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
1. **Apple Developer Account** - Enroll at [developer.apple.com](https://developer.apple.com)
|
|
6
|
+
2. **App Store Connect App** - Create your app record before first submission
|
|
7
|
+
3. **Apple Credentials** - Configure via EAS or environment variables
|
|
8
|
+
|
|
9
|
+
## Credential Setup
|
|
10
|
+
|
|
11
|
+
### Using EAS Credentials
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
eas credentials -p ios
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
This interactive flow helps you:
|
|
18
|
+
- Create or select a distribution certificate
|
|
19
|
+
- Create or select a provisioning profile
|
|
20
|
+
- Configure App Store Connect API key (recommended)
|
|
21
|
+
|
|
22
|
+
### App Store Connect API Key (Recommended)
|
|
23
|
+
|
|
24
|
+
API keys avoid 2FA prompts in CI/CD:
|
|
25
|
+
|
|
26
|
+
1. Go to App Store Connect → Users and Access → Keys
|
|
27
|
+
2. Click "+" to create a new key
|
|
28
|
+
3. Select "App Manager" role (minimum for submissions)
|
|
29
|
+
4. Download the `.p8` key file
|
|
30
|
+
|
|
31
|
+
Configure in `eas.json`:
|
|
32
|
+
|
|
33
|
+
```json
|
|
34
|
+
{
|
|
35
|
+
"submit": {
|
|
36
|
+
"production": {
|
|
37
|
+
"ios": {
|
|
38
|
+
"ascApiKeyPath": "./AuthKey_XXXXX.p8",
|
|
39
|
+
"ascApiKeyIssuerId": "xxxxx-xxxx-xxxx-xxxx-xxxxx",
|
|
40
|
+
"ascApiKeyId": "XXXXXXXXXX"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Or use environment variables:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
EXPO_ASC_API_KEY_PATH=./AuthKey.p8
|
|
51
|
+
EXPO_ASC_API_KEY_ISSUER_ID=xxxxx-xxxx-xxxx-xxxx-xxxxx
|
|
52
|
+
EXPO_ASC_API_KEY_ID=XXXXXXXXXX
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Apple ID Authentication (Alternative)
|
|
56
|
+
|
|
57
|
+
For manual submissions, you can use Apple ID:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
EXPO_APPLE_ID=your@email.com
|
|
61
|
+
EXPO_APPLE_TEAM_ID=XXXXXXXXXX
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Note: Requires app-specific password for accounts with 2FA.
|
|
65
|
+
|
|
66
|
+
## Submission Commands
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Build and submit to App Store Connect
|
|
70
|
+
eas build -p ios --profile production --submit
|
|
71
|
+
|
|
72
|
+
# Submit latest build
|
|
73
|
+
eas submit -p ios --latest
|
|
74
|
+
|
|
75
|
+
# Submit specific build
|
|
76
|
+
eas submit -p ios --id BUILD_ID
|
|
77
|
+
|
|
78
|
+
# Quick TestFlight submission
|
|
79
|
+
npx testflight
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## App Store Connect Configuration
|
|
83
|
+
|
|
84
|
+
### First-Time Setup
|
|
85
|
+
|
|
86
|
+
Before submitting, complete in App Store Connect:
|
|
87
|
+
|
|
88
|
+
1. **App Information**
|
|
89
|
+
- Primary language
|
|
90
|
+
- Bundle ID (must match `app.json`)
|
|
91
|
+
- SKU (unique identifier)
|
|
92
|
+
|
|
93
|
+
2. **Pricing and Availability**
|
|
94
|
+
- Price tier
|
|
95
|
+
- Available countries
|
|
96
|
+
|
|
97
|
+
3. **App Privacy**
|
|
98
|
+
- Privacy policy URL
|
|
99
|
+
- Data collection declarations
|
|
100
|
+
|
|
101
|
+
4. **App Review Information**
|
|
102
|
+
- Contact information
|
|
103
|
+
- Demo account (if login required)
|
|
104
|
+
- Notes for reviewers
|
|
105
|
+
|
|
106
|
+
### EAS Configuration
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"cli": {
|
|
111
|
+
"version": ">= 16.0.1",
|
|
112
|
+
"appVersionSource": "remote"
|
|
113
|
+
},
|
|
114
|
+
"build": {
|
|
115
|
+
"production": {
|
|
116
|
+
"ios": {
|
|
117
|
+
"resourceClass": "m-medium",
|
|
118
|
+
"autoIncrement": true
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"submit": {
|
|
123
|
+
"production": {
|
|
124
|
+
"ios": {
|
|
125
|
+
"appleId": "your@email.com",
|
|
126
|
+
"ascAppId": "1234567890",
|
|
127
|
+
"appleTeamId": "XXXXXXXXXX"
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Find `ascAppId` in App Store Connect → App Information → Apple ID.
|
|
135
|
+
|
|
136
|
+
## TestFlight vs App Store
|
|
137
|
+
|
|
138
|
+
### TestFlight (Beta Testing)
|
|
139
|
+
|
|
140
|
+
- Builds go to TestFlight automatically after submission
|
|
141
|
+
- Internal testers (up to 100) - immediate access
|
|
142
|
+
- External testers (up to 10,000) - requires beta review
|
|
143
|
+
- Builds expire after 90 days
|
|
144
|
+
|
|
145
|
+
### App Store (Production)
|
|
146
|
+
|
|
147
|
+
- Requires passing App Review
|
|
148
|
+
- Submit for review from App Store Connect
|
|
149
|
+
- Choose release timing (immediate, scheduled, manual)
|
|
150
|
+
|
|
151
|
+
## App Review Process
|
|
152
|
+
|
|
153
|
+
### What Reviewers Check
|
|
154
|
+
|
|
155
|
+
1. **Functionality** - App works as described
|
|
156
|
+
2. **UI/UX** - Follows Human Interface Guidelines
|
|
157
|
+
3. **Content** - Appropriate and accurate
|
|
158
|
+
4. **Privacy** - Data handling matches declarations
|
|
159
|
+
5. **Legal** - Complies with local laws
|
|
160
|
+
|
|
161
|
+
### Common Rejection Reasons
|
|
162
|
+
|
|
163
|
+
| Issue | Solution |
|
|
164
|
+
|-------|----------|
|
|
165
|
+
| Crashes/bugs | Test thoroughly before submission |
|
|
166
|
+
| Incomplete metadata | Fill all required fields |
|
|
167
|
+
| Placeholder content | Remove "lorem ipsum" and test data |
|
|
168
|
+
| Missing login credentials | Provide demo account |
|
|
169
|
+
| Privacy policy missing | Add URL in App Store Connect |
|
|
170
|
+
| Guideline 4.2 (minimum functionality) | Ensure app provides value |
|
|
171
|
+
|
|
172
|
+
### Expedited Review
|
|
173
|
+
|
|
174
|
+
Request expedited review for:
|
|
175
|
+
- Critical bug fixes
|
|
176
|
+
- Time-sensitive events
|
|
177
|
+
- Security issues
|
|
178
|
+
|
|
179
|
+
Go to App Store Connect → your app → App Review → Request Expedited Review.
|
|
180
|
+
|
|
181
|
+
## Version and Build Numbers
|
|
182
|
+
|
|
183
|
+
iOS uses two version identifiers:
|
|
184
|
+
|
|
185
|
+
- **Version** (`CFBundleShortVersionString`): User-facing, e.g., "1.2.3"
|
|
186
|
+
- **Build Number** (`CFBundleVersion`): Internal, must increment for each upload
|
|
187
|
+
|
|
188
|
+
Configure in `app.json`:
|
|
189
|
+
|
|
190
|
+
```json
|
|
191
|
+
{
|
|
192
|
+
"expo": {
|
|
193
|
+
"version": "1.2.3",
|
|
194
|
+
"ios": {
|
|
195
|
+
"buildNumber": "1"
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
With `autoIncrement: true`, EAS handles build numbers automatically.
|
|
202
|
+
|
|
203
|
+
## Release Options
|
|
204
|
+
|
|
205
|
+
### Automatic Release
|
|
206
|
+
|
|
207
|
+
Release immediately when approved:
|
|
208
|
+
|
|
209
|
+
```json
|
|
210
|
+
{
|
|
211
|
+
"apple": {
|
|
212
|
+
"release": {
|
|
213
|
+
"automaticRelease": true
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Scheduled Release
|
|
220
|
+
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"apple": {
|
|
224
|
+
"release": {
|
|
225
|
+
"automaticRelease": "2025-03-01T10:00:00Z"
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Phased Release
|
|
232
|
+
|
|
233
|
+
Gradual rollout over 7 days:
|
|
234
|
+
|
|
235
|
+
```json
|
|
236
|
+
{
|
|
237
|
+
"apple": {
|
|
238
|
+
"release": {
|
|
239
|
+
"phasedRelease": true
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Rollout: Day 1 (1%) → Day 2 (2%) → Day 3 (5%) → Day 4 (10%) → Day 5 (20%) → Day 6 (50%) → Day 7 (100%)
|
|
246
|
+
|
|
247
|
+
## Certificates and Provisioning
|
|
248
|
+
|
|
249
|
+
### Distribution Certificate
|
|
250
|
+
|
|
251
|
+
- Required for App Store submissions
|
|
252
|
+
- Limited to 3 per Apple Developer account
|
|
253
|
+
- Valid for 1 year
|
|
254
|
+
- EAS manages automatically
|
|
255
|
+
|
|
256
|
+
### Provisioning Profile
|
|
257
|
+
|
|
258
|
+
- Links app, certificate, and entitlements
|
|
259
|
+
- App Store profiles don't include device UDIDs
|
|
260
|
+
- EAS creates and manages automatically
|
|
261
|
+
|
|
262
|
+
### Check Current Credentials
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
eas credentials -p ios
|
|
266
|
+
|
|
267
|
+
# Sync with Apple Developer Portal
|
|
268
|
+
eas credentials -p ios --sync
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## App Store Metadata
|
|
272
|
+
|
|
273
|
+
Use EAS Metadata to manage App Store listing from code:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
# Pull existing metadata
|
|
277
|
+
eas metadata:pull
|
|
278
|
+
|
|
279
|
+
# Push changes
|
|
280
|
+
eas metadata:push
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
See ./app-store-metadata.md for detailed configuration.
|
|
284
|
+
|
|
285
|
+
## Troubleshooting
|
|
286
|
+
|
|
287
|
+
### "No suitable application records found"
|
|
288
|
+
|
|
289
|
+
Create the app in App Store Connect first with matching bundle ID.
|
|
290
|
+
|
|
291
|
+
### "The bundle version must be higher"
|
|
292
|
+
|
|
293
|
+
Increment build number. With `autoIncrement: true`, this is automatic.
|
|
294
|
+
|
|
295
|
+
### "Missing compliance information"
|
|
296
|
+
|
|
297
|
+
Add export compliance to `app.json`:
|
|
298
|
+
|
|
299
|
+
```json
|
|
300
|
+
{
|
|
301
|
+
"expo": {
|
|
302
|
+
"ios": {
|
|
303
|
+
"config": {
|
|
304
|
+
"usesNonExemptEncryption": false
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### "Invalid provisioning profile"
|
|
312
|
+
|
|
313
|
+
```bash
|
|
314
|
+
eas credentials -p ios --sync
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Build stuck in "Processing"
|
|
318
|
+
|
|
319
|
+
App Store Connect processing can take 5-30 minutes. Check status in App Store Connect → TestFlight.
|
|
320
|
+
|
|
321
|
+
## CI/CD Integration
|
|
322
|
+
|
|
323
|
+
For automated submissions in CI/CD:
|
|
324
|
+
|
|
325
|
+
```yaml
|
|
326
|
+
# .eas/workflows/release.yml
|
|
327
|
+
name: Release to App Store
|
|
328
|
+
|
|
329
|
+
on:
|
|
330
|
+
push:
|
|
331
|
+
tags: ['v*']
|
|
332
|
+
|
|
333
|
+
jobs:
|
|
334
|
+
build:
|
|
335
|
+
type: build
|
|
336
|
+
params:
|
|
337
|
+
platform: ios
|
|
338
|
+
profile: production
|
|
339
|
+
|
|
340
|
+
submit:
|
|
341
|
+
type: submit
|
|
342
|
+
needs: [build]
|
|
343
|
+
params:
|
|
344
|
+
platform: ios
|
|
345
|
+
profile: production
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
## Tips
|
|
349
|
+
|
|
350
|
+
- Submit to TestFlight early and often for feedback
|
|
351
|
+
- Use beta app review for external testers to catch issues before App Store review
|
|
352
|
+
- Respond to reviewer questions promptly in App Store Connect
|
|
353
|
+
- Keep demo account credentials up to date
|
|
354
|
+
- Monitor App Store Connect notifications for review updates
|
|
355
|
+
- Use phased release for major updates to catch issues early
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# Submitting to Google Play Store
|
|
2
|
+
|
|
3
|
+
## Prerequisites
|
|
4
|
+
|
|
5
|
+
1. **Google Play Console Account** - Register at [play.google.com/console](https://play.google.com/console)
|
|
6
|
+
2. **App Created in Console** - Create your app listing before first submission
|
|
7
|
+
3. **Service Account** - For automated submissions via EAS
|
|
8
|
+
|
|
9
|
+
## Service Account Setup
|
|
10
|
+
|
|
11
|
+
### 1. Create Service Account
|
|
12
|
+
|
|
13
|
+
1. Go to Google Cloud Console → IAM & Admin → Service Accounts
|
|
14
|
+
2. Create a new service account
|
|
15
|
+
3. Grant the "Service Account User" role
|
|
16
|
+
4. Create and download a JSON key
|
|
17
|
+
|
|
18
|
+
### 2. Link to Play Console
|
|
19
|
+
|
|
20
|
+
1. Go to Play Console → Setup → API access
|
|
21
|
+
2. Click "Link" next to your Google Cloud project
|
|
22
|
+
3. Under "Service accounts", click "Manage Play Console permissions"
|
|
23
|
+
4. Grant "Release to production" permission (or appropriate track permissions)
|
|
24
|
+
|
|
25
|
+
### 3. Configure EAS
|
|
26
|
+
|
|
27
|
+
Add the service account key path to `eas.json`:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"submit": {
|
|
32
|
+
"production": {
|
|
33
|
+
"android": {
|
|
34
|
+
"serviceAccountKeyPath": "./google-service-account.json",
|
|
35
|
+
"track": "internal"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Store the key file securely and add it to `.gitignore`.
|
|
43
|
+
|
|
44
|
+
## Environment Variables
|
|
45
|
+
|
|
46
|
+
For CI/CD, use environment variables instead of file paths:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Base64-encoded service account JSON
|
|
50
|
+
EXPO_ANDROID_SERVICE_ACCOUNT_KEY_BASE64=...
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Or use EAS Secrets:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
eas secret:create --name GOOGLE_SERVICE_ACCOUNT --value "$(cat google-service-account.json)" --type file
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Then reference in `eas.json`:
|
|
60
|
+
|
|
61
|
+
```json
|
|
62
|
+
{
|
|
63
|
+
"submit": {
|
|
64
|
+
"production": {
|
|
65
|
+
"android": {
|
|
66
|
+
"serviceAccountKeyPath": "@secret:GOOGLE_SERVICE_ACCOUNT"
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Release Tracks
|
|
74
|
+
|
|
75
|
+
Google Play uses tracks for staged rollouts:
|
|
76
|
+
|
|
77
|
+
| Track | Purpose |
|
|
78
|
+
|-------|---------|
|
|
79
|
+
| `internal` | Internal testing (up to 100 testers) |
|
|
80
|
+
| `alpha` | Closed testing |
|
|
81
|
+
| `beta` | Open testing |
|
|
82
|
+
| `production` | Public release |
|
|
83
|
+
|
|
84
|
+
### Track Configuration
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"submit": {
|
|
89
|
+
"production": {
|
|
90
|
+
"android": {
|
|
91
|
+
"track": "production",
|
|
92
|
+
"releaseStatus": "completed"
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"internal": {
|
|
96
|
+
"android": {
|
|
97
|
+
"track": "internal",
|
|
98
|
+
"releaseStatus": "completed"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Release Status Options
|
|
106
|
+
|
|
107
|
+
- `completed` - Immediately available on the track
|
|
108
|
+
- `draft` - Upload only, release manually in Console
|
|
109
|
+
- `halted` - Pause an in-progress rollout
|
|
110
|
+
- `inProgress` - Staged rollout (requires `rollout` percentage)
|
|
111
|
+
|
|
112
|
+
## Staged Rollout
|
|
113
|
+
|
|
114
|
+
```json
|
|
115
|
+
{
|
|
116
|
+
"submit": {
|
|
117
|
+
"production": {
|
|
118
|
+
"android": {
|
|
119
|
+
"track": "production",
|
|
120
|
+
"releaseStatus": "inProgress",
|
|
121
|
+
"rollout": 0.1
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
This releases to 10% of users. Increase via Play Console or subsequent submissions.
|
|
129
|
+
|
|
130
|
+
## Submission Commands
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Build and submit to internal track
|
|
134
|
+
eas build -p android --profile production --submit
|
|
135
|
+
|
|
136
|
+
# Submit existing build to Play Store
|
|
137
|
+
eas submit -p android --latest
|
|
138
|
+
|
|
139
|
+
# Submit specific build
|
|
140
|
+
eas submit -p android --id BUILD_ID
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## App Signing
|
|
144
|
+
|
|
145
|
+
### Google Play App Signing (Recommended)
|
|
146
|
+
|
|
147
|
+
EAS uses Google Play App Signing by default:
|
|
148
|
+
|
|
149
|
+
1. First upload: EAS creates upload key, Play Store manages signing key
|
|
150
|
+
2. Play Store re-signs your app with the signing key
|
|
151
|
+
3. Upload key can be reset if compromised
|
|
152
|
+
|
|
153
|
+
### Checking Signing Status
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
eas credentials -p android
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Version Codes
|
|
160
|
+
|
|
161
|
+
Android requires incrementing `versionCode` for each upload:
|
|
162
|
+
|
|
163
|
+
```json
|
|
164
|
+
{
|
|
165
|
+
"build": {
|
|
166
|
+
"production": {
|
|
167
|
+
"autoIncrement": true
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
With `appVersionSource: "remote"`, EAS tracks version codes automatically.
|
|
174
|
+
|
|
175
|
+
## First Submission Checklist
|
|
176
|
+
|
|
177
|
+
Before your first Play Store submission:
|
|
178
|
+
|
|
179
|
+
- [ ] Create app in Google Play Console
|
|
180
|
+
- [ ] Complete app content declaration (privacy policy, ads, etc.)
|
|
181
|
+
- [ ] Set up store listing (title, description, screenshots)
|
|
182
|
+
- [ ] Complete content rating questionnaire
|
|
183
|
+
- [ ] Set up pricing and distribution
|
|
184
|
+
- [ ] Create service account with proper permissions
|
|
185
|
+
- [ ] Configure `eas.json` with service account path
|
|
186
|
+
|
|
187
|
+
## Common Issues
|
|
188
|
+
|
|
189
|
+
### "App not found"
|
|
190
|
+
|
|
191
|
+
The app must exist in Play Console before EAS can submit. Create it manually first.
|
|
192
|
+
|
|
193
|
+
### "Version code already used"
|
|
194
|
+
|
|
195
|
+
Increment `versionCode` in `app.json` or use `autoIncrement: true` in `eas.json`.
|
|
196
|
+
|
|
197
|
+
### "Service account lacks permission"
|
|
198
|
+
|
|
199
|
+
Ensure the service account has "Release to production" permission in Play Console → API access.
|
|
200
|
+
|
|
201
|
+
### "APK not acceptable"
|
|
202
|
+
|
|
203
|
+
Play Store requires AAB (Android App Bundle) for new apps:
|
|
204
|
+
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"build": {
|
|
208
|
+
"production": {
|
|
209
|
+
"android": {
|
|
210
|
+
"buildType": "app-bundle"
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Internal Testing Distribution
|
|
218
|
+
|
|
219
|
+
For quick internal distribution without Play Store:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# Build with internal distribution
|
|
223
|
+
eas build -p android --profile development
|
|
224
|
+
|
|
225
|
+
# Share the APK link with testers
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Or use EAS Update for OTA updates to existing installs.
|
|
229
|
+
|
|
230
|
+
## Monitoring Submissions
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
# Check submission status
|
|
234
|
+
eas submit:list -p android
|
|
235
|
+
|
|
236
|
+
# View specific submission
|
|
237
|
+
eas submit:view SUBMISSION_ID
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Tips
|
|
241
|
+
|
|
242
|
+
- Start with `internal` track for testing before production
|
|
243
|
+
- Use staged rollouts for production releases
|
|
244
|
+
- Keep service account key secure - never commit to git
|
|
245
|
+
- Set up Play Console notifications for review status
|
|
246
|
+
- Pre-launch reports in Play Console catch issues before review
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# TestFlight
|
|
2
|
+
|
|
3
|
+
Always ship to TestFlight first. Internal testers, then external testers, then App Store. Never skip this.
|
|
4
|
+
|
|
5
|
+
## Submit
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx testflight
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
That's it. One command builds and submits to TestFlight.
|
|
12
|
+
|
|
13
|
+
## Skip the Prompts
|
|
14
|
+
|
|
15
|
+
Set these once and forget:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
EXPO_APPLE_ID=you@email.com
|
|
19
|
+
EXPO_APPLE_TEAM_ID=XXXXXXXXXX
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The CLI prints your Team ID when you run `npx testflight`. Copy it.
|
|
23
|
+
|
|
24
|
+
## Why TestFlight First
|
|
25
|
+
|
|
26
|
+
- Internal testers get builds instantly (no review)
|
|
27
|
+
- External testers require one Beta App Review, then instant updates
|
|
28
|
+
- Catch crashes before App Store review rejects you
|
|
29
|
+
- TestFlight crash reports are better than App Store crash reports
|
|
30
|
+
- 90 days to test before builds expire
|
|
31
|
+
- Real users on real devices, not simulators
|
|
32
|
+
|
|
33
|
+
## Tester Strategy
|
|
34
|
+
|
|
35
|
+
**Internal (100 max)**: Your team. Immediate access. Use for every build.
|
|
36
|
+
|
|
37
|
+
**External (10,000 max)**: Beta users. First build needs review (~24h), then instant. Always have an external group—even if it's just friends. Real feedback beats assumptions.
|
|
38
|
+
|
|
39
|
+
## Tips
|
|
40
|
+
|
|
41
|
+
- Submit to external TestFlight the moment internal looks stable
|
|
42
|
+
- Beta App Review is faster and more lenient than App Store Review
|
|
43
|
+
- Add release notes—testers actually read them
|
|
44
|
+
- Use TestFlight's built-in feedback and screenshots
|
|
45
|
+
- Never go straight to App Store. Ever.
|
|
46
|
+
|
|
47
|
+
## Troubleshooting
|
|
48
|
+
|
|
49
|
+
**"No suitable application records found"**
|
|
50
|
+
Create the app in App Store Connect first. Bundle ID must match.
|
|
51
|
+
|
|
52
|
+
**"The bundle version must be higher"**
|
|
53
|
+
Use `autoIncrement: true` in `eas.json`. Problem solved.
|
|
54
|
+
|
|
55
|
+
**Credentials issues**
|
|
56
|
+
```bash
|
|
57
|
+
eas credentials -p ios
|
|
58
|
+
```
|