Compare commits

...

11 Commits

Author SHA1 Message Date
Leendert de Borst
472d957f3f Update changelogs for new build number 2025-12-31 12:13:27 +01:00
Leendert de Borst
44951e79ec Create release-checklist.md 2025-12-31 11:48:49 +01:00
Leendert de Borst
b2e28dced6 New Crowdin updates (#1443)
* New translations strings.xml (French)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Spanish)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Catalan)
Update translations from Crowdin [ci skip]

* New translations strings.xml (German)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Finnish)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Hebrew)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Italian)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Dutch)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Polish)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Russian)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Swedish)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Turkish)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Ukrainian)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Chinese Simplified)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Portuguese, Brazilian)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Italian)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Finnish)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Spanish)
Update translations from Crowdin [ci skip]

* New translations strings.xml (Dutch)
Update translations from Crowdin [ci skip]
2025-12-31 11:13:58 +01:00
dependabot[bot]
07a7dc7de3 Bump qs in /apps/mobile-app in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the /apps/mobile-app directory: [qs](https://github.com/ljharb/qs).


Updates `qs` from 6.13.0 to 6.14.1
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.13.0...v6.14.1)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-31 10:13:08 +00:00
Leendert de Borst
6fdef88c4f Adjust exportable flags for passkey authentication Android activities 2025-12-31 11:02:12 +01:00
dependabot[bot]
e6087db660 Bump uri in /docs in the bundler group across 1 directory
Bumps the bundler group with 1 update in the /docs directory: [uri](https://github.com/ruby/uri).


Updates `uri` from 1.0.3 to 1.0.4
- [Release notes](https://github.com/ruby/uri/releases)
- [Commits](https://github.com/ruby/uri/compare/v1.0.3...v1.0.4)

---
updated-dependencies:
- dependency-name: uri
  dependency-version: 1.0.4
  dependency-type: indirect
  dependency-group: bundler
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-31 09:57:10 +00:00
Leendert de Borst
93fb1960d3 Update project.pbxproj objectVersion 2025-12-30 21:22:12 +01:00
Leendert de Borst
425b4d5152 Create print-latest-changelogs.sh 2025-12-30 20:48:25 +01:00
Leendert de Borst
c8cf64cbbc Update release.yml 2025-12-30 20:19:11 +01:00
Leendert de Borst
75df6900a3 Create git-versioning-strategy.md 2025-12-30 20:04:26 +01:00
Leendert de Borst
413dc5fd0a Add 0.25.3 changelogs 2025-12-30 20:04:25 +01:00
29 changed files with 481 additions and 52 deletions

View File

@@ -27,7 +27,33 @@ on:
type: boolean
jobs:
# Guard job to prevent releases from main branch
valid-release:
if: github.event_name == 'release'
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check tag target
run: |
BRANCHES=$(git branch -r --contains $GITHUB_SHA)
echo "Tag is contained in:"
echo "$BRANCHES"
if ! echo "$BRANCHES" | grep -q "origin/release/"; then
echo "❌ Releases must come from a release/* branch, please recreate the release from a release branch"
exit 1
fi
echo "✅ Tag is on a release branch"
upload-install-script:
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success')
runs-on: ubuntu-latest
permissions:
contents: write
@@ -43,7 +69,8 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
build-chrome-extension:
if: github.event_name == 'release' || inputs.build_browser_extensions
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_browser_extensions)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
@@ -58,7 +85,8 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-firefox-extension:
if: github.event_name == 'release' || inputs.build_browser_extensions
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_browser_extensions)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
@@ -73,7 +101,8 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-edge-extension:
if: github.event_name == 'release' || inputs.build_browser_extensions
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_browser_extensions)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
@@ -88,7 +117,8 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build-android-release:
if: github.event_name == 'release' || inputs.build_mobile_apps
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_mobile_apps)
runs-on: ubuntu-latest
steps:
- name: Checkout repository
@@ -107,7 +137,8 @@ jobs:
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
build-and-push-docker-multi-container:
if: github.event_name == 'release' || inputs.build_multi_container
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_multi_container)
runs-on: ubuntu-latest
permissions:
contents: read
@@ -372,7 +403,8 @@ jobs:
annotations: ${{ steps.installcli-meta.outputs.annotations }}
build-and-push-docker-all-in-one:
if: github.event_name == 'release' || inputs.build_all_in_one
needs: [valid-release]
if: always() && (github.event_name != 'release' || needs.valid-release.result == 'success') && (github.event_name == 'release' || inputs.build_all_in_one)
runs-on: ubuntu-latest
permissions:
contents: read

