chore: Update app name to Status and align app package id with the bundle id

App name: Status
App package/bundle: im.status.app
This commit is contained in:
Alex Jbanca
2025-10-16 12:32:51 +03:00
committed by Alex Jbanca
parent 1ba46826fe
commit b2d4eddc77
22 changed files with 45 additions and 45 deletions
+1 -1
View File
@@ -142,7 +142,7 @@ jobs:
echo "VERSION=$VERSION" >> $GITHUB_ENV
echo "Determined version: $VERSION"
SRC_APK="mobile/bin/android/qt6/Status-tablet.apk"
SRC_APK="mobile/bin/android/qt6/Status.apk"
DEST_APK="mobile/bin/android/qt6/Status-android-${{ inputs.architecture }}-${VERSION}.apk"
if [ ! -f "$SRC_APK" ]; then
+2 -2
View File
@@ -104,8 +104,8 @@ jobs:
if: steps.detect_source.outputs.source_type == 'github_artifact'
uses: actions/download-artifact@v4
with:
# Your build workflow uploads "Status-tablet-${{ inputs.architecture }}-${{ github.run_number }}"
pattern: Status-tablet-*
# Your build workflow uploads "Status-${{ inputs.architecture }}-${{ github.run_number }}"
pattern: Status-*
merge-multiple: true
run-id: ${{ steps.detect_source.outputs.artifact_run_id }}
path: ./apk/
+1 -1
View File
@@ -61,7 +61,7 @@ pipeline {
QT_VERSION = "6.9.2"
QT_ANDROID_PATH = "/opt/qt/${env.QT_VERSION}/android_arm64_v8a"
QMAKE = "/opt/qt/${env.QT_VERSION}/android_arm64_v8a/bin/qmake"
STATUS_APK = "${WORKSPACE}/mobile/bin/android/qt6/Status-tablet.apk"
STATUS_APK = "${WORKSPACE}/mobile/bin/android/qt6/Status.apk"
}
stages {
+2 -2
View File
@@ -66,7 +66,7 @@ pipeline {
ARCH = "x86_64"
/* iOS app paths */
STATUS_IOS_APP_ARTIFACT = "pkg/${utils.pkgFilename(ext: 'app.zip', arch: getArch(), version: env.VERSION, type: env.APP_TYPE)}"
STATUS_IOS_APP = "${WORKSPACE}/mobile/bin/ios/qt6/Status-tablet.app"
STATUS_IOS_APP = "${WORKSPACE}/mobile/bin/ios/qt6/Status.app"
}
stages {
@@ -98,7 +98,7 @@ pipeline {
stage('Package iOS App') {
steps {
sh 'mkdir -p pkg'
sh "cd mobile/bin/ios/qt6 && zip -r ${env.WORKSPACE}/${env.STATUS_IOS_APP_ARTIFACT} Status-tablet.app"
sh "cd mobile/bin/ios/qt6 && zip -r ${env.WORKSPACE}/${env.STATUS_IOS_APP_ARTIFACT} Status.app"
sh "ls -la ${env.STATUS_IOS_APP_ARTIFACT}"
}
}
+1 -1
View File
@@ -28,7 +28,7 @@ ModuleNotFoundError: No module named 'distutils'
Simulator device failed to install the application.
The application's Info.plist does not contain a valid CFBundleVersion.
```
**Fix**: Remove `bin/Status-tablet.app` and run `make run`
**Fix**: Remove `bin/Status.app` and run `make run`
5. **FBSOpenApplicationServiceErrorDomain**
```
+3 -3
View File
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
<manifest package="im.status.tablet" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
<manifest package="im.status.app" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.0" android:versionCode="1" android:installLocation="auto">
<!-- non-dangerous permissions -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE"/>
@@ -34,7 +34,7 @@
android:requestLegacyExternalStorage="true"
android:allowBackup="true"
android:fullBackupOnly="false">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="Status-tablet" android:launchMode="singleTop">
<activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="Status" android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
@@ -44,7 +44,7 @@
<!-- meta-data android:name="android.app.arguments" android:value="arg1 arg2 arg3"/ -->
<!-- Application arguments -->
<meta-data android:name="android.app.lib_name" android:value="Status-tablet"/>
<meta-data android:name="android.app.lib_name" android:value="Status"/>
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
<meta-data android:name="android.app.repository" android:value="default"/>
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
+1 -1
View File
@@ -1,3 +1,3 @@
<resources>
<string name="app_name">Status-tablet</string>
<string name="app_name">Status</string>
</resources>
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="im.status.tablet"
package="im.status.app"
android:installLocation="auto"
android:versionCode="1"
android:versionName="1.0">
+1 -1
View File
@@ -1,3 +1,3 @@
<resources>
<string name="app_name">Status-tablet</string>
<string name="app_name">Status</string>
</resources>
@@ -1,4 +1,4 @@
package im.status.tablet;
package im.status.app;
import android.app.Activity;
import android.content.Context;
+1 -1
View File
@@ -396,4 +396,4 @@ RUN apt update -yq && apt install -yq software-properties-common \
ENV PATH="/root/go/bin:${PATH}"
LABEL description="Build image for the Status-tablet Android APK."
LABEL description="Build image for the Status Android APK."
+1 -1
View File
@@ -35,7 +35,7 @@ OPENSSL?=$(ROOT_DIR)/vendors/openssl
QRCODEGEN?=$(STATUS_DESKTOP)/vendor/QR-Code-generator/c
# compile macros
TARGET_PREFIX := Status-tablet
TARGET_PREFIX := Status
TARGET_NAME := $(TARGET_PREFIX).$(shell if [ $(OS) = "ios" ]; then echo "app"; else echo "apk"; fi )
+2 -2
View File
@@ -1,8 +1,8 @@
#!/usr/bin/env bash
CWD=$(realpath `dirname $0`)
APP=${APP:="$CWD/../bin/$OS/Status-tablet.apk"}
APP_PACKAGE=${APP_PACKAGE:="im.status.tablet"}
APP=${APP:="$CWD/../bin/$OS/Status.apk"}
APP_PACKAGE=${APP_PACKAGE:="im.status.app"}
ARCH=${ARCH:="arm64-v8a"}
ANDROID_SDK_ROOT=${ANDROID_SDK_ROOT:=""}
EMULATOR=${EMULATOR:="$ANDROID_SDK_ROOT/emulator/emulator"}
+7 -7
View File
@@ -28,29 +28,29 @@ if [[ "${OS}" == "android" ]]; then
QMAKE_CONFIG="CONFIG+=device CONFIG+=release"
QMAKE_BIN="${QMAKE:-qmake}"
"$QMAKE_BIN" "$CWD/../wrapperApp/Status-tablet.pro" "$QMAKE_CONFIG" -spec android-clang ANDROID_ABIS="$ANDROID_ABI" APP_VARIANT="${APP_VARIANT}" -after
"$QMAKE_BIN" "$CWD/../wrapperApp/Status.pro" "$QMAKE_CONFIG" -spec android-clang ANDROID_ABIS="$ANDROID_ABI" APP_VARIANT="${APP_VARIANT}" -after
# Build the app
make -j"$(nproc)" apk_install_target
# call androiddeployqt
androiddeployqt --input "$BUILD_DIR/android-Status-tablet-deployment-settings.json" --output "$BUILD_DIR/android-build" --apk "$BUILD_DIR/android-build/Status-tablet.apk" --android-platform "$ANDROID_PLATFORM"
androiddeployqt --input "$BUILD_DIR/android-Status-deployment-settings.json" --output "$BUILD_DIR/android-build" --apk "$BUILD_DIR/android-build/Status.apk" --android-platform "$ANDROID_PLATFORM"
ANDROID_OUTPUT_DIR="bin/android/qt6"
BIN_DIR_ANDROID=${BIN_DIR:-"$CWD/$ANDROID_OUTPUT_DIR"}
mkdir -p "$BIN_DIR_ANDROID"
cp ./android-build/Status-tablet.apk "$BIN_DIR_ANDROID/Status-tablet.apk"
cp ./android-build/Status.apk "$BIN_DIR_ANDROID/Status.apk"
echo "Build succeeded. APK is available at $BIN_DIR_ANDROID/Status-tablet.apk"
echo "Build succeeded. APK is available at $BIN_DIR_ANDROID/Status.apk"
else
QMAKE_BIN="${QMAKE:-qmake}"
"$QMAKE_BIN" "$CWD/../wrapperApp/Status-tablet.pro" -spec macx-ios-clang CONFIG+=release CONFIG+="$SDK" CONFIG+=device -after
"$QMAKE_BIN" "$CWD/../wrapperApp/Status.pro" -spec macx-ios-clang CONFIG+=release CONFIG+="$SDK" CONFIG+=device -after
# Compile resources
xcodebuild -configuration Release -target "Qt Preprocess" -sdk "$SDK" -arch "$ARCH" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcbeautify
# Compile the app
xcodebuild -configuration Release -target Status-tablet install -sdk "$SDK" -arch "$ARCH" DSTROOT="$BIN_DIR" INSTALL_PATH="/" TARGET_BUILD_DIR="$BIN_DIR" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcbeautify
xcodebuild -configuration Release -target Status install -sdk "$SDK" -arch "$ARCH" DSTROOT="$BIN_DIR" INSTALL_PATH="/" TARGET_BUILD_DIR="$BIN_DIR" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO | xcbeautify
if [[ -e "$BIN_DIR/Status-tablet.app/Info.plist" ]]; then
if [[ -e "$BIN_DIR/Status.app/Info.plist" ]]; then
echo "Build succeeded"
else
echo "Build failed"
+1 -1
View File
@@ -7,7 +7,7 @@
set -euo pipefail
CWD=$(realpath "$(dirname "$0")")
APP=${APP:-"$CWD/../../bin/Applications/Status-tablet.app"} # Path to the .app bundle
APP=${APP:-"$CWD/../../bin/Applications/Status.app"} # Path to the .app bundle
APPID=${APPID:-$(plutil -extract CFBundleIdentifier raw "$APP/Info.plist")} # Bundle identifier of the app
SIMULATOR_UDID=${SIMULATOR_UDID:-""} # Specify to skip interactive selection
IPHONE_SDK=${IPHONE_SDK:-iphonesimulator} # Default to simulator if not set
@@ -36,7 +36,7 @@ android {
$$PWD/../lib/$$LIB_PREFIX/libStatusQ$$(LIB_SUFFIX)$$(LIB_EXT)
OTHER_FILES += \
android/src/im/status/tablet/SecureAndroidAuthentication.java
android/src/im/status/app/SecureAndroidAuthentication.java
}
ios {
+6 -6
View File
@@ -18,7 +18,7 @@ Repository administrators need to set:
### 3. Run Tests via GitHub Actions
1. Build APK using `android-build.yml` workflow (architecture: `x86_64`)
2. Run tests using `e2e-appium-android.yml` workflow
3. Use artifact name: `Status-tablet-x86_64`
3. Use artifact name: `Status-x86_64`
## Test Selection
@@ -48,7 +48,7 @@ pytest tests/test_onboarding_dependent_features.py
python scripts/local_setup.py
# Run tests with local APK
export LOCAL_APP_PATH="/path/to/Status-tablet.apk"
export LOCAL_APP_PATH="/path/to/Status.apk"
pytest -m onboarding --env=local -v
```
@@ -57,7 +57,7 @@ pytest -m onboarding --env=local -v
### Build APK Workflow
- **File**: `android-build.yml`
- **Architecture**: `x86_64` (required for LambdaTest)
- **Output**: `Status-tablet-x86_64` artifact
- **Output**: `Status-x86_64` artifact
### E2E Testing Workflow
- **File**: `e2e-appium-android.yml`
@@ -68,7 +68,7 @@ pytest -m onboarding --env=local -v
## Workflow Input Options
### APK Sources
- **GitHub artifacts**: `Status-tablet-x86_64` (recommended)
- **GitHub artifacts**: `Status-x86_64` (recommended)
- **Direct URLs**: `https://example.com/app.apk`
- **LambdaTest IDs**: `lt://APP123456789`
@@ -113,7 +113,7 @@ LT_ACCESS_KEY=your_access_key
### For Local Testing
```bash
export LOCAL_APP_PATH="/path/to/Status-tablet.apk"
export LOCAL_APP_PATH="/path/to/Status.apk"
export CURRENT_TEST_ENVIRONMENT="local"
```
@@ -125,7 +125,7 @@ export CURRENT_TEST_ENVIRONMENT="local"
**Test Execution Issues:**
- Verify LambdaTest credentials in repository secrets
- Check APK artifact name matches exactly: `Status-tablet-x86_64`
- Check APK artifact name matches exactly: `Status-x86_64`
- Review workflow logs for detailed error messages
**Local Testing Issues:**
@@ -47,7 +47,7 @@ capabilities:
automationName: "UiAutomator2"
newCommandTimeout: 300
noReset: false
appPackage: "im.status.tablet"
appPackage: "im.status.app"
appActivity: "org.qtproject.qt.android.bindings.QtActivity"
unicodeKeyboard: true
resetKeyboard: true
+2 -2
View File
@@ -358,12 +358,12 @@ class BasePage:
self.logger.debug(f"Coordinate tap failed: {e}")
return False
def restart_app(self, app_package: str = "im.status.tablet") -> bool:
def restart_app(self, app_package: str = "im.status.app") -> bool:
"""Restart the app within the current session."""
return self.app_lifecycle.restart_app(app_package)
def restart_app_with_data_cleared(
self, app_package: str = "im.status.tablet"
self, app_package: str = "im.status.app"
) -> bool:
"""Restart the app with all app data cleared (fresh app state)."""
return self.app_lifecycle.restart_app_with_data_cleared(app_package)
@@ -68,15 +68,15 @@ class TestOnboardingImportSeed(BaseTest):
base_page = base
restarted = False
try:
restarted = base_page.restart_app("im.status.tablet")
restarted = base_page.restart_app("im.status.app")
except Exception:
restarted = False
if not restarted:
try:
self.driver.terminate_app("im.status.tablet")
self.driver.terminate_app("im.status.app")
self.driver.start_activity(
"im.status.tablet", "org.qtproject.qt.android.bindings.QtActivity"
"im.status.app", "org.qtproject.qt.android.bindings.QtActivity"
)
except Exception:
pass
@@ -17,7 +17,7 @@ class AppLifecycleManager:
self.driver = driver
self.logger = get_logger("app_lifecycle")
def restart_app(self, app_package: str = "im.status.tablet") -> bool:
def restart_app(self, app_package: str = "im.status.app") -> bool:
"""
Restart the app within the current session.
@@ -44,7 +44,7 @@ class AppLifecycleManager:
return False
def restart_app_with_data_cleared(
self, app_package: str = "im.status.tablet"
self, app_package: str = "im.status.app"
) -> bool:
"""
Restart the app with all app data cleared (fresh app state).
@@ -104,7 +104,7 @@ class AppLifecycleManager:
self.logger.error(f"❌ App restart with data cleared failed: {e}")
return False
def terminate_app(self, app_package: str = "im.status.tablet") -> bool:
def terminate_app(self, app_package: str = "im.status.app") -> bool:
"""Terminate the specified app."""
try:
self.driver.terminate_app(app_package)
@@ -114,7 +114,7 @@ class AppLifecycleManager:
self.logger.error(f"❌ Failed to terminate app: {e}")
return False
def activate_app(self, app_package: str = "im.status.tablet") -> bool:
def activate_app(self, app_package: str = "im.status.app") -> bool:
"""Activate the specified app."""
try:
self.driver.activate_app(app_package)
+2 -2
View File
@@ -18,7 +18,7 @@ static void jni_nativeCredentialError(JNIEnv*, jobject, jint, jstring);
static Keychain* s_keychain = nullptr;
static constexpr const char* kJavaClass =
"im/status/tablet/SecureAndroidAuthentication";
"im/status/app/SecureAndroidAuthentication";
// Get the singleton Java object, creating it if needed.
// Never cache a raw jobject; pass the Context only for this call.
@@ -34,7 +34,7 @@ static QJniObject getJavaSingleton()
QJniObject inst = QJniObject::callStaticObjectMethod(
kJavaClass,
"getInstance",
"(Landroid/content/Context;)Lim/status/tablet/SecureAndroidAuthentication;",
"(Landroid/content/Context;)Lim/status/app/SecureAndroidAuthentication;",
ctxObj.object<jobject>() // pass a fresh Context for this call only
);