mirror of
https://github.com/status-im/status-app.git
synced 2026-08-27 07:01:14 +00:00
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:
@@ -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
|
||||
|
||||
@@ -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/
|
||||
|
||||
@@ -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
@@ -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}"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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**
|
||||
```
|
||||
|
||||
@@ -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,3 +1,3 @@
|
||||
<resources>
|
||||
<string name="app_name">Status-tablet</string>
|
||||
<string name="app_name">Status</string>
|
||||
</resources>
|
||||
|
||||
@@ -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,3 +1,3 @@
|
||||
<resources>
|
||||
<string name="app_name">Status-tablet</string>
|
||||
<string name="app_name">Status</string>
|
||||
</resources>
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package im.status.tablet;
|
||||
package im.status.app;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
@@ -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."
|
||||
|
||||
@@ -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 )
|
||||
|
||||
|
||||
@@ -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"}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 {
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user