{
  "name": "appscreens",
  "product": "AppScreens",
  "page": "https://mayorana.ch/en/apps/appscreens",
  "generated_at": "2026-10-07T14:20:17Z",
  "releases": [
    {
      "version": "0.1.25",
      "tag": "v0.1.25",
      "date": "2026-10-07",
      "sections": [
        {
          "heading": "Added",
          "items": [
            "Android builds now work on Windows and Linux, not just macOS. AppScreens runs the whole build itself — `dx`, then the icon, package name, version and signing fixes, then Gradle — instead of a bash script, finds the Android SDK where Android Studio puts it on each system, and on Windows keeps the upload-key password in Windows Credential Manager.",
            "The keystore password no longer gets written into the generated Gradle project: Gradle reads it from the environment for the length of the build."
          ]
        },
        {
          "heading": "Changed",
          "items": [
            "On Windows, AppScreens now installs from `appscreens-windows-setup.exe` instead of an `.msi`. It installs for your user without administrator rights, and removes an AppScreens installed from the old `.msi` first. Your projects and settings are kept.",
            "A build script you wrote yourself still runs as it is. On Windows that needs Git for Windows' bash, and AppScreens says so if it's missing.",
            "On Windows and Linux, the iOS build button and the Apple signing tools say they need a Mac, instead of failing halfway. Screenshots, store text and listing uploads for iOS work everywhere.",
            "The Doctor's \"Open Android Studio\" button works on Windows and Linux too."
          ]
        },
        {
          "heading": "Fixed",
          "items": [
            "Windows no longer opens a console window behind AppScreens, or one for every tool it runs."
          ]
        }
      ]
    },
    {
      "version": "0.1.24",
      "tag": "v0.1.24",
      "date": "2026-10-07",
      "sections": [
        {
          "heading": "Added",
          "items": [
            "The Windows installer now includes a license page that users must accept before installing the application. This ensures that users are aware of the licensing terms before proceeding with the installation."
          ]
        }
      ]
    },
    {
      "version": "0.1.23",
      "tag": "v0.1.23",
      "date": "2026-10-06",
      "sections": [
        {
          "heading": "Added",
          "items": [
            "AppScreens now shares anonymous usage statistics: whether it is installed and opened, its version and your operating system. It is on by default; a note at the bottom of the window tells you once, and nothing is sent before you have seen it. **Turn off** there stops it for good and deletes anything not yet sent. Your files, data and accounts are never part of it. It also stays off if `DO_NOT_TRACK`, `DISABLE_UPDATE_CHECK` or `MAYORANA_NO_TELEMETRY` is set."
          ]
        }
      ]
    },
    {
      "version": "0.1.22",
      "tag": "v0.1.22",
      "date": "2026-10-01",
      "sections": [
        {
          "heading": "Added",
          "items": [
            "The Android upload key card lists the keystores already on your Mac (in your keys folder and the project) with a Use button, so picking yours no longer means browsing for it."
          ]
        },
        {
          "heading": "Changed",
          "items": [
            "Building an AAB without an upload key no longer starts a build that fails halfway: the Build step shows the missing key with a link to the Accounts step, and the build button says where to set it up. The build script's own message now points to the same place before mentioning the project's `.env`."
          ]
        },
        {
          "heading": "Fixed",
          "items": [
            "Opened from the Dock or Finder, AppScreens no longer reports \"dx not found\" or missing Rust targets when the Dioxus CLI and rustup are installed. It now finds the tools in your Rust install folder and your terminal's settings, and the build scripts it runs find them too.",
            "When another program called `dx` comes first (Homebrew's deno installs one), the check now says so instead of reporting a wrong Dioxus version, and builds use the Dioxus CLI."
          ]
        }
      ]
    },
    {
      "version": "0.1.21",
      "tag": "v0.1.21",
      "date": "2026-10-01",
      "sections": [
        {
          "heading": "Added",
          "items": [
            "The Google Play service-account key gets the same help. If another of your projects already uses one, one click reuses it. Otherwise the Google Play card walks you through it: enable the API, create the service account and its JSON key, and invite it in Play Console, each step linking to the right page. It then picks up the downloaded JSON key and keeps a private copy in your keys folder. The email to invite comes with a Copy button. Finally it saves the key's location to the project's `.env` and tests the connection."
          ]
        },
        {
          "heading": "Changed",
          "items": [
            "The \"Create a Distribution certificate\" form explains each field, and warns when the keychain already has one: Apple allows very few per team, and your profiles are tied to the one you have."
          ]
        }
      ]
    },
    {
      "version": "0.1.20",
      "tag": "v0.1.20",
      "date": "2026-09-30",
      "sections": [
        {
          "heading": "Added",
          "items": [
            "Setting up the App Store Connect API key no longer means editing `.env` by hand. If another of your projects already has a key, one click reuses it — one key works for every app of your team. Otherwise the Apple card walks you through creating one, with a link straight to the right App Store Connect page. It then picks up the downloaded `.p8`, reads the Key ID from its file name, keeps a private copy in your keys folder (Apple lets you download it only once), saves everything to the project's `.env` and tests the connection.",
            "\"Add profile…\" next to the provisioning profile list installs a profile you downloaded from Apple Developer and selects it, with a link to your profiles there."
          ]
        },
        {
          "heading": "Fixed",
          "items": [
            "Provisioning profiles downloaded by Xcode 16 now appear in the profile list; only the older profiles folder used to be read."
          ]
        }
      ]
    },
    {
      "version": "0.1.19",
      "tag": "v0.1.19",
      "date": "2026-09-29",
      "sections": [
        {
          "heading": "Added",
          "items": [
            "Opening a project you've already built fills in the App step for you: the app name, project slug, bundle ID and Android package come from your build scripts, `Dioxus.toml`, `Cargo.toml`, fastlane and your last builds, and a project that was only ever built for iOS (or Android) is set up for just that platform. Fields you've filled in yourself are never changed."
          ]
        },
        {
          "heading": "Fixed",
          "items": [
            "AppScreens no longer replaces a build script you wrote yourself. It used to rewrite every build script from its template before each build, losing changes like a display name or a minimum iOS version. Scripts it wrote are still kept up to date."
          ]
        }
      ]
    },
    {
      "version": "0.1.18",
      "tag": "v0.1.18",
      "date": "2026-09-29",
      "sections": [
        {
          "heading": "Added",
          "items": [
            "The Accounts step can now set up signing without a terminal: create an Android upload keystore (or add a key for another app to it) and get the certificate Play Console asks for, create an Apple Distribution certificate straight into your keychain, and regenerate an invalid App Store profile.",
            "Passwords for the upload keystore are kept in the macOS Keychain instead of a plain-text `.env` file (a `.env` still works and takes priority).",
            "The Accounts step warns when `.env` files, keys, keystores or service-account files are committed in the project, and can stop tracking them for you.",
            "An encrypted backup of your whole keys folder in one file, with a reminder until you have one and again whenever your keys change — so a lost or stolen Mac no longer means revoking and recreating every key.",
            "The Build step checks your build tools before you build: `dx` against the project's Dioxus version, the Android SDK, NDK, target platform, build tools and Java, the Rust targets, Xcode and your signing identity. Each problem says how to fix it, and several have a button that does it for you — instead of finding them one failed build at a time.",
            "Every build is inspected before you upload it: which key signed the AAB (compared with your upload key), its package, version and target API; and for the IPA its bundle ID, version, distribution signature and profile. Problems show under the build and in the Submit checklist.",
            "Releasing to Google Play stops before the upload when the bundle's versionCode isn't higher than one already on Play, instead of after it.",
            "The App step checks that your app's own code and `.env` use the same Android package as the app — store links, data paths and package constants — and can correct them in one click. A mismatch used to ship silently: saved data in the wrong place, a \"rate us\" link to a missing page, or an upload to a different app.",
            "The build check flags `Dioxus.toml` settings the installed `dx` ignores (`target_sdk_version`, `min_sdk_version`) or rejects (`permissions = [...]`), and a target API below what Google Play requires, and can rewrite them.",
            "The App step warns when the project's code isn't safe from a lost Mac: not in git, no remote, or commits that were never pushed.",
            "The Submit step shows what the stores have right now — version states from App Store Connect and every Play track's releases — with links to what only the consoles show.",
            "The Accounts step has an \"If this Mac is lost or stolen\" checklist: what to revoke and replace, in order, filled in with this project's own key IDs and linking straight to each console page.",
            "The Build step shows every Java installed on the machine — Android Studio's, Homebrew, SDKMAN, system installs, and on Windows the registry — marks the ones too old or too new for the Gradle version your project builds with, and lets you pick which one AppScreens uses. Your terminal and system settings are left alone, so there is no JAVA_HOME to set up by hand.",
            "When no suitable Java is installed, the Java card offers to install one that fits your project: Homebrew (inside AppScreens, no password) or the Temurin installer on macOS, your package manager in a terminal on Linux, winget on Windows — and picks it up as soon as it's done.",
            "Android builds no longer start on a Java the project's Gradle can't run on. If the Java you picked, or the one in `JAVA_HOME`, is too old or too new (Java 26 with Gradle 9.1, for example), the build uses one that fits and says so in the log. The Doctor and the Java card point it out, with a one-click \"Use Java 21\".",
            "When a build fails on a Java mismatch anyway, the Build step explains it in plain words and offers \"Build again with Java 21\", using a Java you already have installed.",
            "If you want the same Java in your own terminal, the Java card can add it to your shell profile (zsh, bash or fish) or your Windows user settings. You see the exact lines first, your profile is backed up, and Remove takes them out again. \"Check my terminal\" opens a fresh shell and shows which Java it and your project's Gradle really use."
          ]
        },
        {
          "heading": "Fixed",
          "items": [
            "Signing and Android builds no longer fail with \"Unable to locate a Java Runtime\" when AppScreens is started from the Dock or a terminal without Java on its path. It now finds a Java installation by itself — `JAVA_HOME`, macOS's registered Java, Android Studio's bundled runtime or Homebrew — and hands it to the build."
          ]
        }
      ]
    },
    {
      "version": "0.1.17",
      "tag": "v0.1.17",
      "date": "2026-09-28",
      "sections": [
        {
          "heading": "Changed",
          "items": [
            "Android release builds take their signing key from the project's `.env` (`ANDROID_KEYSTORE_PATH`, `ANDROID_KEYSTORE_PASSWORD`, and optionally `ANDROID_KEY_ALIAS`) instead of a fixed keystore location, so you can use your own upload key and keep its password out of the build script. The Accounts step shows whether the keystore is found and the password is set."
          ]
        },
        {
          "heading": "Fixed",
          "items": [
            "Android release builds stop straight away with a clear message when the Android NDK is not installed, when the installed `dx` and the project's Dioxus version do not match (with the command that fixes it), or when `dx` fails before creating the Android project. They used to carry on and end in a cascade of unrelated \"No such file\" errors."
          ]
        }
      ]
    },
    {
      "version": "0.1.16",
      "tag": "v0.1.16",
      "date": "2026-09-28",
      "sections": [
        {
          "heading": "Changed",
          "items": [
            "Packaging only — no user-visible change."
          ]
        }
      ]
    },
    {
      "version": "0.1.15",
      "tag": "v0.1.15",
      "date": "2026-09-27",
      "sections": [
        {
          "heading": "Changed",
          "items": [
            "The update banner now links directly to the OS-specific build, making it easier to download the latest version."
          ]
        }
      ]
    },
    {
      "version": "0.1.14",
      "tag": "v0.1.14",
      "date": "2026-09-25",
      "sections": [
        {
          "heading": "Changed",
          "items": [
            "Packaging only — no user-visible change."
          ]
        }
      ]
    },
    {
      "version": "0.1.13",
      "tag": "v0.1.13",
      "date": "2026-09-24",
      "sections": [
        {
          "heading": "Fixed",
          "items": [
            "On wide windows the step content now fills the space beside the sidebar instead of sitting in a narrow centred column with an empty band next to it."
          ]
        }
      ]
    },
    {
      "version": "0.1.12",
      "tag": "v0.1.12",
      "date": "2026-09-24",
      "sections": [
        {
          "heading": "Changed",
          "items": [
            "Each project now opens in a workspace with one screen per step, in the order the work happens: App, Accounts, Version, Build, Languages, Screenshots, Store text and Submit. The sidebar shows each step's status (to do, needs attention, running, done).",
            "Builds, screenshot generation and uploads run in a jobs drawer at the bottom and keep going while you move between steps.",
            "The signing identity and provisioning profile moved from Settings to the Accounts step, and the app version to the Version step. The provisioning profile is now chosen per project, since each profile belongs to one app; Settings keeps the fal.ai key, device style and inference steps."
          ]
        },
        {
          "heading": "Fixed",
          "items": [
            "Android screenshots are saved inside the project, one set per language, in fastlane's folder layout. They used to land wherever AppScreens was started from, and each language overwrote the one before, so every language got the same images on Google Play.",
            "Google Play gets a single feature graphic per language, taken from the first screen. Every screen used to produce one, but Play keeps only one.",
            "Google Play uploads for Arabic, Hindi, Turkish and Chinese (Simplified) now use the language codes Play accepts; they were rejected before.",
            "Desktop screenshot sizes are exported. Desktop projects get a landscape layout: captions on top with the whole window fitted below, or an AI-drawn laptop frame.",
            "Unticking iOS or Android under Sizes stops that platform from being exported."
          ]
        },
        {
          "heading": "Added",
          "items": [
            "A Store text step: description, what's new, App Store keywords and promotional text, Play short description and support URL per language, with each store's character limits shown as you type and \"copy from English\" to start a translation.",
            "The Submit step runs each store as numbered stages, with a readiness checklist and a release history. For the App Store it can wait for the build to process, answer export compliance and submit the version for review; for Google Play it uploads the newest AAB to the track you choose, as a draft or a rollout.",
            "The provisioning profile is checked against the app: bundle ID, expiry, distribution type and team. **Test connection** checks App Store Connect and Google Play credentials before you rely on them.",
            "Each project keeps its own version, next iOS build number and next Android versionCode."
          ]
        }
      ]
    },
    {
      "version": "0.1.11",
      "tag": "v0.1.11",
      "date": "2026-09-14",
      "sections": [
        {
          "heading": "Added",
          "items": [
            "A banner at startup for occasional messages from us, such as a request for feedback. It is fetched once from mayorana.ch, stays until you dismiss it and is not shown again after that. If the notice cannot be fetched, no banner appears and startup is not slowed."
          ]
        }
      ]
    },
    {
      "version": "0.1.10",
      "tag": "v0.1.10",
      "date": "2026-09-06",
      "sections": [
        {
          "heading": "Changed",
          "items": [
            "Packaging only — no user-visible change."
          ]
        }
      ]
    },
    {
      "version": "0.1.9",
      "tag": "v0.1.9",
      "date": "2026-09-06",
      "sections": [
        {
          "heading": "Changed",
          "items": [
            "A redesigned interface: a consistent type scale, spacing and colours in both themes, and line icons in place of the emoji that used to label buttons and tabs.",
            "Screenshot previews show the whole phone screen instead of cropping its top and bottom.",
            "Placeholder text is readable, and every control shows keyboard focus."
          ]
        },
        {
          "heading": "Fixed",
          "items": [
            "On Android, layouts meant for small screens now apply. They were being ignored, so the app was laid out as if on a desktop-width page."
          ]
        }
      ]
    },
    {
      "version": "0.1.8",
      "tag": "v0.1.8",
      "date": "2026-08-30",
      "sections": [
        {
          "heading": "Changed",
          "items": [
            "Packaging only — the release pipeline can now sign the Windows installer."
          ]
        }
      ]
    },
    {
      "version": "0.1.7",
      "tag": "v0.1.7",
      "date": "2026-08-28",
      "sections": [
        {
          "heading": "Changed",
          "items": [
            "Packaging only — no user-visible change."
          ]
        }
      ]
    },
    {
      "version": "0.1.6",
      "tag": "v0.1.6",
      "date": "2026-08-27",
      "sections": [
        {
          "heading": "Changed",
          "items": [
            "Packaging only — no user-visible change."
          ]
        }
      ]
    },
    {
      "version": "0.1.5",
      "tag": "v0.1.5",
      "date": "2026-08-27",
      "sections": [
        {
          "heading": "Changed",
          "items": [
            "Downloads and update checks now come from mayorana.ch instead of GitHub. The update banner links to the download page there.",
            "AppScreens is source-available under the PolyForm Noncommercial licence: free for personal, educational and noncommercial use."
          ]
        }
      ]
    },
    {
      "version": "0.1.4",
      "tag": "v0.1.4",
      "date": "2026-08-27",
      "sections": [
        {
          "heading": "Changed",
          "items": [
            "Packaging only — no user-visible change."
          ]
        }
      ]
    },
    {
      "version": "0.1.3",
      "tag": "v0.1.3",
      "date": "2026-08-27",
      "sections": [
        {
          "heading": "Added",
          "items": [
            "AppScreens runs on Android, picking images through the system file picker.",
            "A banner when a newer version is available.",
            "A light and dark theme toggle, following the system theme until you choose.",
            "A new app icon."
          ]
        },
        {
          "heading": "Fixed",
          "items": [
            "The packaged app no longer loses its styling. The stylesheet is now built into the app instead of being loaded from beside it."
          ]
        }
      ]
    },
    {
      "version": "0.1.2",
      "tag": "v0.1.2",
      "date": "2026-06-06",
      "sections": [
        {
          "heading": "Added",
          "items": [
            "A signed and notarized macOS build that opens with a normal double-click."
          ]
        }
      ]
    },
    {
      "version": "0.1.1",
      "tag": "v0.1.1",
      "date": "2026-06-06",
      "sections": [
        {
          "heading": "Added",
          "items": [
            "First release. Create a new Dioxus project from a wizard or open an existing one, for iOS, Android or desktop.",
            "Screenshot generation per language, with a title and subtitle on each image: either drawn over your own colours, or placed in a device frame generated by fal.ai from a style you describe.",
            "Export at the sizes each store requires for iPhone, iPad, Android phone, the Play feature graphic and desktop.",
            "Upload screenshots to App Store Connect and Google Play, and build signed iOS and Android releases, from the app."
          ]
        }
      ]
    }
  ]
}
