@capgo/capgo-skills
Version:
55 agent skills for Capacitor mobile development
86 lines (68 loc) • 3.48 kB
Markdown
# Config and Project Layout
## Layout
```text
my-app/
├── src/ # web source (edit here)
├── dist/ # web build output = webDir (gitignored)
├── android/ # native project: commit it
│ └── app/src/main/assets/public/ # generated by cap copy: never edit
├── ios/ # native project: commit it
│ └── App/App/public/ # generated by cap copy: never edit
├── capacitor.config.ts
└── package.json
```
`.gitignore` essentials (the Capacitor templates already include most of these inside `android/` and `ios/`):
```gitignore
node_modules/
dist/
ios/App/Pods/
ios/App/App/public/
android/app/src/main/assets/public/
android/.gradle/
android/app/build/
android/build/
*.jks
*.keystore
.env*
.capgo_key_v2
```
## capacitor.config.ts
Prefer TypeScript config: it is type-checked against `CapacitorConfig` and can read env vars at `cap sync`/`copy` time.
```typescript
import type { CapacitorConfig } from '@capacitor/cli';
const devUrl = process.env.CAP_SERVER_URL; // only set in a dev shell
const config: CapacitorConfig = {
appId: 'com.company.app', // reverse-domain; changing it after release = new app
appName: 'My App',
webDir: 'dist', // must match the bundler output
...(devUrl && { server: { url: devUrl, cleartext: devUrl.startsWith('http:') } }),
plugins: {
SplashScreen: { launchAutoHide: false }, // hide manually once the app renders
},
};
export default config;
```
Traps:
- The config is evaluated when you run `cap sync`/`copy`, not at app runtime. Env vars present in your shell at sync time get baked into `capacitor.config.json` inside the native projects. Sync release builds from a clean shell or CI.
- `process.env.NODE_ENV === 'development'` is usually not set in the shell running the CLI. Use an explicit variable.
- `webContentsDebuggingEnabled`, `loggingBehavior` and `server.*` defaults are already safe for release. Leave them unset unless you have a reason.
- `capacitor.config.ts` wins over `.js`, which wins over `.json`. A stale `capacitor.config.json` next to a `.ts` is silently ignored: delete it.
- Capacitor 9 removes `cap run -l/--host/--port/--https`; use `npx cap run <platform> --url http://<ip>:<port>`.
## Environment-specific builds
For QA/staging/prod variants, follow the official guide: Xcode schemes/targets and Android product flavors, plus a per-environment Capacitor config selected by an env var at `cap copy` time (`NODE_ENV=qa npx cap copy`). https://capacitorjs.com/docs/guides/environment-specific-configurations
Keep different `appId`s per environment if testers install them side by side.
## Version alignment
```bash
npm ls /core @capacitor/cli /ios @capacitor/android
npx cap doctor
```
- Upgrade core packages together:
```bash
npm install /core@latest @capacitor/ios /android
npm install -D /cli
npx cap sync
```
`` stays within the current stable major (8.x today). Major jumps go through `capacitor-app-upgrades`.
- `/cli` belongs in `devDependencies`.
- Plugins: match the plugin major to the Capacitor major. Upgrading only plugins across a major without Capacitor (or the reverse) is the most common source of native build errors.
- Capacitor 9 is on the `next` tag (alpha). Only install with `` in a branch for evaluation.