# Troubleshooting builds and published apps

Source: https://saastostore.com/docs/troubleshooting

Find your symptom below. Each one gives the likely cause and what to do. If a build fails, your credit is returned automatically, so you can try again without paying twice.

## The build failed

| Message or symptom | Likely cause | What to do |
| --- | --- | --- |
| We couldn't reach your site | The address is down, private or slow | Open it in a private window, then relaunch |
| Your site has no valid PWA manifest | You chose the Android Build (Web) | Add a manifest, or use the [Native build](https://saastostore.com/docs/build-types) |
| Something went wrong with your app icon | The icon isn't a usable image | Upload a square 512×512 PNG |
| We couldn't sign the app | Usually on our side | Relaunch. Contact us if it happens again |
| The build stopped while compiling | Usually temporary | Relaunch. Send us the build ID if it repeats |

If you built your site with Lovable or a similar tool, check that the address still works. Renaming a project can change it, and the build then points to a page that no longer exists.

## The app won't install

- **Android says the app isn't installed:** you probably have the free test app on the phone. It was signed with a temporary key, so Android can't replace it. Uninstall it first.
- **Android blocks the file:** allow your browser to install apps when prompted ("Install unknown apps").
- **The download link no longer works:** links last 30 days. Open the project page to get a new one.
- **The test build on iPhone:** it's Android only. iOS comes with a paid plan.

## The app shows a blank page

1. **Open your URL on a phone** Use the phone's browser. If the site is blank there too, the problem is on the site.
2. **Check the address** It must be HTTPS and public. A page behind a password or an IP filter stays blank.
3. **Check the speed** A blank moment on first launch is your site loading. On iPhone it appears right after the launch screen.

## An address bar shows at the top

- **In the free test build:** this is normal. It goes away in a paid build.
- **In the Android Build (Web):** your site doesn't serve the right `assetlinks.json`. Follow [Deep links](https://saastostore.com/docs/deep-links) and check it with the [validator](https://saastostore.com/tools/deep-link-validator).

## A link leaves the app

Only your domain and its subdomains stay in the app. Anything else opens the system browser. To keep a domain inside, add it to **Extra domains** in your project, then rebuild. Never add Google's sign-in domain.

## Google sign-in shows an error

An error such as `disallowed_useragent` means sign-in opened inside the app. Follow [Sign-in](https://saastostore.com/docs/sign-in). If sign-in works but you come back signed out, check that your provider allows your app's return address.

## window.saastostore is undefined

- You're in a normal browser, where it doesn't exist.
- It's an Android Build (Web), which has no bridge. Use the Native build.
- The plugin was added after your last build. Launch a new one.
- The page is on another domain. The bridge only exists on your app's domain and subdomains.
- Your code runs before the bridge has loaded. Use `whenSaasToStore`, from the [JavaScript bridge](https://saastostore.com/docs/javascript-bridge) reference.

## A plugin doesn't seem to do anything

Plugin calls never throw. Log the result: `error` tells you what happened. `not_available` means the device can't do it, `not_supported` means the system doesn't allow it, and `invalid_argument` means a value is in the wrong format.

```js
const r = await window.saastostore?.haptics?.selection();
console.log(r); // { ok: true } or { ok: false, error: "not_available" }
```

## Still stuck?

Write to [hello@saastostore.com](mailto:hello@saastostore.com) with your build ID, which is on the build's page, and what you tried.

## Frequently asked questions

### Google says 'Version code has already been used'. What do I do?

Your app already has a higher version on Google Play, usually from another tool. Enter the highest version code in 'My app is already on Google Play' in your project, then launch a new build.

### Google refuses my bundle because of the wrong signing key. Why?

The app was first published with another key. Download the certificate from 'My app is already on Google Play', and send it to Google with Request upload key reset. Google tells you when it's valid.

### Publishing fails with 'Package not found'. Why?

Google Play only accepts uploads for an app that already exists. Create the app in the Play Console with the same package name, upload the first bundle by hand if Google asks, then publish from SaasToStore.

### Apple refused my app under guideline 4.2. What can I do?

Apple refuses apps that feel like a repackaged website. Add native navigation and useful plugins, hide your site's web header and footer, and show in your review notes what the app adds.

### Google asks for 12 testers. Is this normal?

Yes, for many personal accounts created after November 2023. Read our guide on the 12 testers requirement.
