> ## Documentation Index
> Fetch the complete documentation index at: https://docs.capwrapper.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Capwrapper FAQ

> Answers to common questions about Capwrapper builds, credentials, native capabilities, and troubleshooting for iOS and Android apps.

If you're new to Capwrapper or running into a snag mid-build, you're in the right place. The questions below cover the most common setup and publishing topics — from what kinds of web apps you can wrap, to what to do when a build fails.

<AccordionGroup>
  <Accordion title="What type of web apps can I wrap?">
    Any web app with a public HTTPS URL. Capwrapper supports React, Vue, Angular, plain HTML, Webflow, WordPress, Base44, Bolt, Lovable, v0, and any Vercel-hosted app. If your app loads in a standard browser, Capwrapper can wrap it.

    <Note>
      Private or localhost URLs are not supported. Your app must be publicly accessible over HTTPS before you start a build.
    </Note>
  </Accordion>

  <Accordion title="How long does a build take?">
    Android builds typically complete in under 2 minutes. iOS builds are currently in public beta and may take slightly longer depending on load. You'll receive a notification in the dashboard when your build is ready to download.

    <Tip>
      If your build is taking longer than expected, check your dashboard for a status update. Build times can vary during periods of high demand.
    </Tip>
  </Accordion>

  <Accordion title="Do I need a keystore for Android?">
    Not for testing. Capwrapper auto-generates a debug keystore if you don't provide one, which is fine for local testing and internal distribution.

    However, you must supply your own keystore to publish on the Google Play Store. Generate one with the following command:

    ```bash theme={null}
    keytool -genkey -v -keystore my-release-key.jks -alias mykey -keyalg RSA -keysize 2048 -validity 10000
    ```

    <Warning>
      Keep your keystore file and password in a safe place. If you lose your keystore, you will not be able to update your existing Play Store listing — you would need to publish as a new app.
    </Warning>
  </Accordion>

  <Accordion title="What is a Bundle ID?">
    Your Bundle ID is your app's unique identifier in reverse domain notation — for example, `com.yourcompany.appname`. It ties your app to its store listing on Google Play and the Apple App Store.

    <Warning>
      Your Bundle ID is permanent. Once you publish an app under a given Bundle ID, you cannot change it without creating a brand-new store listing. Choose it carefully before your first production release.
    </Warning>

    Use all lowercase letters, separate segments with dots, and avoid spaces or special characters. A valid example: `com.acme.invoicetracker`.
  </Accordion>

  <Accordion title="Why does iOS require so many credentials?">
    Apple requires every iOS app to be signed with credentials from an Apple Developer account before it can run on a real device or be distributed via the App Store or TestFlight.

    To build an iOS IPA with Capwrapper, you need:

    * An **Apple Developer account** (\$99/year)
    * A **distribution certificate** from App Store Connect
    * A **provisioning profile** from App Store Connect

    These requirements come from Apple, not Capwrapper. Providing these credentials allows Capwrapper to sign your IPA on your behalf so it can be distributed through official Apple channels.

    <Note>
      iOS support is currently in public beta. See the [changelog](/changelog) for the latest iOS updates.
    </Note>
  </Accordion>

  <Accordion title="Can I update my app after publishing?">
    Yes, and how you update depends on what changed.

    **Web content only** — If you updated your website (copy, styles, features), users will see the new content automatically the next time they open the app, since the app loads your live URL. No new build is needed.

    **Native shell changes** — If you need to update permissions, the app icon, the splash screen, or the version number, create a new Capwrapper build with a higher version number and submit it to the store.

    <Tip>
      Use the `NativeOTA` bridge to push web content updates without submitting a new build to the app store. This is useful for urgent fixes that don't involve native configuration changes.
    </Tip>
  </Accordion>

  <Accordion title="What native capabilities are supported?">
    Every Capwrapper build includes 40 native bridges at no extra cost. You enable them in the dashboard — no code or plugins to configure.

    Bridges are organized into these categories:

    | Category         | Examples                                                  |
    | ---------------- | --------------------------------------------------------- |
    | Core             | Over-the-air updates, offline caching, deep links         |
    | Auth & Security  | Biometrics, passkeys, social login                        |
    | Device Access    | GPS, contacts, calendar, health data                      |
    | Media & Scanning | Camera, QR/barcode scanner, document scanner, file upload |
    | UI & Navigation  | Native tab bar, sidebar, search, onboarding               |
    | Engagement       | Push notifications, in-app purchases, ads, ratings        |
    | Data & Storage   | Encrypted storage, file download, Firebase Analytics      |
    | Maps & Location  | Open addresses, get directions                            |
    | Specialized      | Voice input, BLE beacon scanning, share extensions        |
  </Accordion>

  <Accordion title="My build failed — what should I do?">
    Start by checking the build log in your dashboard — it will show the specific error message.

    The most common causes are:

    * **URL not accessible** — Your app URL must be publicly reachable over HTTPS. Test it in an incognito browser window.
    * **Invalid Bundle ID** — Must be lowercase, use reverse domain notation, and contain no spaces (e.g., `com.yourcompany.appname`).
    * **Missing or invalid keystore** — Required for Play Store builds. Confirm your keystore alias and password are correct.
    * **Version number not incremented** — If you're re-submitting to a store, your new version number must be higher than the previously submitted version.

    If you've checked the log and the issue persists, contact support at [capwrapper.com/support](https://capwrapper.com/support).
  </Accordion>

  <Accordion title="Do I need to write any native code?">
    No. Capwrapper handles all native code for you. You interact with native features — camera, GPS, push notifications, and the rest — through JavaScript bridges that you call from your existing web app. There is no Xcode, no Android Studio, and no platform-specific SDK knowledge required.
  </Accordion>

  <Accordion title="What platforms are supported?">
    Capwrapper supports both major mobile platforms:

    * **Android** — Produces a signed APK (for direct distribution) and a signed AAB (required for Google Play Store submission). Google Play requires a one-time \$25 developer account fee.
    * **iOS** — Produces a signed IPA for App Store distribution and TestFlight beta testing. iOS support is currently in public beta. An Apple Developer account (\$99/year) is required.
  </Accordion>
</AccordionGroup>

<Note>
  Didn't find your answer? Reach out to the support team at [capwrapper.com/support](https://capwrapper.com/support).
</Note>
