diff --git a/.gitignore b/.gitignore index 7f0f8d51b..36d93d980 100644 --- a/.gitignore +++ b/.gitignore @@ -433,7 +433,7 @@ temp *.keystore # Safari extension build files -apps/browser-extension/safari-xcode/AliasVault/build +apps/browser-extension/safari-xcode/build # Rust core binaries (built by ./build.sh in core/rust) # These are platform-specific and must be built locally or by CI diff --git a/apps/browser-extension/README.md b/apps/browser-extension/README.md index 11a39fec1..ba5ac768e 100644 --- a/apps/browser-extension/README.md +++ b/apps/browser-extension/README.md @@ -19,7 +19,7 @@ npm run zip:firefox # Build the Edge extension (saves in dist/edge-mv3) npm run zip:edge -# Build the Safari extension (saves in dist/safari-mv2 which is referenced by the dist/safari-xcode/AliasVault.xcodeproj project) +# Build the Safari extension (saves in dist/safari-mv2 which is referenced by the safari-xcode/AliasVault.xcodeproj project) npm run build:safari -# Open the dist/safari-xcode/AliasVault.xcodeproj project in MacOS Xcode and run the project. This will install the extension to your Safari browser locally. +# Open the safari-xcode/AliasVault.xcodeproj project in MacOS Xcode and run the project. This will install the extension to your Safari browser locally. ``` diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault Extension/AliasVault_Extension.entitlements b/apps/browser-extension/safari-xcode/AliasVault Extension/AliasVault_Extension.entitlements similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault Extension/AliasVault_Extension.entitlements rename to apps/browser-extension/safari-xcode/AliasVault Extension/AliasVault_Extension.entitlements diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault Extension/Info.plist b/apps/browser-extension/safari-xcode/AliasVault Extension/Info.plist similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault Extension/Info.plist rename to apps/browser-extension/safari-xcode/AliasVault Extension/Info.plist diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault Extension/SafariWebExtensionHandler.swift b/apps/browser-extension/safari-xcode/AliasVault Extension/SafariWebExtensionHandler.swift similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault Extension/SafariWebExtensionHandler.swift rename to apps/browser-extension/safari-xcode/AliasVault Extension/SafariWebExtensionHandler.swift diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj b/apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj similarity index 96% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj rename to apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj index d7089293a..18bd45fee 100644 --- a/apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj +++ b/apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj @@ -72,18 +72,18 @@ CE0CAFC52D81A9F8006174AB /* SafariWebExtensionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SafariWebExtensionHandler.swift; sourceTree = ""; }; CE0CAFC72D81A9F8006174AB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; CE0CAFC82D81A9F8006174AB /* AliasVault_Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = AliasVault_Extension.entitlements; sourceTree = ""; }; - CE0CAFD32D81A9F8006174AB /* background.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = background.js; path = "../../../dist/safari-mv2/background.js"; sourceTree = ""; }; - CE0CAFD42D81A9F8006174AB /* popup.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = popup.html; path = "../../../dist/safari-mv2/popup.html"; sourceTree = ""; }; - CE0CAFD52D81A9F8006174AB /* chunks */ = {isa = PBXFileReference; lastKnownFileType = folder; name = chunks; path = "../../../dist/safari-mv2/chunks"; sourceTree = ""; }; - CE0CAFD62D81A9F8006174AB /* content-scripts */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "content-scripts"; path = "../../../dist/safari-mv2/content-scripts"; sourceTree = ""; }; - CE0CAFD72D81A9F8006174AB /* manifest.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = manifest.json; path = "../../../dist/safari-mv2/manifest.json"; sourceTree = ""; }; - CE0CAFD82D81A9F8006174AB /* icon */ = {isa = PBXFileReference; lastKnownFileType = folder; name = icon; path = "../../../dist/safari-mv2/icon"; sourceTree = ""; }; - CE0CAFD92D81A9F8006174AB /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = assets; path = "../../../dist/safari-mv2/assets"; sourceTree = ""; }; - CE0CAFDA2D81A9F8006174AB /* src */ = {isa = PBXFileReference; lastKnownFileType = folder; name = src; path = "../../../dist/safari-mv2/src"; sourceTree = ""; }; + CE0CAFD32D81A9F8006174AB /* background.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = background.js; path = "../../dist/safari-mv2/background.js"; sourceTree = ""; }; + CE0CAFD42D81A9F8006174AB /* popup.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = popup.html; path = "../../dist/safari-mv2/popup.html"; sourceTree = ""; }; + CE0CAFD52D81A9F8006174AB /* chunks */ = {isa = PBXFileReference; lastKnownFileType = folder; name = chunks; path = "../../dist/safari-mv2/chunks"; sourceTree = ""; }; + CE0CAFD62D81A9F8006174AB /* content-scripts */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "content-scripts"; path = "../../dist/safari-mv2/content-scripts"; sourceTree = ""; }; + CE0CAFD72D81A9F8006174AB /* manifest.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = manifest.json; path = "../../dist/safari-mv2/manifest.json"; sourceTree = ""; }; + CE0CAFD82D81A9F8006174AB /* icon */ = {isa = PBXFileReference; lastKnownFileType = folder; name = icon; path = "../../dist/safari-mv2/icon"; sourceTree = ""; }; + CE0CAFD92D81A9F8006174AB /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = assets; path = "../../dist/safari-mv2/assets"; sourceTree = ""; }; + CE0CAFDA2D81A9F8006174AB /* src */ = {isa = PBXFileReference; lastKnownFileType = folder; name = src; path = "../../dist/safari-mv2/src"; sourceTree = ""; }; CE0E5BAF2E7D8BA600515C80 /* AliasVault.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = AliasVault.icon; sourceTree = ""; }; - CEA194E32EB6221B00EAB23B /* webauthn.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = webauthn.js; path = "/Users/user/Projects/AliasVault/apps/browser-extension/dist/safari-mv2/webauthn.js"; sourceTree = ""; }; - CEA194E52EB6248D00EAB23B /* offscreen.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = offscreen.html; path = "/Users/user/Projects/AliasVault/apps/browser-extension/dist/safari-mv2/offscreen.html"; sourceTree = ""; }; - CEA194E62EB6248D00EAB23B /* offscreen.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = offscreen.js; path = "/Users/user/Projects/AliasVault/apps/browser-extension/dist/safari-mv2/offscreen.js"; sourceTree = ""; }; + CEA194E32EB6221B00EAB23B /* webauthn.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = webauthn.js; path = "../../dist/safari-mv2/webauthn.js"; sourceTree = ""; }; + CEA194E52EB6248D00EAB23B /* offscreen.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; name = offscreen.html; path = "../../dist/safari-mv2/offscreen.html"; sourceTree = ""; }; + CEA194E62EB6248D00EAB23B /* offscreen.js */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.javascript; name = offscreen.js; path = "../../dist/safari-mv2/offscreen.js"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/AliasVault.entitlements b/apps/browser-extension/safari-xcode/AliasVault/AliasVault.entitlements similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/AliasVault.entitlements rename to apps/browser-extension/safari-xcode/AliasVault/AliasVault.entitlements diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/AliasVault.icon/Assets/icon-1024.png b/apps/browser-extension/safari-xcode/AliasVault/AliasVault.icon/Assets/icon-1024.png similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/AliasVault.icon/Assets/icon-1024.png rename to apps/browser-extension/safari-xcode/AliasVault/AliasVault.icon/Assets/icon-1024.png diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/AliasVault.icon/icon.json b/apps/browser-extension/safari-xcode/AliasVault/AliasVault.icon/icon.json similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/AliasVault.icon/icon.json rename to apps/browser-extension/safari-xcode/AliasVault/AliasVault.icon/icon.json diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/AppDelegate.swift b/apps/browser-extension/safari-xcode/AliasVault/AppDelegate.swift similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/AppDelegate.swift rename to apps/browser-extension/safari-xcode/AliasVault/AppDelegate.swift diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/Assets.xcassets/AccentColor.colorset/Contents.json b/apps/browser-extension/safari-xcode/AliasVault/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/Assets.xcassets/AccentColor.colorset/Contents.json rename to apps/browser-extension/safari-xcode/AliasVault/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/Assets.xcassets/Contents.json b/apps/browser-extension/safari-xcode/AliasVault/Assets.xcassets/Contents.json similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/Assets.xcassets/Contents.json rename to apps/browser-extension/safari-xcode/AliasVault/Assets.xcassets/Contents.json diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/Assets.xcassets/LargeIcon.imageset/Contents.json b/apps/browser-extension/safari-xcode/AliasVault/Assets.xcassets/LargeIcon.imageset/Contents.json similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/Assets.xcassets/LargeIcon.imageset/Contents.json rename to apps/browser-extension/safari-xcode/AliasVault/Assets.xcassets/LargeIcon.imageset/Contents.json diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/Base.lproj/Main.html b/apps/browser-extension/safari-xcode/AliasVault/Base.lproj/Main.html similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/Base.lproj/Main.html rename to apps/browser-extension/safari-xcode/AliasVault/Base.lproj/Main.html diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/Base.lproj/Main.storyboard b/apps/browser-extension/safari-xcode/AliasVault/Base.lproj/Main.storyboard similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/Base.lproj/Main.storyboard rename to apps/browser-extension/safari-xcode/AliasVault/Base.lproj/Main.storyboard diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/Info.plist b/apps/browser-extension/safari-xcode/AliasVault/Info.plist similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/Info.plist rename to apps/browser-extension/safari-xcode/AliasVault/Info.plist diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/Resources/Icon.png b/apps/browser-extension/safari-xcode/AliasVault/Resources/Icon.png similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/Resources/Icon.png rename to apps/browser-extension/safari-xcode/AliasVault/Resources/Icon.png diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/Resources/Script.js b/apps/browser-extension/safari-xcode/AliasVault/Resources/Script.js similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/Resources/Script.js rename to apps/browser-extension/safari-xcode/AliasVault/Resources/Script.js diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/Resources/Style.css b/apps/browser-extension/safari-xcode/AliasVault/Resources/Style.css similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/Resources/Style.css rename to apps/browser-extension/safari-xcode/AliasVault/Resources/Style.css diff --git a/apps/browser-extension/safari-xcode/AliasVault/AliasVault/ViewController.swift b/apps/browser-extension/safari-xcode/AliasVault/ViewController.swift similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/AliasVault/ViewController.swift rename to apps/browser-extension/safari-xcode/AliasVault/ViewController.swift diff --git a/apps/browser-extension/safari-xcode/AliasVault/build-and-submit.sh b/apps/browser-extension/safari-xcode/build-and-submit.sh similarity index 99% rename from apps/browser-extension/safari-xcode/AliasVault/build-and-submit.sh rename to apps/browser-extension/safari-xcode/build-and-submit.sh index 277963984..0bbf7fcd5 100755 --- a/apps/browser-extension/safari-xcode/AliasVault/build-and-submit.sh +++ b/apps/browser-extension/safari-xcode/build-and-submit.sh @@ -89,9 +89,9 @@ echo "" if [[ $CHOICE == "1" || $CHOICE == "2" ]]; then echo "Building browser extension..." - cd ../.. + cd .. npm run build:safari - cd safari-xcode/AliasVault + cd safari-xcode echo "Building PKG..." diff --git a/apps/browser-extension/safari-xcode/AliasVault/exportOptions.plist b/apps/browser-extension/safari-xcode/exportOptions.plist similarity index 100% rename from apps/browser-extension/safari-xcode/AliasVault/exportOptions.plist rename to apps/browser-extension/safari-xcode/exportOptions.plist diff --git a/docs/browser-extensions/safari/build-from-source.md b/docs/browser-extensions/safari/build-from-source.md index 6f13c8504..865284a56 100644 --- a/docs/browser-extensions/safari/build-from-source.md +++ b/docs/browser-extensions/safari/build-from-source.md @@ -38,7 +38,7 @@ npm install npm run build:safari ``` -5. Open Xcode and open the `apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj` file +5. Open Xcode and open the `apps/browser-extension/safari-xcode/AliasVault.xcodeproj` file 6. Run the project. This will open up the AliasVault MacOS wrapper app and automatically install the extension to your Safari Extensions list. diff --git a/docs/misc/dev/browser-extensions.md b/docs/misc/dev/browser-extensions.md index e3bc4c4b2..35db92783 100644 --- a/docs/misc/dev/browser-extensions.md +++ b/docs/misc/dev/browser-extensions.md @@ -83,7 +83,7 @@ npm run build:edge npm run build:safari ``` -2. Open the Xcode project in the `safari-xcode/AliasVault/AliasVault.xcodeproj` folder and build / run the app. +2. Open the Xcode project in the `safari-xcode/AliasVault.xcodeproj` folder and build / run the app. 3. The extension will be installed automatically in Safari. Follow the on-screen MacOS app instructions to complete the installation. diff --git a/docs/misc/dev/release/index.md b/docs/misc/dev/release/index.md index 1a8f64fc7..8d2cac64f 100644 --- a/docs/misc/dev/release/index.md +++ b/docs/misc/dev/release/index.md @@ -99,7 +99,7 @@ The GitHub Actions workflow `Browser Extension Build` will build the browser ext 5. Submit the Safari extension to Apple for review: 1. Navigate to the `apps/browser-extension` directory. 2. Build the safari extension locally via `npm run build:safari`, which will output the build files to `dist/safari-mv2`. **Note: it's important to always rebuild, as otherwise stale build files from a previous build might get included in the Safari binary by accident!** - 3. Open the `apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj` project in Xcode and submit the extension via the "Archive" and then "Distribute App" option. + 3. Open the `apps/browser-extension/safari-xcode/AliasVault.xcodeproj` project in Xcode and submit the extension via the "Archive" and then "Distribute App" option. ## Publish new Mobile App version 1. Submit the iOS app to Apple for review: diff --git a/docs/misc/dev/release/manual-versioning.md b/docs/misc/dev/release/manual-versioning.md index 968c183fa..386aadc6a 100644 --- a/docs/misc/dev/release/manual-versioning.md +++ b/docs/misc/dev/release/manual-versioning.md @@ -18,7 +18,7 @@ Alternatively, you can do it manually by following these steps: ## Versioning browser extensions - [ ] Update `./apps/browser-extension/wxt.config.ts` with the new version for the extension. This will be shown in the browser extension web stores. This version should be equal to the git release tag. -- [ ] Update `./apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj` and set the version in `MARKETING_VERSION` and increase the build number in `CURRENT_PROJECT_VERSION`. This is the version that will be shown in the Safari Browser Extension App Store. +- [ ] Update `./apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj` and set the version in `MARKETING_VERSION` and increase the build number in `CURRENT_PROJECT_VERSION`. This is the version that will be shown in the Safari Browser Extension App Store. - [ ] Update `./apps/browser-extension/src/utils/AppInfo.ts` with the new version for the extension. This version should be equal to the git release tag. - [ ] Update `./apps/browser-extension/src/utils/AppInfo.ts` with the minimum supported server version (in case of required API breaking changes). - [ ] Update `./apps/browser-extension/src/utils/AppInfo.ts` with the minimum supported client vault version (in case of required client vault model changes). diff --git a/scripts/bump-versions.sh b/scripts/bump-versions.sh index 4fc7fb329..c718a2d20 100755 --- a/scripts/bump-versions.sh +++ b/scripts/bump-versions.sh @@ -259,7 +259,7 @@ get_android_version() { # Function to extract version from Safari extension get_safari_version() { - grep "MARKETING_VERSION = " ../apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj | head -n1 | tr -d '"' | tr -d ';' | tr -d ' ' | cut -d'=' -f2 + grep "MARKETING_VERSION = " ../apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj | head -n1 | tr -d '"' | tr -d ';' | tr -d ' ' | cut -d'=' -f2 } # Function to extract version from Rust core Cargo.toml @@ -475,7 +475,7 @@ elif [[ "$MARKETING_UPDATE" == true ]]; then # Update Safari extension version (Apple doesn't accept stage suffixes in MARKETING_VERSION) echo "Updating Safari extension version..." - update_version "../apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj" \ + update_version "../apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj" \ "MARKETING_VERSION = [0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[^;]*;" \ "MARKETING_VERSION = $version;" @@ -525,7 +525,7 @@ if [ -z "$current_android_build" ]; then exit 1 fi -current_safari_build=$(grep -A1 "CURRENT_PROJECT_VERSION" ../apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj | grep "CURRENT_PROJECT_VERSION = [0-9]\+;" | head -n1 | tr -d ';' | tr -d ' ' | cut -d'=' -f2 | grep -E '^[0-9]+$') +current_safari_build=$(grep -A1 "CURRENT_PROJECT_VERSION" ../apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj | grep "CURRENT_PROJECT_VERSION = [0-9]\+;" | head -n1 | tr -d ';' | tr -d ' ' | cut -d'=' -f2 | grep -E '^[0-9]+$') if [ -z "$current_safari_build" ]; then echo "Error: Could not read Safari build number or invalid format" exit 1 @@ -548,7 +548,7 @@ update_version "../apps/mobile-app/android/app/build.gradle" \ # Handle Safari build number new_safari_build=$(handle_semantic_build_number "$current_safari_build" "Safari Extension" "$major" "$minor" "$patch" "$MARKETING_UPDATE") -update_version "../apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj" \ +update_version "../apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj" \ "CURRENT_PROJECT_VERSION = [0-9]\+;" \ "CURRENT_PROJECT_VERSION = $new_safari_build;" \ "Safari Extension" diff --git a/scripts/review-versions.sh b/scripts/review-versions.sh index d445c0f3e..f0ea6c87b 100755 --- a/scripts/review-versions.sh +++ b/scripts/review-versions.sh @@ -62,12 +62,12 @@ get_android_build() { # Function to extract version from Safari extension get_safari_version() { - grep "MARKETING_VERSION = " ../apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj | head -n1 | tr -d '"' | tr -d ';' | tr -d ' ' | cut -d'=' -f2 + grep "MARKETING_VERSION = " ../apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj | head -n1 | tr -d '"' | tr -d ';' | tr -d ' ' | cut -d'=' -f2 } # Function to extract Safari build number get_safari_build() { - grep -A1 "CURRENT_PROJECT_VERSION" ../apps/browser-extension/safari-xcode/AliasVault/AliasVault.xcodeproj/project.pbxproj | grep "CURRENT_PROJECT_VERSION = [0-9]\+;" | head -n1 | tr -d ';' | tr -d ' ' | cut -d'=' -f2 + grep -A1 "CURRENT_PROJECT_VERSION" ../apps/browser-extension/safari-xcode/AliasVault.xcodeproj/project.pbxproj | grep "CURRENT_PROJECT_VERSION = [0-9]\+;" | head -n1 | tr -d ';' | tr -d ' ' | cut -d'=' -f2 } # Collect all versions