View File

@@ -40,13 +40,13 @@
<!-- Passkey Authentication Activity -->
<activity
android:name=".credentialprovider.PasskeyAuthenticationActivity"
android:exported="true"
android:exported="false"
android:theme="@style/PasskeyRegistrationTheme" />
<!-- Passkey Registration Activity -->
<activity
android:name=".credentialprovider.PasskeyRegistrationActivity"
android:exported="true"
android:exported="false"
android:theme="@style/PasskeyRegistrationTheme"
android:windowSoftInputMode="adjustResize"
android:fitsSystemWindows="true" />

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">This will replace the existing passkey with a new one. Please be aware that your old passkey will be overwritten and no longer accessible. If you wish to create a separate passkey instead, go back to the previous screen.</string>
<string name="passkey_replacing">Replacing passkey…</string>
<string name="passkey_checking_connection">Checking connection…</string>
<string name="passkey_retrieving">Retrieving passkey…</string>
<string name="passkey_verifying">Verifying…</string>
<string name="passkey_authenticating">Authenticating…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Connection Error</string>
<string name="connection_error_message">No connection to the server can be made. Please check your internet connection and try creating the passkey again.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">Dies wird den bestehenden Passkey durch einen neuen ersetzen. Bitte beachte, dass Dein alter Passkey überschrieben wird und nicht mehr zugänglich ist. Wenn Du stattdessen einen separaten Passkey erstellen möchtest, gehe zurück zum vorherigen Schritt.</string>
<string name="passkey_replacing">Passkey ersetzen…</string>
<string name="passkey_checking_connection">Verbindung wird überprüft…</string>
<string name="passkey_retrieving">Retrieving passkey…</string>
<string name="passkey_verifying">Verifying…</string>
<string name="passkey_authenticating">Authenticating…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Verbindungsfehler</string>
<string name="connection_error_message">Es kann keine Verbindung zum Server hergestellt werden. Bitte überprüfe Deine Internetverbindung und versuche das Erstellen des Passkeys erneut.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">Esto reemplazará la llave de acceso existente con una nueva. Tenga en cuenta que su llave de acceso antigua será sobrescrita y ya no será accesible. Si desea crear una llave de acceso separada en su lugar, vuelva a la pantalla anterior.</string>
<string name="passkey_replacing">Reemplazando llave de acceso…</string>
<string name="passkey_checking_connection">Comprobando la conexión…</string>
<string name="passkey_retrieving">Recuperando llave…</string>
<string name="passkey_verifying">Verificando…</string>
<string name="passkey_authenticating">Autenticando…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Error de conexión</string>
<string name="connection_error_message">No se puede establecer conexión con el servidor. Por favor, compruebe su conexión a Internet e intente crear la llave de acceso de nuevo.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">Tämä korvaa olemassa olevan todennusavaimen uudella todennusavaimella. Ole hyvä ja ota huomioon, että vanha todennusavaimesi on korvattu eikä enää käytettävissä. Jos haluat luoda erillisen todennusavaimen sen sijaan, mene takaisin edelliseen ruutuun.</string>
<string name="passkey_replacing">Korvataan todennusavainta...</string>
<string name="passkey_checking_connection">Tarkistetaan yhteyttä</string>
<string name="passkey_retrieving">Noudetaan todennusavainta...</string>
<string name="passkey_verifying">Tarkistetaan…</string>
<string name="passkey_authenticating">Todennetaan…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Yhteysvirhe</string>
<string name="connection_error_message">Yhteyttä palvelimeen ei voida luoda. Tarkista internet-yhteytesi ja yritä luoda todennusavain uudelleen.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">This will replace the existing passkey with a new one. Please be aware that your old passkey will be overwritten and no longer accessible. If you wish to create a separate passkey instead, go back to the previous screen.</string>
<string name="passkey_replacing">Replacing passkey…</string>
<string name="passkey_checking_connection">Checking connection…</string>
<string name="passkey_retrieving">Retrieving passkey…</string>
<string name="passkey_verifying">Verifying…</string>
<string name="passkey_authenticating">Authenticating…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Connection Error</string>
<string name="connection_error_message">No connection to the server can be made. Please check your internet connection and try creating the passkey again.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">This will replace the existing passkey with a new one. Please be aware that your old passkey will be overwritten and no longer accessible. If you wish to create a separate passkey instead, go back to the previous screen.</string>
<string name="passkey_replacing">Replacing passkey…</string>
<string name="passkey_checking_connection">החיבור נבדק…</string>
<string name="passkey_retrieving">Retrieving passkey…</string>
<string name="passkey_verifying">Verifying…</string>
<string name="passkey_authenticating">Authenticating…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">שגיאת חיבור</string>
<string name="connection_error_message">No connection to the server can be made. Please check your internet connection and try creating the passkey again.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">Questo sostituirà la passkey esistente con una nuova. Si prega di notare che la vecchia passkey sarà sovrascritta e non sarà più accessibile. Se si desidera invece creare una passkey separata, tornare alla schermata precedente.</string>
<string name="passkey_replacing">Sostituzione passkey…</string>
<string name="passkey_checking_connection">Controllo connessione…</string>
<string name="passkey_retrieving">Recupero passkey…</string>
<string name="passkey_verifying">Verifica…</string>
<string name="passkey_authenticating">Autenticazione…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Errore Di Connessione</string>
<string name="connection_error_message">Non è possibile effettuare alcuna connessione al server. Controlla la tua connessione internet e prova a creare nuovamente la passkey.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">Dit zal de bestaande passkey vervangen door een nieuwe. Houd er rekening mee dat je oude passkey wordt overschreven en niet langer toegankelijk is. Als je in plaats hiervan een aparte passkey wilt maken, ga dan terug naar het vorige scherm.</string>
<string name="passkey_replacing">Passkey vervangen…</string>
<string name="passkey_checking_connection">Verbinding controleren…</string>
<string name="passkey_retrieving">Passkey ophalen…</string>
<string name="passkey_verifying">Verifiëren…</string>
<string name="passkey_authenticating">Authenticeren…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Verbindingsfout</string>
<string name="connection_error_message">Er kan geen verbinding met de server worden gemaakt. Controleer je internetverbinding en probeer het opnieuw.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">Spowoduje to zastąpienie dotychczasowego klucza dostępu nowym. Należy pamiętać, że stare klucz zostanie nadpisany i nie będzie już dostępny. Jeśli chcesz utworzyć nowy klucz dostępu, wróć do poprzedniego ekranu.</string>
<string name="passkey_replacing">Zastępowanie klucza dostępu…</string>
<string name="passkey_checking_connection">Sprawdzanie połączenia…</string>
<string name="passkey_retrieving">Retrieving passkey…</string>
<string name="passkey_verifying">Verifying…</string>
<string name="passkey_authenticating">Authenticating…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Błąd połączenia</string>
<string name="connection_error_message">Nie można nawiązać połączenia z serwerem. Sprawdź połączenie internetowe i spróbuj ponownie utworzyć klucz dostępu.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">Isto irá substituir a passkey existente com uma nova. Por favor, saiba que sua passkey anterior será sobrescrita e não será mais acessível. Se você deseja criar uma passkey separadamente, volte à tela anterior.</string>
<string name="passkey_replacing">Substituindo passkey…</string>
<string name="passkey_checking_connection">Verificando conexão…</string>
<string name="passkey_retrieving">Retrieving passkey…</string>
<string name="passkey_verifying">Verifying…</string>
<string name="passkey_authenticating">Authenticating…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Erro de Conexão</string>
<string name="connection_error_message">A conexão com o servidor não foi feita. Por favor, confira sua conexão com a internet e tente criar a passkey novamente.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">Существующий ключ доступа будет заменен на новый. Обратите внимание, что старый ключ будет перезаписан и станет недоступен. Если вы хотите создать отдельный ключ доступа, вернитесь на предыдущий экран.</string>
<string name="passkey_replacing">Замена ключа доступа…</string>
<string name="passkey_checking_connection">Проверка соединения…</string>
<string name="passkey_retrieving">Retrieving passkey…</string>
<string name="passkey_verifying">Verifying…</string>
<string name="passkey_authenticating">Authenticating…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Ошибка подключения</string>
<string name="connection_error_message">Не удалось подключиться к серверу. Проверьте интернет-соединение и попробуйте создать ключ доступа снова.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">This will replace the existing passkey with a new one. Please be aware that your old passkey will be overwritten and no longer accessible. If you wish to create a separate passkey instead, go back to the previous screen.</string>
<string name="passkey_replacing">Replacing passkey…</string>
<string name="passkey_checking_connection">Checking connection…</string>
<string name="passkey_retrieving">Retrieving passkey…</string>
<string name="passkey_verifying">Verifying…</string>
<string name="passkey_authenticating">Authenticating…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Connection Error</string>
<string name="connection_error_message">No connection to the server can be made. Please check your internet connection and try creating the passkey again.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">This will replace the existing passkey with a new one. Please be aware that your old passkey will be overwritten and no longer accessible. If you wish to create a separate passkey instead, go back to the previous screen.</string>
<string name="passkey_replacing">Replacing passkey…</string>
<string name="passkey_checking_connection">Checking connection…</string>
<string name="passkey_retrieving">Retrieving passkey…</string>
<string name="passkey_verifying">Verifying…</string>
<string name="passkey_authenticating">Authenticating…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Connection Error</string>
<string name="connection_error_message">No connection to the server can be made. Please check your internet connection and try creating the passkey again.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">This will replace the existing passkey with a new one. Please be aware that your old passkey will be overwritten and no longer accessible. If you wish to create a separate passkey instead, go back to the previous screen.</string>
<string name="passkey_replacing">Replacing passkey…</string>
<string name="passkey_checking_connection">Checking connection…</string>
<string name="passkey_retrieving">Retrieving passkey…</string>
<string name="passkey_verifying">Verifying…</string>
<string name="passkey_authenticating">Authenticating…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">Connection Error</string>
<string name="connection_error_message">No connection to the server can be made. Please check your internet connection and try creating the passkey again.</string>

