create-disposabl-app 0.1.0 → 0.1.1
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/dist/index.js +21 -22
- package/dist/templates/default/apps/desktop/.oxfmtrc.json +5 -0
- package/dist/templates/default/apps/desktop/.oxlintrc.json +6 -0
- package/dist/templates/default/apps/desktop/README.md +58 -0
- package/dist/templates/default/apps/desktop/forge.config.mts +90 -0
- package/dist/templates/default/apps/desktop/index.html +12 -0
- package/dist/templates/default/apps/desktop/package.json +55 -1
- package/dist/templates/default/apps/desktop/src/declarations.d.ts +2 -0
- package/dist/templates/default/apps/desktop/src/index.css +8 -0
- package/dist/templates/default/apps/desktop/src/main.ts +58 -0
- package/dist/templates/default/apps/desktop/src/preload.ts +3 -0
- package/dist/templates/default/apps/desktop/src/renderer.ts +19 -0
- package/dist/templates/default/apps/desktop/tsconfig.json +14 -0
- package/dist/templates/default/apps/desktop/vite.main.config.mts +4 -0
- package/dist/templates/default/apps/desktop/vite.preload.config.mts +4 -0
- package/dist/templates/default/apps/desktop/vite.renderer.config.mts +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/agent-device/SKILL.md +22 -0
- package/dist/templates/default/apps/mobile/.agents/skills/android-emulator/SKILL.md +32 -0
- package/dist/templates/default/apps/mobile/.agents/skills/dogfood/SKILL.md +27 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/SKILL.md +176 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/app-store-metadata.md +497 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/ios-app-store.md +376 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/native-ios.md +167 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/play-store.md +244 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/testflight.md +62 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-app-stores/references/workflows.md +120 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-hosting/SKILL.md +431 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-hosting/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/SKILL.md +46 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/metrics.md +98 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/queries.md +444 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/setup.md +529 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-observe/references/third-party.md +136 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/SKILL.md +237 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/controllers.md +139 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/logs-and-crashes.md +101 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/run-your-app.md +256 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-simulator/references/troubleshooting.md +56 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-update/SKILL.md +146 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-update/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/SKILL.md +238 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/references/channel-insights-schema.md +47 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-update-insights/references/update-insights-schema.md +69 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/SKILL.md +99 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/scripts/fetch.js +109 -0
- package/dist/templates/default/apps/mobile/.agents/skills/eas-workflows/scripts/package.json +6 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/LICENSE +21 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/RECIPES.md +385 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/SKILL.md +274 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-animation/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/SKILL.md +290 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-app-clip/references/native-module.md +96 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/SKILL.md +69 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/brownfield-integrated.md +551 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/brownfield-isolated.md +449 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/comparison.md +63 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/feature-integration.md +163 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/troubleshooting.md +88 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-brownfield/references/version-compatibility.md +40 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/SKILL.md +478 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/references/expo-router-loaders.md +341 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-data-fetching/references/offline-and-cancellation.md +68 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/SKILL.md +376 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/references/audit.md +190 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-design-system/references/native-slop.md +74 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-dev-client/SKILL.md +184 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-dev-client/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-dom/SKILL.md +425 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-dom/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/SKILL.md +106 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-examples/references/catalog.md +105 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/SKILL.md +124 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/compatibility.md +130 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/example.md +212 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-migrate-module/references/migration-map.md +457 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/SKILL.md +151 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/config-plugin.md +90 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/create-expo-module.md +206 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/lifecycle.md +127 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/module-config.md +48 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/native-module.md +286 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-module/references/native-view.md +171 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/SKILL.md +201 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/controls.md +231 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/gradients.md +106 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/icons.md +232 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/media.md +193 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/storage.md +121 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/visual-effects.md +198 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-native-ui/references/webgpu-three.md +605 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/SKILL.md +120 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-overview/references/launch-without-dev-menu.md +24 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-project-structure/SKILL.md +114 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-project-structure/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/SKILL.md +240 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/form-sheet.md +253 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/route-structure.md +229 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/search.md +248 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/tabs.md +433 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/toolbar-and-headers.md +284 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-router/references/zoom-transitions.md +158 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/SKILL.md +314 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/agents/visual-grader.md +52 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/references/design-rubric.md +45 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/references/runtime-matrix.md +34 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/check-static.sh +64 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/clean-fixture.sh +56 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/generate_viewer.py +450 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/latest-sdk.sh +46 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/make-fixture.sh +95 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/make-workspace.sh +31 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-android.sh +284 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-ios.sh +132 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-skill-eval/scripts/snapshot-web.sh +61 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/SKILL.md +101 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/drop-in-replacements.md +27 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/jetpack-compose.md +73 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/swift-ui.md +73 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/references/universal.md +104 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-ui/scripts/list-components.js +193 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/SKILL.md +150 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/expo-av-to-audio.md +132 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/expo-av-to-video.md +160 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/native-tabs.md +124 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/new-architecture.md +79 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-19.md +79 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-compiler.md +59 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-upgrade/references/react-navigation-to-expo-router.md +61 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/SKILL.md +91 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/false-friends.md +119 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/native-patterns.md +39 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/run-as-goal.md +48 -0
- package/dist/templates/default/apps/mobile/.agents/skills/expo-web-to-native/references/verify-on-device.md +45 -0
- package/dist/templates/default/apps/mobile/.agents/skills/ios-simulator/SKILL.md +32 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/POWER.md +172 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/SKILL.md +238 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/agents/openai.yaml +4 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-analyze-app.md +208 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-analyze-js.md +264 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-barrel-exports.md +250 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-code-splitting.md +255 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-hermes-mmap.md +167 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-library-size.md +164 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-native-assets.md +208 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-r8-android.md +231 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/bundle-tree-shaking.md +215 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/bundle-treemap-source-map-explorer.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/controlled-textinput-pingpong.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/devtools-flamegraph.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/emerge-xray-ios.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/expo-atlas-treemap.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/flashlight-flatlist-vs-flashlist.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/fps-drop-graph.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/memory-heap-snapshot.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/tti-warm-start-diagram.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/view-hierarchy-flattening.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/xcode-instruments-templates.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/images/xcode-thread-view.png +0 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-animations-reanimated.md +273 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-atomic-state.md +190 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-bottomsheet.md +339 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-concurrent-react.md +238 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-lists-flatlist-flashlist.md +223 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-measure-fps.md +178 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-memory-leaks.md +168 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-profile-react.md +138 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-react-compiler.md +261 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/js-uncontrolled-components.md +219 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-android-16kb-alignment.md +114 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-measure-tti.md +221 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-memory-leaks.md +206 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-memory-patterns.md +240 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-platform-setup.md +112 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-profiling.md +140 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-sdks-over-polyfills.md +192 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-threading-model.md +230 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-turbo-modules.md +210 -0
- package/dist/templates/default/apps/mobile/.agents/skills/react-native-best-practices/references/native-view-flattening.md +180 -0
- package/dist/templates/default/apps/mobile/AGENTS.md +41 -0
- package/dist/templates/default/apps/mobile/app.json +38 -0
- package/dist/templates/default/apps/mobile/assets/expo.icon/Assets/expo-symbol 2.svg +3 -0
- package/dist/templates/default/apps/mobile/assets/expo.icon/Assets/grid.png +0 -0
- package/dist/templates/default/apps/mobile/assets/expo.icon/icon.json +40 -0
- package/dist/templates/default/apps/mobile/assets/images/android-icon-background.png +0 -0
- package/dist/templates/default/apps/mobile/assets/images/android-icon-foreground.png +0 -0
- package/dist/templates/default/apps/mobile/assets/images/android-icon-monochrome.png +0 -0
- package/dist/templates/default/apps/mobile/assets/images/icon.png +0 -0
- package/dist/templates/default/apps/mobile/assets/images/splash-icon.png +0 -0
- package/dist/templates/default/apps/mobile/eslint.config.js +10 -0
- package/dist/templates/default/apps/mobile/package.json +43 -1
- package/dist/templates/default/apps/mobile/skills-lock.json +185 -0
- package/dist/templates/default/apps/mobile/src/app/_layout.tsx +5 -0
- package/dist/templates/default/apps/mobile/src/app/index.tsx +17 -0
- package/dist/templates/default/apps/mobile/tsconfig.json +20 -0
- package/dist/templates/default/apps/web/.agents/skills/frontend-design/SKILL.md +71 -0
- package/dist/templates/default/apps/web/.agents/skills/web-design-guidelines/SKILL.md +39 -0
- package/dist/templates/default/apps/web/.env.example +3 -0
- package/dist/templates/default/apps/web/components.json +23 -0
- package/dist/templates/default/apps/web/eslint.config.ts +21 -0
- package/dist/templates/default/apps/web/package.json +39 -1
- package/dist/templates/default/apps/web/public/disposabl-logo.svg +8 -0
- package/dist/templates/default/apps/web/public/favicon.ico +0 -0
- package/dist/templates/default/apps/web/public/manifest.json +25 -0
- package/dist/templates/default/apps/web/skills-lock.json +17 -0
- package/dist/templates/default/apps/web/src/index.css +92 -0
- package/dist/templates/default/apps/web/src/routeTree.gen.ts +282 -0
- package/dist/templates/default/apps/web/src/router/__root.tsx +63 -0
- package/dist/templates/default/apps/web/src/router/_authenticated/dashboard.tsx +9 -0
- package/dist/templates/default/apps/web/src/router/_authenticated/todos/$id.tsx +27 -0
- package/dist/templates/default/apps/web/src/router/_authenticated/todos/index.tsx +33 -0
- package/dist/templates/default/apps/web/src/router/index.tsx +15 -0
- package/dist/templates/default/apps/web/src/router.tsx +20 -0
- package/dist/templates/default/apps/web/tsconfig.json +33 -0
- package/dist/templates/default/apps/web/tsr.config.json +6 -0
- package/dist/templates/default/apps/web/vite.config.ts +67 -0
- package/dist/templates/default/bun.lock +3932 -0
- package/dist/templates/default/bunfig.toml +5 -0
- package/dist/templates/default/disposabl.json +5 -0
- package/dist/templates/default/gitignore +9 -1
- package/dist/templates/default/package.json +29 -4
- package/dist/templates/default/packages/backend/.agents/skills/convex/SKILL.md +69 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-add/SKILL.md +26 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-advisor/SKILL.md +32 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-agent/SKILL.md +25 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-auth/SKILL.md +29 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-authz/SKILL.md +36 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-backup/SKILL.md +33 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-billing/SKILL.md +69 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-cost/SKILL.md +29 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/SKILL.md +325 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/agents/openai.yaml +14 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/assets/icon.svg +3 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/advanced-patterns.md +146 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/hybrid-components.md +38 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/local-components.md +39 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-create-component/references/packaged-components.md +54 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-crons/SKILL.md +23 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-deploy-guard/SKILL.md +29 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-design/SKILL.md +30 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-docs/SKILL.md +31 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-domains/SKILL.md +26 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-env/SKILL.md +24 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-expert/SKILL.md +38 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-explain-app/SKILL.md +29 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-improve-convex-plugin/SKILL.md +24 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-insights/SKILL.md +32 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-launch-readiness/SKILL.md +35 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-migrate/SKILL.md +23 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-migrate-rehearse/SKILL.md +31 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-monitor/SKILL.md +22 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-optimize/SKILL.md +26 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/SKILL.md +29 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/agents/openai.yaml +14 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-quickstart/assets/icon.svg +4 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-reviewer/SKILL.md +26 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-seed/SKILL.md +23 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-self-heal/SKILL.md +38 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-sentinel/SKILL.md +25 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-suggest/SKILL.md +27 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-test/SKILL.md +23 -0
- package/dist/templates/default/packages/backend/.agents/skills/convex-verify/SKILL.md +34 -0
- package/dist/templates/default/packages/backend/.prettierignore +4 -0
- package/dist/templates/default/packages/backend/AGENTS.md +18 -0
- package/dist/templates/default/packages/backend/CLAUDE.md +13 -0
- package/dist/templates/default/packages/backend/README.md +25 -0
- package/dist/templates/default/packages/backend/convex/_generated/ai/ai-files.state.json +6 -0
- package/dist/templates/default/packages/backend/convex/_generated/ai/guidelines.md +286 -0
- package/dist/templates/default/packages/backend/convex/_generated/api.d.ts +66 -0
- package/dist/templates/default/packages/backend/convex/_generated/api.js +23 -0
- package/dist/templates/default/packages/backend/convex/_generated/dataModel.d.ts +60 -0
- package/dist/templates/default/packages/backend/convex/_generated/server.d.ts +164 -0
- package/dist/templates/default/packages/backend/convex/_generated/server.js +101 -0
- package/dist/templates/default/packages/backend/convex/auth.config.ts +14 -0
- package/dist/templates/default/packages/backend/convex/auth.ts +15 -0
- package/dist/templates/default/packages/backend/convex/convex.config.ts +30 -0
- package/dist/templates/default/packages/backend/convex/http.ts +5 -0
- package/dist/templates/default/packages/backend/convex/mcp.ts +8 -0
- package/dist/templates/default/packages/backend/convex/schema.ts +10 -0
- package/dist/templates/default/packages/backend/convex/todos/index.ts +26 -0
- package/dist/templates/default/packages/backend/convex/todos/internal.ts +43 -0
- package/dist/templates/default/packages/backend/convex/tsconfig.json +27 -0
- package/dist/templates/default/packages/backend/convex/users.ts +20 -0
- package/dist/templates/default/packages/backend/eslint.config.mjs +62 -0
- package/dist/templates/default/packages/backend/package.json +36 -0
- package/dist/templates/default/packages/backend/skills-lock.json +203 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/accordion.tsx +77 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/alert-dialog.tsx +185 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/alert.tsx +75 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/aspect-ratio.tsx +22 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/attachment.tsx +207 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/avatar.tsx +106 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/badge.tsx +51 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/breadcrumb.tsx +121 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/bubble.tsx +127 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/button-group.tsx +87 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/button.tsx +57 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/calendar.tsx +241 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/card.tsx +102 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/carousel.tsx +239 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/chart.tsx +368 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/checkbox.tsx +27 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/code-block.tsx +243 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/collapsible.tsx +19 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/combobox.tsx +300 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/command.tsx +194 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/context-menu.tsx +271 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/dialog.tsx +156 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/direction.tsx +4 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/drawer.tsx +224 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/dropdown-menu.tsx +269 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/empty.tsx +103 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/field.tsx +236 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/hover-card.tsx +50 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/input-group.tsx +158 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/input-otp.tsx +83 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/input.tsx +19 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/item.tsx +201 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/kbd.tsx +26 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/label.tsx +19 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/marker.tsx +70 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/menubar.tsx +284 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/message-scroller.tsx +128 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/message.tsx +91 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/native-select.tsx +64 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/navigation-menu.tsx +170 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/pagination.tsx +133 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/popover.tsx +87 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/progress.tsx +82 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/questionnaire.tsx +330 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/radio-group.tsx +35 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/resizable.tsx +49 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/scroll-area.tsx +51 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/select.tsx +201 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/separator.tsx +22 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/sheet.tsx +132 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/sidebar.tsx +723 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/skeleton.tsx +13 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/slider.tsx +51 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/spinner.tsx +16 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/switch.tsx +31 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/table.tsx +113 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/tabs.tsx +81 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/textarea.tsx +17 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/toast.tsx +229 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/toggle-group.tsx +87 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/toggle.tsx +42 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/tooltip.tsx +65 -0
- package/dist/templates/default/packages/disposabl-kit/client/components/ui/trace.tsx +161 -0
- package/dist/templates/default/packages/disposabl-kit/client/hooks/use-mobile.ts +21 -0
- package/dist/templates/default/packages/disposabl-kit/client/lib/prerender.ts +89 -0
- package/dist/templates/default/packages/disposabl-kit/client/lib/return-to.ts +12 -0
- package/dist/templates/default/packages/disposabl-kit/client/lib/utils.ts +1 -0
- package/dist/templates/default/packages/disposabl-kit/client/routes/_auth-pages/login.tsx +114 -0
- package/dist/templates/default/packages/disposabl-kit/client/routes/_auth-pages/signUp.tsx +120 -0
- package/dist/templates/default/packages/disposabl-kit/client/routes/_authenticated/route.tsx +38 -0
- package/dist/templates/default/packages/disposabl-kit/client/routes/consent.tsx +137 -0
- package/dist/templates/default/packages/disposabl-kit/client/routes/route.tsx +30 -0
- package/dist/templates/default/packages/disposabl-kit/client/styles/globals.css +60 -0
- package/dist/templates/default/packages/disposabl-kit/client/vite.config.ts +32 -0
- package/dist/templates/default/packages/disposabl-kit/components.json +23 -0
- package/dist/templates/default/packages/disposabl-kit/eslint.config.js +21 -0
- package/dist/templates/default/packages/disposabl-kit/package.json +60 -0
- package/dist/templates/default/packages/disposabl-kit/server/http.ts +86 -0
- package/dist/templates/default/packages/disposabl-kit/server/lib/functions.ts +40 -0
- package/dist/templates/default/packages/disposabl-kit/server/lib/platforms.ts +20 -0
- package/dist/templates/default/packages/disposabl-kit/server/lib/static-routes.ts +56 -0
- package/dist/templates/default/packages/disposabl-kit/tsconfig.json +17 -0
- package/dist/templates/default/patches/@convex-dev%2Fauth@2.0.0-beta.0.patch +310 -0
- package/dist/templates/default/patches/@convex-dev%2Fstatic-hosting@0.2.1.patch +187 -0
- package/dist/templates/default/tsconfig.json +9 -0
- package/dist/templates/default/turbo.json +51 -0
- package/package.json +1 -2
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eas-app-stores
|
|
3
|
+
description: Build and submit iOS and Android apps with EAS to TestFlight, the App Store, or Google Play. Supports Expo and other React Native projects, plus existing native apps. Use for eas.json setup, release pipelines, signing, app versions and build numbers, store submissions, and listing metadata. For Expo websites and API routes, use eas-hosting; for adding React Native screens to a native app, use expo-brownfield.
|
|
4
|
+
version: 1.1.0
|
|
5
|
+
license: MIT
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# App Store Deployment
|
|
9
|
+
|
|
10
|
+
> **EAS service - costs apply.** Cloud builds use EAS plan resources, and EAS services have free-tier and paid-plan limits. Apple Developer and Google Play memberships are separate. Check https://expo.dev/pricing for the requested service.
|
|
11
|
+
|
|
12
|
+
This skill covers building and releasing iOS and Android apps with EAS: Expo and other React Native projects, plus existing native apps. EAS is a delivery service; native apps can use it without adding Expo or React Native to their runtime. The native setup walkthrough currently covers SwiftUI/UIKit on iOS.
|
|
13
|
+
|
|
14
|
+
## Choose the project path
|
|
15
|
+
|
|
16
|
+
- **SwiftUI/UIKit app with no React Native runtime:** read [references/native-ios.md](references/native-ios.md) before changing its build configuration. Keep the Xcode project and Swift code as the app's source of truth. The Expo/React Native quick-start and development-client examples below do not apply to this path.
|
|
17
|
+
- **Native Android app with no React Native runtime:** preserve its existing native build setup. See [references/play-store.md](references/play-store.md) for submission; the Swift/iOS setup instructions do not apply. A dedicated native Android setup walkthrough is not yet included.
|
|
18
|
+
- **Expo/React Native app:** use the quick-start below, then the relevant store reference.
|
|
19
|
+
- **Adding React Native screens to an existing native app:** use `expo-brownfield` for that integration; return here for distribution.
|
|
20
|
+
|
|
21
|
+
Use the archive and icon checks in [references/native-ios.md](references/native-ios.md) during initial native iOS setup, after changing versioning, bundle IDs, or icons, or when diagnosing a rejected upload. Routine releases follow the EAS build/submit flow and the processing and availability checks in [references/testflight.md](references/testflight.md). A successful EAS build or a queued submission does not establish Apple acceptance, tester access, or an App Store release.
|
|
22
|
+
|
|
23
|
+
## References
|
|
24
|
+
|
|
25
|
+
Consult these resources as needed:
|
|
26
|
+
|
|
27
|
+
- ./references/workflows.md -- CI/CD workflows for automated store releases and PR previews
|
|
28
|
+
- ./references/testflight.md -- Submitting iOS builds to TestFlight for beta testing
|
|
29
|
+
- ./references/app-store-metadata.md -- Managing App Store metadata and ASO optimization
|
|
30
|
+
- ./references/play-store.md -- Submitting Android builds to Google Play Store
|
|
31
|
+
- ./references/ios-app-store.md -- iOS App Store submission and review process
|
|
32
|
+
- ./references/native-ios.md -- Native Swift/SwiftUI/UIKit setup, versioning, and archive verification without an Expo runtime
|
|
33
|
+
|
|
34
|
+
## Expo / React Native Quick Start
|
|
35
|
+
|
|
36
|
+
### Install EAS CLI
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm install -g eas-cli
|
|
40
|
+
eas login
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Initialize EAS
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npx eas-cli@latest init
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`eas init` links or creates the EAS project. Run `eas build:configure` to create build profiles in `eas.json`; preserve existing project and store identifiers when a release setup already exists.
|
|
50
|
+
|
|
51
|
+
## Build Commands
|
|
52
|
+
|
|
53
|
+
### Production Builds
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# iOS App Store build
|
|
57
|
+
npx eas-cli@latest build -p ios --profile production
|
|
58
|
+
|
|
59
|
+
# Android Play Store build
|
|
60
|
+
npx eas-cli@latest build -p android --profile production
|
|
61
|
+
|
|
62
|
+
# Both platforms
|
|
63
|
+
npx eas-cli@latest build --profile production
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Submit to Stores
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# iOS: Build and submit to App Store Connect
|
|
70
|
+
npx eas-cli@latest build -p ios --profile production --auto-submit
|
|
71
|
+
|
|
72
|
+
# Android: Build and submit to Play Store
|
|
73
|
+
npx eas-cli@latest build -p android --profile production --auto-submit
|
|
74
|
+
|
|
75
|
+
# Expo / React Native shortcut for iOS TestFlight
|
|
76
|
+
npx testflight
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Web & API Route Hosting
|
|
80
|
+
|
|
81
|
+
Deploying an Expo website or Expo Router API routes to EAS Hosting (`npx expo export -p web` then `eas deploy`) is covered by the `eas-hosting` skill. This skill focuses on native app store releases.
|
|
82
|
+
|
|
83
|
+
## EAS Configuration
|
|
84
|
+
|
|
85
|
+
Example for an Expo / React Native project (native Swift profiles are in `references/native-ios.md`):
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"cli": {
|
|
90
|
+
"version": ">= 16.0.1",
|
|
91
|
+
"appVersionSource": "remote"
|
|
92
|
+
},
|
|
93
|
+
"build": {
|
|
94
|
+
"production": {
|
|
95
|
+
"autoIncrement": true,
|
|
96
|
+
"ios": {
|
|
97
|
+
"resourceClass": "m-medium"
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
"development": {
|
|
101
|
+
"developmentClient": true,
|
|
102
|
+
"distribution": "internal"
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"submit": {
|
|
106
|
+
"production": {
|
|
107
|
+
"ios": {
|
|
108
|
+
"appleId": "your@email.com",
|
|
109
|
+
"ascAppId": "1234567890"
|
|
110
|
+
},
|
|
111
|
+
"android": {
|
|
112
|
+
"serviceAccountKeyPath": "./google-service-account.json",
|
|
113
|
+
"track": "internal"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Platform-Specific Guides
|
|
121
|
+
|
|
122
|
+
### iOS
|
|
123
|
+
|
|
124
|
+
- For native Swift apps, use the explicit build/submit flow in `references/native-ios.md`
|
|
125
|
+
- For Expo / React Native apps, `npx testflight` provides a quick TestFlight flow
|
|
126
|
+
- Configure Apple credentials via `eas credentials`
|
|
127
|
+
- See ./references/testflight.md for credential setup
|
|
128
|
+
- See ./references/ios-app-store.md for App Store submission
|
|
129
|
+
|
|
130
|
+
### Android
|
|
131
|
+
|
|
132
|
+
- Set up Google Play Console service account
|
|
133
|
+
- Configure tracks: internal → closed → open → production
|
|
134
|
+
- See ./references/play-store.md for detailed setup
|
|
135
|
+
|
|
136
|
+
## Automated Releases
|
|
137
|
+
|
|
138
|
+
EAS Workflows automate the build → submit → update pipeline for CI/CD. See ./references/workflows.md for store-release examples. To author or validate workflow YAML, use the `eas-workflows` skill - it works from the live workflow schema.
|
|
139
|
+
|
|
140
|
+
## Version Management
|
|
141
|
+
|
|
142
|
+
EAS manages version numbers automatically with `appVersionSource: "remote"`:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
# Check current versions
|
|
146
|
+
eas build:version:get
|
|
147
|
+
|
|
148
|
+
# Manually set version
|
|
149
|
+
eas build:version:set -p ios
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
The version-set command prompts for the value. When setting up or changing native iOS versioning, or diagnosing a duplicate build number, inspect the archived `CFBundleVersion`: the remote counter alone does not prove that Xcode used it.
|
|
153
|
+
|
|
154
|
+
## Monitoring
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# List recent builds
|
|
158
|
+
eas build:list
|
|
159
|
+
|
|
160
|
+
# Check build status
|
|
161
|
+
eas build:view BUILD_ID
|
|
162
|
+
|
|
163
|
+
# Inspect submissions (verified with EAS CLI 23.2.0)
|
|
164
|
+
eas submit:list -p ios --json
|
|
165
|
+
eas submit:view SUBMISSION_ID --json
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Check the CLI version before interpreting a missing command: these submission commands are available in 23.2.0 but not in the tested 18.6.0 installation. A pinned `npx eas-cli@23.2.0` invocation can use them without changing the global installation. See `references/testflight.md` for live Apple status and retry guidance. Follow the returned log URLs when the JSON result omits the underlying failure. Report the exact build ID/version and the furthest verified release state.
|
|
169
|
+
|
|
170
|
+
## Submitting Feedback
|
|
171
|
+
If you encounter errors, misleading or outdated information in this skill, report it so Expo can improve:
|
|
172
|
+
```bash
|
|
173
|
+
npx --yes @expo/agent-cli@latest feedback --category skills --subject "eas-app-stores" "<actionable feedback>"
|
|
174
|
+
```
|
|
175
|
+
Only submit when you have something specific and actionable to report. Include as much relevant context as possible.
|
|
176
|
+
If an agent repeatedly fails at an Expo task or the user has to step in, submit a brief report of the task, expected result, and what went wrong using `--category evals` and the relevant Expo package or command as `--subject`.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "EAS App Stores"
|
|
3
|
+
short_description: "Build and submit iOS and Android apps."
|
|
4
|
+
default_prompt: "Use $eas-app-stores to set up or verify EAS builds, TestFlight and store submissions, signing, versioning, and store metadata for iOS and Android apps: Expo and other React Native projects, plus existing native apps."
|
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
# App Store Metadata
|
|
2
|
+
|
|
3
|
+
Manage App Store metadata and optimize for ASO using EAS Metadata.
|
|
4
|
+
|
|
5
|
+
## Contents
|
|
6
|
+
|
|
7
|
+
- [What is EAS Metadata?](#what-is-eas-metadata)
|
|
8
|
+
- [Getting Started](#getting-started)
|
|
9
|
+
- [Configuration File](#configuration-file)
|
|
10
|
+
- [App Store Optimization (ASO)](#app-store-optimization-aso)
|
|
11
|
+
- [Categories](#categories)
|
|
12
|
+
- [Localization](#localization)
|
|
13
|
+
- [Dynamic Configuration](#dynamic-configuration)
|
|
14
|
+
- [Age Rating (Advisory)](#age-rating-advisory)
|
|
15
|
+
- [Release Strategy](#release-strategy)
|
|
16
|
+
- [Review Information](#review-information)
|
|
17
|
+
- [ASO Checklist](#aso-checklist)
|
|
18
|
+
- [VS Code Integration](#vs-code-integration)
|
|
19
|
+
- [Common Issues](#common-issues)
|
|
20
|
+
- [CI/CD Integration](#cicd-integration)
|
|
21
|
+
- [Tips](#tips)
|
|
22
|
+
|
|
23
|
+
## What is EAS Metadata?
|
|
24
|
+
|
|
25
|
+
EAS Metadata automates App Store presence management from the command line using a `store.config.json` file instead of manually filling forms in App Store Connect. It includes built-in validation to catch common rejection pitfalls.
|
|
26
|
+
|
|
27
|
+
**Current Status:** Preview, Apple App Store only.
|
|
28
|
+
|
|
29
|
+
## Getting Started
|
|
30
|
+
|
|
31
|
+
### Pull Existing Metadata
|
|
32
|
+
|
|
33
|
+
If your app is already published, pull current metadata:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
eas metadata:pull
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
This creates `store.config.json` with your current App Store configuration.
|
|
40
|
+
|
|
41
|
+
### Push Metadata Updates
|
|
42
|
+
|
|
43
|
+
After editing your config, push changes:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
eas metadata:push
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
**Important:** You must submit a binary via `eas submit` before pushing metadata for new apps.
|
|
50
|
+
|
|
51
|
+
## Configuration File
|
|
52
|
+
|
|
53
|
+
Create `store.config.json` at your project root:
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"configVersion": 0,
|
|
58
|
+
"apple": {
|
|
59
|
+
"copyright": "2025 Your Company",
|
|
60
|
+
"categories": ["UTILITIES", "PRODUCTIVITY"],
|
|
61
|
+
"info": {
|
|
62
|
+
"en-US": {
|
|
63
|
+
"title": "App Name",
|
|
64
|
+
"subtitle": "Your compelling tagline",
|
|
65
|
+
"description": "Full app description...",
|
|
66
|
+
"keywords": ["keyword1", "keyword2", "keyword3"],
|
|
67
|
+
"releaseNotes": "What's new in this version...",
|
|
68
|
+
"promoText": "Limited time offer!",
|
|
69
|
+
"privacyPolicyUrl": "https://example.com/privacy",
|
|
70
|
+
"supportUrl": "https://example.com/support",
|
|
71
|
+
"marketingUrl": "https://example.com"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"advisory": {
|
|
75
|
+
"alcoholTobaccoOrDrugUseOrReferences": "NONE",
|
|
76
|
+
"gamblingSimulated": "NONE",
|
|
77
|
+
"medicalOrTreatmentInformation": "NONE",
|
|
78
|
+
"profanityOrCrudeHumor": "NONE",
|
|
79
|
+
"sexualContentGraphicAndNudity": "NONE",
|
|
80
|
+
"sexualContentOrNudity": "NONE",
|
|
81
|
+
"horrorOrFearThemes": "NONE",
|
|
82
|
+
"matureOrSuggestiveThemes": "NONE",
|
|
83
|
+
"violenceCartoonOrFantasy": "NONE",
|
|
84
|
+
"violenceRealistic": "NONE",
|
|
85
|
+
"violenceRealisticProlongedGraphicOrSadistic": "NONE",
|
|
86
|
+
"contests": "NONE",
|
|
87
|
+
"gambling": false,
|
|
88
|
+
"unrestrictedWebAccess": false,
|
|
89
|
+
"seventeenPlus": false
|
|
90
|
+
},
|
|
91
|
+
"release": {
|
|
92
|
+
"automaticRelease": true,
|
|
93
|
+
"phasedRelease": true
|
|
94
|
+
},
|
|
95
|
+
"review": {
|
|
96
|
+
"firstName": "John",
|
|
97
|
+
"lastName": "Doe",
|
|
98
|
+
"email": "review@example.com",
|
|
99
|
+
"phone": "+1 555-123-4567",
|
|
100
|
+
"notes": "Demo account: test@example.com / password123"
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## App Store Optimization (ASO)
|
|
107
|
+
|
|
108
|
+
### Title Optimization (30 characters max)
|
|
109
|
+
|
|
110
|
+
The title is the most important ranking factor. Include your brand name and 1-2 strongest keywords.
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"title": "Budgetly - Money Tracker"
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Best Practices:**
|
|
119
|
+
|
|
120
|
+
- Brand name first for recognition
|
|
121
|
+
- Include highest-volume keyword
|
|
122
|
+
- Avoid generic words like "app" or "the"
|
|
123
|
+
- Title keywords boost rankings by ~10%
|
|
124
|
+
|
|
125
|
+
### Subtitle Optimization (30 characters max)
|
|
126
|
+
|
|
127
|
+
The subtitle appears below your title in search results. Use it for your unique value proposition.
|
|
128
|
+
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"subtitle": "Smart Expense & Budget Planner"
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Best Practices:**
|
|
136
|
+
|
|
137
|
+
- Don't duplicate keywords from title (Apple counts each word once)
|
|
138
|
+
- Highlight your main differentiator
|
|
139
|
+
- Include secondary high-value keywords
|
|
140
|
+
- Focus on benefits, not features
|
|
141
|
+
|
|
142
|
+
### Keywords Field (100 characters max)
|
|
143
|
+
|
|
144
|
+
Hidden from users but crucial for discoverability. Use comma-separated keywords without spaces after commas.
|
|
145
|
+
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"keywords": [
|
|
149
|
+
"finance,budget,expense,money,tracker,savings,bills,income,spending,wallet,personal,weekly,monthly"
|
|
150
|
+
]
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Best Practices:**
|
|
155
|
+
|
|
156
|
+
- Use all 100 characters
|
|
157
|
+
- Separate with commas only (no spaces)
|
|
158
|
+
- No duplicates from title/subtitle
|
|
159
|
+
- Include singular forms (Apple handles plurals)
|
|
160
|
+
- Add synonyms and alternate spellings
|
|
161
|
+
- Include competitor brand names (carefully)
|
|
162
|
+
- Use digits instead of spelled numbers ("5" not "five")
|
|
163
|
+
- Skip articles and prepositions
|
|
164
|
+
|
|
165
|
+
### Description Optimization
|
|
166
|
+
|
|
167
|
+
The iOS description is NOT indexed for search but critical for conversion. Focus on convincing users to download.
|
|
168
|
+
|
|
169
|
+
```json
|
|
170
|
+
{
|
|
171
|
+
"description": "Take control of your finances with Budgetly, the intuitive money management app trusted by over 1 million users.\n\nKEY FEATURES:\n• Smart budget tracking - Set limits and watch your progress\n• Expense categorization - Know exactly where your money goes\n• Bill reminders - Never miss a payment\n• Beautiful charts - Visualize your financial health\n• Bank sync - Connect 10,000+ institutions\n• Cloud backup - Your data, always safe\n\nWHY BUDGETLY?\nUnlike complex spreadsheets or basic calculators, Budgetly learns your spending habits and provides personalized insights. Our users save an average of $300/month within 3 months.\n\nPRIVACY FIRST\nYour financial data is encrypted end-to-end. We never sell your information.\n\nDownload Budgetly today and start your journey to financial freedom!"
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Best Practices:**
|
|
176
|
+
|
|
177
|
+
- Front-load the first 3 lines (visible before "more")
|
|
178
|
+
- Use bullet points for features
|
|
179
|
+
- Include social proof (user counts, ratings, awards)
|
|
180
|
+
- Add a clear call-to-action
|
|
181
|
+
- Mention privacy/security for sensitive apps
|
|
182
|
+
- Update with each release
|
|
183
|
+
|
|
184
|
+
### Release Notes
|
|
185
|
+
|
|
186
|
+
Shown to existing users deciding whether to update.
|
|
187
|
+
|
|
188
|
+
```json
|
|
189
|
+
{
|
|
190
|
+
"releaseNotes": "Version 2.5 brings exciting improvements:\n\n• NEW: Dark mode support\n• NEW: Widget for home screen\n• IMPROVED: 50% faster sync\n• FIXED: Notification timing issues\n\nLove Budgetly? Please leave a review!"
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Promo Text (170 characters max)
|
|
195
|
+
|
|
196
|
+
Appears above description; can be updated without new binary. Great for time-sensitive promotions.
|
|
197
|
+
|
|
198
|
+
```json
|
|
199
|
+
{
|
|
200
|
+
"promoText": "🎉 New Year Special: Premium features free for 30 days! Start 2025 with better finances."
|
|
201
|
+
}
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
## Categories
|
|
205
|
+
|
|
206
|
+
Primary category is most important for browsing and rankings.
|
|
207
|
+
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"categories": ["FINANCE", "PRODUCTIVITY"]
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
**Available Categories:**
|
|
215
|
+
|
|
216
|
+
- BOOKS, BUSINESS, DEVELOPER_TOOLS, EDUCATION
|
|
217
|
+
- ENTERTAINMENT, FINANCE, FOOD_AND_DRINK
|
|
218
|
+
- GAMES (with subcategories), GRAPHICS_AND_DESIGN
|
|
219
|
+
- HEALTH_AND_FITNESS, KIDS (age-gated)
|
|
220
|
+
- LIFESTYLE, MAGAZINES_AND_NEWSPAPERS
|
|
221
|
+
- MEDICAL, MUSIC, NAVIGATION, NEWS
|
|
222
|
+
- PHOTO_AND_VIDEO, PRODUCTIVITY, REFERENCE
|
|
223
|
+
- SHOPPING, SOCIAL_NETWORKING, SPORTS
|
|
224
|
+
- STICKERS (with subcategories), TRAVEL
|
|
225
|
+
- UTILITIES, WEATHER
|
|
226
|
+
|
|
227
|
+
## Localization
|
|
228
|
+
|
|
229
|
+
Localize metadata for each target market. Keywords should be researched per locale—direct translations often miss regional search terms.
|
|
230
|
+
|
|
231
|
+
```json
|
|
232
|
+
{
|
|
233
|
+
"info": {
|
|
234
|
+
"en-US": {
|
|
235
|
+
"title": "Budgetly - Money Tracker",
|
|
236
|
+
"subtitle": "Smart Expense Planner",
|
|
237
|
+
"keywords": ["budget,finance,money,expense,tracker"]
|
|
238
|
+
},
|
|
239
|
+
"es-ES": {
|
|
240
|
+
"title": "Budgetly - Control de Gastos",
|
|
241
|
+
"subtitle": "Planificador de Presupuesto",
|
|
242
|
+
"keywords": ["presupuesto,finanzas,dinero,gastos,ahorro"]
|
|
243
|
+
},
|
|
244
|
+
"ja": {
|
|
245
|
+
"title": "Budgetly - 家計簿アプリ",
|
|
246
|
+
"subtitle": "簡単支出管理",
|
|
247
|
+
"keywords": ["家計簿,支出,予算,節約,お金"]
|
|
248
|
+
},
|
|
249
|
+
"de-DE": {
|
|
250
|
+
"title": "Budgetly - Haushaltsbuch",
|
|
251
|
+
"subtitle": "Ausgaben Verwalten",
|
|
252
|
+
"keywords": ["budget,finanzen,geld,ausgaben,sparen"]
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Supported Locales:**
|
|
259
|
+
`ar-SA`, `ca`, `cs`, `da`, `de-DE`, `el`, `en-AU`, `en-CA`, `en-GB`, `en-US`, `es-ES`, `es-MX`, `fi`, `fr-CA`, `fr-FR`, `he`, `hi`, `hr`, `hu`, `id`, `it`, `ja`, `ko`, `ms`, `nl-NL`, `no`, `pl`, `pt-BR`, `pt-PT`, `ro`, `ru`, `sk`, `sv`, `th`, `tr`, `uk`, `vi`, `zh-Hans`, `zh-Hant`
|
|
260
|
+
|
|
261
|
+
## Dynamic Configuration
|
|
262
|
+
|
|
263
|
+
Use JavaScript for dynamic values like copyright year or fetched translations.
|
|
264
|
+
|
|
265
|
+
### Basic Dynamic Config
|
|
266
|
+
|
|
267
|
+
```js
|
|
268
|
+
// store.config.js
|
|
269
|
+
const baseConfig = require("./store.config.json");
|
|
270
|
+
|
|
271
|
+
const year = new Date().getFullYear();
|
|
272
|
+
|
|
273
|
+
module.exports = {
|
|
274
|
+
...baseConfig,
|
|
275
|
+
apple: {
|
|
276
|
+
...baseConfig.apple,
|
|
277
|
+
copyright: `${year} Your Company, Inc.`,
|
|
278
|
+
},
|
|
279
|
+
};
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Async Configuration (External Localization)
|
|
283
|
+
|
|
284
|
+
```js
|
|
285
|
+
// store.config.js
|
|
286
|
+
module.exports = async () => {
|
|
287
|
+
const baseConfig = require("./store.config.json");
|
|
288
|
+
|
|
289
|
+
// Fetch translations from CMS/localization service
|
|
290
|
+
const translations = await fetch(
|
|
291
|
+
"https://api.example.com/app-store-copy"
|
|
292
|
+
).then((r) => r.json());
|
|
293
|
+
|
|
294
|
+
return {
|
|
295
|
+
...baseConfig,
|
|
296
|
+
apple: {
|
|
297
|
+
...baseConfig.apple,
|
|
298
|
+
info: translations,
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
};
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Environment-Based Config
|
|
305
|
+
|
|
306
|
+
```js
|
|
307
|
+
// store.config.js
|
|
308
|
+
const baseConfig = require("./store.config.json");
|
|
309
|
+
|
|
310
|
+
const isProduction = process.env.EAS_BUILD_PROFILE === "production";
|
|
311
|
+
|
|
312
|
+
module.exports = {
|
|
313
|
+
...baseConfig,
|
|
314
|
+
apple: {
|
|
315
|
+
...baseConfig.apple,
|
|
316
|
+
info: {
|
|
317
|
+
"en-US": {
|
|
318
|
+
...baseConfig.apple.info["en-US"],
|
|
319
|
+
promoText: isProduction
|
|
320
|
+
? "Download now and get started!"
|
|
321
|
+
: "[BETA] Help us test new features!",
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
},
|
|
325
|
+
};
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Update `eas.json` to use JS config:
|
|
329
|
+
|
|
330
|
+
```json
|
|
331
|
+
{
|
|
332
|
+
"cli": {
|
|
333
|
+
"metadataPath": "./store.config.js"
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
## Age Rating (Advisory)
|
|
339
|
+
|
|
340
|
+
Answer content questions honestly to get an appropriate age rating.
|
|
341
|
+
|
|
342
|
+
**Content Descriptors:**
|
|
343
|
+
|
|
344
|
+
- `NONE` - Content not present
|
|
345
|
+
- `INFREQUENT_OR_MILD` - Occasional mild content
|
|
346
|
+
- `FREQUENT_OR_INTENSE` - Regular or strong content
|
|
347
|
+
|
|
348
|
+
```json
|
|
349
|
+
{
|
|
350
|
+
"advisory": {
|
|
351
|
+
"alcoholTobaccoOrDrugUseOrReferences": "NONE",
|
|
352
|
+
"contests": "NONE",
|
|
353
|
+
"gambling": false,
|
|
354
|
+
"gamblingSimulated": "NONE",
|
|
355
|
+
"horrorOrFearThemes": "NONE",
|
|
356
|
+
"matureOrSuggestiveThemes": "NONE",
|
|
357
|
+
"medicalOrTreatmentInformation": "NONE",
|
|
358
|
+
"profanityOrCrudeHumor": "NONE",
|
|
359
|
+
"sexualContentGraphicAndNudity": "NONE",
|
|
360
|
+
"sexualContentOrNudity": "NONE",
|
|
361
|
+
"unrestrictedWebAccess": false,
|
|
362
|
+
"violenceCartoonOrFantasy": "NONE",
|
|
363
|
+
"violenceRealistic": "NONE",
|
|
364
|
+
"violenceRealisticProlongedGraphicOrSadistic": "NONE",
|
|
365
|
+
"seventeenPlus": false,
|
|
366
|
+
"kidsAgeBand": "NINE_TO_ELEVEN"
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
**Kids Age Bands:** `FIVE_AND_UNDER`, `SIX_TO_EIGHT`, `NINE_TO_ELEVEN`
|
|
372
|
+
|
|
373
|
+
## Release Strategy
|
|
374
|
+
|
|
375
|
+
Control how your app rolls out to users.
|
|
376
|
+
|
|
377
|
+
```json
|
|
378
|
+
{
|
|
379
|
+
"release": {
|
|
380
|
+
"automaticRelease": true,
|
|
381
|
+
"phasedRelease": true
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
**Options:**
|
|
387
|
+
|
|
388
|
+
- `automaticRelease: true` - Release immediately upon approval
|
|
389
|
+
- `automaticRelease: false` - Manual release after approval
|
|
390
|
+
- `automaticRelease: "2025-02-01T10:00:00Z"` - Schedule release (RFC 3339)
|
|
391
|
+
- `phasedRelease: true` - 7-day gradual rollout (1%, 2%, 5%, 10%, 20%, 50%, 100%)
|
|
392
|
+
|
|
393
|
+
## Review Information
|
|
394
|
+
|
|
395
|
+
Provide contact info and test credentials for the App Review team.
|
|
396
|
+
|
|
397
|
+
```json
|
|
398
|
+
{
|
|
399
|
+
"review": {
|
|
400
|
+
"firstName": "Jane",
|
|
401
|
+
"lastName": "Smith",
|
|
402
|
+
"email": "app-review@company.com",
|
|
403
|
+
"phone": "+1 (555) 123-4567",
|
|
404
|
+
"demoUsername": "demo@example.com",
|
|
405
|
+
"demoPassword": "ReviewDemo2025!",
|
|
406
|
+
"notes": "To test premium features:\n1. Log in with demo credentials\n2. Navigate to Settings > Subscription\n3. Tap 'Restore Purchase' - sandbox purchase will be restored\n\nFor location features, allow location access when prompted."
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
## ASO Checklist
|
|
412
|
+
|
|
413
|
+
### Before Each Release
|
|
414
|
+
|
|
415
|
+
- [ ] Update keywords based on performance data
|
|
416
|
+
- [ ] Refresh description with new features
|
|
417
|
+
- [ ] Write compelling release notes
|
|
418
|
+
- [ ] Update promo text if running campaigns
|
|
419
|
+
- [ ] Verify all URLs are valid
|
|
420
|
+
|
|
421
|
+
### Monthly ASO Tasks
|
|
422
|
+
|
|
423
|
+
- [ ] Analyze keyword rankings
|
|
424
|
+
- [ ] Research competitor keywords
|
|
425
|
+
- [ ] Check conversion rates in App Analytics
|
|
426
|
+
- [ ] Review user feedback for keyword ideas
|
|
427
|
+
- [ ] A/B test screenshots in App Store Connect
|
|
428
|
+
|
|
429
|
+
### Keyword Research Tips
|
|
430
|
+
|
|
431
|
+
1. **Brainstorm features** - List all app capabilities
|
|
432
|
+
2. **Mine reviews** - Find words users actually use
|
|
433
|
+
3. **Analyze competitors** - Check their titles/subtitles
|
|
434
|
+
4. **Use long-tail keywords** - Less competition, higher intent
|
|
435
|
+
5. **Consider misspellings** - Common typos can drive traffic
|
|
436
|
+
6. **Track seasonality** - Some keywords peak at certain times
|
|
437
|
+
|
|
438
|
+
### Metrics to Monitor
|
|
439
|
+
|
|
440
|
+
- **Impressions** - How often your app appears in search
|
|
441
|
+
- **Product Page Views** - Users who tap to learn more
|
|
442
|
+
- **Conversion Rate** - Views → Downloads
|
|
443
|
+
- **Keyword Rankings** - Position for target keywords
|
|
444
|
+
- **Category Ranking** - Position in your categories
|
|
445
|
+
|
|
446
|
+
## VS Code Integration
|
|
447
|
+
|
|
448
|
+
Install the [Expo Tools extension](https://marketplace.visualstudio.com/items?itemName=expo.vscode-expo-tools) for:
|
|
449
|
+
|
|
450
|
+
- Auto-complete for all schema properties
|
|
451
|
+
- Inline validation and warnings
|
|
452
|
+
- Quick fixes for common issues
|
|
453
|
+
|
|
454
|
+
## Common Issues
|
|
455
|
+
|
|
456
|
+
### "Binary not found"
|
|
457
|
+
|
|
458
|
+
Push a binary with `eas submit` before pushing metadata.
|
|
459
|
+
|
|
460
|
+
### "Invalid keywords"
|
|
461
|
+
|
|
462
|
+
- Check total length is ≤100 characters
|
|
463
|
+
- Remove spaces after commas
|
|
464
|
+
- Remove duplicate words
|
|
465
|
+
|
|
466
|
+
### "Description too long"
|
|
467
|
+
|
|
468
|
+
Description maximum is 4000 characters.
|
|
469
|
+
|
|
470
|
+
### Pull doesn't update JS config
|
|
471
|
+
|
|
472
|
+
`eas metadata:pull` creates a JSON file; import it into your JS config.
|
|
473
|
+
|
|
474
|
+
## CI/CD Integration
|
|
475
|
+
|
|
476
|
+
Automate metadata updates in your deployment pipeline:
|
|
477
|
+
|
|
478
|
+
```yaml
|
|
479
|
+
# .eas/workflows/release.yml
|
|
480
|
+
jobs:
|
|
481
|
+
submit-and-metadata:
|
|
482
|
+
steps:
|
|
483
|
+
- name: Submit to App Store
|
|
484
|
+
run: eas submit -p ios --latest
|
|
485
|
+
|
|
486
|
+
- name: Push Metadata
|
|
487
|
+
run: eas metadata:push
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
## Tips
|
|
491
|
+
|
|
492
|
+
- Update metadata every 4-6 weeks for optimal ASO
|
|
493
|
+
- 70% of App Store visitors use search to find apps
|
|
494
|
+
- Apps with 4+ star ratings get featured more often
|
|
495
|
+
- Localized apps see 128% more downloads per country
|
|
496
|
+
- First 3 lines of description are most critical (shown before "more")
|
|
497
|
+
- Use all 100 keyword characters—every character counts
|