AppForShareCreate a free account

A security scan on every build you upload

Pro and Team (Free sees the counts; the full report, export and history are Team)

Most leaked keys and forgotten debug settings are found by someone else first: a curious tester, a client's security team, or a stranger with a decompiler. A test build is a zip file anyone with the link can download and unpack, so the moment you share it is a good moment to look inside.

AppForShare reads every .apk and .ipa at upload, in the same step as the store readiness check, and lists what it finds: a key that should never ship, app data that leaves the phone in backups, a component other apps can start, an App Transport Security exception nobody remembers adding. Each finding says where it is, why it matters and how to fix it. Nothing runs inside your app and nothing is added to it.

Example

Shop 3.2.0 (88), Android

  • Summary1 to fix, 3 warnings, 2 notes
  • MASVS-STORAGEStripe live secret key in assets/config.json: sk_l...9Qx2
  • MASVS-STORAGEApp data is backed up (allowBackup on)
  • MASVS-PLATFORM2 exported components without a permission
  • MASVS-RESILIENCECode does not look shrunk or obfuscated (a hint)
  • MASVS-CODEOkHttp 4.9.0 has a known vulnerability (CVE-2021-0341)
Example values. Secrets are stored masked: first 4 and last 4 characters only.

Made for

  • Small teams and solo developers who have no security engineer but do not want to ship an AWS key to a client
  • Agencies that hand builds to clients and want a short report to send with them
  • Teams that want a check in CI that fails the pipeline when a build has something to fix

What it ends

  • A Stripe or AWS key compiled into a test build and sent to 40 testers
  • Running a decompiler by hand once a year, if someone remembers
  • An exported debug activity or a staging ATS exception that survives into the release
  • A client's security questionnaire with no record of what was checked in which build

How it works

  1. Step 1

    Upload as usual

    From the dashboard, the CLI, the GitHub Action, fastlane, Gradle, Connect Expo or Connect Codemagic. The scan runs at upload; there is nothing to turn on.

  2. Step 2

    Read the Security scan card

    Under the store readiness check on the build page: counts such as "1 to fix, 3 warnings, 2 notes", then each finding with its file, its MASVS category and the fix.

  3. Step 3

    Ask for a fix plan

    One AI action turns the findings into ordered steps. Secrets go to the AI only as their kind and file, never the value.

  4. Step 4

    Gate the pipeline

    appforshare security <build> --fail-on block exits with code 2 when something has to be fixed. The build stays uploaded.

What it looks for

Hardcoded secrets, on high confidence patterns only: AWS access key ids, Stripe live secret and restricted keys, PEM private keys, Google service account JSON, Slack tokens and webhook addresses, GitHub tokens and legacy Firebase Cloud Messaging server keys. It reads dex code, resources, assets, React Native bundles (index.android.bundle, main.jsbundle), Info.plist, the iOS main binary and Flutter compiled code. Google API keys are a note, not an error: they are meant to ship, and the fix is to restrict them to your app. Sample values such as keys with EXAMPLE in them are skipped.

Android: app data backed up without rules (allowBackup on or not set, with no dataExtractionRules or fullBackupContent), activities, services, receivers and providers exported without a permission (the launcher activity is left out), user added certificates trusted outside debug-overrides, a debuggable build, plain HTTP for every server, WebView debugging referenced in the code, a minimum API below 24, and a hint when class names in classes.dex look unshrunk, which usually means R8 did not run.

iOS: App Transport Security turned off for every domain, each exception domain with what it loosens, insecure loads allowed in web views, local symbols left in the binary, and get-task-allow in a build that is not development signed.

Libraries: a short dated table of versions with a public advisory (OkHttp, Play Core, OpenSSL, zlib and AFNetworking, checked November 8, 2026). A version is matched only when the build states it; it is never guessed.

Integrity checks: whether the app ships root, jailbreak, tamper or attestation checks such as RootBeer, freeRASP, Play Integrity, Firebase App Check, App Attest or IOSSecuritySuite. This is a note either way, because most apps do not need one.

Plain counts, not a score

Every finding has a level (to fix, warning or note) and an OWASP MASVS category: storage, cryptography, network, platform, code or resilience. The result is a count such as "1 to fix, 3 warnings". There is no percentage and no grade, because a single leaked key matters more than ten notes.

Pro and Team, and what Free sees

Free shows the counts on every build, so you know when there is something to look at. Pro and Team show every finding with where it is and how to fix it, the AI fix plan, the CLI command and the MCP tool get_security_scan for your AI coding assistant.

Team adds the full report grouped by MASVS category, an export as JSON or a printable page to send to a client or keep in an audit folder, and the history of findings across the builds of one app, with what is new and what was fixed since the build before.

In CI, the CLI and AI tools

appforshare security <build> prints the findings. Add --fail-on block to fail the job when something has to be fixed, or --fail-on warn to fail on warnings too; both exit with code 2 and leave the build uploaded. On Team, --format json or html saves the full report as a file. The CI build answer carries the counts as security on every plan, and GET /api/ci/builds/{ref}/security returns the findings.

A light check on every upload, not a full security test

Dedicated mobile application security testing tools go further: they run the app, watch its traffic, trace data through the code and, in some products, add obfuscation and runtime protection when the app is built. They are usually bought by security teams and priced per app. If you handle payments, health data or banking, you likely need one, plus a manual test.

The AppForShare scan is the other end: a static read of the file you already upload, on every build, included in the plan you have. It catches the common, costly mistakes early and gives you a record per build. It does not replace a penetration test.

Good to know

Questions

Do you keep the secrets you find?
Only the kind, the file and a masked value with the first 4 and last 4 characters. The full value is never stored, logged or sent to the AI.
Does it need an SDK or a change to my app?
No. It reads the uploaded .ipa or .apk. An .aab is scanned as the APK made from it.
Will it make my app pass a security review?
No tool can promise that. It finds common mistakes early so a reviewer or a pentest spends time on the harder questions.
Which plan do I need?
Free shows the counts. Pro and Team show the findings, the AI fix plan, the CLI and the MCP tool. Team adds the full report, export and history.
Does it work with Flutter and React Native builds?
Yes. It reads React Native JavaScript bundles and Flutter compiled code for secrets. The R8 hint is for native Kotlin and Java apps only.

Read next

Try it on your own app

Free account in a minute. Pro starts with a 7 day free trial.

More features