View File

@@ -43,6 +43,9 @@
<string name="passkey_replace_explanation">This will replace the existing passkey with a new one. Please be aware that your old passkey will be overwritten and no longer accessible. If you wish to create a separate passkey instead, go back to the previous screen.</string>
<string name="passkey_replacing">正在替换通行密钥…</string>
<string name="passkey_checking_connection">检查连接中…</string>
<string name="passkey_retrieving">Retrieving passkey…</string>
<string name="passkey_verifying">Verifying…</string>
<string name="passkey_authenticating">Authenticating…</string>
<!-- Vault sync error messages -->
<string name="connection_error_title">连接错误</string>
<string name="connection_error_message">No connection to the server can be made. Please check your internet connection and try creating the passkey again.</string>

View File

@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 70;
objectVersion = 60;
objects = {
/* Begin PBXBuildFile section */
@@ -212,7 +212,7 @@
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
CEE9098F2DA548C7008D568F /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
CEE9098F2DA548C7008D568F /* Exceptions for "Autofill" folder in "Autofill" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
@@ -222,13 +222,84 @@
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
CE59C7602E4F47FD0024A246 /* VaultUITests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = VaultUITests; sourceTree = "<group>"; };
CE77825E2EA1822400A75E6F /* VaultUtils */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = VaultUtils; sourceTree = "<group>"; };
CEE480882DBE86DC00F4A367 /* VaultStoreKit */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = VaultStoreKit; sourceTree = "<group>"; };
CEE480972DBE86DD00F4A367 /* VaultStoreKitTests */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = VaultStoreKitTests; sourceTree = "<group>"; };
CEE4816B2DBE8AC800F4A367 /* VaultUI */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = VaultUI; sourceTree = "<group>"; };
CEE482AB2DBE8EFE00F4A367 /* VaultModels */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = VaultModels; sourceTree = "<group>"; };
CEE909812DA548C7008D568F /* Autofill */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (CEE9098F2DA548C7008D568F /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Autofill; sourceTree = "<group>"; };
CE59C7602E4F47FD0024A246 /* VaultUITests */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = VaultUITests;
sourceTree = "<group>";
};
CE77825E2EA1822400A75E6F /* VaultUtils */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = VaultUtils;
sourceTree = "<group>";
};
CEE480882DBE86DC00F4A367 /* VaultStoreKit */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = VaultStoreKit;
sourceTree = "<group>";
};
CEE480972DBE86DD00F4A367 /* VaultStoreKitTests */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = VaultStoreKitTests;
sourceTree = "<group>";
};
CEE4816B2DBE8AC800F4A367 /* VaultUI */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = VaultUI;
sourceTree = "<group>";
};
CEE482AB2DBE8EFE00F4A367 /* VaultModels */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
);
explicitFileTypes = {
};
explicitFolders = (
);
path = VaultModels;
sourceTree = "<group>";
};
CEE909812DA548C7008D568F /* Autofill */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
CEE9098F2DA548C7008D568F /* Exceptions for "Autofill" folder in "Autofill" target */,
);
explicitFileTypes = {
};
explicitFolders = (
);
path = Autofill;
sourceTree = "<group>";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
@@ -1349,7 +1420,10 @@
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "$(inherited) ";
OTHER_LDFLAGS = (
"$(inherited)",
" ",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
@@ -1403,7 +1477,10 @@
);
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
MTL_ENABLE_DEBUG_INFO = NO;
OTHER_LDFLAGS = "$(inherited) ";
OTHER_LDFLAGS = (
"$(inherited)",
" ",
);
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
SDKROOT = iphoneos;
USE_HERMES = true;

