Precompile at package time (JDK in CI image / nix) and bundle the runtime bits into the app,
resolved relative to the executable — downloaded builds run the simulator with just a JRE, no checkout.
Our CI hosts use PowerShell 5.1 and 7.4 is required to use this setting:
$PSNativeCommandUseErrorActionPreference = $true
So we have to explicitly check exit codes of native commands.
Without failure is silent, which is especially problematic in Ansible.
Also added check in Install-VC-BuildTools because it fails with exit
code 1 when Build Tools are already installed.
Signed-off-by: Jakub Sokołowski <jakub@status.im>
- tools/ax preflight: verifies Accessibility + Screen Recording, triggers
grant prompts, non-zero exit with instructions when missing
- storybook-agent.sh start: runs preflight (auto-builds CLI), aborts hard
- skill renamed qml-storybook-loop -> qml-dev; added permission protocol:
ping the human and wait, continue degraded only after one explicit
denial, persist the denial to memory and never re-ask
- tools/ax: Swift CLI to inspect/drive any app via the AX API (tree/find/
read/press/set/click/type/screenshot); elements addressed by Qt's
objectName-derived AXIdentifier
- scripts/storybook-agent.sh: start/status/stop lifecycle for a persistent
Storybook harness launched directly on a page
- storybook/main.qml: fix -- page-from-command-line (currentPage initial
property landed on ApplicationWindow instead of the Storybook item)
- .claude/skills/qml-storybook-loop: documented agent workflow
Validated end-to-end on SwapModalPage: objectName addressing, AXPress,
AXValue set (triggers QML bindings), and hot reload of production
SwapModal.qml (~4s edit-to-verified, no rebuild/restart).
Use vendor/nim-sds as the default source for desktop builds. Add a
platform sentinel that clears shared qrcodegen, nim-sds, and libstatus
outputs when switching desktop/mobile or arch in the same tree.
Replace parse-time platform cleanup with an order-only Make target.
Drop ios/android branches from the root Makefile; mobile cleanup lives
in mobile/Makefile. Always delegate status-go mobile builds via FORCE
and copy libraries only on change.
- Deleted the status-keycard-go submodule from .gitmodules and Makefile.
- Updated config.nims to reference STATUSKEYCARD_QT_LIBDIR instead of STATUSKEYCARDGO_LIBDIR.
- Adjusted build scripts and feature flags to remove dependencies on status-keycard-go.
- The code aligned.
Using bottle info call does not return all systems, and passing --variations causes:
Error: Invalid usage: Cannot call #to_hash_with_variations on formulae loaded from the internal API
Signed-off-by: Jakub Sokołowski <jakub@status.im>
- `mobile/Makefile` -> Added `apk-fdroid` build target, used by
`fdroid/build-app.sh`. F-Droid requires an unsigned APK without Google
Play services.
- `mobile/android/qt6/build.gradle` -> Added F-Droid gradle build
flavor, used during `apk-fdroid` target. Separates F-Droid builds from
Play Store builds and no signing configuration since it's supposed to be
unsigned.
- `mobile/scripts/buildApp.sh` -> Updated to copy F-Droid APK instead
of usual locations from Jenkins build.
- `mobile/scripts/buildOpenSSL.sh` -> Moved from iOS dir, shared
between iOS and F-Droid builds. Reusing the OpenSSL build logic that was
previously iOS-only but is now needed for F-Droid's from-source
requirement.
- `mobile/scripts/Common.mk` -> Updated path to `buildOpenSSL.sh`
which is no longer inside iOS dir.
- `mobile/scripts/openssl-patch.diff` -> Moved from iOS dir, applied
by `buildOpenSSL.sh`, so that the patch is co-located with the script
that uses it.
- `ci/Jenkinsfile.fdroid` -> Had to make a new pipeline script because
integrating this into `ci/Jenkinsfile.android` was causing issues with
the generated `AppImage` and steps had to be fully sequential, so I
figured it's good to separate them out.
- `fdroid/entrypoint-fdroid.sh` -> Docker entrypoint, used by
`fdroid/Dockerfile`. Sets up the container user/permissions before the
F-Droid build starts.
- `fdroid/Dockerfile` -> A minimalistic Docker image for the F-Droid
Jenkins build environment, used by `ci/Jenkinsfile.fdroid`. I didn't add
to existing Qt Android `Dockerfile` because this one only needs a
minimal environment with Docker-in-Docker to run the `fdroidserver` VM.
- `fdroid/build-app.sh` -> Called by `fdroiddata` metadata build step.
Sets up Qt and Android NDK environment, detects `JAVA_HOME`, configures
`Go`/`Nim` env vars, and runs the `make` targets for the F-Droid APK.
- `fdroid/build-openssl.sh` -> F-Droid requires OpenSSL to be built
from source rather than using prebuilt binaries.
- `fdroid/build-qt-android.sh` -> F-Droid requires Qt to be built from
source; this handles the Android cross-compilation.
- `fdroid/build-qt-host.sh` -> Qt's cross-compilation requires host
tools (`moc`, `rcc`, etc.) to be built first.
- `fdroid/cleanup-binaries.sh` -> Removes binaries flagged by `fdroid`
scanner, called by `fdroiddata` metadata `prebuild` step. F-Droid's
scanner rejects repos containing prebuilt binaries in test/vendor
directories.
- `fdroid/cleanup-fdroiddata.sh` -> Removes stale `fdroiddata` clones,
called by `ci/Jenkinsfile.fdroid`. Prevents disk space issues from
accumulating `fdroiddata` clones across builds.
- `fdroid/fdroid-container-build.sh` -> Runs `fdroid build` inside
Docker container, called by `scripts/fdroid-local-build.sh`. Isolates
the build in a container to match F-Droid's official build environment.
- `scripts/fdroid-local-build.sh` -> A handy script to build F-Droid
locally, also called by `ci/Jenkinsfile.fdroid`. Manages the full
lifecycle of cloning `fdroiddata`, launching the `fdroidserver`, and
extracting the output APK.
- `fdroid/generate-keystore.sh` -> Generates a single-use keystore for
signing the F-Droid APK. Sourced by `buildApp.sh` to export signing
credentials into the build environment.
fixes: https://github.com/status-im/status-app/issues/19741
fixes :
```
0m=[94mqrc:/app/AppLayouts/Profile/views/EnsView.qml:4
[0m [33mtext[0m=[94m"module \"QtQml.StateMachine\" is not installed"[0m
```
and
```
E FATAL EXCEPTION: qtMainLoopThread
Process: app.status.mobile.debug, PID: 18150
java.lang.UnsatisfiedLinkError: dlopen failed: library "libStatus
Debug_arm64-v8a.so" not found
at java.lang.Runtime.loadLibrary0(Runtime.java:1097)
at java.lang.Runtime.loadLibrary0(Runtime.java:1019)
at java.lang.System.loadLibrary(System.java:1765)
at
org.qtproject.qt.android.QtLoader.loadLibraryHelper(QtLoader.java:486)
at
org.qtproject.qt.android.QtLoader.lambda$loadMainLibrary$0$org-qtproject-qt-android-QtLoader(QtLoader.java:535)
at
org.qtproject.qt.android.QtLoader$$ExternalSyntheticLambda1.run(D8$$SyntheticClass:0)
at org.qtproject.qt.android.QtThread.lambda$run$0(QtThread.java:57)
at
org.qtproject.qt.android.QtThread$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
at org.qtproject.qt.android.QtThread$1.run(QtThread.java:25)
at java.lang.Thread.run(Thread.java:1563)
```
- re applies this commit :
https://github.com/status-im/status-app/commit/9381d0d06c2bee8e902be3bcf49e9680fe055b0d
- I also adjust the qml lint job to catch this kind of import failure in
CI :
```
[2026-02-03T07:06:17.215Z] Running: QML Lint (Mobile)
[2026-02-03T07:06:17.215Z] qmllint: /opt/qt/6.9.2/gcc_64/bin/qmllint
[2026-02-03T07:06:17.215Z] Qt modules:
/opt/qt/6.9.2/android_arm64_v8a/qml
[2026-02-03T07:06:17.215Z]
[2026-02-03T07:06:17.215Z] Checking 1200 files...
[2026-02-03T07:06:33.882Z]
[2026-02-03T07:06:33.882Z] ERRORS:
[2026-02-03T07:06:33.882Z]
/home/jenkins/workspace/status-app-android/13/ui/app/AppLayouts/Profile/views/EnsView.qml:4:1:
Failed to import QtQml.StateMachine. Are your import paths set up
properly?
```
Currently the approach fails with:
Error: Homebrew requires formulae to be in a tap, rejecting:
cmake.rb (/tmp/cmake.rb)
Signed-off-by: Jakub Sokołowski <jakub@status.im>
Changes in ordering of PATHs have broken too many things in the past.
This way we also enforce existance of specific version folders which
will fail early instead of continuing and failing in obscure manner.
Signed-off-by: Jakub Sokołowski <jakub@status.im>
* refactor(e2e_appium): locators and app lifecycle management
- wallet locators
- app lifecycle management
- toast message handling (visibility checks and logging).
- saved addresses page
* refactor(e2e_appium): migrate to cloud reporting and enhance test assertions
- Replaced instances of LambdaTest reporting with Cloud reporting
- Assertion messages for clarity
- Updated test methods for toast handling
* chore(e2e_mobile): appium config for BrowserStack and Jenkins
* ci(e2e_mobile): add Jenkinsfile for mobile e2e tests
* ci(e2e_mobile): address review feeback
* ci(e2e_mobile): add E2E testing stage and update BrowserStack credentials
- Introduced a new E2E stage in the Android Jenkinsfile for PR builds.
- Updated BrowserStack credentials id
* ci(e2e_mobile): test result publishing
- Set PLATFORM environment variable for E2E Android tests.
- include package URL in the environment.
- build name to reflect PR number.
* ci(e2e_mobile): fix BrowserStack project name
* ci(e2e_mobile): update build type detection and improve stage names
- Renamed stages for clarity
- Refactored build type detection to use upstream job details.
* ci(e2e_mobile): Apply suggestions from code review for CHANGE_ID
Apply suggestions from code review for CHANGE_ID
Co-Authored-By: Jakub <jakub@status.im>
- points to `fix-ios-signing-with-fastlane` branch of
`status-jenkins-lib` which provides development certs for PR builds and
distribution certs for release builds.
- adds nix flake to provide ruby dependencies for `fastlane`
- adds config for new build identifier for PRs: `app.status.mobile.pr`
- swaps testflight script with fastlane action
- adds job to build iOS in release
- updates status-go to use nim-sds from
https://github.com/logos-messaging/nim-sds/pull/41
To fix windows build issues due to very long paths by
nimbus-build-system
- points status-go to bring in
https://github.com/status-im/status-go/pull/7185
- updates mac,windows host install scripts to include nim
- updates linux dockerfile to install nim
- updates linux docker image tag to use newer image
Adapts the docs and different mentions of the repo from status-desktop to status-app
Also adapts the docs to talk about the Status App and not just Status Dekstop. Adds links to the Mobile build too.
* chore: enforce USE_SYSTEM_NIM=1 when building statusgo-shared-library
* chore: revert previous commit
* chore: add sds folders into STATUSGO_MAKE_PARAMS
* chore: adjust LIBSDS_LIBDIR in Makefile
* chore: add NIM_SDS_SOURCE_DIR in Jenkinsfiles
* ci: ios build NIM_SDS_SOURCE_DIR
* chore: more explicit nim-sds folder set in mobile Makefile
* chore: make sure sds cache is cleaned before pkg-macos in Makefile
This is needed to avoid compilation errors such as:
ld: building for 'macOS', but linking in object file
(/Users/ivan/.cache/nim/libsds_d/@m..@svendor@snimbus-build-system@svendor@sNim@slib@ssystem@sexceptions.nim.c.o)
built for 'iOS-simulator'
* chore: from previous commit properly make use of tab in Makefile
* chore: adjust lib path cp in mobile Makefile
* chore: mobile/Makefile hard code cp command libsds
* chore: for some unkown reason android and ios need different cp command
* chore: tackling previous Igor's comments
* chore: export NIM_SDS_SOURCE_DIR env var from Makefile
* chore: fix default NIM_SDS_SOURCE_DIR and set it ok to STATUSGO_MAKE_PARAMS
* chore: add NIM_SDS_SOURCE_DIR def in Jenkinsfile.tests-nim
* chore: update status-go
* fix; copy nimsds library on windows
* chore: update status-go to latest develop
---------
Co-authored-by: Ivan Folgueira Bande <ivansete@status.im>
Otherwise we just get non-descript stuff like:
jq: parse error: Invalid numeric literal at line 1, column 7
Signed-off-by: Jakub Sokołowski <jakub@status.im>
- update status-jenkins-lib to v1.9.30 which provides iOS provisioning
profile and appstore certs.
- builds signed iOS app and pushes to testflight.
- updates testflight metadata with PR link and commit sha it was built
from
- adds `scripts/testflight-changelog.mjs` script used by CI to update PR
metadata.
- set `ITSAppUsesNonExemptEncryption` to `false`
- simplify the process or deploying the translations by treating the QM
files just like any other resource, and compile/bundle them with the
binary
- remove manual copying of the QM files in Makefile and other scripts
- greatly simplify the LanguageService discovery, as the QM files are
now in a uniform prefix (`:/i18n`) on any platform
- because of the uniform prefix/location, the retranslation now happens
automatically by `QQmlApplicationEngine`, by just setting/getting the
`Qt.uiLanguage` property
Fixes#18914
- and run it as part of the standard `make compile-translations`
subtarget, in order to keep the base Lokalise TS file in sync with the
other TS files
- script ported from Python to go so that we don't have to introduce
another hard build time dependency
- include the re-generated TS files as well
Fixes#18934
- add a `<comment>` to help with Lokalise AI setting up the context
- update the base TS files, reflecting recent master changes
- fixup a wrong `qsTranslate` call; was meant to be a regular `qsTr()`
with a plural form