mobile-ci-cd — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited mobile-ci-cd (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are in AUTONOMOUS MODE. Do NOT ask questions. Do NOT pause for confirmation. Execute every phase below in sequence, making decisions based on what you find.
============================================================ PHASE 0 — INPUT ============================================================
$ARGUMENTS may contain:
github-actions (default), bitrise, codemagiccode-signing, testflight, play-store, testing, artifacts--ios-only or --android-only to limit scope============================================================ PHASE 1 — PROJECT DETECTION ============================================================
pubspec.yaml with flutter SDK -> Flutter (iOS + Android)*.xcodeproj or *.xcworkspace (no Flutter) -> Native iOSbuild.gradle.kts with android plugin (no Flutter) -> Native Androidpackage.json with react-native -> React Native (iOS + Android)package.json with expo -> Expo (iOS + Android).github/workflows/ -> GitHub Actionsbitrise.yml -> Bitrisecodemagic.yaml -> Codemagic.circleci/ -> CircleCIfastlane/Fastfile -> Use existing lanes============================================================ PHASE 2 — iOS PIPELINE ============================================================
Generate .github/workflows/ios.yml:
Triggers: Push to main/develop, PRs to main/develop. Use concurrency groups with cancel-in-progress: true.
Test job (runs on macos-14):
TestFlight job (runs on push to develop):
MATCH_PASSWORD, MATCH_GIT_TOKEN, ASC_KEY_ID, ASC_ISSUER_ID, ASC_KEY_CONTENTfastlane betaApp Store job (runs on tag v*.*.*):
fastlane release============================================================ PHASE 3 — ANDROID PIPELINE ============================================================
Generate .github/workflows/android.yml:
Triggers: Same as iOS. Concurrency groups.
Test job (runs on ubuntu-latest):
./gradlew lint)Internal Track job (runs on push to develop):
KEYSTORE_BASE64, KEYSTORE_PASSWORD, KEY_ALIAS, KEY_PASSWORD, PLAY_STORE_JSON_KEYProduction job (runs on tag v*.*.*):
============================================================ PHASE 4 — BUILD NUMBER MANAGEMENT ============================================================
Configure a build number strategy that guarantees monotonically increasing values:
Recommended: CI run number (${{ github.run_number }}) — simple and monotonic.
Alternative A: Git commit count (git rev-list --count HEAD) — tied to commit history.
Alternative B: Timestamp (date +%Y%m%d%H%M) — works for infrequent builds.
Inject build number per framework:
flutter build --build-number=$BUILD_NUMBERincrement_build_number(build_number: ENV["BUILD_NUMBER"])versionCode from environment variable in gradle============================================================ PHASE 5 — CODE SIGNING IN CI ============================================================
iOS Signing:
Android Signing:
Generate a signing setup checklist documenting every secret, where to obtain it, and how to encode it.
============================================================ PHASE 6 — AUTOMATED TESTING ============================================================
Configure comprehensive test jobs:
Unit tests: Flutter flutter test --coverage, iOS xcodebuild test, Android ./gradlew test
Static analysis: Flutter flutter analyze, iOS SwiftLint, Android ./gradlew lint
Coverage: Upload to Codecov or Coveralls. Set minimum coverage thresholds.
Optional UI tests:
flutter test integration_test/ on simulator/emulator============================================================ PHASE 7 — ARTIFACT MANAGEMENT ============================================================
Configure artifact retention:
============================================================ SELF-HEALING VALIDATION (max 2 iterations) ============================================================
After completing deployment/infrastructure changes, validate:
IF STILL FAILING after 2 iterations:
============================================================ OUTPUT ============================================================
## Mobile CI/CD Pipeline Complete
### Platform: {GitHub Actions / Bitrise / Codemagic}
### Framework: {Flutter / iOS Native / Android Native / React Native}
### Pipeline Overview
| Trigger | iOS Action | Android Action |
|---------|------------|----------------|
| PR | Test + analyze | Test + lint |
| Push to develop | Test + TestFlight | Test + Internal Track |
| Tag v*.*.* | Test + App Store | Test + Production (10%) |
### Required Secrets
| Secret | Platform | How to Obtain |
|--------|----------|---------------|
| MATCH_PASSWORD | iOS | Chosen during match init |
| MATCH_GIT_TOKEN | iOS | GitHub PAT with repo scope |
| ASC_KEY_ID | iOS | App Store Connect > Keys |
| ASC_ISSUER_ID | iOS | App Store Connect > Keys |
| ASC_KEY_CONTENT | iOS | .p8 file contents |
| KEYSTORE_BASE64 | Android | base64 -w0 upload-keystore.jks |
| KEYSTORE_PASSWORD | Android | Chosen during keytool |
| KEY_ALIAS | Android | Chosen during keytool |
| KEY_PASSWORD | Android | Chosen during keytool |
| PLAY_STORE_JSON_KEY | Android | GCP service account JSON |
### Files Created
{list all generated workflow and configuration files}============================================================ NEXT STEPS ============================================================
deploy/play-store-publish to set up Fastlane lanes for Play Storedeploy/app-store-publish to set up Fastlane lanes for App Storedeploy/ota-updates to configure over-the-air update infrastructure============================================================ SELF-EVOLUTION TELEMETRY ============================================================
After producing output, record execution metadata for the /evolve pipeline.
Check if a project memory directory exists:
~/.claude/projects/skill-telemetry.md in that memory directoryEntry format:
### /mobile-ci-cd — {{YYYY-MM-DD}}
- Outcome: {{SUCCESS | PARTIAL | FAILED}}
- Self-healed: {{yes — what was healed | no}}
- Iterations used: {{N}} / {{N max}}
- Bottleneck: {{phase that struggled or "none"}}
- Suggestion: {{one-line improvement idea for /evolve, or "none"}}Only log if the memory directory exists. Skip silently if not found. Keep entries concise — /evolve will parse these for skill improvement signals.
============================================================ DO NOT ============================================================
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.