View File

@@ -333,9 +333,9 @@ PODS:
- FBLazyVector (0.79.6)
- fmt (11.0.2)
- glog (0.3.5)
- hermes-engine (0.79.5):
- hermes-engine/Pre-built (= 0.79.5)
- hermes-engine/Pre-built (0.79.5)
- hermes-engine (0.79.6):
- hermes-engine/Pre-built (= 0.79.6)
- hermes-engine/Pre-built (0.79.6)
- Macaw (0.9.10):
- SWXMLHash
- OpenSSL-Universal (3.3.3001)
@@ -2442,7 +2442,7 @@ PODS:
- SQLite.swift (0.14.1):
- SQLite.swift/standard (= 0.14.1)
- SQLite.swift/standard (0.14.1)
- SwiftLint (0.59.1)
- SwiftLint (0.62.2)
- SWXMLHash (7.0.2)
- Yoga (0.0.0)
@@ -2795,8 +2795,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
boost: 1dca942403ed9342f98334bf4c3621f011aa7946
DoubleConversion: f16ae600a246532c4020132d54af21d0ddb2a385
boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90
DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb
EXConstants: 98bcf0f22b820f9b28f9fee55ff2daededadd2f8
EXJSONUtils: 1d3e4590438c3ee593684186007028a14b3686cd
EXManifests: 691a779b04e4f2c96da46fb9bef4f86174fefcb5
@@ -2826,9 +2826,9 @@ SPEC CHECKSUMS:
EXUpdatesInterface: 7ff005b7af94ee63fa452ea7bb95d7a8ff40277a
fast_float: 06eeec4fe712a76acc9376682e4808b05ce978b6
FBLazyVector: 07309209b7b914451b8f822544a18e2a0a85afff
fmt: 01b82d4ca6470831d1cc0852a1af644be019e8f6
glog: 08b301085f15bcbb6ff8632a8ebaf239aae04e6a
hermes-engine: f03b0e06d3882d71e67e45b073bb827da1a21aae
fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd
glog: 5683914934d5b6e4240e497e0f4a3b42d1854183
hermes-engine: 44bb6fe76a6eb400d3a992e2d0b21946ae999fa9
Macaw: 7af8ea57aa2cab35b4a52a45e6f85eea753ea9ae
OpenSSL-Universal: 6082b0bf950e5636fe0d78def171184e2b3899c2
RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82
@@ -2908,7 +2908,7 @@ SPEC CHECKSUMS:
SignalArgon2: 1c24183835ca861e6af06631c18b1671cdf35571
SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748
SQLite.swift: 2992550ebf3c5b268bf4352603e3df87d2a4ed72
SwiftLint: 3d48e2fb2a3468fdaccf049e5e755df22fb40c2c
SwiftLint: f84fc7d844e9cde0dc4f5013af608a269e317aba
SWXMLHash: dd733a457e9c4fe93b1538654057aefae4acb382
Yoga: dc7c21200195acacb62fa920c588e7c2106de45e

View File

@@ -6416,24 +6416,24 @@
}
},
"node_modules/body-parser": {
"version": "1.20.3",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
"integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
"version": "1.20.4",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz",
"integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"bytes": "~3.1.2",
"content-type": "~1.0.5",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.13.0",
"raw-body": "2.5.2",
"destroy": "~1.2.0",
"http-errors": "~2.0.1",
"iconv-lite": "~0.4.24",
"on-finished": "~2.4.1",
"qs": "~6.14.0",
"raw-body": "~2.5.3",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
"unpipe": "~1.0.0"
},
"engines": {
"node": ">= 0.8",
@@ -6450,6 +6450,27 @@
"ms": "2.0.0"
}
},
"node_modules/body-parser/node_modules/http-errors": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
"integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"depd": "~2.0.0",
"inherits": "~2.0.4",
"setprototypeof": "~1.2.0",
"statuses": "~2.0.2",
"toidentifier": "~1.0.1"
},
"engines": {
"node": ">= 0.8"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -6457,6 +6478,16 @@
"devOptional": true,
"license": "MIT"
},
"node_modules/body-parser/node_modules/statuses": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
"integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
"devOptional": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/boolbase": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
@@ -14354,13 +14385,13 @@
}
},
"node_modules/qs": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
"integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
"version": "6.14.1",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz",
"integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==",
"devOptional": true,
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.0.6"
"side-channel": "^1.1.0"
},
"engines": {
"node": ">=0.6"
@@ -14444,21 +14475,52 @@
}
},
"node_modules/raw-body": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz",
"integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
"bytes": "~3.1.2",
"http-errors": "~2.0.1",
"iconv-lite": "~0.4.24",
"unpipe": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/raw-body/node_modules/http-errors": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
"integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"depd": "~2.0.0",
"inherits": "~2.0.4",
"setprototypeof": "~1.2.0",
"statuses": "~2.0.2",
"toidentifier": "~1.0.1"
},
"engines": {
"node": ">= 0.8"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/raw-body/node_modules/statuses": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
"integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
"devOptional": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",

View File

@@ -275,7 +275,7 @@ GEM
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (1.8.0)
uri (1.0.3)
uri (1.0.4)
webrick (1.9.0)
PLATFORMS

View File

@@ -0,0 +1,61 @@
---
layout: default
title: Git versioning strategy
parent: Release
grand_parent: Development
nav_order: 3
---
# Git versioning strategy
This document describes the **official release workflow** for AliasVault.
## Branch Semantics
### `main`
- Represents the **next version line**
- Contains **only pre-release versions**
- Example versions:
- `0.26.0-alpha`
- `0.26.0-beta`
- Never tagged for stable releases
---
### `XXXX-*` (GitHub issue branches)
- Branch from:
- `main` for next-version development, or
- a release tag for hotfixes
- Contains **only code fixes**
- No version changes
- No release notes
- May contain many commits
Landing rules:
- If branched from `main`: merge or rebase back into `main`
- If branched from a tag: **cherry-pick fixes into `main`**
- May be merged into a `release/*` branch for packaging
---
### `release/*`
- Used only to **package a stable release**
- Contains:
- fixes (cherry-picked back into main)
- release notes (cherry-picked back into main)
- version bump
- Never merged into `main`
- Deleted after tagging
---
## Versioning Rules
### Development versions
- Live only on `main`
- Always pre-release (`-alpha`, `-beta`, etc.)
### Stable versions
- Live only on `release/*` branches
- Always tagged
- Never merged back into `main`

View File

@@ -0,0 +1,65 @@
---
layout: default
title: Release Checklist
parent: Release
grand_parent: Development
nav_order: 4
---
# Release Checklist
Step-by-step guide for creating a new AliasVault release.
## 1. Create release branch
- **Feature release**: Branch from `main`
```bash
# Feature release
git checkout main && git checkout -b release/X.Y.Z
```
- **Bug/hotfix release**: Branch from previous tag (e.g., `0.25.2`)
```bash
# Hotfix release
git checkout 0.25.2 && git checkout -b release/0.25.3
```
## 2. Bump version and write release notes
Run the version bump script which automatically bumps all versions and creates Fastlane changelog files:
```bash
./scripts/bump-version.sh
```
- Commit the release notes in its own commit first
- **Cherry-pick the release notes commit to `main`**
- Commit the version bump changes in a separate commit
- The version bump commit stays only in the release branch
- ***Not cherry-picked***, as the `main` branch is always targeting the next feature (pre)release
## 3. Additional changes (optional)
- If additional fixes are needed after testing, add them to the release branch
- **Cherry-pick all fix commits back to `main`**
## 4. Publish release
- Create the release from GitHub Releases based on the release branch
- Tag is created automatically
## 5. Verify cherry-picks
After release, verify all relevant changes were cherry-picked to `main`:
```bash
git range-diff <previous-tag>..release/<version> <previous-tag>..main
# Example:
git range-diff 0.25.2..release/0.25.3 0.25.2..main
```
**Expected output:**
- Only the version bump commit should show as `<` (only in release branch)
- All other commits should show as `=` (in both branches)

View File

@@ -0,0 +1,2 @@
- Android Passkey compatibility improvements
- Add French and Spanish language options

View File

@@ -0,0 +1,2 @@
- Android Passkey compatibiliteit verbeterd
- Frans en Spaans toegevoegd als taalopties

View File

@@ -0,0 +1 @@
- Add French and Spanish language options

View File

@@ -0,0 +1 @@
- Add French and Spanish language options

View File

@@ -0,0 +1 @@
- Frans en Spaans toegevoegd als taalopties

View File

@@ -0,0 +1,80 @@
#!/bin/bash
#
# Show the latest changelogs for all platforms (Android, iOS, Browser Extension)
# Outputs formatted changelog content for easy copy-paste
#
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
METADATA_DIR="$ROOT_DIR/fastlane/metadata"
# Function to get the latest changelog file from a directory
get_latest_changelog() {
local dir="$1"
if [ -d "$dir" ]; then
# Sort files by version number (handles both numeric and semver formats)
ls -1 "$dir" 2>/dev/null | sort -V | tail -1
fi
}
# Function to print Android changelogs (XML format, no spaces between languages)
print_android() {
local changelog_dir="$METADATA_DIR/android/en-US/changelogs"
local latest_file=$(get_latest_changelog "$changelog_dir")
echo "================================================================================"
echo "ANDROID (latest: $latest_file)"
echo "================================================================================"
echo ""
# Print all locales in XML format without blank lines between them
for locale_dir in "$METADATA_DIR/android"/*; do
if [ -d "$locale_dir/changelogs" ]; then
locale=$(basename "$locale_dir")
local file="$locale_dir/changelogs/$latest_file"
if [ -f "$file" ]; then
echo "<$locale>"
cat "$file"
echo "</$locale>"
fi
fi
done
echo ""
}
# Function to print iOS/Browser Extension changelogs (each language separate)
print_simple() {
local platform="$1"
local display_name="$2"
local changelog_dir="$METADATA_DIR/$platform/en-US/changelogs"
local latest_file=$(get_latest_changelog "$changelog_dir")
echo "================================================================================"
echo "$display_name (latest: $latest_file)"
echo "================================================================================"
# Print each locale separately
for locale_dir in "$METADATA_DIR/$platform"/*; do
if [ -d "$locale_dir/changelogs" ]; then
locale=$(basename "$locale_dir")
local file="$locale_dir/changelogs/$latest_file"
if [ -f "$file" ]; then
echo ""
echo "--- $locale ---"
cat "$file"
fi
fi
done
echo ""
}
echo ""
echo "Latest Changelogs Summary"
echo ""
print_android
print_simple "ios" "iOS"
print_simple "browser-extension" "BROWSER EXTENSION"
echo "================================================================================"
echo ""