Recipes
Disable Sentry source-map upload during builds
Sentry's "Upload Debug Symbols" Xcode build phase + the Android gradle equivalent both fail when SENTRY_AUTH_TOKEN is missing or lacks scope. For local CI / dev runs, skip the upload.
export default {
buildEnv: { SENTRY_DISABLE_AUTO_UPLOAD: 'true' },
};
The var is merged into the build child process automatically.
Use Expo dev-client builds
mp matches the Opening … on <device> log line that both plain expo run:* and expo-dev-client print. Nothing extra to configure — dev-client deep-link URLs (exp+<scheme>://expo-development-client/?url=...) are recognised.
Sign physical iOS
mp builds the app via the auto-detected strategy; iOS code signing is handled by Xcode automatic signing or by your custom hook. mp itself only needs the Team ID for Maestro's WebDriver build:
export default {
appleTeamId: 'YOUR10CHARS',
};
One-time setup on the Mac:
-
Xcode → Settings → Accounts → + — sign in with an Apple ID that's a member of the target Developer team.
-
Open
ios/<App>.xcworkspace→ target settings → Signing & Capabilities → ✓ Automatically manage signing → pick team. -
Xcode downloads cert into login Keychain and generates the provisioning profile. Verify:
security find-identity -v -p codesigning
For CI, use App Store Connect API key (-allowProvisioningUpdates -authenticationKey*) — no interactive 2FA.
Pin build strategy
Project has both rock.config.mjs AND eas.json? mp picks Rock by default. Override:
export default {
buildStrategy: 'expo', // or 'rock' / 'eas' / 'auto'
};
Inject Maestro env
export default {
maestroEnv: {
APP_BASE_URL: 'https://staging.example.com',
},
};
In your flow YAML:
- runScript: |
output.url = `${APP_BASE_URL}/healthcheck`;
Run on every connected device in CI
maestro-parallel --all --apple-team-id $MAESTRO_APPLE_TEAM_ID
--all skips the interactive picker (CI has no TTY). Use --apple-team-id or set MAESTRO_APPLE_TEAM_ID if physical iOS is in scope.