Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/fork-features.yml
Original file line number Diff line number Diff line change
Expand Up @@ -1145,7 +1145,8 @@ features:
- Linux desktop entries, SnapShot D-Bus names, the GNOME Shell extension, and the KDE and Hyprland capture helpers use styal identities (`build.styal.Styal`, `snap-shot@styal.build`, `styal-*-snap-shot`) so they cannot collide with an upstream T3 Code install.
- Mobile production and preview profiles retain styal identity and fork Expo configuration; Android distribution uses installable APKs without store submission, while iOS submits to TestFlight.
- Each finished production Android APK is published as a GitHub release tagged `android-<version>-<versionCode>`, created without claiming Latest from a stable `v` release, and only when its signing certificate matches the pinned production key; release notes contain installation guidance and APK checksums are attached as `SHA256SUMS`.
- Production Android installs offer the newest GitHub release once per release, and keep it in About styal, only when its runtime version differs from the installed binary's, because over-the-air updates cannot reach that install.
- Production Android installs offer the newest GitHub release once per release, and keep its download directly below Version in About styal, only when its runtime version differs from the installed binary's, because over-the-air updates cannot reach that install.
- Mobile About styal identifies the installed binary by its native version and build number on Android and iOS, retaining non-production variant labels.
implementation_paths:
- .github/scripts/publish-android-release.sh
- .github/workflows/desktop-macos-preview.yml
Expand Down
1 change: 1 addition & 0 deletions apps/mobile/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
"diff": "8.0.3",
"effect": "catalog:",
"expo": "~57.0.18",
"expo-application": "~57.0.3",
"expo-asset": "~57.0.15",
"expo-audio": "57.0.4",
"expo-auth-session": "~57.0.10",
Expand Down
24 changes: 14 additions & 10 deletions apps/mobile/src/features/settings/SettingsAboutRouteScreen.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { ScreenScrollView as ScrollView } from "../../components/ScreenScrollView";
import * as Application from "expo-application";
import Constants from "expo-constants";
import { useCallback, useEffect, useRef, useState } from "react";
import { Alert, Pressable, View } from "react-native";
Expand Down Expand Up @@ -45,12 +46,15 @@ function AppSettingsSection() {
const hiddenUpdateTapCount = useRef(0);
const nativeUpdate = useAvailableNativeAppUpdate();

const version = Constants.expoConfig?.version ?? "0.0.0";
const version = Application.nativeApplicationVersion ?? Constants.expoConfig?.version ?? "0.0.0";
// EAS assigns build numbers remotely; read the installed binary rather than app.config.
const build = Application.nativeBuildVersion;
const versionWithBuild = build ? `${version} (${build})` : version;
// Fall back to "production" to match resolveAppVariant in app.config.ts, so a
// missing variant never mislabels a production build as development.
const variant = (Constants.expoConfig?.extra?.appVariant as string | undefined) ?? "production";
const variantLabel = variant === "production" ? "" : capitalize(variant);
const versionLabel = variantLabel ? `${version} · ${variantLabel}` : version;
const versionLabel = variantLabel ? `${versionWithBuild} · ${variantLabel}` : versionWithBuild;
const updateCheckAvailable = isAppUpdateCheckAvailable();
const busy =
updateState === "checking" || updateState === "downloading" || updateState === "restarting";
Expand Down Expand Up @@ -126,14 +130,6 @@ function AppSettingsSection() {

return (
<SettingsSection title="App">
{nativeUpdate ? (
<SettingsRow
icon="square.and.arrow.down"
label={`Update to styal ${nativeUpdate.version}`}
value={`${formatApkSize(nativeUpdate.apkSizeBytes)} download`}
onPress={() => void openNativeAppUpdateDownload(nativeUpdate)}
/>
) : null}
<SettingsRow icon="internaldrive" label="Client Storage" target="SettingsClientStorage" />
<SettingsRow icon="stethoscope" label="Diagnostics" target="SettingsDiagnostics" />
<SettingsRow
Expand All @@ -154,6 +150,14 @@ function AppSettingsSection() {
) : (
versionRow
)}
{nativeUpdate ? (
<SettingsRow
icon="square.and.arrow.down"
label={`Update to styal ${nativeUpdate.version}`}
value={`${formatApkSize(nativeUpdate.apkSizeBytes)} download`}
onPress={() => void openNativeAppUpdateDownload(nativeUpdate)}
/>
) : null}
</SettingsSection>
);
}
Expand Down
3 changes: 3 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading