From c3c96b9f9dc915155696216de5101a1ebde7ec72 Mon Sep 17 00:00:00 2001 From: mpretty-cyro <15862619+mpretty-cyro@users.noreply.github.com> Date: Mon, 3 Nov 2025 00:39:43 +0000 Subject: [PATCH 1/5] [Automated] Update translations from Crowdin --- .../Meta/Translations/Localizable.xcstrings | 204 +----------------- 1 file changed, 2 insertions(+), 202 deletions(-) diff --git a/Session/Meta/Translations/Localizable.xcstrings b/Session/Meta/Translations/Localizable.xcstrings index a2df415fed..28a6b11b68 100644 --- a/Session/Meta/Translations/Localizable.xcstrings +++ b/Session/Meta/Translations/Localizable.xcstrings @@ -84680,7 +84680,7 @@ "en" : { "stringUnit" : { "state" : "translated", - "value" : "Checking your {pro} details. Some information on this page may be unavailable until this check is complete." + "value" : "Checking your {pro} details. Some actions on this page may be unavailable until this check is complete." } } } @@ -228514,46 +228514,6 @@ } } }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele a jejich zprávy" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele a jejich zprávy" - } - }, - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele a jeho zprávy" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele a jejich zprávy" - } - } - } - } - } - } - }, "cy" : { "stringUnit" : { "state" : "translated", @@ -230807,46 +230767,6 @@ } } }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "%#@arg1@" - }, - "substitutions" : { - "arg1" : { - "argNum" : 1, - "formatSpecifier" : "lld", - "variations" : { - "plural" : { - "few" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele" - } - }, - "many" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele" - } - }, - "one" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele" - } - }, - "other" : { - "stringUnit" : { - "state" : "translated", - "value" : "Odstranit uživatele" - } - } - } - } - } - } - }, "cy" : { "stringUnit" : { "state" : "translated", @@ -357298,130 +357218,10 @@ "proCallToActionPinnedConversationsMoreThan" : { "extractionState" : "manual", "localizations" : { - "az" : { - "stringUnit" : { - "state" : "translated", - "value" : "5-dən çoxunu sancmaq istəyirsiniz? {app_pro} ilə söhbətlərinizi təşkil edin və premium özəlliklərin kilidini açın" - } - }, - "ca" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vols més de 5 pins? Organitzes els teus xats i desbloqueges les funcions premium amb {app_pro}" - } - }, - "cs" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chcete více než 5 připnutí? Organizujte své chaty a odemkněte prémiové funkce pomocí Session Pro" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mehr als 5 Anheftungen gewünscht? Organisiere deine Chats und schalte Premium-Funktionen mit {app_pro} frei" - } - }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Want more than 5 pins? Organize your chats and unlock premium features with {app_pro}" - } - }, - "es-419" : { - "stringUnit" : { - "state" : "translated", - "value" : "¿Quieres más de 5 conversaciones fijadas? Organiza tus chats y desbloquea funciones premium con {app_pro}" - } - }, - "es-ES" : { - "stringUnit" : { - "state" : "translated", - "value" : "¿Quieres más de 5 conversaciones fijadas? Organiza tus chats y desbloquea funciones premium con {app_pro}" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vous voulez plus que 5 messages épinglés ? Organisez vos chats et débloquez les fonctionnalités premium avec {app_pro}" - } - }, - "hi" : { - "stringUnit" : { - "state" : "translated", - "value" : "5 से अधिक पिन करना चाहते हैं? अपनी चैट व्यवस्थित करें और {app_pro} के साथ प्रीमियम सुविधाओं का अनलॉक करें" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vuoi più di 5 chat bloccate? Organizza le tue chat e sblocca le funzionalità premium con {app_pro}" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "5件以上ピン留めしたいですか?{app_pro}でチャットを整理して、プレミアム機能を解除しましょう" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wil je meer dan 5 vastgezette gesprekken? Organiseer je chats en ontgrendel premiumfuncties met {app_pro}" - } - }, - "pl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Chcesz przypiąć więcej niż 5 czatów? Zorganizuj konwersacje i odblokuj funkcje premium dzięki {app_pro}" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Quer fixar mais de 5 conversas? Organize os seus chats e desbloqueie funcionalidades premium com {app_pro}" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vrei mai mult de 5 fixări? Organizează-ți conversațiile și deblochează funcționalități premium cu {app_pro}" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нужно более 5 закреплений? С {app_pro} организуйте свои чаты и получите доступ к премиум функциям" - } - }, - "sv-SE" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vill du ha mer än 5 fästisar? Organisera dina chattar och lås upp premiumfunktioner med {app_pro}" - } - }, - "tr" : { - "stringUnit" : { - "state" : "translated", - "value" : "5'ten fazla sabitleme mi istiyorsunuz? Sohbetlerinizi düzenleyin ve {app_pro} ile premium özelliklerin kilidini açın" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Потрібно понад 5 закріплених бесід? Впорядкуйте свої бесіди та розблокуйте преміальні функції з {app_pro}" - } - }, - "zh-CN" : { - "stringUnit" : { - "state" : "translated", - "value" : "想要固定超过 5 个对话?使用 {app_pro} 整理你的聊天并解锁高级功能" - } - }, - "zh-TW" : { - "stringUnit" : { - "state" : "translated", - "value" : "想要釘選超過 5 則對話嗎?使用 {app_pro} 整理您的聊天並解鎖進階功能" + "value" : "Want more than {limit} pins? Organize your chats and unlock premium features with {app_pro}" } } } From e5695f4129cc3bb2442fa0cf3b09b228ac23d58b Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Mon, 3 Nov 2025 13:59:49 +1100 Subject: [PATCH 2/5] Fixed a string which has a new variable --- SessionUIKit/Components/SwiftUI/ProCTAModal.swift | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/SessionUIKit/Components/SwiftUI/ProCTAModal.swift b/SessionUIKit/Components/SwiftUI/ProCTAModal.swift index 6b4ed4802c..80a6c44825 100644 --- a/SessionUIKit/Components/SwiftUI/ProCTAModal.swift +++ b/SessionUIKit/Components/SwiftUI/ProCTAModal.swift @@ -66,13 +66,17 @@ public struct ProCTAModal: View { .put(key: "app_pro", value: Constants.app_pro) .localized() case .morePinnedConvos(let isGrandfathered): - return isGrandfathered ? - "proCallToActionPinnedConversations" - .put(key: "app_pro", value: Constants.app_pro) - .localized() : - "proCallToActionPinnedConversationsMoreThan" + if isGrandfathered { + return "proCallToActionPinnedConversations" .put(key: "app_pro", value: Constants.app_pro) .localized() + } + + return "proCallToActionPinnedConversationsMoreThan" + .put(key: "app_pro", value: Constants.app_pro) + .put(key: "limit", value: 5) // TODO: [PRO] Get from SessionProUIManager + .localized() + case .groupLimit: return "proUserProfileModalCallToAction" .put(key: "app_pro", value: Constants.app_pro) From 6c54a5450c8d6c07ea9a1dcf3810379629274e78 Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Mon, 3 Nov 2025 14:00:06 +1100 Subject: [PATCH 3/5] Testing CI tweaks to reduce flaky builds --- Scripts/build_ci.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Scripts/build_ci.sh b/Scripts/build_ci.sh index 0034642f7b..ab4b29c1a2 100755 --- a/Scripts/build_ci.sh +++ b/Scripts/build_ci.sh @@ -16,7 +16,6 @@ COMMON_ARGS=( -project Session.xcodeproj -scheme Session -derivedDataPath ./build/derivedData - -parallelizeTargets -configuration "App_Store_Release" ) @@ -80,6 +79,9 @@ if [[ "$MODE" == "test" ]]; then exit "$xcodebuild_exit_code" elif [[ "$MODE" == "archive" ]]; then + + # Clean derived data to prevent race conditions + rm -rf ./build/derivedData echo "--- Running Simulator Archive Build (App_Store_Release) ---" From c4e15e6f340b9068fce361cf58507f67fc157f81 Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Mon, 3 Nov 2025 14:42:41 +1100 Subject: [PATCH 4/5] Further CI tweaks --- Scripts/build_libSession_util.sh | 35 ++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/Scripts/build_libSession_util.sh b/Scripts/build_libSession_util.sh index 9d3300a0de..ae6a7bc52b 100755 --- a/Scripts/build_libSession_util.sh +++ b/Scripts/build_libSession_util.sh @@ -24,16 +24,6 @@ if [ "${ACTION}" = "install" ] || [ "${CONFIGURATION}" = "Release" ]; then fi fi -# Robustly removes a directory, first clearing any immutable flags (work around Xcode's indexer file locking) -remove_locked_dir() { - local dir_to_remove="$1" - if [ -d "${dir_to_remove}" ]; then - echo "- Unlocking and removing ${dir_to_remove}" - chflags -R nouchg "${dir_to_remove}" &>/dev/null || true - rm -rf "${dir_to_remove}" - fi -} - sync_headers() { local source_dir="$1" echo "- Syncing headers from ${source_dir}" @@ -53,9 +43,28 @@ sync_headers() { for dest in "${destinations[@]}"; do if [ -n "$dest" ]; then - remove_locked_dir "$dest" - mkdir -p "$dest" - rsync -rtc --delete --exclude='.DS_Store' "${source_dir}/" "$dest/" + local temp_dest="${dest}.tmp-$(uuidgen)" + rm -rf "$temp_dest" + mkdir -p "$temp_dest" + + rsync -rtc --delete --exclude='.DS_Store' "${source_dir}/" "$temp_dest/" + + # Atomically move the old directory out of the way + local old_dest="${dest}.old-$(uuidgen)" + if [ -d "$dest" ]; then + mv "$dest" "$old_dest" + fi + + # Atomically move the new, correct directory into place + mv "$temp_dest" "$dest" + + # Clean up the old directory + if [ -d "$old_dest" ]; then + # Clear any immutable flags (work around Xcode's indexer file locking) + chflags -R nouchg "${dir_to_remove}" &>/dev/null || true + rm -rf "$old_dest" + fi + echo " Synced to: $dest" fi done From 635badb1370cb97b1f1ccfa0c9b7e118335b878e Mon Sep 17 00:00:00 2001 From: Morgan Pretty Date: Mon, 3 Nov 2025 15:11:29 +1100 Subject: [PATCH 5/5] More CI tweaks --- Scripts/build_ci.sh | 4 +--- Scripts/build_libSession_util.sh | 12 ++++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Scripts/build_ci.sh b/Scripts/build_ci.sh index ab4b29c1a2..0034642f7b 100755 --- a/Scripts/build_ci.sh +++ b/Scripts/build_ci.sh @@ -16,6 +16,7 @@ COMMON_ARGS=( -project Session.xcodeproj -scheme Session -derivedDataPath ./build/derivedData + -parallelizeTargets -configuration "App_Store_Release" ) @@ -79,9 +80,6 @@ if [[ "$MODE" == "test" ]]; then exit "$xcodebuild_exit_code" elif [[ "$MODE" == "archive" ]]; then - - # Clean derived data to prevent race conditions - rm -rf ./build/derivedData echo "--- Running Simulator Archive Build (App_Store_Release) ---" diff --git a/Scripts/build_libSession_util.sh b/Scripts/build_libSession_util.sh index ae6a7bc52b..3a8e445a9c 100755 --- a/Scripts/build_libSession_util.sh +++ b/Scripts/build_libSession_util.sh @@ -84,9 +84,17 @@ fi if [ "${COMPILE_LIB_SESSION}" != "YES" ]; then echo "Using pre-packaged SessionUtil" - sync_headers "${PRE_BUILT_FRAMEWORK_DIR}/${FRAMEWORK_DIR}/${TARGET_ARCH_DIR}/Headers/" - # Create the placeholder in the FINAL products directory to satisfy dependency. + if [ "$CI" = "true" ] || [ "$DRONE" = "true" ]; then + # In CI, Xcode's SPM integration is reliable. Skip manual header sync + # to avoid the 'redefinition of module' error. + echo "- CI environment detected, skipping manual header sync to rely on SPM" + else + echo "- Local build detected, syncing headers to assist Xcode indexer" + sync_headers "${PRE_BUILT_FRAMEWORK_DIR}/${FRAMEWORK_DIR}/${TARGET_ARCH_DIR}/Headers/" + fi + + # Create the placeholder in the FINAL products directory to satisfy dependency touch "${BUILT_PRODUCTS_DIR}/libsession-util.a" echo "- Revert to SPM complete."