From 532c5d5e33a20476103c0b7a18e3190b1c0fe006 Mon Sep 17 00:00:00 2001 From: Allen Houchins <32207388+allenhouchins@users.noreply.github.com> Date: Fri, 12 Jun 2026 15:33:14 -0500 Subject: [PATCH] Add macOS Fleet-maintained apps (A) (#47536) Adds 43 Fleet-maintained app(s) whose cask token starts with 'A': inputs, outputs, app icons (TSX + website PNG), and the matching index.ts and apps.json entries. ## Summary by CodeRabbit * **New Features** * Added support for 50+ macOS applications including Acorn, Affinity Suite, AirDroid, Anytype, Audio Hijack, and more * Applications now include automated installation and management capabilities with version tracking --- .../homebrew/a-better-finder-rename.json | 10 + ee/maintained-apps/inputs/homebrew/acorn.json | 10 + .../inputs/homebrew/activedock.json | 10 + .../inputs/homebrew/activitywatch.json | 10 + .../inputs/homebrew/actual.json | 10 + .../inputs/homebrew/adguard.json | 10 + .../inputs/homebrew/adlock.json | 10 + .../inputs/homebrew/advanced-renamer.json | 10 + .../inputs/homebrew/affinity-designer.json | 10 + .../inputs/homebrew/affinity-designer@1.json | 10 + .../inputs/homebrew/affinity-photo.json | 10 + .../inputs/homebrew/affinity-photo@1.json | 10 + .../inputs/homebrew/affinity-publisher.json | 10 + .../inputs/homebrew/affinity-publisher@1.json | 10 + .../inputs/homebrew/airbuddy.json | 10 + .../inputs/homebrew/airdroid.json | 10 + .../inputs/homebrew/airparrot.json | 10 + .../inputs/homebrew/airserver.json | 10 + .../inputs/homebrew/airtable.json | 10 + ee/maintained-apps/inputs/homebrew/airy.json | 10 + .../inputs/homebrew/akiflow.json | 10 + .../inputs/homebrew/alcove.json | 10 + .../inputs/homebrew/aldente.json | 10 + ee/maintained-apps/inputs/homebrew/alloy.json | 10 + .../inputs/homebrew/alt-tab.json | 10 + .../homebrew/altair-graphql-client.json | 10 + .../inputs/homebrew/amadeus-pro.json | 10 + .../inputs/homebrew/amadine.json | 10 + .../inputs/homebrew/amethyst.json | 10 + ee/maintained-apps/inputs/homebrew/amie.json | 10 + .../inputs/homebrew/angry-ip-scanner.json | 10 + .../inputs/homebrew/antinote.json | 10 + ee/maintained-apps/inputs/homebrew/anydo.json | 10 + .../inputs/homebrew/anytype.json | 10 + .../inputs/homebrew/apidog.json | 10 + .../inputs/homebrew/app-fair.json | 10 + .../inputs/homebrew/appium-inspector.json | 10 + .../inputs/homebrew/applite.json | 10 + .../homebrew/asset-catalog-tinkerer.json | 10 + ee/maintained-apps/inputs/homebrew/atext.json | 10 + .../inputs/homebrew/audio-hijack.json | 10 + .../inputs/homebrew/aviatrix-vpn-client.json | 10 + .../inputs/homebrew/axure-rp.json | 10 + .../a-better-finder-rename/darwin.json | 22 ++ ee/maintained-apps/outputs/acorn/darwin.json | 22 ++ .../outputs/activedock/darwin.json | 22 ++ .../outputs/activitywatch/darwin.json | 22 ++ ee/maintained-apps/outputs/actual/darwin.json | 22 ++ .../outputs/adguard/darwin.json | 22 ++ ee/maintained-apps/outputs/adlock/darwin.json | 22 ++ .../outputs/advanced-renamer/darwin.json | 22 ++ .../outputs/affinity-designer/darwin.json | 22 ++ .../outputs/affinity-designer@1/darwin.json | 22 ++ .../outputs/affinity-photo/darwin.json | 22 ++ .../outputs/affinity-photo@1/darwin.json | 22 ++ .../outputs/affinity-publisher/darwin.json | 22 ++ .../outputs/affinity-publisher@1/darwin.json | 22 ++ .../outputs/airbuddy/darwin.json | 22 ++ .../outputs/airdroid/darwin.json | 22 ++ .../outputs/airparrot/darwin.json | 22 ++ .../outputs/airserver/darwin.json | 22 ++ .../outputs/airtable/darwin.json | 22 ++ ee/maintained-apps/outputs/airy/darwin.json | 22 ++ .../outputs/akiflow/darwin.json | 22 ++ ee/maintained-apps/outputs/alcove/darwin.json | 22 ++ .../outputs/aldente/darwin.json | 22 ++ ee/maintained-apps/outputs/alloy/darwin.json | 22 ++ .../outputs/alt-tab/darwin.json | 22 ++ .../outputs/altair-graphql-client/darwin.json | 22 ++ .../outputs/amadeus-pro/darwin.json | 22 ++ .../outputs/amadine/darwin.json | 22 ++ .../outputs/amethyst/darwin.json | 22 ++ ee/maintained-apps/outputs/amie/darwin.json | 22 ++ .../outputs/angry-ip-scanner/darwin.json | 22 ++ .../outputs/antinote/darwin.json | 22 ++ ee/maintained-apps/outputs/anydo/darwin.json | 22 ++ .../outputs/anytype/darwin.json | 22 ++ ee/maintained-apps/outputs/apidog/darwin.json | 22 ++ .../outputs/app-fair/darwin.json | 22 ++ .../outputs/appium-inspector/darwin.json | 22 ++ .../outputs/applite/darwin.json | 22 ++ ee/maintained-apps/outputs/apps.json | 301 ++++++++++++++++++ .../asset-catalog-tinkerer/darwin.json | 22 ++ ee/maintained-apps/outputs/atext/darwin.json | 22 ++ .../outputs/audio-hijack/darwin.json | 22 ++ .../outputs/aviatrix-vpn-client/darwin.json | 22 ++ .../outputs/axure-rp/darwin.json | 22 ++ .../components/icons/ABetterFinderRename.tsx | 14 + .../SoftwarePage/components/icons/Acorn.tsx | 14 + .../components/icons/Activedock.tsx | 14 + .../components/icons/Activitywatch.tsx | 14 + .../SoftwarePage/components/icons/Actual.tsx | 14 + .../SoftwarePage/components/icons/Adguard.tsx | 14 + .../SoftwarePage/components/icons/Adlock.tsx | 14 + .../components/icons/AdvancedRenamer.tsx | 14 + .../components/icons/AffinityDesigner.tsx | 14 + .../components/icons/AffinityDesigner1.tsx | 14 + .../components/icons/AffinityPhoto.tsx | 14 + .../components/icons/AffinityPhoto1.tsx | 14 + .../components/icons/AffinityPublisher.tsx | 14 + .../components/icons/AffinityPublisher1.tsx | 14 + .../components/icons/Airbuddy.tsx | 14 + .../components/icons/Airdroid.tsx | 14 + .../components/icons/Airparrot.tsx | 14 + .../components/icons/Airserver.tsx | 14 + .../components/icons/Airtable.tsx | 14 + .../SoftwarePage/components/icons/Airy.tsx | 14 + .../SoftwarePage/components/icons/Akiflow.tsx | 14 + .../SoftwarePage/components/icons/Alcove.tsx | 14 + .../SoftwarePage/components/icons/Aldente.tsx | 14 + .../SoftwarePage/components/icons/Alloy.tsx | 14 + .../SoftwarePage/components/icons/AltTab.tsx | 14 + .../components/icons/AltairGraphqlClient.tsx | 14 + .../components/icons/AmadeusPro.tsx | 14 + .../SoftwarePage/components/icons/Amadine.tsx | 14 + .../components/icons/Amethyst.tsx | 14 + .../SoftwarePage/components/icons/Amie.tsx | 14 + .../components/icons/AngryIpScanner.tsx | 14 + .../components/icons/Antinote.tsx | 14 + .../SoftwarePage/components/icons/Anydo.tsx | 14 + .../SoftwarePage/components/icons/Anytype.tsx | 14 + .../SoftwarePage/components/icons/Apidog.tsx | 14 + .../SoftwarePage/components/icons/AppFair.tsx | 14 + .../components/icons/AppiumInspector.tsx | 14 + .../SoftwarePage/components/icons/Applite.tsx | 14 + .../components/icons/AssetCatalogTinkerer.tsx | 14 + .../SoftwarePage/components/icons/Atext.tsx | 14 + .../components/icons/AudioHijack.tsx | 14 + .../components/icons/AviatrixVpnClient.tsx | 14 + .../SoftwarePage/components/icons/AxureRp.tsx | 14 + .../SoftwarePage/components/icons/index.ts | 86 +++++ ...p-icon-a-better-finder-rename-60x60@2x.png | Bin 0 -> 13829 bytes .../assets/images/app-icon-acorn-60x60@2x.png | Bin 0 -> 20306 bytes .../images/app-icon-activedock-60x60@2x.png | Bin 0 -> 14976 bytes .../app-icon-activitywatch-60x60@2x.png | Bin 0 -> 9141 bytes .../images/app-icon-actual-60x60@2x.png | Bin 0 -> 14274 bytes .../images/app-icon-adguard-60x60@2x.png | Bin 0 -> 12128 bytes .../images/app-icon-adlock-60x60@2x.png | Bin 0 -> 6184 bytes .../app-icon-advanced-renamer-60x60@2x.png | Bin 0 -> 10319 bytes .../app-icon-affinity-designer-60x60@2x.png | Bin 0 -> 12227 bytes .../app-icon-affinity-designer@1-60x60@2x.png | Bin 0 -> 15268 bytes .../app-icon-affinity-photo-60x60@2x.png | Bin 0 -> 13202 bytes .../app-icon-affinity-photo@1-60x60@2x.png | Bin 0 -> 15929 bytes .../app-icon-affinity-publisher-60x60@2x.png | Bin 0 -> 14300 bytes ...app-icon-affinity-publisher@1-60x60@2x.png | Bin 0 -> 17450 bytes .../images/app-icon-airbuddy-60x60@2x.png | Bin 0 -> 15711 bytes .../images/app-icon-airdroid-60x60@2x.png | Bin 0 -> 14398 bytes .../images/app-icon-airparrot-60x60@2x.png | Bin 0 -> 14680 bytes .../images/app-icon-airserver-60x60@2x.png | Bin 0 -> 7730 bytes .../images/app-icon-airtable-60x60@2x.png | Bin 0 -> 8207 bytes .../assets/images/app-icon-airy-60x60@2x.png | Bin 0 -> 20203 bytes .../images/app-icon-akiflow-60x60@2x.png | Bin 0 -> 15031 bytes .../images/app-icon-alcove-60x60@2x.png | Bin 0 -> 14757 bytes .../images/app-icon-aldente-60x60@2x.png | Bin 0 -> 21250 bytes .../assets/images/app-icon-alloy-60x60@2x.png | Bin 0 -> 29173 bytes .../images/app-icon-alt-tab-60x60@2x.png | Bin 0 -> 11047 bytes ...pp-icon-altair-graphql-client-60x60@2x.png | Bin 0 -> 9086 bytes .../images/app-icon-amadeus-pro-60x60@2x.png | Bin 0 -> 27340 bytes .../images/app-icon-amadine-60x60@2x.png | Bin 0 -> 17040 bytes .../images/app-icon-amethyst-60x60@2x.png | Bin 0 -> 18011 bytes .../assets/images/app-icon-amie-60x60@2x.png | Bin 0 -> 11808 bytes .../app-icon-angry-ip-scanner-60x60@2x.png | Bin 0 -> 12693 bytes .../images/app-icon-antinote-60x60@2x.png | Bin 0 -> 10108 bytes .../assets/images/app-icon-anydo-60x60@2x.png | Bin 0 -> 10113 bytes .../images/app-icon-anytype-60x60@2x.png | Bin 0 -> 8756 bytes .../images/app-icon-apidog-60x60@2x.png | Bin 0 -> 11432 bytes .../images/app-icon-app-fair-60x60@2x.png | Bin 0 -> 13377 bytes .../app-icon-appium-inspector-60x60@2x.png | Bin 0 -> 14409 bytes .../images/app-icon-applite-60x60@2x.png | Bin 0 -> 16543 bytes ...p-icon-asset-catalog-tinkerer-60x60@2x.png | Bin 0 -> 13349 bytes .../assets/images/app-icon-atext-60x60@2x.png | Bin 0 -> 10380 bytes .../images/app-icon-audio-hijack-60x60@2x.png | Bin 0 -> 13650 bytes .../app-icon-aviatrix-vpn-client-60x60@2x.png | Bin 0 -> 8718 bytes .../images/app-icon-axure-rp-60x60@2x.png | Bin 0 -> 11877 bytes 174 files changed, 2365 insertions(+) create mode 100644 ee/maintained-apps/inputs/homebrew/a-better-finder-rename.json create mode 100644 ee/maintained-apps/inputs/homebrew/acorn.json create mode 100644 ee/maintained-apps/inputs/homebrew/activedock.json create mode 100644 ee/maintained-apps/inputs/homebrew/activitywatch.json create mode 100644 ee/maintained-apps/inputs/homebrew/actual.json create mode 100644 ee/maintained-apps/inputs/homebrew/adguard.json create mode 100644 ee/maintained-apps/inputs/homebrew/adlock.json create mode 100644 ee/maintained-apps/inputs/homebrew/advanced-renamer.json create mode 100644 ee/maintained-apps/inputs/homebrew/affinity-designer.json create mode 100644 ee/maintained-apps/inputs/homebrew/affinity-designer@1.json create mode 100644 ee/maintained-apps/inputs/homebrew/affinity-photo.json create mode 100644 ee/maintained-apps/inputs/homebrew/affinity-photo@1.json create mode 100644 ee/maintained-apps/inputs/homebrew/affinity-publisher.json create mode 100644 ee/maintained-apps/inputs/homebrew/affinity-publisher@1.json create mode 100644 ee/maintained-apps/inputs/homebrew/airbuddy.json create mode 100644 ee/maintained-apps/inputs/homebrew/airdroid.json create mode 100644 ee/maintained-apps/inputs/homebrew/airparrot.json create mode 100644 ee/maintained-apps/inputs/homebrew/airserver.json create mode 100644 ee/maintained-apps/inputs/homebrew/airtable.json create mode 100644 ee/maintained-apps/inputs/homebrew/airy.json create mode 100644 ee/maintained-apps/inputs/homebrew/akiflow.json create mode 100644 ee/maintained-apps/inputs/homebrew/alcove.json create mode 100644 ee/maintained-apps/inputs/homebrew/aldente.json create mode 100644 ee/maintained-apps/inputs/homebrew/alloy.json create mode 100644 ee/maintained-apps/inputs/homebrew/alt-tab.json create mode 100644 ee/maintained-apps/inputs/homebrew/altair-graphql-client.json create mode 100644 ee/maintained-apps/inputs/homebrew/amadeus-pro.json create mode 100644 ee/maintained-apps/inputs/homebrew/amadine.json create mode 100644 ee/maintained-apps/inputs/homebrew/amethyst.json create mode 100644 ee/maintained-apps/inputs/homebrew/amie.json create mode 100644 ee/maintained-apps/inputs/homebrew/angry-ip-scanner.json create mode 100644 ee/maintained-apps/inputs/homebrew/antinote.json create mode 100644 ee/maintained-apps/inputs/homebrew/anydo.json create mode 100644 ee/maintained-apps/inputs/homebrew/anytype.json create mode 100644 ee/maintained-apps/inputs/homebrew/apidog.json create mode 100644 ee/maintained-apps/inputs/homebrew/app-fair.json create mode 100644 ee/maintained-apps/inputs/homebrew/appium-inspector.json create mode 100644 ee/maintained-apps/inputs/homebrew/applite.json create mode 100644 ee/maintained-apps/inputs/homebrew/asset-catalog-tinkerer.json create mode 100644 ee/maintained-apps/inputs/homebrew/atext.json create mode 100644 ee/maintained-apps/inputs/homebrew/audio-hijack.json create mode 100644 ee/maintained-apps/inputs/homebrew/aviatrix-vpn-client.json create mode 100644 ee/maintained-apps/inputs/homebrew/axure-rp.json create mode 100644 ee/maintained-apps/outputs/a-better-finder-rename/darwin.json create mode 100644 ee/maintained-apps/outputs/acorn/darwin.json create mode 100644 ee/maintained-apps/outputs/activedock/darwin.json create mode 100644 ee/maintained-apps/outputs/activitywatch/darwin.json create mode 100644 ee/maintained-apps/outputs/actual/darwin.json create mode 100644 ee/maintained-apps/outputs/adguard/darwin.json create mode 100644 ee/maintained-apps/outputs/adlock/darwin.json create mode 100644 ee/maintained-apps/outputs/advanced-renamer/darwin.json create mode 100644 ee/maintained-apps/outputs/affinity-designer/darwin.json create mode 100644 ee/maintained-apps/outputs/affinity-designer@1/darwin.json create mode 100644 ee/maintained-apps/outputs/affinity-photo/darwin.json create mode 100644 ee/maintained-apps/outputs/affinity-photo@1/darwin.json create mode 100644 ee/maintained-apps/outputs/affinity-publisher/darwin.json create mode 100644 ee/maintained-apps/outputs/affinity-publisher@1/darwin.json create mode 100644 ee/maintained-apps/outputs/airbuddy/darwin.json create mode 100644 ee/maintained-apps/outputs/airdroid/darwin.json create mode 100644 ee/maintained-apps/outputs/airparrot/darwin.json create mode 100644 ee/maintained-apps/outputs/airserver/darwin.json create mode 100644 ee/maintained-apps/outputs/airtable/darwin.json create mode 100644 ee/maintained-apps/outputs/airy/darwin.json create mode 100644 ee/maintained-apps/outputs/akiflow/darwin.json create mode 100644 ee/maintained-apps/outputs/alcove/darwin.json create mode 100644 ee/maintained-apps/outputs/aldente/darwin.json create mode 100644 ee/maintained-apps/outputs/alloy/darwin.json create mode 100644 ee/maintained-apps/outputs/alt-tab/darwin.json create mode 100644 ee/maintained-apps/outputs/altair-graphql-client/darwin.json create mode 100644 ee/maintained-apps/outputs/amadeus-pro/darwin.json create mode 100644 ee/maintained-apps/outputs/amadine/darwin.json create mode 100644 ee/maintained-apps/outputs/amethyst/darwin.json create mode 100644 ee/maintained-apps/outputs/amie/darwin.json create mode 100644 ee/maintained-apps/outputs/angry-ip-scanner/darwin.json create mode 100644 ee/maintained-apps/outputs/antinote/darwin.json create mode 100644 ee/maintained-apps/outputs/anydo/darwin.json create mode 100644 ee/maintained-apps/outputs/anytype/darwin.json create mode 100644 ee/maintained-apps/outputs/apidog/darwin.json create mode 100644 ee/maintained-apps/outputs/app-fair/darwin.json create mode 100644 ee/maintained-apps/outputs/appium-inspector/darwin.json create mode 100644 ee/maintained-apps/outputs/applite/darwin.json create mode 100644 ee/maintained-apps/outputs/asset-catalog-tinkerer/darwin.json create mode 100644 ee/maintained-apps/outputs/atext/darwin.json create mode 100644 ee/maintained-apps/outputs/audio-hijack/darwin.json create mode 100644 ee/maintained-apps/outputs/aviatrix-vpn-client/darwin.json create mode 100644 ee/maintained-apps/outputs/axure-rp/darwin.json create mode 100644 frontend/pages/SoftwarePage/components/icons/ABetterFinderRename.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Acorn.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Activedock.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Activitywatch.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Actual.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Adguard.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Adlock.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AdvancedRenamer.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AffinityDesigner.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AffinityDesigner1.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AffinityPhoto.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AffinityPhoto1.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AffinityPublisher.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AffinityPublisher1.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Airbuddy.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Airdroid.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Airparrot.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Airserver.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Airtable.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Airy.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Akiflow.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Alcove.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Aldente.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Alloy.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AltTab.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AltairGraphqlClient.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AmadeusPro.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Amadine.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Amethyst.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Amie.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AngryIpScanner.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Antinote.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Anydo.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Anytype.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Apidog.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AppFair.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AppiumInspector.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Applite.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AssetCatalogTinkerer.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/Atext.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AudioHijack.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AviatrixVpnClient.tsx create mode 100644 frontend/pages/SoftwarePage/components/icons/AxureRp.tsx create mode 100644 website/assets/images/app-icon-a-better-finder-rename-60x60@2x.png create mode 100644 website/assets/images/app-icon-acorn-60x60@2x.png create mode 100644 website/assets/images/app-icon-activedock-60x60@2x.png create mode 100644 website/assets/images/app-icon-activitywatch-60x60@2x.png create mode 100644 website/assets/images/app-icon-actual-60x60@2x.png create mode 100644 website/assets/images/app-icon-adguard-60x60@2x.png create mode 100644 website/assets/images/app-icon-adlock-60x60@2x.png create mode 100644 website/assets/images/app-icon-advanced-renamer-60x60@2x.png create mode 100644 website/assets/images/app-icon-affinity-designer-60x60@2x.png create mode 100644 website/assets/images/app-icon-affinity-designer@1-60x60@2x.png create mode 100644 website/assets/images/app-icon-affinity-photo-60x60@2x.png create mode 100644 website/assets/images/app-icon-affinity-photo@1-60x60@2x.png create mode 100644 website/assets/images/app-icon-affinity-publisher-60x60@2x.png create mode 100644 website/assets/images/app-icon-affinity-publisher@1-60x60@2x.png create mode 100644 website/assets/images/app-icon-airbuddy-60x60@2x.png create mode 100644 website/assets/images/app-icon-airdroid-60x60@2x.png create mode 100644 website/assets/images/app-icon-airparrot-60x60@2x.png create mode 100644 website/assets/images/app-icon-airserver-60x60@2x.png create mode 100644 website/assets/images/app-icon-airtable-60x60@2x.png create mode 100644 website/assets/images/app-icon-airy-60x60@2x.png create mode 100644 website/assets/images/app-icon-akiflow-60x60@2x.png create mode 100644 website/assets/images/app-icon-alcove-60x60@2x.png create mode 100644 website/assets/images/app-icon-aldente-60x60@2x.png create mode 100644 website/assets/images/app-icon-alloy-60x60@2x.png create mode 100644 website/assets/images/app-icon-alt-tab-60x60@2x.png create mode 100644 website/assets/images/app-icon-altair-graphql-client-60x60@2x.png create mode 100644 website/assets/images/app-icon-amadeus-pro-60x60@2x.png create mode 100644 website/assets/images/app-icon-amadine-60x60@2x.png create mode 100644 website/assets/images/app-icon-amethyst-60x60@2x.png create mode 100644 website/assets/images/app-icon-amie-60x60@2x.png create mode 100644 website/assets/images/app-icon-angry-ip-scanner-60x60@2x.png create mode 100644 website/assets/images/app-icon-antinote-60x60@2x.png create mode 100644 website/assets/images/app-icon-anydo-60x60@2x.png create mode 100644 website/assets/images/app-icon-anytype-60x60@2x.png create mode 100644 website/assets/images/app-icon-apidog-60x60@2x.png create mode 100644 website/assets/images/app-icon-app-fair-60x60@2x.png create mode 100644 website/assets/images/app-icon-appium-inspector-60x60@2x.png create mode 100644 website/assets/images/app-icon-applite-60x60@2x.png create mode 100644 website/assets/images/app-icon-asset-catalog-tinkerer-60x60@2x.png create mode 100644 website/assets/images/app-icon-atext-60x60@2x.png create mode 100644 website/assets/images/app-icon-audio-hijack-60x60@2x.png create mode 100644 website/assets/images/app-icon-aviatrix-vpn-client-60x60@2x.png create mode 100644 website/assets/images/app-icon-axure-rp-60x60@2x.png diff --git a/ee/maintained-apps/inputs/homebrew/a-better-finder-rename.json b/ee/maintained-apps/inputs/homebrew/a-better-finder-rename.json new file mode 100644 index 0000000000..802981951f --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/a-better-finder-rename.json @@ -0,0 +1,10 @@ +{ + "name": "A Better Finder Rename", + "unique_identifier": "net.publicspace.abfr12", + "token": "a-better-finder-rename", + "installer_format": "dmg", + "slug": "a-better-finder-rename/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/acorn.json b/ee/maintained-apps/inputs/homebrew/acorn.json new file mode 100644 index 0000000000..1912c2db22 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/acorn.json @@ -0,0 +1,10 @@ +{ + "name": "Acorn", + "unique_identifier": "com.flyingmeat.Acorn8", + "token": "acorn", + "installer_format": "zip", + "slug": "acorn/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/activedock.json b/ee/maintained-apps/inputs/homebrew/activedock.json new file mode 100644 index 0000000000..ec4e020a0b --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/activedock.json @@ -0,0 +1,10 @@ +{ + "name": "ActiveDock", + "unique_identifier": "com.sergey-gerasimenko.ActiveDock-2", + "token": "activedock", + "installer_format": "zip", + "slug": "activedock/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/activitywatch.json b/ee/maintained-apps/inputs/homebrew/activitywatch.json new file mode 100644 index 0000000000..414a343222 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/activitywatch.json @@ -0,0 +1,10 @@ +{ + "name": "ActivityWatch", + "unique_identifier": "net.activitywatch.ActivityWatch", + "token": "activitywatch", + "installer_format": "dmg", + "slug": "activitywatch/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/actual.json b/ee/maintained-apps/inputs/homebrew/actual.json new file mode 100644 index 0000000000..00d98948ac --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/actual.json @@ -0,0 +1,10 @@ +{ + "name": "Actual", + "unique_identifier": "com.actualbudget.actual", + "token": "actual", + "installer_format": "dmg", + "slug": "actual/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/adguard.json b/ee/maintained-apps/inputs/homebrew/adguard.json new file mode 100644 index 0000000000..8893655c55 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/adguard.json @@ -0,0 +1,10 @@ +{ + "name": "AdGuard", + "unique_identifier": "com.adguard.mac.adguard", + "token": "adguard", + "installer_format": "dmg", + "slug": "adguard/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/adlock.json b/ee/maintained-apps/inputs/homebrew/adlock.json new file mode 100644 index 0000000000..f7c1a9b230 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/adlock.json @@ -0,0 +1,10 @@ +{ + "name": "AdLock", + "unique_identifier": "com.hankuper.adlock.desktop", + "token": "adlock", + "installer_format": "dmg", + "slug": "adlock/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/advanced-renamer.json b/ee/maintained-apps/inputs/homebrew/advanced-renamer.json new file mode 100644 index 0000000000..f7dbdf4d81 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/advanced-renamer.json @@ -0,0 +1,10 @@ +{ + "name": "Advanced Renamer", + "unique_identifier": "com.HulubuluSoftware.AdvancedRenamer", + "token": "advanced-renamer", + "installer_format": "dmg", + "slug": "advanced-renamer/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/affinity-designer.json b/ee/maintained-apps/inputs/homebrew/affinity-designer.json new file mode 100644 index 0000000000..e2f42bef4e --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/affinity-designer.json @@ -0,0 +1,10 @@ +{ + "name": "Affinity Designer 2", + "unique_identifier": "com.seriflabs.affinitydesigner2", + "token": "affinity-designer", + "installer_format": "zip", + "slug": "affinity-designer/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/affinity-designer@1.json b/ee/maintained-apps/inputs/homebrew/affinity-designer@1.json new file mode 100644 index 0000000000..26fd3aba60 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/affinity-designer@1.json @@ -0,0 +1,10 @@ +{ + "name": "Affinity Designer", + "unique_identifier": "com.seriflabs.affinitydesigner", + "token": "affinity-designer@1", + "installer_format": "zip", + "slug": "affinity-designer@1/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/affinity-photo.json b/ee/maintained-apps/inputs/homebrew/affinity-photo.json new file mode 100644 index 0000000000..4e1317d422 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/affinity-photo.json @@ -0,0 +1,10 @@ +{ + "name": "Affinity Photo 2", + "unique_identifier": "com.seriflabs.affinityphoto2", + "token": "affinity-photo", + "installer_format": "zip", + "slug": "affinity-photo/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/affinity-photo@1.json b/ee/maintained-apps/inputs/homebrew/affinity-photo@1.json new file mode 100644 index 0000000000..83720dc11a --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/affinity-photo@1.json @@ -0,0 +1,10 @@ +{ + "name": "Affinity Photo", + "unique_identifier": "com.seriflabs.affinityphoto", + "token": "affinity-photo@1", + "installer_format": "zip", + "slug": "affinity-photo@1/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/affinity-publisher.json b/ee/maintained-apps/inputs/homebrew/affinity-publisher.json new file mode 100644 index 0000000000..66b5a91e57 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/affinity-publisher.json @@ -0,0 +1,10 @@ +{ + "name": "Affinity Publisher 2", + "unique_identifier": "com.seriflabs.affinitypublisher2", + "token": "affinity-publisher", + "installer_format": "zip", + "slug": "affinity-publisher/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/affinity-publisher@1.json b/ee/maintained-apps/inputs/homebrew/affinity-publisher@1.json new file mode 100644 index 0000000000..8c781b4690 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/affinity-publisher@1.json @@ -0,0 +1,10 @@ +{ + "name": "Affinity Publisher", + "unique_identifier": "com.seriflabs.affinitypublisher", + "token": "affinity-publisher@1", + "installer_format": "zip", + "slug": "affinity-publisher@1/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/airbuddy.json b/ee/maintained-apps/inputs/homebrew/airbuddy.json new file mode 100644 index 0000000000..8b36bb0f6d --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/airbuddy.json @@ -0,0 +1,10 @@ +{ + "name": "AirBuddy", + "unique_identifier": "codes.rambo.AirBuddy", + "token": "airbuddy", + "installer_format": "dmg", + "slug": "airbuddy/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/airdroid.json b/ee/maintained-apps/inputs/homebrew/airdroid.json new file mode 100644 index 0000000000..06b60df709 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/airdroid.json @@ -0,0 +1,10 @@ +{ + "name": "AirDroid", + "unique_identifier": "com.sandstudio.airdroid", + "token": "airdroid", + "installer_format": "dmg", + "slug": "airdroid/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/airparrot.json b/ee/maintained-apps/inputs/homebrew/airparrot.json new file mode 100644 index 0000000000..1cf9530b50 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/airparrot.json @@ -0,0 +1,10 @@ +{ + "name": "AirParrot", + "unique_identifier": "com.squirrels.AirParrot-3", + "token": "airparrot", + "installer_format": "dmg", + "slug": "airparrot/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/airserver.json b/ee/maintained-apps/inputs/homebrew/airserver.json new file mode 100644 index 0000000000..8fc6326e1c --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/airserver.json @@ -0,0 +1,10 @@ +{ + "name": "AirServer", + "unique_identifier": "com.pratikkumar.airserver-mac", + "token": "airserver", + "installer_format": "dmg", + "slug": "airserver/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/airtable.json b/ee/maintained-apps/inputs/homebrew/airtable.json new file mode 100644 index 0000000000..b184da2074 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/airtable.json @@ -0,0 +1,10 @@ +{ + "name": "Airtable", + "unique_identifier": "com.FormaGrid.Airtable", + "token": "airtable", + "installer_format": "dmg", + "slug": "airtable/darwin", + "default_categories": [ + "Developer tools" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/airy.json b/ee/maintained-apps/inputs/homebrew/airy.json new file mode 100644 index 0000000000..134bfca395 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/airy.json @@ -0,0 +1,10 @@ +{ + "name": "Airy", + "unique_identifier": "com.eltima.Airy", + "token": "airy", + "installer_format": "dmg", + "slug": "airy/darwin", + "default_categories": [ + "Developer tools" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/akiflow.json b/ee/maintained-apps/inputs/homebrew/akiflow.json new file mode 100644 index 0000000000..2c03b1711e --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/akiflow.json @@ -0,0 +1,10 @@ +{ + "name": "Akiflow", + "unique_identifier": "com.akiflow.akiflow", + "token": "akiflow", + "installer_format": "dmg", + "slug": "akiflow/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/alcove.json b/ee/maintained-apps/inputs/homebrew/alcove.json new file mode 100644 index 0000000000..ad284762c8 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/alcove.json @@ -0,0 +1,10 @@ +{ + "name": "Alcove", + "unique_identifier": "com.henrikruscon.Alcove", + "token": "alcove", + "installer_format": "zip", + "slug": "alcove/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/aldente.json b/ee/maintained-apps/inputs/homebrew/aldente.json new file mode 100644 index 0000000000..b18457331a --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/aldente.json @@ -0,0 +1,10 @@ +{ + "name": "AlDente", + "unique_identifier": "com.apphousekitchen.aldente-pro", + "token": "aldente", + "installer_format": "dmg", + "slug": "aldente/darwin", + "default_categories": [ + "Utilities" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/alloy.json b/ee/maintained-apps/inputs/homebrew/alloy.json new file mode 100644 index 0000000000..707575b5d0 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/alloy.json @@ -0,0 +1,10 @@ +{ + "name": "Alloy", + "unique_identifier": "org.alloytools.alloy", + "token": "alloy", + "installer_format": "zip", + "slug": "alloy/darwin", + "default_categories": [ + "Developer tools" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/alt-tab.json b/ee/maintained-apps/inputs/homebrew/alt-tab.json new file mode 100644 index 0000000000..2e5329b986 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/alt-tab.json @@ -0,0 +1,10 @@ +{ + "name": "AltTab", + "unique_identifier": "com.lwouis.alt-tab-macos", + "token": "alt-tab", + "installer_format": "zip", + "slug": "alt-tab/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/altair-graphql-client.json b/ee/maintained-apps/inputs/homebrew/altair-graphql-client.json new file mode 100644 index 0000000000..0b7656a40b --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/altair-graphql-client.json @@ -0,0 +1,10 @@ +{ + "name": "Altair GraphQL Client", + "unique_identifier": "com.xkoji.altair", + "token": "altair-graphql-client", + "installer_format": "zip", + "slug": "altair-graphql-client/darwin", + "default_categories": [ + "Developer tools" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/amadeus-pro.json b/ee/maintained-apps/inputs/homebrew/amadeus-pro.json new file mode 100644 index 0000000000..bc20907795 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/amadeus-pro.json @@ -0,0 +1,10 @@ +{ + "name": "Amadeus Pro", + "unique_identifier": "com.HairerSoft.AmadeusPro", + "token": "amadeus-pro", + "installer_format": "zip", + "slug": "amadeus-pro/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/amadine.json b/ee/maintained-apps/inputs/homebrew/amadine.json new file mode 100644 index 0000000000..c40c7894bd --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/amadine.json @@ -0,0 +1,10 @@ +{ + "name": "Amadine", + "unique_identifier": "com.belightsoft.Amadine", + "token": "amadine", + "installer_format": "dmg", + "slug": "amadine/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/amethyst.json b/ee/maintained-apps/inputs/homebrew/amethyst.json new file mode 100644 index 0000000000..57b84ec679 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/amethyst.json @@ -0,0 +1,10 @@ +{ + "name": "Amethyst", + "unique_identifier": "com.amethyst.Amethyst", + "token": "amethyst", + "installer_format": "zip", + "slug": "amethyst/darwin", + "default_categories": [ + "Utilities" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/amie.json b/ee/maintained-apps/inputs/homebrew/amie.json new file mode 100644 index 0000000000..d7b1976693 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/amie.json @@ -0,0 +1,10 @@ +{ + "name": "Amie", + "unique_identifier": "so.amie.electron-app", + "token": "amie", + "installer_format": "zip", + "slug": "amie/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/angry-ip-scanner.json b/ee/maintained-apps/inputs/homebrew/angry-ip-scanner.json new file mode 100644 index 0000000000..e3495a01b0 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/angry-ip-scanner.json @@ -0,0 +1,10 @@ +{ + "name": "Angry IP Scanner", + "unique_identifier": "net.azib.ipscan", + "token": "angry-ip-scanner", + "installer_format": "zip", + "slug": "angry-ip-scanner/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/antinote.json b/ee/maintained-apps/inputs/homebrew/antinote.json new file mode 100644 index 0000000000..32d6e854df --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/antinote.json @@ -0,0 +1,10 @@ +{ + "name": "Antinote", + "unique_identifier": "com.chabomakers.Antinote", + "token": "antinote", + "installer_format": "dmg", + "slug": "antinote/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/anydo.json b/ee/maintained-apps/inputs/homebrew/anydo.json new file mode 100644 index 0000000000..ed1c5f9700 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/anydo.json @@ -0,0 +1,10 @@ +{ + "name": "Any.do", + "unique_identifier": "com.anydo.mac", + "token": "anydo", + "installer_format": "dmg", + "slug": "anydo/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/anytype.json b/ee/maintained-apps/inputs/homebrew/anytype.json new file mode 100644 index 0000000000..28d7902c56 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/anytype.json @@ -0,0 +1,10 @@ +{ + "name": "Anytype", + "unique_identifier": "com.anytype.anytype", + "token": "anytype", + "installer_format": "dmg", + "slug": "anytype/darwin", + "default_categories": [ + "Security" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/apidog.json b/ee/maintained-apps/inputs/homebrew/apidog.json new file mode 100644 index 0000000000..d47e8a5753 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/apidog.json @@ -0,0 +1,10 @@ +{ + "name": "Apidog", + "unique_identifier": "com.apidog.app", + "token": "apidog", + "installer_format": "dmg", + "slug": "apidog/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/app-fair.json b/ee/maintained-apps/inputs/homebrew/app-fair.json new file mode 100644 index 0000000000..dbce510d98 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/app-fair.json @@ -0,0 +1,10 @@ +{ + "name": "App Fair", + "unique_identifier": "app.App-Fair", + "token": "app-fair", + "installer_format": "zip", + "slug": "app-fair/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/appium-inspector.json b/ee/maintained-apps/inputs/homebrew/appium-inspector.json new file mode 100644 index 0000000000..a64fa17e76 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/appium-inspector.json @@ -0,0 +1,10 @@ +{ + "name": "Appium Inspector GUI", + "unique_identifier": "io.appium.inspector", + "token": "appium-inspector", + "installer_format": "zip", + "slug": "appium-inspector/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/applite.json b/ee/maintained-apps/inputs/homebrew/applite.json new file mode 100644 index 0000000000..02bb9a240d --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/applite.json @@ -0,0 +1,10 @@ +{ + "name": "Applite", + "unique_identifier": "dev.aerolite.Applite", + "token": "applite", + "installer_format": "dmg", + "slug": "applite/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/asset-catalog-tinkerer.json b/ee/maintained-apps/inputs/homebrew/asset-catalog-tinkerer.json new file mode 100644 index 0000000000..0fbec7b8df --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/asset-catalog-tinkerer.json @@ -0,0 +1,10 @@ +{ + "name": "Asset Catalog Tinkerer", + "unique_identifier": "br.com.guilhermerambo.Asset-Catalog-Tinkerer", + "token": "asset-catalog-tinkerer", + "installer_format": "zip", + "slug": "asset-catalog-tinkerer/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/atext.json b/ee/maintained-apps/inputs/homebrew/atext.json new file mode 100644 index 0000000000..f6072dea30 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/atext.json @@ -0,0 +1,10 @@ +{ + "name": "aText", + "unique_identifier": "com.trankynam.aText", + "token": "atext", + "installer_format": "dmg", + "slug": "atext/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/audio-hijack.json b/ee/maintained-apps/inputs/homebrew/audio-hijack.json new file mode 100644 index 0000000000..124961d9e4 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/audio-hijack.json @@ -0,0 +1,10 @@ +{ + "name": "Audio Hijack", + "unique_identifier": "com.rogueamoeba.audiohijack", + "token": "audio-hijack", + "installer_format": "zip", + "slug": "audio-hijack/darwin", + "default_categories": [ + "Productivity" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/aviatrix-vpn-client.json b/ee/maintained-apps/inputs/homebrew/aviatrix-vpn-client.json new file mode 100644 index 0000000000..8096825cfa --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/aviatrix-vpn-client.json @@ -0,0 +1,10 @@ +{ + "name": "Aviatrix VPN Client", + "unique_identifier": "org.pythonmac.unspecified.AviatrixVPNClient", + "token": "aviatrix-vpn-client", + "installer_format": "pkg", + "slug": "aviatrix-vpn-client/darwin", + "default_categories": [ + "Security" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/inputs/homebrew/axure-rp.json b/ee/maintained-apps/inputs/homebrew/axure-rp.json new file mode 100644 index 0000000000..29e2b6bb81 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/axure-rp.json @@ -0,0 +1,10 @@ +{ + "name": "Axure RP", + "unique_identifier": "com.axure.AxureRP11", + "token": "axure-rp", + "installer_format": "dmg", + "slug": "axure-rp/darwin", + "default_categories": [ + "Developer tools" + ] +} \ No newline at end of file diff --git a/ee/maintained-apps/outputs/a-better-finder-rename/darwin.json b/ee/maintained-apps/outputs/a-better-finder-rename/darwin.json new file mode 100644 index 0000000000..a307ffe614 --- /dev/null +++ b/ee/maintained-apps/outputs/a-better-finder-rename/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "12.30", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'net.publicspace.abfr12';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'net.publicspace.abfr12' AND version_compare(bundle_short_version, '12.30') < 0);" + }, + "installer_url": "https://www.publicspace.net/download/ABFRX12.dmg", + "install_script_ref": "1cbc7e4f", + "uninstall_script_ref": "25b72319", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "1cbc7e4f": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'net.publicspace.abfr12'\nif [ -d \"$APPDIR/A Better Finder Rename 12.app\" ]; then\n\tsudo mv \"$APPDIR/A Better Finder Rename 12.app\" \"$TMPDIR/A Better Finder Rename 12.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/A Better Finder Rename 12.app\" \"$APPDIR\"\nrelaunch_application 'net.publicspace.abfr12'\n", + "25b72319": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/A Better Finder Rename 12.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/A Better Finder Rename 12'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apple.helpd/Generated/net.publicspace.abfr12.help*'\ntrash $LOGGED_IN_USER '~/Library/Caches/net.publicspace.abfr*'\ntrash $LOGGED_IN_USER '~/Library/Cookies/net.publicspace.abfr*.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/net.publicspace.abfr*'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/net.publicspace.abfr*.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/net.publicspace.abfr*.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/net.publicspace.abfr*.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/acorn/darwin.json b/ee/maintained-apps/outputs/acorn/darwin.json new file mode 100644 index 0000000000..ae20176519 --- /dev/null +++ b/ee/maintained-apps/outputs/acorn/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "8.5.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.flyingmeat.Acorn8';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.flyingmeat.Acorn8' AND version_compare(bundle_short_version, '8.5.1') < 0);" + }, + "installer_url": "https://flyingmeat.com/download/Acorn-8.5.1.zip", + "install_script_ref": "299f47da", + "uninstall_script_ref": "d8d84d04", + "sha256": "95f140cda6e7e13ba1d881e2add2bbff2aaa8dabdc74d96c7536205454e94a77", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "299f47da": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.flyingmeat.Acorn8'\nif [ -d \"$APPDIR/Acorn.app\" ]; then\n\tsudo mv \"$APPDIR/Acorn.app\" \"$TMPDIR/Acorn.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Acorn.app\" \"$APPDIR\"\nrelaunch_application 'com.flyingmeat.Acorn8'\n", + "d8d84d04": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Acorn.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Acorn'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.flyingmeat.Acorn8'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.flyingmeat.Acorn8.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.flyingmeat.Acorn8.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/activedock/darwin.json b/ee/maintained-apps/outputs/activedock/darwin.json new file mode 100644 index 0000000000..5f69a89045 --- /dev/null +++ b/ee/maintained-apps/outputs/activedock/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.860", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.sergey-gerasimenko.ActiveDock-2';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.sergey-gerasimenko.ActiveDock-2' AND version_compare(bundle_short_version, '2.860') < 0);" + }, + "installer_url": "https://macplus-software.com/downloads/ActiveDock.zip", + "install_script_ref": "44aae78e", + "uninstall_script_ref": "9850444d", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "44aae78e": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.sergey-gerasimenko.ActiveDock-2'\nif [ -d \"$APPDIR/ActiveDock 2.app\" ]; then\n\tsudo mv \"$APPDIR/ActiveDock 2.app\" \"$TMPDIR/ActiveDock 2.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/ActiveDock 2.app\" \"$APPDIR\"\nrelaunch_application 'com.sergey-gerasimenko.ActiveDock-2'\n", + "9850444d": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/ActiveDock 2.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/ActiveDock 2'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.sergey-gerasimenko.ActiveDock-2'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.sergey-gerasimenko.ActiveDock-2'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.sergey-gerasimenko.ActiveDock-2'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.sergey-gerasimenko.ActiveDock-2.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/activitywatch/darwin.json b/ee/maintained-apps/outputs/activitywatch/darwin.json new file mode 100644 index 0000000000..a786f6a255 --- /dev/null +++ b/ee/maintained-apps/outputs/activitywatch/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "0.13.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'net.activitywatch.ActivityWatch';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'net.activitywatch.ActivityWatch' AND version_compare(bundle_short_version, '0.13.2') < 0);" + }, + "installer_url": "https://github.com/ActivityWatch/activitywatch/releases/download/v0.13.2/activitywatch-v0.13.2-macos-x86_64.dmg", + "install_script_ref": "14c0a917", + "uninstall_script_ref": "6025409f", + "sha256": "22f3bce0e169457902b2c8d2967701cde887171f737d281dd414a210bd3090ed", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "14c0a917": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'net.activitywatch.ActivityWatch'\nif [ -d \"$APPDIR/ActivityWatch.app\" ]; then\n\tsudo mv \"$APPDIR/ActivityWatch.app\" \"$TMPDIR/ActivityWatch.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/ActivityWatch.app\" \"$APPDIR\"\nrelaunch_application 'net.activitywatch.ActivityWatch'\n", + "6025409f": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/ActivityWatch.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/activitywatch'\ntrash $LOGGED_IN_USER '~/Library/Caches/activitywatch'\ntrash $LOGGED_IN_USER '~/Library/Logs/activitywatch'\n" + } +} diff --git a/ee/maintained-apps/outputs/actual/darwin.json b/ee/maintained-apps/outputs/actual/darwin.json new file mode 100644 index 0000000000..494b6892ec --- /dev/null +++ b/ee/maintained-apps/outputs/actual/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "26.6.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.actualbudget.actual';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.actualbudget.actual' AND version_compare(bundle_short_version, '26.6.0') < 0);" + }, + "installer_url": "https://github.com/actualbudget/actual/releases/download/v26.6.0/Actual-mac-arm64.dmg", + "install_script_ref": "631bbb42", + "uninstall_script_ref": "27bb5492", + "sha256": "32f6893b599e8408b21e9cfe4b0d2530f41951c31100a41d0585b815691c577f", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "27bb5492": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Actual.app\"\ntrash $LOGGED_IN_USER '~/Documents/Actual'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Actual'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.actualbudget.actual.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Logs/Actual'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.actualbudget.actual.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.actualbudget.actual.savedState'\n", + "631bbb42": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.actualbudget.actual'\nif [ -d \"$APPDIR/Actual.app\" ]; then\n\tsudo mv \"$APPDIR/Actual.app\" \"$TMPDIR/Actual.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Actual.app\" \"$APPDIR\"\nrelaunch_application 'com.actualbudget.actual'\n" + } +} diff --git a/ee/maintained-apps/outputs/adguard/darwin.json b/ee/maintained-apps/outputs/adguard/darwin.json new file mode 100644 index 0000000000..115b2f52eb --- /dev/null +++ b/ee/maintained-apps/outputs/adguard/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.18.0.2089", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.adguard.mac.adguard';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.adguard.mac.adguard' AND version_compare(bundle_short_version, '2.18.0.2089') < 0);" + }, + "installer_url": "https://static.adguard.com/mac/release/AdGuard-2.18.0.2089.dmg", + "install_script_ref": "fd52311a", + "uninstall_script_ref": "176886c7", + "sha256": "d69d8ab59f1d73c867eeeb719262b5658d88680eeb84c9e6e511589c406c033a", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "176886c7": "#!/bin/bash\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.adguard.mac.adguard.helper'\nremove_launchctl_service 'com.adguard.mac.adguard.pac'\nremove_launchctl_service 'com.adguard.mac.adguard.tun-helper'\nremove_launchctl_service 'com.adguard.mac.adguard.xpcgate2'\nquit_application 'com.adguard.mac.adguard'\nremove_pkg_files 'com.adguard.mac.adguard-pkg'\nforget_pkg 'com.adguard.mac.adguard-pkg'\nsudo rm -rf '/Library/Application Support/AdGuard Software/com.adguard.mac.adguard'\nsudo rm -rf '/Library/Application Support/com.adguard.Adguard'\nsudo rm -rf '/Library/com.adguard.mac.adguard.pac'\nsudo rmdir '/Library/Application Support/AdGuard Software'\nsudo rm -rf '/Library/Logs/com.adguard.mac.adguard'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/*com.adguard.mac*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Adguard'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.adguard.*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.adguard.mac.adguard.loginhelper.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.adguard.*'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.adguard.mac.*'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.adguard.Adguard.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/*.com.adguard.mac'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.adguard.mac.*'\ntrash $LOGGED_IN_USER '~/Library/Logs/Adguard'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.adguard.*.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.adguard.mac.adguard.savedState'\n", + "fd52311a": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# install pkg files\nquit_and_track_application 'com.adguard.mac.adguard'\nsudo installer -pkg \"$TMPDIR/AdGuard.pkg\" -target /\nrelaunch_application 'com.adguard.mac.adguard'\n" + } +} diff --git a/ee/maintained-apps/outputs/adlock/darwin.json b/ee/maintained-apps/outputs/adlock/darwin.json new file mode 100644 index 0000000000..8e8119793f --- /dev/null +++ b/ee/maintained-apps/outputs/adlock/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.1.7.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.hankuper.adlock.desktop';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.hankuper.adlock.desktop' AND version_compare(bundle_short_version, '2.1.7.3') < 0);" + }, + "installer_url": "https://downloads.adlock.com/mac/AdLock_Installer.dmg", + "install_script_ref": "ec52d1d9", + "uninstall_script_ref": "09c6fd06", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "09c6fd06": "#!/bin/bash\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'application.com.hankuper.adlock.desktop.146095782.146095788'\nremove_launchctl_service 'com.hankuper.adlock.desktop.launcher'\nquit_application 'com.hankuper.adlock.desktop'\nremove_pkg_files 'com.hankuper.adlock-desktop-ui.pkg'\nforget_pkg 'com.hankuper.adlock-desktop-ui.pkg'\nremove_pkg_files 'com.hankuper.adlock-resourses.pkg'\nforget_pkg 'com.hankuper.adlock-resourses.pkg'\nsudo rm -rf '/Applications/AdLock.app'\nsudo rm -rf '/Library/Application Support/com.hankuper.adlock.desktop'\nsudo rm -rf '/Library/Logs/DiagnosticReports/com.hankuper.adlock.desktop*.ips'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.hankuper.adlock.desktop.launcher.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.hankuper.adlock.desktop'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.hankuper.adlock.desktop'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.hankuper.adlock.desktop*.plist'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.hankuper.adlock.desktop'\n", + "ec52d1d9": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# install pkg files\nquit_and_track_application 'com.hankuper.adlock.desktop'\nsudo installer -pkg \"$TMPDIR/AdLock-Installer.pkg\" -target /\nrelaunch_application 'com.hankuper.adlock.desktop'\n" + } +} diff --git a/ee/maintained-apps/outputs/advanced-renamer/darwin.json b/ee/maintained-apps/outputs/advanced-renamer/darwin.json new file mode 100644 index 0000000000..4dd918ca6e --- /dev/null +++ b/ee/maintained-apps/outputs/advanced-renamer/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "4.23", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.HulubuluSoftware.AdvancedRenamer';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.HulubuluSoftware.AdvancedRenamer' AND version_compare(bundle_short_version, '4.23') < 0);" + }, + "installer_url": "https://www.advancedrenamer.com/down/macos/arm/AdvancedRenamer_4_23.dmg", + "install_script_ref": "6176c798", + "uninstall_script_ref": "e844bc22", + "sha256": "2dac93ad40a4a825b7ef22d6ec099fc8f1edd38520af44521e883c36842fb2da", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "6176c798": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.HulubuluSoftware.AdvancedRenamer'\nif [ -d \"$APPDIR/Advanced Renamer.app\" ]; then\n\tsudo mv \"$APPDIR/Advanced Renamer.app\" \"$TMPDIR/Advanced Renamer.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Advanced Renamer.app\" \"$APPDIR\"\nrelaunch_application 'com.HulubuluSoftware.AdvancedRenamer'\n", + "e844bc22": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Advanced Renamer.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/com.HulubuluSoftware.AdvancedRenamer'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.HulubuluSoftware.AdvancedRenamer'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.HulubuluSoftware.AdvancedRenamer.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/affinity-designer/darwin.json b/ee/maintained-apps/outputs/affinity-designer/darwin.json new file mode 100644 index 0000000000..c991e73236 --- /dev/null +++ b/ee/maintained-apps/outputs/affinity-designer/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.6.5", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.seriflabs.affinitydesigner2';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.seriflabs.affinitydesigner2' AND version_compare(bundle_short_version, '2.6.5') < 0);" + }, + "installer_url": "https://affinity-update.s3.amazonaws.com/mac2/retail/Affinity%20Designer%202%20Affinity%20Store%203782.zip", + "install_script_ref": "a74c1958", + "uninstall_script_ref": "8f0b4ab9", + "sha256": "b07e7237ced47fccabd07ed8d1c282c9918bbffbae23a7df5e1c55b2620834f9", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "8f0b4ab9": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Affinity Designer 2.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Affinity Designer 2'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.seriflabs.affinitydesigner2'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.seriflabs.affinitydesigner2'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.seriflabs.affinitydesigner2.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.seriflabs.affinitydesigner2.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.seriflabs.affinitydesigner2'\n", + "a74c1958": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.seriflabs.affinitydesigner2'\nif [ -d \"$APPDIR/Affinity Designer 2.app\" ]; then\n\tsudo mv \"$APPDIR/Affinity Designer 2.app\" \"$TMPDIR/Affinity Designer 2.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Affinity Designer 2.app\" \"$APPDIR\"\nrelaunch_application 'com.seriflabs.affinitydesigner2'\n" + } +} diff --git a/ee/maintained-apps/outputs/affinity-designer@1/darwin.json b/ee/maintained-apps/outputs/affinity-designer@1/darwin.json new file mode 100644 index 0000000000..f9babf52bb --- /dev/null +++ b/ee/maintained-apps/outputs/affinity-designer@1/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.10.8", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.seriflabs.affinitydesigner';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.seriflabs.affinitydesigner' AND version_compare(bundle_short_version, '1.10.8') < 0);" + }, + "installer_url": "https://affinity-update.s3.amazonaws.com/mac/retail/Affinity%20Designer-1.10.8.app.zip", + "install_script_ref": "86ee1ced", + "uninstall_script_ref": "e1335ca6", + "sha256": "7c3d9ce7e42dd8f3b3cf7f37aaffde3a59f33087007b9a2c81d86baceaa39ef6", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "86ee1ced": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.seriflabs.affinitydesigner'\nif [ -d \"$APPDIR/Affinity Designer.app\" ]; then\n\tsudo mv \"$APPDIR/Affinity Designer.app\" \"$TMPDIR/Affinity Designer.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Affinity Designer.app\" \"$APPDIR\"\nrelaunch_application 'com.seriflabs.affinitydesigner'\n", + "e1335ca6": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Affinity Designer.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Affinity Designer'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.seriflabs.affinitydesigner'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.seriflabs.affinitydesigner.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/affinity-photo/darwin.json b/ee/maintained-apps/outputs/affinity-photo/darwin.json new file mode 100644 index 0000000000..5ef304cc33 --- /dev/null +++ b/ee/maintained-apps/outputs/affinity-photo/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.6.5", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.seriflabs.affinityphoto2';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.seriflabs.affinityphoto2' AND version_compare(bundle_short_version, '2.6.5') < 0);" + }, + "installer_url": "https://affinity-update.s3.amazonaws.com/mac2/retail/Affinity%20Photo%202%20Affinity%20Store%203782.zip", + "install_script_ref": "494c4b46", + "uninstall_script_ref": "a950df54", + "sha256": "8ea03dfac76cebe9eeceef996ac585813b47624217c3f23e6921cbd9580a0788", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "494c4b46": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.seriflabs.affinityphoto2'\nif [ -d \"$APPDIR/Affinity Photo 2.app\" ]; then\n\tsudo mv \"$APPDIR/Affinity Photo 2.app\" \"$TMPDIR/Affinity Photo 2.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Affinity Photo 2.app\" \"$APPDIR\"\nrelaunch_application 'com.seriflabs.affinityphoto2'\n", + "a950df54": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Affinity Photo 2.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Affinity Photo 2'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.seriflabs.affinityphoto2'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.seriflabs.affinityphoto2'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.seriflabs.affinityphoto2.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.seriflabs.affinityphoto2.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.seriflabs.affinityphoto2'\n" + } +} diff --git a/ee/maintained-apps/outputs/affinity-photo@1/darwin.json b/ee/maintained-apps/outputs/affinity-photo@1/darwin.json new file mode 100644 index 0000000000..e81ed918de --- /dev/null +++ b/ee/maintained-apps/outputs/affinity-photo@1/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.10.8", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.seriflabs.affinityphoto';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.seriflabs.affinityphoto' AND version_compare(bundle_short_version, '1.10.8') < 0);" + }, + "installer_url": "https://affinity-update.s3.amazonaws.com/mac/retail/Affinity%20Photo-1.10.8.app.zip", + "install_script_ref": "4433ad15", + "uninstall_script_ref": "8cd18b1a", + "sha256": "02b1f30f890ae58cab9fa8bf9a509f4a9d8ad8c09de79baf499cd6f6fdd5bfb1", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "4433ad15": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.seriflabs.affinityphoto'\nif [ -d \"$APPDIR/Affinity Photo.app\" ]; then\n\tsudo mv \"$APPDIR/Affinity Photo.app\" \"$TMPDIR/Affinity Photo.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Affinity Photo.app\" \"$APPDIR\"\nrelaunch_application 'com.seriflabs.affinityphoto'\n", + "8cd18b1a": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Affinity Photo.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Affinity Photo'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.seriflabs.affinityphoto'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.seriflabs.affinityphoto.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/affinity-publisher/darwin.json b/ee/maintained-apps/outputs/affinity-publisher/darwin.json new file mode 100644 index 0000000000..93fb82de0c --- /dev/null +++ b/ee/maintained-apps/outputs/affinity-publisher/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.6.5", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.seriflabs.affinitypublisher2';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.seriflabs.affinitypublisher2' AND version_compare(bundle_short_version, '2.6.5') < 0);" + }, + "installer_url": "https://affinity-update.s3.amazonaws.com/mac2/retail/Affinity%20Publisher%202%20Affinity%20Store%203782.zip", + "install_script_ref": "76c7f1e0", + "uninstall_script_ref": "1aaa3570", + "sha256": "06b9628d108e7ecee5a2c4b3d607ba58996d5cdef4ef83a76195db48c1df9efa", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "1aaa3570": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Affinity Publisher 2.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Affinity Publisher 2'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.seriflabs.affinitypublisher2'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.seriflabs.affinitypublisher2'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.seriflabs.affinitypublisher2.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.seriflabs.affinitypublisher2.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.seriflabs.affinitypublisher2'\n", + "76c7f1e0": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.seriflabs.affinitypublisher2'\nif [ -d \"$APPDIR/Affinity Publisher 2.app\" ]; then\n\tsudo mv \"$APPDIR/Affinity Publisher 2.app\" \"$TMPDIR/Affinity Publisher 2.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Affinity Publisher 2.app\" \"$APPDIR\"\nrelaunch_application 'com.seriflabs.affinitypublisher2'\n" + } +} diff --git a/ee/maintained-apps/outputs/affinity-publisher@1/darwin.json b/ee/maintained-apps/outputs/affinity-publisher@1/darwin.json new file mode 100644 index 0000000000..0c3dc50cb4 --- /dev/null +++ b/ee/maintained-apps/outputs/affinity-publisher@1/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.10.8", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.seriflabs.affinitypublisher';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.seriflabs.affinitypublisher' AND version_compare(bundle_short_version, '1.10.8') < 0);" + }, + "installer_url": "https://affinity-update.s3.amazonaws.com/mac/retail/Affinity%20Publisher-1.10.8.app.zip", + "install_script_ref": "3be86f9a", + "uninstall_script_ref": "0f402e8a", + "sha256": "6d5675970b745775bd5c35d28d20e1c68fe0771cdc2c17161f6762c2730a1278", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "0f402e8a": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Affinity Publisher.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Affinity Publisher'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.seriflabs.affinitypublisher'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.seriflabs.affinitypublisher.savedState'\n", + "3be86f9a": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.seriflabs.affinitypublisher'\nif [ -d \"$APPDIR/Affinity Publisher.app\" ]; then\n\tsudo mv \"$APPDIR/Affinity Publisher.app\" \"$TMPDIR/Affinity Publisher.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Affinity Publisher.app\" \"$APPDIR\"\nrelaunch_application 'com.seriflabs.affinitypublisher'\n" + } +} diff --git a/ee/maintained-apps/outputs/airbuddy/darwin.json b/ee/maintained-apps/outputs/airbuddy/darwin.json new file mode 100644 index 0000000000..68c59c8d27 --- /dev/null +++ b/ee/maintained-apps/outputs/airbuddy/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.8.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'codes.rambo.AirBuddy';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'codes.rambo.AirBuddy' AND version_compare(bundle_short_version, '2.8.1') < 0);" + }, + "installer_url": "https://su.airbuddy.app/kCRSAmcjBc/AirBuddy_v2.8.1-660.dmg", + "install_script_ref": "821a79ce", + "uninstall_script_ref": "a18b7e7a", + "sha256": "61e3b5ce63d1345e3a126b91a75e3627d491bd6cc7ada5abd7e56eaad849cec4", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "821a79ce": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'codes.rambo.AirBuddy'\nif [ -d \"$APPDIR/AirBuddy.app\" ]; then\n\tsudo mv \"$APPDIR/AirBuddy.app\" \"$TMPDIR/AirBuddy.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/AirBuddy.app\" \"$APPDIR\"\nrelaunch_application 'codes.rambo.AirBuddy'\n", + "a18b7e7a": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/AirBuddy.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/codes.rambo.AirBuddy*'\ntrash $LOGGED_IN_USER '~/Library/Caches/codes.rambo.AirBuddy'\ntrash $LOGGED_IN_USER '~/Library/Caches/codes.rambo.AirCore'\ntrash $LOGGED_IN_USER '~/Library/Containers/codes.rambo.AirBuddy*'\ntrash $LOGGED_IN_USER '~/Library/Group Containers/*.group.codes.rambo.AirBuddy'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/codes.rambo.AirBuddy.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/LaunchAgents/codes.rambo.AirBuddyHelper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/codes.rambo.AirBuddy.plist'\ntrash $LOGGED_IN_USER '~/Library/SyncedPreferences/codes.rambo.AirBuddy.plist'\ntrash $LOGGED_IN_USER '~/Library/SyncedPreferences/com.apple.kvs/ChangeTokens/NoEncryption/AirBuddy'\n" + } +} diff --git a/ee/maintained-apps/outputs/airdroid/darwin.json b/ee/maintained-apps/outputs/airdroid/darwin.json new file mode 100644 index 0000000000..d68f2c9890 --- /dev/null +++ b/ee/maintained-apps/outputs/airdroid/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "3.7.3.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.sandstudio.airdroid';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.sandstudio.airdroid' AND version_compare(bundle_short_version, '3.7.3.1') < 0);" + }, + "installer_url": "https://dl.airdroid.com/AirDroid_Desktop_Client_3.7.3.1.dmg", + "install_script_ref": "14840e1a", + "uninstall_script_ref": "0e745983", + "sha256": "f0d8199dedc6daa3a93ca672d5e1c8d33554b07bc7371ba4538802926ea1acba", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "0e745983": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/AirDroid.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/AirDroid'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.sandstudio.airdroid'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.sandstudio.airdroid'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.sandstudio.airdroid.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/Databases/___IndexedDB/com.sandstudio.airdroid'\n", + "14840e1a": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.sandstudio.airdroid'\nif [ -d \"$APPDIR/AirDroid.app\" ]; then\n\tsudo mv \"$APPDIR/AirDroid.app\" \"$TMPDIR/AirDroid.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/AirDroid.app\" \"$APPDIR\"\nrelaunch_application 'com.sandstudio.airdroid'\n" + } +} diff --git a/ee/maintained-apps/outputs/airparrot/darwin.json b/ee/maintained-apps/outputs/airparrot/darwin.json new file mode 100644 index 0000000000..853a9515c9 --- /dev/null +++ b/ee/maintained-apps/outputs/airparrot/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "3.1.7", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.squirrels.AirParrot-3';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.squirrels.AirParrot-3' AND version_compare(bundle_short_version, '3.1.7') < 0);" + }, + "installer_url": "https://download.airsquirrels.com/AirParrot3/Mac/AirParrot-3.1.7.dmg", + "install_script_ref": "81749f4f", + "uninstall_script_ref": "cc28f4b8", + "sha256": "acb42bb53c1dfde1fec6835fd8fd89a278b215a97f1e08545e45780cebb19409", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "81749f4f": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.squirrels.AirParrot-3'\nif [ -d \"$APPDIR/AirParrot 3.app\" ]; then\n\tsudo mv \"$APPDIR/AirParrot 3.app\" \"$TMPDIR/AirParrot 3.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/AirParrot 3.app\" \"$APPDIR\"\nrelaunch_application 'com.squirrels.AirParrot-3'\n", + "cc28f4b8": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.squirrels.AirParrot-3'\nsudo rm -rf \"$APPDIR/AirParrot 3.app\"\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.squirrels.AirParrot-*.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/airserver/darwin.json b/ee/maintained-apps/outputs/airserver/darwin.json new file mode 100644 index 0000000000..0c4c43eb59 --- /dev/null +++ b/ee/maintained-apps/outputs/airserver/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "7.3.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.pratikkumar.airserver-mac';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.pratikkumar.airserver-mac' AND version_compare(bundle_short_version, '7.3.3') < 0);" + }, + "installer_url": "https://dl.airserver.com/mac/AirServer-7.3.3.dmg", + "install_script_ref": "2c88b93c", + "uninstall_script_ref": "8ac2c4c2", + "sha256": "e8a6ecd95e5ce8fa1ec92e6107c737e7c3c3ef5eaff6f32cadf1ffa7515faeb0", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "2c88b93c": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.pratikkumar.airserver-mac'\nif [ -d \"$APPDIR/AirServer.app\" ]; then\n\tsudo mv \"$APPDIR/AirServer.app\" \"$TMPDIR/AirServer.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/AirServer.app\" \"$APPDIR\"\nrelaunch_application 'com.pratikkumar.airserver-mac'\n", + "8ac2c4c2": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/AirServer.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/com.pratikkumar.airserver-mac'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.pratikkumar.airserver-mac.AirServer.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.pratikkumar.airserver-mac.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/airtable/darwin.json b/ee/maintained-apps/outputs/airtable/darwin.json new file mode 100644 index 0000000000..fff7f90a5e --- /dev/null +++ b/ee/maintained-apps/outputs/airtable/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.6.6", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.FormaGrid.Airtable';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.FormaGrid.Airtable' AND version_compare(bundle_short_version, '1.6.6') < 0);" + }, + "installer_url": "https://static.airtable.com/download/macos/Airtable-1.6.6.dmg", + "install_script_ref": "6a001ebb", + "uninstall_script_ref": "7bd924a9", + "sha256": "cc677bb77a76437cf423cb49675bdbb6e54840f1c29ea80d3910f2ed41ceb627", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "6a001ebb": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.FormaGrid.Airtable'\nif [ -d \"$APPDIR/Airtable.app\" ]; then\n\tsudo mv \"$APPDIR/Airtable.app\" \"$TMPDIR/Airtable.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Airtable.app\" \"$APPDIR\"\nrelaunch_application 'com.FormaGrid.Airtable'\n", + "7bd924a9": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.FormaGrid.Airtable'\nsudo rm -rf '/Library/Logs/DiagnosticReports/Airtable*.*_resource.diag'\nsudo rm -rf \"$APPDIR/Airtable.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Airtable'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.FormaGrid.Airtable*'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.FormaGrid.Airtable.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.FormaGrid.Airtable*'\ntrash $LOGGED_IN_USER '~/Library/Logs/Airtable'\ntrash $LOGGED_IN_USER '~/Library/Preferences/ByHost/com.FormaGrid.Airtable.ShipIt.*.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.FormaGrid.Airtable*.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.FormaGrid.Airtable.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/airy/darwin.json b/ee/maintained-apps/outputs/airy/darwin.json new file mode 100644 index 0000000000..f082e6a569 --- /dev/null +++ b/ee/maintained-apps/outputs/airy/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "3.29.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.eltima.Airy';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.eltima.Airy' AND version_compare(bundle_short_version, '3.29.2') < 0);" + }, + "installer_url": "https://cdn.airy-youtube-downloader.com/products/airy/mac/download/airy.dmg", + "install_script_ref": "7bf9a353", + "uninstall_script_ref": "9b5d653f", + "sha256": "no_check", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "7bf9a353": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.eltima.Airy'\nif [ -d \"$APPDIR/Airy.app\" ]; then\n\tsudo mv \"$APPDIR/Airy.app\" \"$TMPDIR/Airy.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Airy.app\" \"$APPDIR\"\nrelaunch_application 'com.eltima.Airy'\n", + "9b5d653f": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.eltima.Airy'\nsudo rm -rf \"$APPDIR/Airy.app\"\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.eltima.Airy.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/akiflow/darwin.json b/ee/maintained-apps/outputs/akiflow/darwin.json new file mode 100644 index 0000000000..f3f0abf2b5 --- /dev/null +++ b/ee/maintained-apps/outputs/akiflow/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.74.21", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.akiflow.akiflow';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.akiflow.akiflow' AND version_compare(bundle_short_version, '2.74.21') < 0);" + }, + "installer_url": "https://download.akiflow.com/builds/Akiflow-2.74.21-d6d9f817-universal.dmg", + "install_script_ref": "19097683", + "uninstall_script_ref": "9d10ecef", + "sha256": "41a5c10cd9118e2ff3acdfc372b3e2cdcf2b6af7e7822c0f3cf13458d340eee7", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "19097683": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.akiflow.akiflow'\nif [ -d \"$APPDIR/Akiflow.app\" ]; then\n\tsudo mv \"$APPDIR/Akiflow.app\" \"$TMPDIR/Akiflow.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Akiflow.app\" \"$APPDIR\"\nrelaunch_application 'com.akiflow.akiflow'\n", + "9d10ecef": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Akiflow.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Akiflow'\ntrash $LOGGED_IN_USER '~/Library/Preferences/Akiflow'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.akiflow.akiflow.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.akiflow.akiflow.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/alcove/darwin.json b/ee/maintained-apps/outputs/alcove/darwin.json new file mode 100644 index 0000000000..b957b34eff --- /dev/null +++ b/ee/maintained-apps/outputs/alcove/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.7.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.henrikruscon.Alcove';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.henrikruscon.Alcove' AND version_compare(bundle_short_version, '1.7.2') < 0);" + }, + "installer_url": "https://github.com/henrikruscon/alcove-releases/releases/download/1.7.2/Alcove.zip", + "install_script_ref": "bdb62bd2", + "uninstall_script_ref": "61446eae", + "sha256": "83357f05d2edd1c978f7470f1cf2b943a4b81d168723f7b8cdc39d9ccf8c5588", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "61446eae": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Alcove.app\"\ntrash $LOGGED_IN_USER '~/Library/Caches/com.henrikruscon.Alcove'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.henrikruscon.Alcove'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.henrikruscon.Alcove.plist'\n", + "bdb62bd2": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.henrikruscon.Alcove'\nif [ -d \"$APPDIR/Alcove.app\" ]; then\n\tsudo mv \"$APPDIR/Alcove.app\" \"$TMPDIR/Alcove.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Alcove.app\" \"$APPDIR\"\nrelaunch_application 'com.henrikruscon.Alcove'\n" + } +} diff --git a/ee/maintained-apps/outputs/aldente/darwin.json b/ee/maintained-apps/outputs/aldente/darwin.json new file mode 100644 index 0000000000..cf27b15dc8 --- /dev/null +++ b/ee/maintained-apps/outputs/aldente/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.37.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.apphousekitchen.aldente-pro';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.apphousekitchen.aldente-pro' AND version_compare(bundle_short_version, '1.37.3') < 0);" + }, + "installer_url": "https://apphousekitchen.com/aldente/AlDente1.37.3.dmg", + "install_script_ref": "5e5ca0a4", + "uninstall_script_ref": "7abc4904", + "sha256": "468ac2c11f1d3310e4e9a3c68d32bc8d514282c63d6d2e189f469415a468bdee", + "default_categories": [ + "Utilities" + ] + } + ], + "refs": { + "5e5ca0a4": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.apphousekitchen.aldente-pro'\nif [ -d \"$APPDIR/AlDente.app\" ]; then\n\tsudo mv \"$APPDIR/AlDente.app\" \"$TMPDIR/AlDente.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/AlDente.app\" \"$APPDIR\"\nrelaunch_application 'com.apphousekitchen.aldente-pro'\n", + "7abc4904": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'com.apphousekitchen.aldente-pro.helper'\nquit_application 'com.apphousekitchen.aldente-pro'\nsudo rm -rf '/Library/PrivilegedHelperTools/com.apphousekitchen.aldente-pro.helper'\nsudo rm -rf \"$APPDIR/AlDente.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/AlDente'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.apphousekitchen.aldente-pro'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.apphousekitchen.aldente-pro'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.apphousekitchen.aldente-pro.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.apphousekitchen.aldente-pro.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.apphousekitchen.aldente-pro_backup.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.apphousekitchen.aldente-pro_stats.sqlite3'\n" + } +} diff --git a/ee/maintained-apps/outputs/alloy/darwin.json b/ee/maintained-apps/outputs/alloy/darwin.json new file mode 100644 index 0000000000..ccf942b804 --- /dev/null +++ b/ee/maintained-apps/outputs/alloy/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "6.2.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.alloytools.alloy';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.alloytools.alloy' AND version_compare(bundle_short_version, '6.2.0') < 0);" + }, + "installer_url": "https://github.com/AlloyTools/org.alloytools.alloy/releases/download/v6.2.0/alloy-6.2.0-mac-aarch64.zip", + "install_script_ref": "16a05348", + "uninstall_script_ref": "39d0e06a", + "sha256": "d7ce578954e24f8faa81bd8ad4fb56dd146555a39740fed3ef8c9d34a7333f63", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "16a05348": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'org.alloytools.alloy'\nif [ -d \"$APPDIR/Alloy.app\" ]; then\n\tsudo mv \"$APPDIR/Alloy.app\" \"$TMPDIR/Alloy.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Alloy.app\" \"$APPDIR\"\nrelaunch_application 'org.alloytools.alloy'\n", + "39d0e06a": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Alloy.app\"\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.alloytools.alloy.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/alt-tab/darwin.json b/ee/maintained-apps/outputs/alt-tab/darwin.json new file mode 100644 index 0000000000..6aaa342b76 --- /dev/null +++ b/ee/maintained-apps/outputs/alt-tab/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "11.3.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.lwouis.alt-tab-macos';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.lwouis.alt-tab-macos' AND version_compare(bundle_short_version, '11.3.0') < 0);" + }, + "installer_url": "https://github.com/lwouis/alt-tab-macos/releases/download/v11.3.0/AltTab-11.3.0.zip", + "install_script_ref": "b04664c1", + "uninstall_script_ref": "2cc2914b", + "sha256": "5b28c3b26d29c1ccbd1f110736d6100378a89d242fd7c797a3603592cc92c8aa", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "2cc2914b": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.lwouis.alt-tab-macos'\nsudo rm -rf \"$APPDIR/AltTab.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.lwouis.alt-tab-macos'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.lwouis.alt-tab-macos'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.plausiblelabs.crashreporter.data/com.lwouis.alt-tab-macos'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.lwouis.alt-tab-macos.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.lwouis.alt-tab-macos'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.lwouis.alt-tab-macos.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/LaunchAgents/com.lwouis.alt-tab-macos.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.lwouis.alt-tab-macos.license.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.lwouis.alt-tab-macos.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.lwouis.alt-tab-macos.usage.plist'\n", + "b04664c1": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.lwouis.alt-tab-macos'\nif [ -d \"$APPDIR/AltTab.app\" ]; then\n\tsudo mv \"$APPDIR/AltTab.app\" \"$TMPDIR/AltTab.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/AltTab.app\" \"$APPDIR\"\nrelaunch_application 'com.lwouis.alt-tab-macos'\n" + } +} diff --git a/ee/maintained-apps/outputs/altair-graphql-client/darwin.json b/ee/maintained-apps/outputs/altair-graphql-client/darwin.json new file mode 100644 index 0000000000..c1f4c4ddb2 --- /dev/null +++ b/ee/maintained-apps/outputs/altair-graphql-client/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "8.5.7", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.xkoji.altair';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.xkoji.altair' AND version_compare(bundle_short_version, '8.5.7') < 0);" + }, + "installer_url": "https://github.com/imolorhe/altair/releases/download/v8.5.7/altair_8.5.7_arm64_mac.zip", + "install_script_ref": "cb73b214", + "uninstall_script_ref": "c196066e", + "sha256": "bf62986cbc4a481942a37d555a4b052252acddc45640ea406eb2fce96b33db1d", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "c196066e": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Altair GraphQL Client.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/altair'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.electron.altair.helper.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.electron.altair.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.electron.altair.savedState'\n", + "cb73b214": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.xkoji.altair'\nif [ -d \"$APPDIR/Altair GraphQL Client.app\" ]; then\n\tsudo mv \"$APPDIR/Altair GraphQL Client.app\" \"$TMPDIR/Altair GraphQL Client.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Altair GraphQL Client.app\" \"$APPDIR\"\nrelaunch_application 'com.xkoji.altair'\n" + } +} diff --git a/ee/maintained-apps/outputs/amadeus-pro/darwin.json b/ee/maintained-apps/outputs/amadeus-pro/darwin.json new file mode 100644 index 0000000000..cbba354655 --- /dev/null +++ b/ee/maintained-apps/outputs/amadeus-pro/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.8.14", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.HairerSoft.AmadeusPro';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.HairerSoft.AmadeusPro' AND version_compare(bundle_short_version, '2.8.14') < 0);" + }, + "installer_url": "https://s3.amazonaws.com/AmadeusPro2/AmadeusPro.zip", + "install_script_ref": "580f9506", + "uninstall_script_ref": "59c96f5e", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "580f9506": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.HairerSoft.AmadeusPro'\nif [ -d \"$APPDIR/Amadeus Pro.app\" ]; then\n\tsudo mv \"$APPDIR/Amadeus Pro.app\" \"$TMPDIR/Amadeus Pro.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Amadeus Pro.app\" \"$APPDIR\"\nrelaunch_application 'com.HairerSoft.AmadeusPro'\n", + "59c96f5e": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Amadeus Pro.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Amadeus Pro'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.HairerSoft.AmadeusPro'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.HairerSoft.AmadeusPro'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.HairerSoft.AmadeusPro.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.HairerSoft.AmadeusPro.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/amadine/darwin.json b/ee/maintained-apps/outputs/amadine/darwin.json new file mode 100644 index 0000000000..79a6b9a0f3 --- /dev/null +++ b/ee/maintained-apps/outputs/amadine/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.8.2", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.belightsoft.Amadine';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.belightsoft.Amadine' AND version_compare(bundle_short_version, '1.8.2') < 0);" + }, + "installer_url": "https://belightsoft.s3.amazonaws.com/Amadine.dmg", + "install_script_ref": "88bf1cb8", + "uninstall_script_ref": "b09fd8fc", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "88bf1cb8": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.belightsoft.Amadine'\nif [ -d \"$APPDIR/Amadine.app\" ]; then\n\tsudo mv \"$APPDIR/Amadine.app\" \"$TMPDIR/Amadine.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Amadine.app\" \"$APPDIR\"\nrelaunch_application 'com.belightsoft.Amadine'\n", + "b09fd8fc": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Amadine.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Amadine'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.belightsoft.Amadine'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.belightsoft.Amadine.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.belightsoft.Amadine.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/amethyst/darwin.json b/ee/maintained-apps/outputs/amethyst/darwin.json new file mode 100644 index 0000000000..d83aff6ee8 --- /dev/null +++ b/ee/maintained-apps/outputs/amethyst/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "0.24.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.amethyst.Amethyst';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.amethyst.Amethyst' AND version_compare(bundle_short_version, '0.24.3') < 0);" + }, + "installer_url": "https://github.com/ianyh/Amethyst/releases/download/v0.24.3/Amethyst.zip", + "install_script_ref": "6e282b1b", + "uninstall_script_ref": "7a06731b", + "sha256": "442d2b9fe53f8062051dd63e5d01512ed2020c78cbdbe4f93ecf30290a5b0302", + "default_categories": [ + "Utilities" + ] + } + ], + "refs": { + "6e282b1b": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.amethyst.Amethyst'\nif [ -d \"$APPDIR/Amethyst.app\" ]; then\n\tsudo mv \"$APPDIR/Amethyst.app\" \"$TMPDIR/Amethyst.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Amethyst.app\" \"$APPDIR\"\nrelaunch_application 'com.amethyst.Amethyst'\n", + "7a06731b": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Amethyst.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Amethyst'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.amethyst.amethyst.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.amethyst.Amethyst'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.amethyst.Amethyst.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.amethyst.Amethyst'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.amethyst.Amethyst.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/amie/darwin.json b/ee/maintained-apps/outputs/amie/darwin.json new file mode 100644 index 0000000000..08001f086c --- /dev/null +++ b/ee/maintained-apps/outputs/amie/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "260216.1.0", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'so.amie.electron-app';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'so.amie.electron-app' AND version_compare(bundle_short_version, '260216.1.0') < 0);" + }, + "installer_url": "https://github.com/amieso/electron-releases/releases/download/v260216.1.0/Amie-260216.1.0-arm64-mac.zip", + "install_script_ref": "b75e60b7", + "uninstall_script_ref": "44125419", + "sha256": "1743f22688fe546d080f78d6147ed624f9206ff6e59a22a8a18cfd6607f0e904", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "44125419": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Amie.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/amie-desktop'\ntrash $LOGGED_IN_USER '~/Library/Caches/amie-desktop'\ntrash $LOGGED_IN_USER '~/Library/Logs/amie-desktop'\ntrash $LOGGED_IN_USER '~/Library/Preferences/so.amie.electron-app.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/so.amie.electron-app.savedState'\n", + "b75e60b7": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'so.amie.electron-app'\nif [ -d \"$APPDIR/Amie.app\" ]; then\n\tsudo mv \"$APPDIR/Amie.app\" \"$TMPDIR/Amie.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Amie.app\" \"$APPDIR\"\nrelaunch_application 'so.amie.electron-app'\n" + } +} diff --git a/ee/maintained-apps/outputs/angry-ip-scanner/darwin.json b/ee/maintained-apps/outputs/angry-ip-scanner/darwin.json new file mode 100644 index 0000000000..a173c7db82 --- /dev/null +++ b/ee/maintained-apps/outputs/angry-ip-scanner/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "3.9.3", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'net.azib.ipscan';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'net.azib.ipscan' AND version_compare(bundle_short_version, '3.9.3') < 0);" + }, + "installer_url": "https://github.com/angryip/ipscan/releases/download/3.9.3/ipscan-macArm64-3.9.3.zip", + "install_script_ref": "2a9d26ac", + "uninstall_script_ref": "bbdeb78d", + "sha256": "e8997d2ff12f7322ecb3dd0b4c4a410187aa8a26ad89772c833af6de781dfd29", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "2a9d26ac": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'net.azib.ipscan'\nif [ -d \"$APPDIR/Angry IP Scanner.app\" ]; then\n\tsudo mv \"$APPDIR/Angry IP Scanner.app\" \"$TMPDIR/Angry IP Scanner.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Angry IP Scanner.app\" \"$APPDIR\"\nrelaunch_application 'net.azib.ipscan'\n", + "bbdeb78d": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\n\nsudo rm -rf \"$APPDIR/Angry IP Scanner.app\"\n" + } +} diff --git a/ee/maintained-apps/outputs/antinote/darwin.json b/ee/maintained-apps/outputs/antinote/darwin.json new file mode 100644 index 0000000000..ce918149b4 --- /dev/null +++ b/ee/maintained-apps/outputs/antinote/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.1.7", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.chabomakers.Antinote';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.chabomakers.Antinote' AND version_compare(bundle_short_version, '1.1.7') < 0);" + }, + "installer_url": "https://antinote.io/updates/Antinote_1.1.7.dmg", + "install_script_ref": "2f52f766", + "uninstall_script_ref": "2d505ef1", + "sha256": "f0a900697929d981ba2ab1aaa7b538a232d895ff53e38d42e1e6c9b9a769e7e5", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "2d505ef1": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Antinote.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.chabomakers.Antinote'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.chabomakers.Antinote'\n", + "2f52f766": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.chabomakers.Antinote'\nif [ -d \"$APPDIR/Antinote.app\" ]; then\n\tsudo mv \"$APPDIR/Antinote.app\" \"$TMPDIR/Antinote.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Antinote.app\" \"$APPDIR\"\nrelaunch_application 'com.chabomakers.Antinote'\n" + } +} diff --git a/ee/maintained-apps/outputs/anydo/darwin.json b/ee/maintained-apps/outputs/anydo/darwin.json new file mode 100644 index 0000000000..1667195fea --- /dev/null +++ b/ee/maintained-apps/outputs/anydo/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "5.0.68", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.anydo.mac';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.anydo.mac' AND version_compare(bundle_short_version, '5.0.68') < 0);" + }, + "installer_url": "https://electron-app.any.do/Anydo-5.0.68-universal.dmg", + "install_script_ref": "0ff909cc", + "uninstall_script_ref": "f03c6bf3", + "sha256": "3906b4b436d23105988c22a1ba7936f7ede08be9747256a2e622338c1c846c4a", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "0ff909cc": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.anydo.mac'\nif [ -d \"$APPDIR/Anydo.app\" ]; then\n\tsudo mv \"$APPDIR/Anydo.app\" \"$TMPDIR/Anydo.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Anydo.app\" \"$APPDIR\"\nrelaunch_application 'com.anydo.mac'\n", + "f03c6bf3": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Anydo.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/@anydo'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.anydo.mac.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.anydo.mac.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/anytype/darwin.json b/ee/maintained-apps/outputs/anytype/darwin.json new file mode 100644 index 0000000000..9025a597d4 --- /dev/null +++ b/ee/maintained-apps/outputs/anytype/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "0.55.5", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.anytype.anytype';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.anytype.anytype' AND version_compare(bundle_short_version, '0.55.5') < 0);" + }, + "installer_url": "https://anytype-release.fra1.cdn.digitaloceanspaces.com/Anytype-0.55.5-mac-arm64.dmg", + "install_script_ref": "0969d326", + "uninstall_script_ref": "9bb6a998", + "sha256": "edfea4e1984e0056f15101158de73176081fcceaf3c5429f7c262b620cca869c", + "default_categories": [ + "Security" + ] + } + ], + "refs": { + "0969d326": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.anytype.anytype'\nif [ -d \"$APPDIR/Anytype.app\" ]; then\n\tsudo mv \"$APPDIR/Anytype.app\" \"$TMPDIR/Anytype.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Anytype.app\" \"$APPDIR\"\nrelaunch_application 'com.anytype.anytype'\n", + "9bb6a998": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Anytype.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/anytype'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Chromium/NativeMessagingHosts/com.anytype.desktop.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.anytype.anytype.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Google/Chrome Beta/NativeMessagingHosts/com.anytype.desktop.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Google/Chrome Canary/NativeMessagingHosts/com.anytype.desktop.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Google/Chrome Dev/NativeMessagingHosts/com.anytype.desktop.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.anytype.desktop.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Microsoft Edge Beta/NativeMessagingHosts/com.anytype.desktop.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Microsoft Edge Canary/NativeMessagingHosts/com.anytype.desktop.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Microsoft Edge Dev/NativeMessagingHosts/com.anytype.desktop.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Microsoft Edge/NativeMessagingHosts/com.anytype.desktop.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Mozilla/NativeMessagingHosts/com.anytype.desktop.json'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Vivaldi/NativeMessagingHosts/com.anytype.desktop.json'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.anytype.anytype.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/apidog/darwin.json b/ee/maintained-apps/outputs/apidog/darwin.json new file mode 100644 index 0000000000..660fc31aa0 --- /dev/null +++ b/ee/maintained-apps/outputs/apidog/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.8.33", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.apidog.app';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.apidog.app' AND version_compare(bundle_short_version, '2.8.33') < 0);" + }, + "installer_url": "https://file-assets.apidog.com/download/2.8.33/legacy-Apidog-macOS-arm64-2.8.33.dmg", + "install_script_ref": "164bc8ef", + "uninstall_script_ref": "b51190cf", + "sha256": "515dfd14fa43d997040353f18e501465ad672f1ecf323368d408b296bbb804ab", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "164bc8ef": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.apidog.app'\nif [ -d \"$APPDIR/Apidog.app\" ]; then\n\tsudo mv \"$APPDIR/Apidog.app\" \"$TMPDIR/Apidog.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Apidog.app\" \"$APPDIR\"\nrelaunch_application 'com.apidog.app'\n", + "b51190cf": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Apidog.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/apidog'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.apidog.app.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.apidog.app.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/app-fair/darwin.json b/ee/maintained-apps/outputs/app-fair/darwin.json new file mode 100644 index 0000000000..e4f9a4af04 --- /dev/null +++ b/ee/maintained-apps/outputs/app-fair/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "0.8.137", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'app.App-Fair';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'app.App-Fair' AND version_compare(bundle_short_version, '0.8.137') < 0);" + }, + "installer_url": "https://github.com/App-Fair/App/releases/download/0.8.137/App-Fair-macOS.zip", + "install_script_ref": "29c2c125", + "uninstall_script_ref": "576e1f90", + "sha256": "c4a99410058cef2a3c7ac6bb073cf4cac06fb64f7c597140cbf0958e37fe2480", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "29c2c125": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'app.App-Fair'\nif [ -d \"$APPDIR/App Fair.app\" ]; then\n\tsudo mv \"$APPDIR/App Fair.app\" \"$TMPDIR/App Fair.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/App Fair.app\" \"$APPDIR\"\nrelaunch_application 'app.App-Fair'\nmkdir -p .\n/bin/ln -h -f -s -- \"$APPDIR/App Fair.app/Contents/MacOS/App Fair\" \"app-fair\"\n", + "576e1f90": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/App Fair.app\"\nsudo rm -rf 'app-fair'\nsudo rmdir '/Applications/App Fair'\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/app.App-Fair'\ntrash $LOGGED_IN_USER '~/Library/Application Support/app.App-Fair'\ntrash $LOGGED_IN_USER '~/Library/Caches/app.App-Fair'\ntrash $LOGGED_IN_USER '~/Library/Containers/app.App-Fair'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/app.App-Fair'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/app.App-Fair.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Preferences/app.App-Fair.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/app.App-Fair.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/appium-inspector/darwin.json b/ee/maintained-apps/outputs/appium-inspector/darwin.json new file mode 100644 index 0000000000..fa66526e80 --- /dev/null +++ b/ee/maintained-apps/outputs/appium-inspector/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2026.5.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'io.appium.inspector';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'io.appium.inspector' AND version_compare(bundle_short_version, '2026.5.1') < 0);" + }, + "installer_url": "https://github.com/appium/appium-inspector/releases/download/v2026.5.1/Appium-Inspector-2026.5.1-mac-arm64.zip", + "install_script_ref": "b2325803", + "uninstall_script_ref": "84d10064", + "sha256": "e374ad5517d1a4dcac445b3aa56ccdacb23039a974834733ed801b3f55c80af0", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "84d10064": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Appium Inspector.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/appium-inspector'\ntrash $LOGGED_IN_USER '~/Library/Logs/Appium Inspector'\ntrash $LOGGED_IN_USER '~/Library/Preferences/io.appium.inspector.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/io.appium.inspector.savedState'\n", + "b2325803": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'io.appium.inspector'\nif [ -d \"$APPDIR/Appium Inspector.app\" ]; then\n\tsudo mv \"$APPDIR/Appium Inspector.app\" \"$TMPDIR/Appium Inspector.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Appium Inspector.app\" \"$APPDIR\"\nrelaunch_application 'io.appium.inspector'\n" + } +} diff --git a/ee/maintained-apps/outputs/applite/darwin.json b/ee/maintained-apps/outputs/applite/darwin.json new file mode 100644 index 0000000000..d244698d5e --- /dev/null +++ b/ee/maintained-apps/outputs/applite/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "1.3.1", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'dev.aerolite.Applite';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'dev.aerolite.Applite' AND version_compare(bundle_short_version, '1.3.1') < 0);" + }, + "installer_url": "https://github.com/milanvarady/Applite/releases/download/v1.3.1/Applite.dmg", + "install_script_ref": "35c015ed", + "uninstall_script_ref": "ef83f643", + "sha256": "7c2972f21f373c1f64518212098a76604f14b05bd56eb7e56f84c25f4c9c8da2", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "35c015ed": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'dev.aerolite.Applite'\nif [ -d \"$APPDIR/Applite.app\" ]; then\n\tsudo mv \"$APPDIR/Applite.app\" \"$TMPDIR/Applite.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Applite.app\" \"$APPDIR\"\nrelaunch_application 'dev.aerolite.Applite'\n", + "ef83f643": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Applite.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Applite'\ntrash $LOGGED_IN_USER '~/Library/Application Support/dev.aerolite.Applite'\ntrash $LOGGED_IN_USER '~/Library/Caches/Applite'\ntrash $LOGGED_IN_USER '~/Library/Caches/dev.aerolite.Applite'\ntrash $LOGGED_IN_USER '~/Library/Containers/dev.aerolite.Applite'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/dev.aerolite.Applite'\ntrash $LOGGED_IN_USER '~/Library/Preferences/dev.aerolite.Applite.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/dev.aerolite.Applite.savedState'\n" + } +} diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 228902acd2..13feba289c 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -85,6 +85,13 @@ "unique_identifier": "8x8 Work", "description": "8x8 Work is a communications application with voice, video, chat, and web conferencing." }, + { + "name": "A Better Finder Rename", + "slug": "a-better-finder-rename/darwin", + "platform": "darwin", + "unique_identifier": "net.publicspace.abfr12", + "description": "A Better Finder Rename is a batch renaming tool for files, music, and photos." + }, { "name": "Ableton Live Suite", "slug": "ableton-live-suite/darwin", @@ -99,6 +106,48 @@ "unique_identifier": "com.elasticprojects.abstract-desktop", "description": "Abstract is a collaborative design tool with support for Sketch files." }, + { + "name": "Acorn", + "slug": "acorn/darwin", + "platform": "darwin", + "unique_identifier": "com.flyingmeat.Acorn8", + "description": "Acorn is an image editor focused on simplicity." + }, + { + "name": "ActiveDock", + "slug": "activedock/darwin", + "platform": "darwin", + "unique_identifier": "com.sergey-gerasimenko.ActiveDock-2", + "description": "ActiveDock is a customizable dock and application launcher that replaces the macOS Dock." + }, + { + "name": "ActivityWatch", + "slug": "activitywatch/darwin", + "platform": "darwin", + "unique_identifier": "net.activitywatch.ActivityWatch", + "description": "ActivityWatch is a time tracker." + }, + { + "name": "Actual", + "slug": "actual/darwin", + "platform": "darwin", + "unique_identifier": "com.actualbudget.actual", + "description": "Actual is a privacy-focused app for managing your finances." + }, + { + "name": "AdGuard", + "slug": "adguard/darwin", + "platform": "darwin", + "unique_identifier": "com.adguard.mac.adguard", + "description": "AdGuard is a standalone ad blocker." + }, + { + "name": "AdLock", + "slug": "adlock/darwin", + "platform": "darwin", + "unique_identifier": "com.hankuper.adlock.desktop", + "description": "AdLock is a proxy-based ad blocking tool." + }, { "name": "Adobe Acrobat Pro", "slug": "adobe-acrobat-pro/darwin", @@ -155,6 +204,55 @@ "unique_identifier": "com.adobe.DNGConverter", "description": "Adobe DNG Conver is a DNG file converter." }, + { + "name": "Advanced Renamer", + "slug": "advanced-renamer/darwin", + "platform": "darwin", + "unique_identifier": "com.HulubuluSoftware.AdvancedRenamer", + "description": "Advanced Renamer is a batch file renaming utility." + }, + { + "name": "Affinity Designer 2", + "slug": "affinity-designer/darwin", + "platform": "darwin", + "unique_identifier": "com.seriflabs.affinitydesigner2", + "description": "Affinity Designer 2 is a graphic design application." + }, + { + "name": "Affinity Designer", + "slug": "affinity-designer@1/darwin", + "platform": "darwin", + "unique_identifier": "com.seriflabs.affinitydesigner", + "description": "Affinity Designer is a graphic design application." + }, + { + "name": "Affinity Photo 2", + "slug": "affinity-photo/darwin", + "platform": "darwin", + "unique_identifier": "com.seriflabs.affinityphoto2", + "description": "Affinity Photo 2 is a photo editing application." + }, + { + "name": "Affinity Photo", + "slug": "affinity-photo@1/darwin", + "platform": "darwin", + "unique_identifier": "com.seriflabs.affinityphoto", + "description": "Affinity Photo is a photo editing application." + }, + { + "name": "Affinity Publisher 2", + "slug": "affinity-publisher/darwin", + "platform": "darwin", + "unique_identifier": "com.seriflabs.affinitypublisher2", + "description": "Affinity Publisher 2 is a desktop publishing application." + }, + { + "name": "Affinity Publisher", + "slug": "affinity-publisher@1/darwin", + "platform": "darwin", + "unique_identifier": "com.seriflabs.affinitypublisher", + "description": "Affinity Publisher is a desktop publishing application." + }, { "name": "Affinity", "slug": "affinity/darwin", @@ -169,6 +267,13 @@ "unique_identifier": "Affinity", "description": "Affinity is an image editing and design software." }, + { + "name": "AirBuddy", + "slug": "airbuddy/darwin", + "platform": "darwin", + "unique_identifier": "codes.rambo.AirBuddy", + "description": "AirBuddy is an AirPods companion app." + }, { "name": "Aircall", "slug": "aircall/darwin", @@ -183,6 +288,34 @@ "unique_identifier": "Aircall", "description": "Aircall is cloud-based call center and phone system software." }, + { + "name": "AirDroid", + "slug": "airdroid/darwin", + "platform": "darwin", + "unique_identifier": "com.sandstudio.airdroid", + "description": "AirDroid is a mobile device management suite." + }, + { + "name": "AirParrot", + "slug": "airparrot/darwin", + "platform": "darwin", + "unique_identifier": "com.squirrels.AirParrot-3", + "description": "AirParrot is a tool to wirelessly mirror the screen or stream media files." + }, + { + "name": "AirServer", + "slug": "airserver/darwin", + "platform": "darwin", + "unique_identifier": "com.pratikkumar.airserver-mac", + "description": "AirServer is a screen mirroring receiver." + }, + { + "name": "Airtable", + "slug": "airtable/darwin", + "platform": "darwin", + "unique_identifier": "com.FormaGrid.Airtable", + "description": "Airtable is a spreadsheet-database hybrid for cloud collaboration." + }, { "name": "Airtame", "slug": "airtame/darwin", @@ -197,6 +330,69 @@ "unique_identifier": "Airtame 4.15.0", "description": "Airtame is an app that makes shared screens easy to use - for screen sharing, conferencing, digital signage, and alerts." }, + { + "name": "Airy", + "slug": "airy/darwin", + "platform": "darwin", + "unique_identifier": "com.eltima.Airy", + "description": "Airy is a YouTube video and MP3 downloader." + }, + { + "name": "Akiflow", + "slug": "akiflow/darwin", + "platform": "darwin", + "unique_identifier": "com.akiflow.akiflow", + "description": "Akiflow is a time blocking and productivity platform." + }, + { + "name": "Alcove", + "slug": "alcove/darwin", + "platform": "darwin", + "unique_identifier": "com.henrikruscon.Alcove", + "description": "Alcove is a utility that adds Dynamic Island-like features to the notch area." + }, + { + "name": "AlDente", + "slug": "aldente/darwin", + "platform": "darwin", + "unique_identifier": "com.apphousekitchen.aldente-pro", + "description": "AlDente is a menu bar tool to limit the maximum charging percentage." + }, + { + "name": "Alloy", + "slug": "alloy/darwin", + "platform": "darwin", + "unique_identifier": "org.alloytools.alloy", + "description": "Alloy is a programming language for software modelling." + }, + { + "name": "AltTab", + "slug": "alt-tab/darwin", + "platform": "darwin", + "unique_identifier": "com.lwouis.alt-tab-macos", + "description": "AltTab is a tool that brings Windows-like alt-tab window switching to macOS." + }, + { + "name": "Altair GraphQL Client", + "slug": "altair-graphql-client/darwin", + "platform": "darwin", + "unique_identifier": "com.xkoji.altair", + "description": "Altair GraphQL Client is a GraphQL client." + }, + { + "name": "Amadeus Pro", + "slug": "amadeus-pro/darwin", + "platform": "darwin", + "unique_identifier": "com.HairerSoft.AmadeusPro", + "description": "Amadeus Pro is a multi-purpose audio recorder, editor, and converter." + }, + { + "name": "Amadine", + "slug": "amadine/darwin", + "platform": "darwin", + "unique_identifier": "com.belightsoft.Amadine", + "description": "Amadine is a vector graphics and illustration application." + }, { "name": "Amazon Chime", "slug": "amazon-chime/darwin", @@ -267,6 +463,20 @@ "unique_identifier": "Amazon WorkSpaces", "description": "Amazon WorkSpaces is an app that provides secure, managed virtual desktop infrastructure (VDI) in the cloud." }, + { + "name": "Amethyst", + "slug": "amethyst/darwin", + "platform": "darwin", + "unique_identifier": "com.amethyst.Amethyst", + "description": "Amethyst is an automatic tiling window manager similar to xmonad." + }, + { + "name": "Amie", + "slug": "amie/darwin", + "platform": "darwin", + "unique_identifier": "so.amie.electron-app", + "description": "Amie is a calendar and task manager." + }, { "name": "Android Studio", "slug": "android-studio/darwin", @@ -281,6 +491,13 @@ "unique_identifier": "Android Studio", "description": "Android Studio is the official integrated development environment for Android app development, based on IntelliJ IDEA." }, + { + "name": "Angry IP Scanner", + "slug": "angry-ip-scanner/darwin", + "platform": "darwin", + "unique_identifier": "net.azib.ipscan", + "description": "Angry IP Scanner is a network scanner." + }, { "name": "Anka", "slug": "anka-virtualization/darwin", @@ -323,6 +540,13 @@ "unique_identifier": "com.google.antigravity", "description": "Google Antigravity is an agent orchestration platform." }, + { + "name": "Antinote", + "slug": "antinote/darwin", + "platform": "darwin", + "unique_identifier": "com.chabomakers.Antinote", + "description": "Antinote is a temporary notes app with calculations and extensible features." + }, { "name": "AnyDesk", "slug": "anydesk/darwin", @@ -330,6 +554,34 @@ "unique_identifier": "com.philandro.anydesk", "description": "AnyDesk is an app that allows connection to a computer remotely." }, + { + "name": "Any.do", + "slug": "anydo/darwin", + "platform": "darwin", + "unique_identifier": "com.anydo.mac", + "description": "Any.do is a reminder, planner, and calendar app." + }, + { + "name": "Anytype", + "slug": "anytype/darwin", + "platform": "darwin", + "unique_identifier": "com.anytype.anytype", + "description": "Anytype is a local-first and end-to-end encrypted notes app." + }, + { + "name": "Apidog", + "slug": "apidog/darwin", + "platform": "darwin", + "unique_identifier": "com.apidog.app", + "description": "Apidog is an API development platform." + }, + { + "name": "App Fair", + "slug": "app-fair/darwin", + "platform": "darwin", + "unique_identifier": "app.App-Fair", + "description": "App Fair is a catalogue of free and commercial native desktop applications." + }, { "name": "Apparency", "slug": "apparency/darwin", @@ -344,6 +596,20 @@ "unique_identifier": "net.freemacsoft.AppCleaner", "description": "AppCleaner is an application uninstaller." }, + { + "name": "Appium Inspector GUI", + "slug": "appium-inspector/darwin", + "platform": "darwin", + "unique_identifier": "io.appium.inspector", + "description": "Appium Inspector GUI is a GUI inspector for mobile apps." + }, + { + "name": "Applite", + "slug": "applite/darwin", + "platform": "darwin", + "unique_identifier": "dev.aerolite.Applite", + "description": "Applite is a user-friendly GUI for Homebrew." + }, { "name": "Arc", "slug": "arc/darwin", @@ -393,6 +659,20 @@ "unique_identifier": "Asana", "description": "Asana is an app to manage team projects and tasks." }, + { + "name": "Asset Catalog Tinkerer", + "slug": "asset-catalog-tinkerer/darwin", + "platform": "darwin", + "unique_identifier": "br.com.guilhermerambo.Asset-Catalog-Tinkerer", + "description": "Asset Catalog Tinkerer is an app to browse and extract images from .car files." + }, + { + "name": "aText", + "slug": "atext/darwin", + "platform": "darwin", + "unique_identifier": "com.trankynam.aText", + "description": "aText is a tool that replaces abbreviations while typing." + }, { "name": "Audacity", "slug": "audacity/darwin", @@ -407,6 +687,13 @@ "unique_identifier": "Audacity", "description": "Audacity is a multi-track audio editor and recorder." }, + { + "name": "Audio Hijack", + "slug": "audio-hijack/darwin", + "platform": "darwin", + "unique_identifier": "com.rogueamoeba.audiohijack", + "description": "Audio Hijack is an app that records audio from any application." + }, { "name": "Avast Secure Browser", "slug": "avast-secure-browser/darwin", @@ -414,6 +701,13 @@ "unique_identifier": "com.avast.AvastSecureBrowser", "description": "Avast Secure Browser is a web browser focusing on privacy." }, + { + "name": "Aviatrix VPN Client", + "slug": "aviatrix-vpn-client/darwin", + "platform": "darwin", + "unique_identifier": "org.pythonmac.unspecified.AviatrixVPNClient", + "description": "Aviatrix VPN Client is a VPN client that provides SAML authentication." + }, { "name": "AWS Command Line Interface v2", "slug": "aws-cli/windows", @@ -435,6 +729,13 @@ "unique_identifier": "AWS VPN Client", "description": "AWS Client VPN is a managed client-based VPN service to securely access AWS resources." }, + { + "name": "Axure RP", + "slug": "axure-rp/darwin", + "platform": "darwin", + "unique_identifier": "com.axure.AxureRP11", + "description": "Axure RP is a planning and prototyping tool for developers." + }, { "name": "Azul Zulu JDK 25", "slug": "azul-zulu-25-jdk/windows", diff --git a/ee/maintained-apps/outputs/asset-catalog-tinkerer/darwin.json b/ee/maintained-apps/outputs/asset-catalog-tinkerer/darwin.json new file mode 100644 index 0000000000..470637865b --- /dev/null +++ b/ee/maintained-apps/outputs/asset-catalog-tinkerer/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.9", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'br.com.guilhermerambo.Asset-Catalog-Tinkerer';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'br.com.guilhermerambo.Asset-Catalog-Tinkerer' AND version_compare(bundle_short_version, '2.9') < 0);" + }, + "installer_url": "https://github.com/insidegui/AssetCatalogTinkerer/releases/download/2.9/AssetCatalogTinkerer_v2.9-290.zip", + "install_script_ref": "2eb59a7f", + "uninstall_script_ref": "32f47cd3", + "sha256": "ab18ece5d597960f9002c84cc800b61b2b22f4f61a63d6695dac378340ded5c0", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "2eb59a7f": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'br.com.guilhermerambo.Asset-Catalog-Tinkerer'\nif [ -d \"$APPDIR/Asset Catalog Tinkerer.app\" ]; then\n\tsudo mv \"$APPDIR/Asset Catalog Tinkerer.app\" \"$TMPDIR/Asset Catalog Tinkerer.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Asset Catalog Tinkerer.app\" \"$APPDIR\"\nrelaunch_application 'br.com.guilhermerambo.Asset-Catalog-Tinkerer'\n", + "32f47cd3": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Asset Catalog Tinkerer.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/br.com.guilhermerambo.asset-catalog-tinkerer.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Preferences/br.com.guilhermerambo.Asset-Catalog-Tinkerer.plist'\n" + } +} diff --git a/ee/maintained-apps/outputs/atext/darwin.json b/ee/maintained-apps/outputs/atext/darwin.json new file mode 100644 index 0000000000..e2b79ced2c --- /dev/null +++ b/ee/maintained-apps/outputs/atext/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "3.21", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.trankynam.aText';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.trankynam.aText' AND version_compare(bundle_short_version, '3.21') < 0);" + }, + "installer_url": "https://www.trankynam.com/atext/downloads/aText.dmg", + "install_script_ref": "5d9d0a57", + "uninstall_script_ref": "6f097dc3", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "5d9d0a57": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.trankynam.aText'\nif [ -d \"$APPDIR/aText.app\" ]; then\n\tsudo mv \"$APPDIR/aText.app\" \"$TMPDIR/aText.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/aText.app\" \"$APPDIR\"\nrelaunch_application 'com.trankynam.aText'\n", + "6f097dc3": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/aText.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.trankynam.aText'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.trankynam.aText'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.trankynam.aText'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.trankynam.aText'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.trankynam.aText.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.trankynam.aText'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.trankynam.aText.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.trankynam.aText.savedState'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.trankynam.aText'\n" + } +} diff --git a/ee/maintained-apps/outputs/audio-hijack/darwin.json b/ee/maintained-apps/outputs/audio-hijack/darwin.json new file mode 100644 index 0000000000..c75a230939 --- /dev/null +++ b/ee/maintained-apps/outputs/audio-hijack/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "4.5.9", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.rogueamoeba.audiohijack';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.rogueamoeba.audiohijack' AND version_compare(bundle_short_version, '4.5.9') < 0);" + }, + "installer_url": "https://cdn.rogueamoeba.com/audiohijack/download/AudioHijack.zip", + "install_script_ref": "c5a91be7", + "uninstall_script_ref": "746e467f", + "sha256": "no_check", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "746e467f": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nquit_application 'com.rogueamoeba.audiohijack'\nsudo rm -rf \"$APPDIR/Audio Hijack.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Audio Hijack 4'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.rogueamoeba.audiohijack'\ntrash $LOGGED_IN_USER '~/Library/HTTPStorages/com.rogueamoeba.audiohijack'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.rogueamoeba.audiohijack.plist'\ntrash $LOGGED_IN_USER '~/Library/WebKit/com.rogueamoeba.audiohijack'\n", + "c5a91be7": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nunzip \"$INSTALLER_PATH\" -d \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.rogueamoeba.audiohijack'\nif [ -d \"$APPDIR/Audio Hijack.app\" ]; then\n\tsudo mv \"$APPDIR/Audio Hijack.app\" \"$TMPDIR/Audio Hijack.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Audio Hijack.app\" \"$APPDIR\"\nrelaunch_application 'com.rogueamoeba.audiohijack'\n" + } +} diff --git a/ee/maintained-apps/outputs/aviatrix-vpn-client/darwin.json b/ee/maintained-apps/outputs/aviatrix-vpn-client/darwin.json new file mode 100644 index 0000000000..d3f436a3ee --- /dev/null +++ b/ee/maintained-apps/outputs/aviatrix-vpn-client/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "2.17.7", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'org.pythonmac.unspecified.AviatrixVPNClient';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'org.pythonmac.unspecified.AviatrixVPNClient' AND version_compare(bundle_short_version, '2.17.7') < 0);" + }, + "installer_url": "https://aviatrix-download.s3.amazonaws.com/AviatrixVPNClient/AVPNC_mac.pkg", + "install_script_ref": "717ae1f5", + "uninstall_script_ref": "4ad80bc8", + "sha256": "no_check", + "default_categories": [ + "Security" + ] + } + ], + "refs": { + "4ad80bc8": "#!/bin/bash\n\n# variables\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\nexpand_pkgid_and_map() {\n local PKGID=\"$1\"\n local FUNC=\"$2\"\n if [[ \"$PKGID\" == *\"*\" ]]; then\n local prefix=\"${PKGID%\\*}\"\n echo \"Expanding wildcard for PKGID: $PKGID\"\n for receipt in $(pkgutil --pkgs | grep \"^${prefix}\"); do\n echo \"Processing $receipt\"\n \"$FUNC\" \"$receipt\"\n done\n else\n \"$FUNC\" \"$PKGID\"\n fi\n}\n\nforget_pkg() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" forget_receipt\n}\n\nforget_receipt() {\n local PKGID=\"$1\"\n sudo pkgutil --forget \"$PKGID\"\n}\n\nremove_launchctl_service() {\n local service=\"$1\"\n local booleans=(\"true\" \"false\")\n local plist_status\n local paths\n local should_sudo\n\n echo \"Removing launchctl service ${service}\"\n\n for should_sudo in \"${booleans[@]}\"; do\n plist_status=$(launchctl list \"${service}\" 2>/dev/null)\n\n if [[ $plist_status == \\{* ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo launchctl remove \"${service}\"\n else\n launchctl remove \"${service}\"\n fi\n sleep 1\n fi\n\n paths=(\n \"/Library/LaunchAgents/${service}.plist\"\n \"/Library/LaunchDaemons/${service}.plist\"\n )\n\n # if not using sudo, prepend the home directory to the paths\n if [[ $should_sudo == \"false\" ]]; then\n for i in \"${!paths[@]}\"; do\n paths[i]=\"${HOME}${paths[i]}\"\n done\n fi\n\n for path in \"${paths[@]}\"; do\n if [[ -e \"$path\" ]]; then\n if [[ $should_sudo == \"true\" ]]; then\n sudo rm -f -- \"$path\"\n else\n rm -f -- \"$path\"\n fi\n fi\n done\n done\n}\n\nremove_pkg_files() {\n local PKGID=\"$1\"\n expand_pkgid_and_map \"$PKGID\" remove_receipt_files\n}\n\nremove_receipt_files() {\n local PKGID=\"$1\"\n local PKGINFO VOLUME INSTALL_LOCATION FULL_INSTALL_LOCATION\n\n echo \"pkgutil --pkg-info-plist \\\"$PKGID\\\"\"\n PKGINFO=$(pkgutil --pkg-info-plist \"$PKGID\")\n VOLUME=$(echo \"$PKGINFO\" | awk '/volume<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n INSTALL_LOCATION=$(echo \"$PKGINFO\" | awk '/install-location<\\/key>/ {getline; gsub(/.*|<\\/string>.*/, \"\"); print}')\n\n if [ -z \"$INSTALL_LOCATION\" ] || [ \"$INSTALL_LOCATION\" = \"/\" ]; then\n FULL_INSTALL_LOCATION=\"$VOLUME\"\n else\n FULL_INSTALL_LOCATION=\"$VOLUME/$INSTALL_LOCATION\"\n FULL_INSTALL_LOCATION=$(echo \"$FULL_INSTALL_LOCATION\" | sed 's|//|/|g')\n fi\n\n echo \"sudo pkgutil --only-files --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-files --files \"$PKGID\" | sed \"s|^|/${INSTALL_LOCATION}/|\" | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n echo \"sudo pkgutil --only-dirs --files \\\"$PKGID\\\" | sed \\\"s|^|${FULL_INSTALL_LOCATION}/|\\\" | grep '\\\\.app$' | tr '\\\\\\\\n' '\\\\\\\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\"\n sudo pkgutil --only-dirs --files \"$PKGID\" | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" | grep '\\.app$' | tr '\\n' '\\0' | /usr/bin/sudo -u root -E -- /usr/bin/xargs -0 -- /bin/rm -rf\n\n root_app_dir=$(\n sudo pkgutil --only-dirs --files \"$PKGID\" \\\n | sed \"s|^|${FULL_INSTALL_LOCATION}/|\" \\\n | grep 'Applications' \\\n | awk '{ print length, $0 }' \\\n | sort -n \\\n | head -n1 \\\n | cut -d' ' -f2-\n )\n if [ -n \"$root_app_dir\" ]; then\n echo \"sudo rmdir -p \\\"$root_app_dir\\\" 2>/dev/null || :\"\n sudo rmdir -p \"$root_app_dir\" 2>/dev/null || :\n fi\n}\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nremove_launchctl_service 'aviatrix.vpn.client.rp.plist'\nremove_pkg_files 'com.Aviatrix.VPNClient'\nforget_pkg 'com.Aviatrix.VPNClient'\nsudo rm -rf '/Applications/Aviatrix VPN Client.app'\ntrash $LOGGED_IN_USER '~/Library/Aviatrix'\ntrash $LOGGED_IN_USER '~/Library/Logs/AviatrixVPNC'\ntrash $LOGGED_IN_USER '~/Library/Preferences/org.pythonmac.unspecified.AviatrixVPNClient.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/org.pythonmac.unspecified.AviatrixVPNClient.savedState'\n", + "717ae1f5": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# install pkg files\nquit_and_track_application 'org.pythonmac.unspecified.AviatrixVPNClient'\nsudo installer -pkg \"$TMPDIR/AVPNC_mac.pkg\" -target /\nrelaunch_application 'org.pythonmac.unspecified.AviatrixVPNClient'\n" + } +} diff --git a/ee/maintained-apps/outputs/axure-rp/darwin.json b/ee/maintained-apps/outputs/axure-rp/darwin.json new file mode 100644 index 0000000000..7537adec6d --- /dev/null +++ b/ee/maintained-apps/outputs/axure-rp/darwin.json @@ -0,0 +1,22 @@ +{ + "versions": [ + { + "version": "11.0.0.4137", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.axure.AxureRP11';", + "patched": "SELECT 1 WHERE NOT EXISTS (SELECT 1 FROM apps WHERE bundle_identifier = 'com.axure.AxureRP11' AND version_compare(bundle_short_version, '11.0.0.4137') < 0);" + }, + "installer_url": "https://axure.cachefly.net/versions/11-0/AxureRP-Setup-4137.dmg", + "install_script_ref": "deabbdfe", + "uninstall_script_ref": "0f552577", + "sha256": "fc9a4b3e46b835bab9f4450a382f8fea0e4e4bd2dd2602886f36da38ff9571b4", + "default_categories": [ + "Developer tools" + ] + } + ], + "refs": { + "0f552577": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nLOGGED_IN_USER=$(scutil <<< \"show State:/Users/ConsoleUser\" | awk '/Name :/ { print $3 }')\n# functions\n\ntrash() {\n local logged_in_user=\"$1\"\n local target_file=\"$2\"\n local timestamp=\"$(date +%Y-%m-%d-%s)\"\n local rand=\"$(jot -r 1 0 99999)\"\n\n # replace ~ with /Users/$logged_in_user\n if [[ \"$target_file\" == ~* ]]; then\n target_file=\"/Users/$logged_in_user${target_file:1}\"\n fi\n\n local trash=\"/Users/$logged_in_user/.Trash\"\n\n # If the target contains glob characters, expand it and move each match.\n if [[ \"$target_file\" == *[*?[]* ]]; then\n local file file_name\n local matched=false\n local i=0\n # compgen -G expands the (quoted) pattern itself, so paths containing\n # spaces glob correctly; reading line by line keeps each match intact.\n while IFS= read -r file; do\n [[ -n \"$file\" ]] || continue\n [[ -e \"$file\" || -L \"$file\" ]] || continue\n matched=true\n i=$((i + 1))\n file_name=\"$(basename \"$file\")\"\n echo \"removing $file.\"\n # The per-match counter keeps matches that share a basename from\n # overwriting each other in the trash.\n mv -f \"$file\" \"$trash/${file_name}_${timestamp}_${rand}_${i}\"\n done < <(compgen -G \"$target_file\" 2>/dev/null)\n if [[ \"$matched\" == false ]]; then\n echo \"$target_file doesn't exist.\"\n fi\n return\n fi\n\n local file_name=\"$(basename \"${target_file}\")\"\n\n if [[ -e \"$target_file\" ]]; then\n echo \"removing $target_file.\"\n mv -f \"$target_file\" \"$trash/${file_name}_${timestamp}_${rand}\"\n else\n echo \"$target_file doesn't exist.\"\n fi\n}\n\nsudo rm -rf \"$APPDIR/Axure RP 11.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.apple.sharedfilelist/com.apple.LSSharedFileList.ApplicationRecentDocuments/com.axure.axurerp#*.sfl*'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.axure.AxureRP#*.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.axure.AxureRP#*.savedState'\n", + "deabbdfe": "#!/bin/bash\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\n# functions\n\nquit_and_track_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local timeout_duration=10\n\n # check if the application is running\n local app_running\n app_running=$(osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null)\n if [[ \"$app_running\" != \"true\" ]]; then\n eval \"export $var_name=0\"\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'.\"\n eval \"export $var_name=0\"\n return\n fi\n\n # App was running, mark it for relaunch\n eval \"export $var_name=1\"\n echo \"Application '$bundle_id' was running; will relaunch after installation.\"\n\n echo \"Quitting application '$bundle_id'...\"\n\n # try to quit the application within the timeout period\n local quit_success=false\n SECONDS=0\n while (( SECONDS < timeout_duration )); do\n if osascript -e \"tell application id \\\"$bundle_id\\\" to quit\" >/dev/null 2>&1; then\n if ! pgrep -f \"$bundle_id\" >/dev/null 2>&1; then\n echo \"Application '$bundle_id' quit successfully.\"\n quit_success=true\n break\n fi\n fi\n sleep 1\n done\n\n if [[ \"$quit_success\" = false ]]; then\n echo \"Application '$bundle_id' did not quit.\"\n fi\n}\n\n\nrelaunch_application() {\n local bundle_id=\"$1\"\n local var_name=\"APP_WAS_RUNNING_$(echo \"$bundle_id\" | tr '.-' '__')\"\n local was_running\n\n # Check if the app was running before installation\n eval \"was_running=\\$$var_name\"\n if [[ \"$was_running\" != \"1\" ]]; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ -z \"$console_user\" || \"$console_user\" == \"root\" || \"$console_user\" == \"loginwindow\" ]]; then\n echo \"Not logged into a non-root GUI; skipping relaunching application ID '$bundle_id'.\"\n return\n fi\n\n echo \"Relaunching application '$bundle_id'...\"\n\n # Launch the app in the logged-in user's GUI session. Apps launched by root\n # won't register with the user's Dock/GUI, so run 'open' as the console user.\n # Use 'launchctl asuser' to bootstrap into the console user's Mach namespace\n # and GUI session — 'sudo -u' alone doesn't do this, which can cause\n # LSOpenURLsWithRole() failures even when 'open' exits 0.\n local open_status=0\n if [[ $EUID -eq 0 ]]; then\n local console_uid\n console_uid=$(id -u \"$console_user\")\n /bin/launchctl asuser \"$console_uid\" sudo -u \"$console_user\" open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n else\n open -b \"$bundle_id\" >/dev/null 2>&1 || open_status=$?\n fi\n\n if [[ $open_status -eq 0 ]]; then\n echo \"Application '$bundle_id' relaunched successfully.\"\n else\n echo \"Failed to relaunch application '$bundle_id'.\"\n fi\n}\n\n\n# extract contents\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n# copy to the applications folder\nquit_and_track_application 'com.axure.AxureRP11'\nif [ -d \"$APPDIR/Axure RP 11.app\" ]; then\n\tsudo mv \"$APPDIR/Axure RP 11.app\" \"$TMPDIR/Axure RP 11.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Axure RP 11.app\" \"$APPDIR\"\nrelaunch_application 'com.axure.AxureRP11'\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/ABetterFinderRename.tsx b/frontend/pages/SoftwarePage/components/icons/ABetterFinderRename.tsx new file mode 100644 index 0000000000..04ef1f466f --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/ABetterFinderRename.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const ABetterFinderRename = (props: SVGProps) => ( + + + +); +export default ABetterFinderRename; diff --git a/frontend/pages/SoftwarePage/components/icons/Acorn.tsx b/frontend/pages/SoftwarePage/components/icons/Acorn.tsx new file mode 100644 index 0000000000..c31d08c72c --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Acorn.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Acorn = (props: SVGProps) => ( + + + +); +export default Acorn; diff --git a/frontend/pages/SoftwarePage/components/icons/Activedock.tsx b/frontend/pages/SoftwarePage/components/icons/Activedock.tsx new file mode 100644 index 0000000000..56981691ee --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Activedock.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Activedock = (props: SVGProps) => ( + + + +); +export default Activedock; diff --git a/frontend/pages/SoftwarePage/components/icons/Activitywatch.tsx b/frontend/pages/SoftwarePage/components/icons/Activitywatch.tsx new file mode 100644 index 0000000000..9452578c98 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Activitywatch.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Activitywatch = (props: SVGProps) => ( + + + +); +export default Activitywatch; diff --git a/frontend/pages/SoftwarePage/components/icons/Actual.tsx b/frontend/pages/SoftwarePage/components/icons/Actual.tsx new file mode 100644 index 0000000000..095a98429c --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Actual.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Actual = (props: SVGProps) => ( + + + +); +export default Actual; diff --git a/frontend/pages/SoftwarePage/components/icons/Adguard.tsx b/frontend/pages/SoftwarePage/components/icons/Adguard.tsx new file mode 100644 index 0000000000..088f82e0f8 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Adguard.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Adguard = (props: SVGProps) => ( + + + +); +export default Adguard; diff --git a/frontend/pages/SoftwarePage/components/icons/Adlock.tsx b/frontend/pages/SoftwarePage/components/icons/Adlock.tsx new file mode 100644 index 0000000000..d18098b626 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Adlock.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Adlock = (props: SVGProps) => ( + + + +); +export default Adlock; diff --git a/frontend/pages/SoftwarePage/components/icons/AdvancedRenamer.tsx b/frontend/pages/SoftwarePage/components/icons/AdvancedRenamer.tsx new file mode 100644 index 0000000000..65f9321dd4 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AdvancedRenamer.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AdvancedRenamer = (props: SVGProps) => ( + + + +); +export default AdvancedRenamer; diff --git a/frontend/pages/SoftwarePage/components/icons/AffinityDesigner.tsx b/frontend/pages/SoftwarePage/components/icons/AffinityDesigner.tsx new file mode 100644 index 0000000000..81f7372db7 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AffinityDesigner.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AffinityDesigner = (props: SVGProps) => ( + + + +); +export default AffinityDesigner; diff --git a/frontend/pages/SoftwarePage/components/icons/AffinityDesigner1.tsx b/frontend/pages/SoftwarePage/components/icons/AffinityDesigner1.tsx new file mode 100644 index 0000000000..14614c168e --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AffinityDesigner1.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AffinityDesigner1 = (props: SVGProps) => ( + + + +); +export default AffinityDesigner1; diff --git a/frontend/pages/SoftwarePage/components/icons/AffinityPhoto.tsx b/frontend/pages/SoftwarePage/components/icons/AffinityPhoto.tsx new file mode 100644 index 0000000000..61ad53c3f9 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AffinityPhoto.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AffinityPhoto = (props: SVGProps) => ( + + + +); +export default AffinityPhoto; diff --git a/frontend/pages/SoftwarePage/components/icons/AffinityPhoto1.tsx b/frontend/pages/SoftwarePage/components/icons/AffinityPhoto1.tsx new file mode 100644 index 0000000000..fc843ab647 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AffinityPhoto1.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AffinityPhoto1 = (props: SVGProps) => ( + + + +); +export default AffinityPhoto1; diff --git a/frontend/pages/SoftwarePage/components/icons/AffinityPublisher.tsx b/frontend/pages/SoftwarePage/components/icons/AffinityPublisher.tsx new file mode 100644 index 0000000000..d08f742e5a --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AffinityPublisher.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AffinityPublisher = (props: SVGProps) => ( + + + +); +export default AffinityPublisher; diff --git a/frontend/pages/SoftwarePage/components/icons/AffinityPublisher1.tsx b/frontend/pages/SoftwarePage/components/icons/AffinityPublisher1.tsx new file mode 100644 index 0000000000..3602887c39 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AffinityPublisher1.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AffinityPublisher1 = (props: SVGProps) => ( + + + +); +export default AffinityPublisher1; diff --git a/frontend/pages/SoftwarePage/components/icons/Airbuddy.tsx b/frontend/pages/SoftwarePage/components/icons/Airbuddy.tsx new file mode 100644 index 0000000000..fe39883271 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Airbuddy.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Airbuddy = (props: SVGProps) => ( + + + +); +export default Airbuddy; diff --git a/frontend/pages/SoftwarePage/components/icons/Airdroid.tsx b/frontend/pages/SoftwarePage/components/icons/Airdroid.tsx new file mode 100644 index 0000000000..2266f3fe63 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Airdroid.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Airdroid = (props: SVGProps) => ( + + + +); +export default Airdroid; diff --git a/frontend/pages/SoftwarePage/components/icons/Airparrot.tsx b/frontend/pages/SoftwarePage/components/icons/Airparrot.tsx new file mode 100644 index 0000000000..08e1b7075d --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Airparrot.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Airparrot = (props: SVGProps) => ( + + + +); +export default Airparrot; diff --git a/frontend/pages/SoftwarePage/components/icons/Airserver.tsx b/frontend/pages/SoftwarePage/components/icons/Airserver.tsx new file mode 100644 index 0000000000..2ab5c8e469 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Airserver.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Airserver = (props: SVGProps) => ( + + + +); +export default Airserver; diff --git a/frontend/pages/SoftwarePage/components/icons/Airtable.tsx b/frontend/pages/SoftwarePage/components/icons/Airtable.tsx new file mode 100644 index 0000000000..332feb4624 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Airtable.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Airtable = (props: SVGProps) => ( + + + +); +export default Airtable; diff --git a/frontend/pages/SoftwarePage/components/icons/Airy.tsx b/frontend/pages/SoftwarePage/components/icons/Airy.tsx new file mode 100644 index 0000000000..e71647eea2 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Airy.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Airy = (props: SVGProps) => ( + + + +); +export default Airy; diff --git a/frontend/pages/SoftwarePage/components/icons/Akiflow.tsx b/frontend/pages/SoftwarePage/components/icons/Akiflow.tsx new file mode 100644 index 0000000000..7e7cc47a8f --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Akiflow.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Akiflow = (props: SVGProps) => ( + + + +); +export default Akiflow; diff --git a/frontend/pages/SoftwarePage/components/icons/Alcove.tsx b/frontend/pages/SoftwarePage/components/icons/Alcove.tsx new file mode 100644 index 0000000000..58c73b24d4 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Alcove.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Alcove = (props: SVGProps) => ( + + + +); +export default Alcove; diff --git a/frontend/pages/SoftwarePage/components/icons/Aldente.tsx b/frontend/pages/SoftwarePage/components/icons/Aldente.tsx new file mode 100644 index 0000000000..19d1baa938 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Aldente.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Aldente = (props: SVGProps) => ( + + + +); +export default Aldente; diff --git a/frontend/pages/SoftwarePage/components/icons/Alloy.tsx b/frontend/pages/SoftwarePage/components/icons/Alloy.tsx new file mode 100644 index 0000000000..e648569c0a --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Alloy.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Alloy = (props: SVGProps) => ( + + + +); +export default Alloy; diff --git a/frontend/pages/SoftwarePage/components/icons/AltTab.tsx b/frontend/pages/SoftwarePage/components/icons/AltTab.tsx new file mode 100644 index 0000000000..c8d41722af --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AltTab.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AltTab = (props: SVGProps) => ( + + + +); +export default AltTab; diff --git a/frontend/pages/SoftwarePage/components/icons/AltairGraphqlClient.tsx b/frontend/pages/SoftwarePage/components/icons/AltairGraphqlClient.tsx new file mode 100644 index 0000000000..35aac4aebd --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AltairGraphqlClient.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AltairGraphqlClient = (props: SVGProps) => ( + + + +); +export default AltairGraphqlClient; diff --git a/frontend/pages/SoftwarePage/components/icons/AmadeusPro.tsx b/frontend/pages/SoftwarePage/components/icons/AmadeusPro.tsx new file mode 100644 index 0000000000..20c32fe003 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AmadeusPro.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AmadeusPro = (props: SVGProps) => ( + + + +); +export default AmadeusPro; diff --git a/frontend/pages/SoftwarePage/components/icons/Amadine.tsx b/frontend/pages/SoftwarePage/components/icons/Amadine.tsx new file mode 100644 index 0000000000..147d813357 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Amadine.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Amadine = (props: SVGProps) => ( + + + +); +export default Amadine; diff --git a/frontend/pages/SoftwarePage/components/icons/Amethyst.tsx b/frontend/pages/SoftwarePage/components/icons/Amethyst.tsx new file mode 100644 index 0000000000..9eb4698445 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Amethyst.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Amethyst = (props: SVGProps) => ( + + + +); +export default Amethyst; diff --git a/frontend/pages/SoftwarePage/components/icons/Amie.tsx b/frontend/pages/SoftwarePage/components/icons/Amie.tsx new file mode 100644 index 0000000000..59fe43d56c --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Amie.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Amie = (props: SVGProps) => ( + + + +); +export default Amie; diff --git a/frontend/pages/SoftwarePage/components/icons/AngryIpScanner.tsx b/frontend/pages/SoftwarePage/components/icons/AngryIpScanner.tsx new file mode 100644 index 0000000000..40237b8a56 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AngryIpScanner.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AngryIpScanner = (props: SVGProps) => ( + + + +); +export default AngryIpScanner; diff --git a/frontend/pages/SoftwarePage/components/icons/Antinote.tsx b/frontend/pages/SoftwarePage/components/icons/Antinote.tsx new file mode 100644 index 0000000000..97547625fd --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Antinote.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Antinote = (props: SVGProps) => ( + + + +); +export default Antinote; diff --git a/frontend/pages/SoftwarePage/components/icons/Anydo.tsx b/frontend/pages/SoftwarePage/components/icons/Anydo.tsx new file mode 100644 index 0000000000..22f007e0ea --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Anydo.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Anydo = (props: SVGProps) => ( + + + +); +export default Anydo; diff --git a/frontend/pages/SoftwarePage/components/icons/Anytype.tsx b/frontend/pages/SoftwarePage/components/icons/Anytype.tsx new file mode 100644 index 0000000000..cddbe5aa74 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Anytype.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Anytype = (props: SVGProps) => ( + + + +); +export default Anytype; diff --git a/frontend/pages/SoftwarePage/components/icons/Apidog.tsx b/frontend/pages/SoftwarePage/components/icons/Apidog.tsx new file mode 100644 index 0000000000..9a4bd4b237 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Apidog.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Apidog = (props: SVGProps) => ( + + + +); +export default Apidog; diff --git a/frontend/pages/SoftwarePage/components/icons/AppFair.tsx b/frontend/pages/SoftwarePage/components/icons/AppFair.tsx new file mode 100644 index 0000000000..b9380acd9e --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AppFair.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AppFair = (props: SVGProps) => ( + + + +); +export default AppFair; diff --git a/frontend/pages/SoftwarePage/components/icons/AppiumInspector.tsx b/frontend/pages/SoftwarePage/components/icons/AppiumInspector.tsx new file mode 100644 index 0000000000..135be1ae67 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AppiumInspector.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AppiumInspector = (props: SVGProps) => ( + + + +); +export default AppiumInspector; diff --git a/frontend/pages/SoftwarePage/components/icons/Applite.tsx b/frontend/pages/SoftwarePage/components/icons/Applite.tsx new file mode 100644 index 0000000000..3c05f28c3d --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Applite.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Applite = (props: SVGProps) => ( + + + +); +export default Applite; diff --git a/frontend/pages/SoftwarePage/components/icons/AssetCatalogTinkerer.tsx b/frontend/pages/SoftwarePage/components/icons/AssetCatalogTinkerer.tsx new file mode 100644 index 0000000000..609824b933 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AssetCatalogTinkerer.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AssetCatalogTinkerer = (props: SVGProps) => ( + + + +); +export default AssetCatalogTinkerer; diff --git a/frontend/pages/SoftwarePage/components/icons/Atext.tsx b/frontend/pages/SoftwarePage/components/icons/Atext.tsx new file mode 100644 index 0000000000..4e72052408 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Atext.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Atext = (props: SVGProps) => ( + + + +); +export default Atext; diff --git a/frontend/pages/SoftwarePage/components/icons/AudioHijack.tsx b/frontend/pages/SoftwarePage/components/icons/AudioHijack.tsx new file mode 100644 index 0000000000..88f25ef305 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AudioHijack.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AudioHijack = (props: SVGProps) => ( + + + +); +export default AudioHijack; diff --git a/frontend/pages/SoftwarePage/components/icons/AviatrixVpnClient.tsx b/frontend/pages/SoftwarePage/components/icons/AviatrixVpnClient.tsx new file mode 100644 index 0000000000..fbd9921aa4 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AviatrixVpnClient.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AviatrixVpnClient = (props: SVGProps) => ( + + + +); +export default AviatrixVpnClient; diff --git a/frontend/pages/SoftwarePage/components/icons/AxureRp.tsx b/frontend/pages/SoftwarePage/components/icons/AxureRp.tsx new file mode 100644 index 0000000000..e13c0bdef6 --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/AxureRp.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const AxureRp = (props: SVGProps) => ( + + + +); +export default AxureRp; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index f0c4b9c93c..a7cdc5f33b 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -5,14 +5,42 @@ import { HOST_LINUX_PLATFORMS } from "interfaces/platform"; import { ISoftware } from "interfaces/software"; import { matchLoosePrefixToKey } from "utilities/strings/stringUtils"; +import ABetterFinderRename from "./ABetterFinderRename"; import AbletonLive12Suite from "./AbletonLive12Suite"; import Abstract from "./Abstract"; +import Acorn from "./Acorn"; import AcrobatReader from "./AcrobatReader"; +import Activedock from "./Activedock"; +import Activitywatch from "./Activitywatch"; +import Actual from "./Actual"; +import Adguard from "./Adguard"; +import Adlock from "./Adlock"; import AdobeDigitalEditions45 from "./AdobeDigitalEditions45"; import AdobeDngConverter from "./AdobeDngConverter"; +import AdvancedRenamer from "./AdvancedRenamer"; import Affinity from "./Affinity"; +import AffinityDesigner from "./AffinityDesigner"; +import AffinityDesigner1 from "./AffinityDesigner1"; +import AffinityPhoto from "./AffinityPhoto"; +import AffinityPhoto1 from "./AffinityPhoto1"; +import AffinityPublisher from "./AffinityPublisher"; +import AffinityPublisher1 from "./AffinityPublisher1"; +import Airbuddy from "./Airbuddy"; import Aircall from "./Aircall"; +import Airdroid from "./Airdroid"; +import Airparrot from "./Airparrot"; +import Airserver from "./Airserver"; +import Airtable from "./Airtable"; import Airtame from "./Airtame"; +import Airy from "./Airy"; +import Akiflow from "./Akiflow"; +import Alcove from "./Alcove"; +import Aldente from "./Aldente"; +import Alloy from "./Alloy"; +import AltairGraphqlClient from "./AltairGraphqlClient"; +import AltTab from "./AltTab"; +import AmadeusPro from "./AmadeusPro"; +import Amadine from "./Amadine"; import AmazonChime from "./AmazonChime"; import AmazonCorretto21 from "./AmazonCorretto21"; import AmazonCorretto24 from "./AmazonCorretto24"; @@ -20,26 +48,41 @@ import AmazonCorretto25 from "./AmazonCorretto25"; import AmazonCorretto26 from "./AmazonCorretto26"; import AmazonDCV from "./AmazonDCV"; import AmazonWorkspaces from "./AmazonWorkspaces"; +import Amethyst from "./Amethyst"; +import Amie from "./Amie"; import AndroidApp from "./AndroidApp"; import AndroidOS from "./AndroidOS"; import AndroidPlayStore from "./AndroidPlayStore"; import AndroidStudio from "./AndroidStudio"; +import AngryIpScanner from "./AngryIpScanner"; import Anka from "./Anka"; import AnotherRedisDesktopManager from "./AnotherRedisDesktopManager"; import Antigravity from "./Antigravity"; import AntigravityIde from "./AntigravityIde"; +import Antinote from "./Antinote"; import AnyDesk from "./AnyDesk"; +import Anydo from "./Anydo"; +import Anytype from "./Anytype"; +import Apidog from "./Apidog"; import Apparency from "./Apparency"; import AppCleaner from "./AppCleaner"; +import AppFair from "./AppFair"; +import AppiumInspector from "./AppiumInspector"; import AppleApp from "./AppleApp"; import AppleAppStore from "./AppleAppStore"; +import Applite from "./Applite"; import Arc from "./Arc"; import Archaeology from "./Archaeology"; import ArduinoIde from "./ArduinoIde"; import Asana from "./Asana"; +import AssetCatalogTinkerer from "./AssetCatalogTinkerer"; +import Atext from "./Atext"; import Audacity from "./Audacity"; +import AudioHijack from "./AudioHijack"; import AvastSecureBrowser from "./AvastSecureBrowser"; +import AviatrixVpnClient from "./AviatrixVpnClient"; import AwsVpnClient from "./AwsVpnClient"; +import AxureRp from "./AxureRp"; import AzulZulu25Jdk from "./AzulZulu25Jdk"; import AzulZulu25Jre from "./AzulZulu25Jre"; import Backblaze from "./Backblaze"; @@ -961,16 +1004,44 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { "7 zip": SevenZip, "7-zip": SevenZip, "8x8 work": EightXEightWork, + "a better finder rename": ABetterFinderRename, "ableton live suite": AbletonLive12Suite, abstract: Abstract, + acorn: Acorn, + activedock: Activedock, + activitywatch: Activitywatch, + actual: Actual, + adguard: Adguard, + adlock: Adlock, "adobe acrobat": AcrobatReader, "adobe acrobat reader": AcrobatReader, "adobe creative cloud": CreativeCloud, "adobe digital editions": AdobeDigitalEditions45, "adobe dng converter": AdobeDngConverter, + "advanced renamer": AdvancedRenamer, affinity: Affinity, + "affinity designer": AffinityDesigner1, + "affinity designer 2": AffinityDesigner, + "affinity photo": AffinityPhoto1, + "affinity photo 2": AffinityPhoto, + "affinity publisher": AffinityPublisher1, + "affinity publisher 2": AffinityPublisher, + airbuddy: Airbuddy, aircall: Aircall, + airdroid: Airdroid, + airparrot: Airparrot, + airserver: Airserver, + airtable: Airtable, airtame: Airtame, + airy: Airy, + akiflow: Akiflow, + alcove: Alcove, + aldente: Aldente, + alloy: Alloy, + "altair graphql client": AltairGraphqlClient, + alttab: AltTab, + "amadeus pro": AmadeusPro, + amadine: Amadine, "amazon chime": AmazonChime, "amazon corretto 21": AmazonCorretto21, "amazon corretto 24": AmazonCorretto24, @@ -978,24 +1049,39 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { "amazon corretto 26": AmazonCorretto26, "amazon dcv": AmazonDCV, "amazon workspaces": AmazonWorkspaces, + amethyst: Amethyst, + amie: Amie, "android studio": AndroidStudio, androidPlayStore: AndroidPlayStore, + "angry ip scanner": AngryIpScanner, anka: Anka, "another redis desktop manager": AnotherRedisDesktopManager, antigravity: Antigravity, "antigravity ide": AntigravityIde, + antinote: Antinote, + "any.do": Anydo, anydesk: AnyDesk, + anytype: Anytype, + apidog: Apidog, + "app fair": AppFair, apparency: Apparency, appcleaner: AppCleaner, + "appium inspector gui": AppiumInspector, appleAppStore: AppleAppStore, + applite: Applite, arc: Arc, archaeology: Archaeology, "arduino ide": ArduinoIde, asana: Asana, + "asset catalog tinkerer": AssetCatalogTinkerer, + atext: Atext, audacity: Audacity, + "audio hijack": AudioHijack, avast: AvastSecureBrowser, + "aviatrix vpn client": AviatrixVpnClient, "aws client vpn": AwsVpnClient, "aws vpn client": AwsVpnClient, + "axure rp": AxureRp, "azul zulu 25 jdk": AzulZulu25Jdk, "azul zulu 25 jre": AzulZulu25Jre, backblaze: Backblaze, diff --git a/website/assets/images/app-icon-a-better-finder-rename-60x60@2x.png b/website/assets/images/app-icon-a-better-finder-rename-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..518b6128bcc589651ed3b238875768fd8cea0076 GIT binary patch literal 13829 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-acorn-60x60@2x.png b/website/assets/images/app-icon-acorn-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7bdf62b7d60bd437ca33165830418a43471a41ca GIT binary patch literal 20306 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 M07*qoM6N<$f-^YXzW@LL literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-activedock-60x60@2x.png b/website/assets/images/app-icon-activedock-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..eda1a6e31198e22b68295973f1a73f003a4ea9c1 GIT binary patch literal 14976 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 z z3Sp-a5?b?%4l*4vnmQ($Yc6#^X5K2ven&#etQ5RP9mq;SqCPUTv>ZjFt66N2@kxL@ zk)`(A3;auxa@w>f(7-NknQyYAiP^cYh*QpDITJOPM@`?CA4xW9O^$Z3lLfG|!lTCT z-6AKw_owyla&UU@b&GRGMD>OuggQ{2%ZpCHus(=+gnmljF>9Le$$LH?rDdkX!`2e^ z6}7D17P(RSKjl`0vBH);sy!22DT5;JpT&Licv<*ZXwz3-DDdX#Daxp~omRSx-?vj9IZO@a|boqALn=QBdQNPgsv}#+!CqLSO33rRd zp^iwLw;B;P`yqkjQO{?R4o8)XQJjVzzq?4Mf1r|2KnbEH2k)+i@rj49vd5B@D(P#z zB-w$}GyeX+SA7;0%`d07s zg~zi!3-;%d@^^evYd|f1KmugKoqp^i_dmY|7_u+^8I)}$f5`KO+|`_NRvyyX hYMd_E>T{T_Ra%HQh{{vMu>lpw5 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-actual-60x60@2x.png b/website/assets/images/app-icon-actual-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..79d66e8b1e56c06d1780d33235c526aeaf2b5747 GIT binary patch literal 14274 zcmZ|01yCGOvoN~5KyX+*NMKnY1b4T^Ef9jcySuv+JV%Xk0( z-FvHEy{YP%KCRPTr{;8>=@X@-D2<6mf(8HpFlA*Vl>a>g{{tv*{@we9jYa_gpox{Z zxRQ;yw77$>9bw2UW}>-{LF|NJ?3`!S)XKfoh-^L!U#%#PYIVQ9#`b>M zXRF9fCLYwIkSQB@$eE-$#fxuk#CMYaPH+*m3XlOIbH_t23KyAFCVP8 zEgMc_IX^b;+gAPLOUBb2z!G%)!#WiTdbc3*)DYAisOQYHuACc2;(PEj5lWjjFzVRD zijbly9xkd+-#x2biVBxpuDy-Gc3 zUd0fO7_*`@*{m^cy?(PV$a?l+V39h3AF+*zQaCPjk6h&v!ExUgh)`;bSCopS^Dpa& zCbHs67?=Q{J;LVczcH_wrmVSw0)YM>jsgHiSOF0KVZeVt@(%z2P#);NDS>$i|AYUB zX(RPs;h%7}m8zzzrou;l69+qHBU1-sGiFaa$NvZb1U>oxp>}4jMi5UsTYDFNPa)`k zN$~%}|3hYhLjFs{)kX-ash|WAcW^d?a5J+qvqFW@AP|V4v#B}1vV_$CRsS~u?k$=>DvhV?H%mj7^A*qB*a{@eCHRl)yI z`IW3Z&1^L#tnAF}UHg5m_3C7-(vKBW5%?E z)#d4@!-Syk1Cfh^d$jtyxbDZb`k=Vps~lB!XUGoJM~}0uP?^r5T$O%#+qt+&*Lgfx zL-3%$+GnOv6FlRmLH|v!Rn^(-#w^|!JMRqM{Gi*ua(U?WEhBWBsV3g~R5$(6T8;An ziqj<6*U*(E7skD>fs+WAX;!WotBBfc<1D(#8Q&cly1XB`Tu5)l>%I-6BKm37r2Hqi zZRb_G+v!G0!{gw&Uh_z3TkbxAWNvqatu(y#{=Vb+qP2iwOTI>RrdD;X)>wv+6%b>B zjiZVvbEB)n9F~W9YH;Xvr@wq-q^5=g?mqkN#kou`3B0nPTwYXopHlg>9^1WxcJx}i@WdU zJrw2&4`!Ss_f05#tBz|Zmd;^qT-S!hxQl#T!lzOZrAq^MS()i0tw)Sx2Kc{lcEz}d ztBtQN3MvUI$aP;n_UmiOO*LT#L0nHz`|(0>!~}OXzGB=&mtIMH98(dbDZk%8+L{s% zc!{M*FCX90j@LlknGAS%LKbM(@fUaXvAo)dX?OJh6&q_haD6#=9_b0sDA5vSpg-2m zZ1&H&T}D(E)eCEjmVnayOi*so^j75WuYFz@S-y{-U;KM0_On*RvFdTy@3}kMR_yVHQ1?*^102qd!^**^_*Oe<{?<>BXf#v{$pVO3un^k^N6@X ztH+aezT^0Zhoseqll4rG8<8#O`Jz5Q*U>~b`*!%`Bz$4N!|G6fv2)JaRxqF%90=Yx zhZl+Vah3k1#zdPOBiN<5`yJr_*f9Tfo(reP;I+5)){gk-ZfVKZ>i2$9|4GxglBMGH zn8y2phZ>ua1MLI&`H?diJl1Is_83>F-ox&1RbKB8xccPbXV$8bs^4v0<@XZMaZ~u5 zxhNvwPq*m(uodZZeN>c5Hku*U67*PX=;tyyjkys8w~=d-`4l-xDAyYA{}8bH{G+n` zhZ;^GWq|ynL7e^=XRfgD#suoUYZlx~irZrl zaIy6Grp3em^RR=Eo9&-YXY*fX=CBviu7{mQ-@;^iM8e2CBxu_BHk!zTbbN=u$61@^ z)6!|S5Zq3BQiFDA_t8Mmd%Dxt+Zf?q&9QbIK?REjHABTJMwaT{cfB*$YwM(Nbe0g| ziQu=x>(X=$6OXGub0*zwuJHPgmp8ixII1=W(98Ef#HPo0cZzZ)AMk$u+4VnpXK<=r z^K}%rC#apr4@#myF6?(vKv8K4(buS-liziNu|76(6?SwN)HD`IP1(_#Z}RBinW z;u%l(>j*Ya3#U*IZ*Klda^rI>a{wQ>X8bV2f6$asmbJ15a@`X`aW{u;P+sy4r)S9j zpuYKJ902_=d=K*(r~M)FqT&!xWoMPmLKR5mv3xPD z$=S4;>0x0z;x6PO(s*n^nI6#CAej^=51f4^^fp38~> z>SO7X?$^uuI!rZ?=X@>25-pC?{N4{Mp6Ywwr}H_RzUQj;?w`vyaSAo9Y7N$?yIXbp zaZ5aF+5)&c1yU?v=<4B{SWL`>c>F2T3%yPbo+ES}6`H`BlPlzrVhL;I96^`#j+1Dz zIU`WI<)KojvDhe)t*Z1R`P7MD9~Y4O z2*VJ;QM3i8+36E)RtgvRTU|~1Tmkrl+G5xUs|HE%Nr?tsc$ffVu?G=T6J-2FxBr3mbydZeo zv>vzrrG6kP$}(5gtDrk*US2xEBHPCOR7VmN-i2x9Y)XEB2P_C?|}jz?<~M&6Q>S zB~Q(H+QS*1!kplE+u>8WkLaktOJezFFoJ*xXp^rv^}{A5^{X4udTqS*KA4cg^9y#a z!6zShz{GDcaUPWb1wYmyEXMh&DoacS)v>+|@;Ms?mo7 z_ocu4H)JP?_z8cuYNgOP8MCHLG#!bZmh~!TB zL&`jyej0_&klI^m1gtO>D~?X~k}lQyiB_JM(nj0+O2{vm|Ja`6g1(!@w3PYaLGLk| z!`yNRYmo)&>oX#e#G{ne;{@SNm=sS~s<`NA2VodDJGx|F12~f@kFzuO_LrBoT19%& zs|vn*sg89%|KaG@o=oG4eOnGQmXYC^`jzT>+vQQo7>46CVcg{)cvWdM2<(xR|Frqj zRaLoLoR%HO`=EKQHVKn|Je5?(?EY}J=+no`XKT&jXZA>=D-z-nILp%l>g`B5-8Yq| z;K;O|HW^I(w>Wu%E8km2kC#^MIKti|eSAWHe(7G%Lo$&dXe>}xcO@iDW+mY~;6AW~ z-{{u&>8lEO3<)4FmGr(>2=?5N?idy6+y3#~djHkup`P+yXaYV&@vqDoL=RUjLO?ZR zO^o@w)YExN&N+mGt`FR(JTeeEW8vzV8)XBjNMsfaY~@eHU|Zp1d?&}ntq!RB@vf_V z^1Yw!Rv{(1UC}9a>+Ajy^9T&zV^WB1W1@rCN*OS*WVH+e#b#NVJ3(kM)yC%-#_cCJQ|7tcA@qH5YS2|B!g10~wzGXjPDh5|J1i&=E9C zL=BqF*y84~k$%Vj3+c8{N%C1-d=$EsFQR&&3>KS+emS46dc5hzBo-qm`tk5!K|wKh zP-=C3P2MU4G)GMYWiWfRW8c6t?T=aM0Nr=?gCgyXST@&L{5~To+` z-p)6l97V7wB2EU^3ujAw$MNL&1FxTRsLI1B zBH|afPi8CV3?#ZJKQ85B!wqc6m+)TMsmoz??_-04{d5P;j#{La7`}p#WP#Lg212~v zt_Hy)*XG29?Ay)JI~Q~(Q8Ls@ybDLFqaIb$_!-QTDv#nTPFL|KJVl9PvjuM{c%c#T z*>)R$Bd@n31K`9-%#i{wV`Vw4(`D$FOk9vv=8hkL2w(rbTFBKn^1 z@4plKlfQnuG#m{VL^MQ01r*}cdnABrI|WVJ0LndwpgrJ|F}FPYdWX9K9fo+r(Hx9H zLLap?FB|-rcD3N66CZA~vMyd(VEbh7m6zv4WA$};cW8NZHJe?6WFryy6tNrxV;AN> z&3SpK8y%BF+smN~3&ulCn3|Li5~UPQ2DK5hexi~ED#i0RDEZWIT7rlbnAq+gu;Fp! zPTdLE#;y9p(T`kL2>J1^x$|QOQTl+Ph{zUmAMJ!+L@7ag1w}o!YG`@rtmXK4z$vvg z23F6cqQI(H`C=Fqjwl2;bMfZW&RM=}rp}EU{YN>~38wEJm2NR8VkaU##(mlR+&EXy z=))0U2~@RUh}`a-%$(43Y;+L5(w_RZ_ytvP9Gdvx(tg|Qk zXovcAtdZPuJP=TzE@`+a3zY^uceYb{;JMTJF7K45p}8i+6K-IXy4>>WCUf|18~2^% zbGV~3y5?#dPyjm;7Al(iIy2AG7QMUsWNY;kPpwf3jjW?#71Opd5i|w7=R}b~Kn25s zzVK)oj}S$~3ppHe(#?HV6fv>~t1 zSJ1yC!Wllh+?tPIoC7Y4r2s+)>s~9JyYpieV8FkkA3r^376m@NsY6ZEgI&G{N4O#V zHE};#T!QLRvX<)z$3j4ahDvtcg=B!0uMb;Hi#kn_g+s-^*}{q~rV+wPAN*hSf^m@A zJQc}efXEU)6A`1=dC#d1Y?B<+9Ummmykxaplj-dnhd zO9Zc+ZFTEA7E*=kUlszZO3jH-+JgIUZJj$aGb)tQ ziJ#dFUnpRPm)}61vMB$S5A>3H7RRpL7jUnJR6rox@|Ljj+7m;=Nm!|r-8KG+YEv74 z!hP?=W)5*C5GQ+`Ob#`n+r1bTasU9}V^J3j5%T#Cm#bCkKW9k6yUOZCp3hxAVPy6r zKQ}qCFU9=9RylU^tTz8dWcU+>vLJB)iHg4D%c$8YwcJVx*!s2E2bu86126XU3&8rdm}_U{86UxWLlwc|)} z!i3M?kQ`k^nqzPb<&dZJOAijTP%b85(TCOB$mSAwgyNsw`l13UnGBY69HsRZb(9X= zh@y6t+k`0D7$V{)imspG+;knWQT_uWz?vNJZNF>&!mTxq;tz~{@A(*hTxJQ({$KE0 zJE07#BWHw=ad#$~liZxaMb*j(q4X>((&U|$xO8Iv%v zy|#6wNg_#rO(Hvs12huY8*!RwadP5LXM}?!HrUK!YIK+QA)NFRMgO|VFH(O1ciQwM zd^OH5+Rg1VNOr5gR`wj&d~EB{Vr|BH2y9+SbI(3-S4N{jW_DrcRTyr8(U9z_Fq=Vu z9ry`u%IL~Dvl732)f?j30#=vUfGq@Fjc=kWE=#gGV-R}~D`Ba)wFosTin-~0VEv05 zuh{#2(A31|Ut?b4U(%n0d=Yj*J^fS(SQmRkpSM_PPyenKdm*{8UCAng}Bo2oEg3`&oJCI z{4RL&n%vjsw3pNJ4(_x3y+zO8=W|#?Qh#oR{gOjQzz^QnWNN_Sy``Gkl{lgiM+$L6 zSfrc^_&H_ZqNr^e_Ok$`<~a`J@BWeGtijcuCcE*wfO`|B5p$Kn=`Oi!8Kqrh^{9O3**V&j6?`(*IqW$T(iq?mam zFT9h?l?y^%Ni~0@BZN`b_%IXy#4zkuy3>>c{@GkoPsTiOjif}+VLsWR1%pxR`dJd)>wqiZ!6D(MDAkM2 zA{X~I1Og_C*U&wMMW?zy`aet2xeI-VG=I?6lo-x8$W2@8pNp0hj5$b=17iWLSnQE4 z-g?$?bQFaZO^Osd&{^U9jDJ4TpI=UzlP1F>OkFO?M$mQW${#;&?`*M7iOIl6aRtWZ z1CJAolf!=0t8>BzD!-AykOLn*${bew>g2UObrZ*&Zf=*bFGRWJJ8}Y?2LMBt@0Jyu zF;8*V9+$>_1ZHb_+PRqygApzd<}J+SE^w74R6oo9sYNi~ynt1S!yqdh4E>|Q0xUyc zO+Fbom+HT5;Cn;GNr_$fyT(tbrjY9R;_G_?x+q*wYD=nNCUcJjt~W+##1-iFX-ZNv z>x-+k3Qy=_TZXEnK);l7-6gHtVvW-~z=?EL!Ts$uPo+cZXDNB#v}=TW%SXqFmaT(v z?bl^wZ;XA$4YH1WwPui?nNCl!!Q@2B6;5$hLd7=_6M31o0dwSIyky?2&p@D;Iyhc` z7>+lo|DD1gxc7F2P1QuW4rAIBd=hXMEqfpjcRt%TUf+|93l5}asoC>|9gi5EGjq37M*%IS|~dB5vFG$J?d zy&uWoS?L)b&liJUXWdIRD7o3VKNP&VnNPlE!$y{_TonQHA$`e|5(yD?Vn|qu$b(0e z7$aFq-Tpgw@NwEYMOKCr>1l-XpUDNb8Od+LI;bX1tnL}ME8feDQrYGm;1whA1Ot z8ezQ5yPPo5`9*i|UnRg1<*I%2VpWYp-5bSS0WOK9`iWf?;UkoUuhD&%g`spIxZ?AH zU=MV8BlsYkRD-any^I|2L^$7FJR6=ZwBe7^L~Sg^Z?>}|$t#I2HocIYJWhEU5vSVs zAu8m77AH{q`yeigRHFmQ$M)xz+cdU8_$t4-f!3rRqQ~5sg8#$sx!TKobPO(ZR&*RY zM6)dN<`!uG=V?7&p2N5R3sn>{4j#u5q2p_Zrg z3kmZdi2yA+xYRH)ee)IZTg&wy>U8R%u8F_iu&x`25T+$s=cJFqKT0_q%utQ4N)7nr zJqRgMEtLwuIR!072rEM;yVWOf9`J6J1gy4KPJ;r|O=sPA?oh|Q z57+GvseFpBTj;HMHeYPj1AlW6B<)&r*5USGEEuK-7@Ew7lAj!Yn;nBV0pdgo^E2@) zQL7(lf{Kd5lhvpXwGv32H-8D8hR*X!i5Z1LAMRoW+Q%e1<)tdd55E89)FF-9gD(U6UYrswjsz$VG~`_>QS7tvO&?ycem5byYl`Kyd=Aonn4fm99T?5<4HpJ%Lp#gEI?j~?AD6(+y>^?>d=^TA6 zO-rJ??Dy?qUqTS41icSc1_|_x)c_zAX?piY`Rqkfj7`!vWCPJP>QP0O&h-ME@%x}q z>sppZC+CQP^cP_J&X5euVs>$<@@KaQw&Cr+Gf)&(A&M+2#x!H-CbOn64TNy*B+McEaib=lmHGF7qN`_4I!xSW__}kVIR&*L{8`ja*AvY=7>du zBrV>`A9+`!jy@GXU8c+;-vGC^>QB+9!@zssOj>n6D~YU5AB~9Auv_(5`F+AzK~6>^ zp}xHjP~oErUv;VK5f*AdB+4ohwSlmKtI35nH)+U$U{x6H9+Mi9DyEJq%jmBbs^L!N zcC}N`SqV^9Xd@%D$@Nj4(!ZUIvCl}U7?R(!+@Yee>F!C(y#dx~Dm`e9NKVr$Qeb!>=54Z?PfX;Xb;Kx9qEyt|iKkxmbT=mn z$}f?Q$0a3S?CqHu`UvXfCNN5YXU(IWPXYa9F6o1mDTs62xp z3GVxDGEv=WDjH`**Hx8buaN?PtyF`SDCt~yj;(oY^tGS8CH$|sF}@mE_zOFT^N4fW zg~5Si28mBjfu)k?fcHdgWte-}G&(NhnL^bKQRi6FB8R;|@1G~g(kSO4+f z^g|+1%5?uOS>08J+yD;dltM8$FHcg_I_ZXBPi&_JEgn@*C6p#l}HQqNw6}$TRm$^xl z5A)>Lhpq|;A6zp;3~^*+s#BUlXP;?4euBwn{XR1Gv50QVd*7sG zgRa22C)pG$TiJfCmGO}LVxGm(5)YY__w`Jpz{9Z-@U4hn?GMs50QT@){4EPYhFLv8Y=kjQ zEP^ERX#ke2%o>;%lPmv3zhv)qmCrG8LUhc&$otrKhl0|Z~)qKB;ai{ z@q9OV>ap0&lc{GYT#C)BLWBc)w>;758u9KsYyzHE71fpTS4W`l5=paq@beT>=y>;;PSI2=j3PZ@yvIYKi=)L_llgBMcFXr+ zJ(P&I>+a^%#9i4+KEz&*m=9)F_dSLY)P{13?@6Zf5E5qmsHq9!mw5IjviYpO4bMly zEYKg%hRMqx-$Mdt=@5y^HJUPZ`YJhU>^?OtoZRPhQmm};Zv%OAQ<(Esds3NuCFj1U z6R#@ujwDkmbQpa%n;T#1L@X;F?v4R~l)Mm`h8B!7;kE=Y{f!k?{G;f~91>Go@| zMHKo9l5GHySc$#+#piDI2Cp9*XEe$N4g=8#f;9O4O$5VhX==jpBkz8N>H|9~-^4F{Renb`Rn2!Ak1Y^{UXl zkp2=>7gb-y7u<8a`=i?H9$L^DktD@AKTk6Nu>gm+1vy|YTIat6*~``ywGlZas)|6O z@aiEmGNtIXrXSH@B&nHAql)Tw4PW>Jk(mHw{&o|7#}xYCUrr^R#?!{K9rv(#4Zp5CV(z~pK7Pcan_I>h}M**^^|Js>7_!0PS2M&Tb4|< zf$SSfdgX)07sHES6H%6GXkM4!Y2psEd}p&a5CyD+GCK3B{<0rx<&cDwHFizHb<%An zANa*8udYjrVL#0n1RN$qVd0fpn<88}Nh)tv+Cks^;gQ${Q$NKb%y2^FeA<`l2bw>) zntWSxCu8LFEfhgjnX=q;-*k<4HH;NUkxJJN!=ezYodUjfd;_LIc2CMW4&_*g z=PHs@iEHU-zf7DuqGrs~r5f^b27 zq{oL#_ho0f?z=Mh>45;O9xL}a;v#vEELq3!gk6mmfCj zFJ*9z^24`<(Cp-ESC8+#!p_S!0sq720-wpTvHNw>!HmGXY8h}z?xcncfl=@A-EFpj zz@efHh1dCgF`6D`i_WYcc^9#}XhdrJwn8VR1p40S?7FXRhF-_+_9 zU;$V|!=001F%I!JAiPYMcpJfZd`8o`(7TS zX4$C`2_MY-%5W5UuJ3nlIJiK|ewYX*3wb|yY0fY#A7ku@n#A>ybkjA;;bsh_?-+y9 zK)9H#eW{^SY-k{n@r&5UYH=A9O@Hyl0l2&R_mjTRf6XXj)mktizJ&4MYDIuB?ZPvI-1XWvN6vW(P8s$ z*RrcKBsT4S!t@Vq6xZhEgCPH`((Sac5W0Q*j>OExoo(-Q+xhxlYfssILh$kIs%jtg ztqsV$g+HXKScW!-1@~WPp8fI#df??*T{*pL??9q7XB|?{Uy>}l&DwHh%Fmk5Pt}3R zezB{Ll^!t205^3Ap+A~*m$Y&os)mO{h~W(z2}9K0^SmPY{f4|$hd!F;(%nh&n0jhe z?B6|;UX^oGL2e0m${(br8v26-HYf?{qKC(SM z^n@m8AJFFFvH^CaN2D{x!c`y z++-}|Ss+iBA9Ps8`9qGiY|JmjK&^-l10s?c3LW9D(-38V({)bzoNpVio2brirT%x^ z9a<(9ltDw<0VUBYo2&h+a>`%n(nAZEPpwu?ZTS4eId}ALPuYBJ+JYx@DgS=Iy4ODJ zzpNwR$A(epx4sB@Q6Z`3Ub2jj@O#VVHrco{X{!u(ASi!sfDB$+jf>$TZrTLges5|} zCxXAAAv*kePvuPdH*OI9(w>}F>XVgHMX%S7ZCyHqgpUK51r~;cot~6B@37JfG%s;C zop7%&HiY&j&DxRgxz!2TdT2^RB*}bt!e#|!f-7cOhYM4aj(FjU#DD?!-jbcMnt2lw zWx!BE;CKS49s3}udAyorZsYNT9_-Ah*XmYcD5aY>3h0{QFT3TAeR z@gb^|5mha90u$ENi@GZQ)6R9|%qMlG6tVQo3^a>zK#X!7g47H$7WQ(REz3zzh!S|R zYnZ=NDL<(!S@jG}@Azz7z9|7-?X~p|LP?Ft(7w}_UHdDXKW{x(fWw5@HX^=JMyyx@ z?lrrL$7AO(Pxj^znkFAf*Ed|yR#Rr5lfUPje5~rr{B4{%L&r3F3P!gUO0eBMHY#(m zAR4M|XPX`9o{lD)l2w5|8{adI*E|bBuhOKT1GITIE<4gaLSz#A zD+lQq!p-H$7sbBs$?2qK7NmAeH|^1b)Fwec(Vq&|j(*eU9%no-TF;Jcg?6~jo=yuM zY}y?~Cr+H%Db{-`Qjq>m(_6i4pqnqKzGzB&20B))K$PzRrZ;3xh7sygp7=`}i3fTD zUM}3K@@;_Me`|+(x5s{>>Oe*i=Z3?y9)*ElW4$6x_lS>3RdXNcSVTDE#;x8vvkRxw zjWu4Ynwyndi}z}$P&->(gbwE*D!)ykpipO>Jl1#Z-*@EDU3+C9YBzKkqvlKx1|#y!+{`0Qc7%EGE8vX;ls#eNlPBA zPQB+;K+A-pHY5 zmU#i4g!?{~mEMgG{I+0x{@OF7iJZL2v++SHj%4k1;SPN}=`-DHUnVl8(jI1*!0S!? zr@tQnHZ&YLMM&jRnSSklv)31BU*}UK0QJLntqtS9&soS8zlmHt(=tn#ocpN)0P`IA z%ORFfpJq$j0NDnYPz8CL&$NRijqd8R`m*`*Z?Fi}49kpP{!n!jF1QO-!6~zo_<7!s z1%&yCE))UWq{#3TOQ3&P$%&awphQ1Q@(T5u-akkgy6 z{@V>TF;=9Q{I*ZL(8YkX&|$)@IK%^}kBArCF>1V%ly6o=4%~|R+6e*cRxUqAH>+Jg zbG+DMI+VY6Eb&uKYM!P=w92nuCs1nWYu91KmO zN0+Q!lL;ei#DDP8+Wy;Ewy|Wzrz!Ju{V>}TnQ0H$nwv_gr>?Tvh`s7 z9KtYRX-h`+_co13vU3dJJ$pJ{=k%4OAo=MguH;C&TjX(%^k3ljvuQCCcRvxH+DafIHW_h3&LMt*cNLX9 zT*~Ji8=|6m2fDd!+%;_M;@$ng7Omfhat5=Ls&NSb-S+~oj$H|(KkyM(r4Za~zvb7; zAwpWhQD6;2&FjQPmn}h850rrO$q$UnslUJ-A2tJS)>&`qff&!VE<>Ef4-(K+b~9Gr zJbfSWa!PIKCKT+b{4aOjDe%NkD8M5hrv0MS<`%T86xz7wg>;iypY>j%rT7%nY5<8g+z%P|6k%UC3d*t31)`O;AA{1T>G@gqFcjRJ=; zxznlf3;1mFrA%z2#q!>V_Wd1^zR$~s#WzAPV&Ky~&kCCgJz;>FBHDJ5ZZl6?a52Ot z#%0IgE>84QKqW|*X7o45g2D50fUk7jiGM!kHyl8V@bj6FfqGg)L`J5z*`S#wJRh4e z(Ds<3_qm$n;@aN236AK@R`rqr7l55g-)f+)ac1ixCjnXP2^V&xIjiop zfpkj-!C^0J&E%~MyE#GvoR6cUv#wg8yD^bY7cuz~;VP$1nWQTqb?+M-M&!XJr{!c} zCiY`e@P)(PT=3t$;k~`9h=5%VWZKlq_3wy1=>OF@%Z~L_R29+y2HG6+L>lrbbv4b4 zZ{0fBb8NM^6`2nWmIPdgyv`$VAGYWo>wg1y?qgH5-ZF$KpA=@ujqpVgwU2AviUj-yeS?Q@~8Zv08Sive{~yFo!wo6ktR*e zM%K#;_65(f8ZhA8@-e?J;!nh-=*#5m&IF6Tf{}*8zqRCa^>yG;xqM)EORSkL(?qhC zki!aT@|T*BhRWF>2SW&8cql9`U%%|EIK!kL?;AVCOIZA=ulNMEeD{0MT5;}ukOP^0 z6pv6*!d}aGG)iQjQU0vveSM<(I}jx2XZHIaTt`RN>bgaZ;ohC}Eq7x-E>*C7kCGm9 zI#cCzIe-cG2&a$c9xm+Xiy8f|#7w<$TbF3h6*P-72s&e4Ok96FZz>>bI285Qpg%VP zW-G@@VJyq3Wqb100p3qXVFvf7*vkU`YU#6ru6l^zu2%~Gv!B=_#&@I_AB3q5KuAh+ zrAm!*-z4LNbGnD!sPse-0lBPO^NIs@axH4TOzl2bv%hQ9ml;G#;}xF&vOMif1az#3 zsY?LxA5WA}eW9LaeQu z`?9R{U&AQ8HxjI${F{!1`fezL^05Q@l}M5s$+GY6t3(VD*Q0t&_{cv0;ku|26^>{k zsJZo0z*F~q3+1V*qfFNoZGKkTdAjh>J!5TYFpkg!-T-Y|?MI{BRV%}CRfe-_qc$n- zn?zP#m%cDGQ-^4KGPkPb{zeX1n+6hDtx$n@A+{%Kn;s}Xbr3`BDO=Pc?Fm&k2=V!^ zKC4y7uyU?c?V&?+U^W#XCGvF-BQ}2lsY@>C}h*GuN3){iz)UTq#KGgY0Mac3O literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-adguard-60x60@2x.png b/website/assets/images/app-icon-adguard-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..76fc44351b7a2d56e669852f162fcec536d48ffc GIT binary patch literal 12128 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

#5?z=z<;_Ta)iPGzqv@X5} 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 UTD?uGKUsB6H9gfzW&5cA064lOj{pDw literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-advanced-renamer-60x60@2x.png b/website/assets/images/app-icon-advanced-renamer-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6e7799827ad62d5d7adc50460db202d73011ef40 GIT binary patch literal 10319 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 KRweS??|%X2!&b8Z literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-affinity-designer@1-60x60@2x.png b/website/assets/images/app-icon-affinity-designer@1-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..02057301330c219b76bdb5f0c6d1b4433bdcfdd5 GIT binary patch literal 15268 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 F{|mdhZBPIJ literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-affinity-photo@1-60x60@2x.png b/website/assets/images/app-icon-affinity-photo@1-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..36cf4959003f5acf975853a1c57b6c85003b2b49 GIT binary patch literal 15929 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 z z>+KQ)H(V5j9n#IG7jsCW(dliA_6d$JH*K!qM;!6pEhb)TiwAxF$1MHFP&42s#-X2T zkKz#1-4m2H5IE?h(SIkhFNmZ?B?cJS-RR0`Gm5RwVCr0-_LHoNa`B1nw+@s_C=xE? zGIXw>#F<$0I0*P)1zPj;qII~Vrh3VZ9@>jZGwE+9O7C2DnmckE+NJLWgCmVsg=j<>SD^Hs6 z5XSxoN24i`J`T4>_YTJHSl?o6TCy&{?_N~)pkOd!DeNZeimN3yhNkM0hz2R89YKgzmVkn+#-{IP@YHX< zUkE}1!sL&SD_$=@XL=jv@F~Wh_V=e!c4KSYlC(6q3ZFIEfIM@h(8wYc_Su)knXL}u zjA4Jo%k(W(XnJ8z9PwTd zzKA$dS&B``1BnxtVgUZ=)Fw}~zhRjy?u?&{L*cxKa?|Uj5zKJrqY0jII1tfo9Rkfi zb62@%Fx;tZf7Z(v{HE=D8TH`1>l0f~+SJ=sW1%05wt1CH16XF(SA+LN)nE2~nF75n zMv06`5L7Y}D(T`e+E7Wkrwpb7UfEu)wWy#Y-wUgoaZ<#|P2P+8s2<~}GCyer?Q+?1 zq1#b*N{l~DvybbjjkNj$Q~e2ausnMiA2DnVTb3Q17V#I(Yi0St}JnBA9Lh-Kjr#&#>)g|pEwCi%>|=Bd=x!SRE(KM1mfqR zCDy(eM5VbQI(7LCWdGr?}F~p21BLy^7AlBr3aH^=!uk= z%L|LmB^@;LzbWC!kRj{@D>?Upwu)CPe^?f8R*E*GbEXydqDR>s zL52&+Pji^gdcLOHRE%W2LfW3s{Dunpj~X;+OY_nD)9$LRyKTA-r{dokJkSUSXNIEy zoq=oG{j}Yb2(5d6-hmRr(oVh&O!Y+ju32itkZ5|&xo_kk!dg?6LDd(HE?bTpi$_%U zshnbadfSFHC8rFzucX{+-?klEjbF#rryvJ*oHm-pZ<8=dgq0I)z=d;e3ogy SIQ-`?Ybh~#(dzF80sjk}q6Ovv literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-affinity-publisher-60x60@2x.png b/website/assets/images/app-icon-affinity-publisher-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..33b318f73b38844319e07ff7e96aab1bc5ecbbe1 GIT binary patch literal 14300 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 F{uj!Uc-jB} literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-affinity-publisher@1-60x60@2x.png b/website/assets/images/app-icon-affinity-publisher@1-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..aee1a242684f640975628460da56b76e20bf375b GIT binary patch literal 17450 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-airbuddy-60x60@2x.png b/website/assets/images/app-icon-airbuddy-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..01eeb111bcc14e275b0f59624f850fd13bf7d1ec GIT binary patch literal 15711 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-airdroid-60x60@2x.png b/website/assets/images/app-icon-airdroid-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..00164f6717bec59d1d32f62c5bb0ef450b69757e GIT binary patch literal 14398 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 Aa{vGU literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-airparrot-60x60@2x.png b/website/assets/images/app-icon-airparrot-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..789dbefd782d3329184f19df2c32f43727e7d7cb GIT binary patch literal 14680 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-airy-60x60@2x.png b/website/assets/images/app-icon-airy-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..eabd024ccf77e0e44324dc996a4aa15087d0173e GIT binary patch literal 20203 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-akiflow-60x60@2x.png b/website/assets/images/app-icon-akiflow-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a3180b8895cf8b659d2b24f990924823a53710 GIT binary patch literal 15031 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 HH1K}`104(I literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-alcove-60x60@2x.png b/website/assets/images/app-icon-alcove-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c7236d16cbeac73eaa76c771995866285f1fdd8e GIT binary patch literal 14757 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 Z{{hWnh-Obk*9QOq002ovPDHLkV1kco+vWfO literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-alloy-60x60@2x.png b/website/assets/images/app-icon-alloy-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..778eb4faa4299d1b21693d4f8873e5130702483f GIT binary patch literal 29173 zcmZ_#1ymhDvo;Fvjk6)Ry9C$Z?(Xgm8wu_boQ(y7yA#~q-GX~?cL=V*xp~hy|M|Z4 zuX|^$?y9bOs=BLZ)=c&EOr(mE^d}Gj2mk&c~|KN`S0C!dZ;ExFaz?TL9;5ucss|x&6NPu-@ zEfp03^#6DS05IGJ0P~Ln{woCk3IG6|2LwR>qrm^j@}T}#8<+?EfB63ZWny4F|G~y> zG<4i_6czZ)9qpM-Ega3j%wG0R{{a95y!igH_Fy+tGB0~O2Uk8XL5lxE@crZeBW9r> z`!9%_tssStq6(R~qYIdfi_2`@ z%^cm`1Su%~)6xGP|2ye|DGrz5Fm8>-{m3#kd+YC@B$WgA$A_jl+^f5`?K51_e;j0wUb;H2K&?9kabSv?UgsW->A4B3hghR z!H7PznLvp+d>@DQj`H^Miz@!uqt45}EgvuI>Mcey%_Ff}#V9Bna&ylL^Kq~6`&zqry*~aP?C+OI=jB_- z^?D*6ehIkhhWD5#;}(g@&zok@C95B1%{ z96%f|p$U5{6S}9(Bu6#C>{SM^%We?l(r*(y1fD7@q(u7TtLacvQwK2=ar1JXsc&@( zJ&sxQD8y-(Zk68ZPpt5fM;lG;QblyXykjANKt$m z&F@Tf9%PU`!ogNG$bXyVS60Zo4dM9pi|j79>DD&zksmxf;q^nZ*_QRUHdgdc zK6$dF_HEB;)bupAw0vvZ+VV4VE-(;y`McS*S^EJN_qk7X)2q|NH{-C_$NC2LAF8CN(VQq~th0=BYfJhe@|AlxfkWoAineOx{ zyj>O1hd}T=aS0t8{k3!gvJ>mQ zcp@6GB}BU{#BujPk2WS3(x_bOg4ZHwA{toZ*Ye?aDqH1r)7KqQ5_*g@{OT3;Ib?Jz=Z!zWjiu?M|AM6w zKogt&8olXs_16=QFgHpCcRy%Q&Xq5)SL4k7{S3XOrh`?ch}Aw|_O!mKLtBX`gRYj$ z8+vR&ey0?xIK)Z%6#*(c5V)UM8GseB3FXwQGcK=;NMUj_SY}6!J{G82+iP@~&g4{u9@JRT{q*S+EUE^MzBBu9Txrdv7~7Nj%(HFIo06f2>j>6DqHA zplidcund-V!0>g-;aCyh_fJ}yleJ;SufnVFcU!lxu7bN~+Fw^n8BeE~{2f~z&#o-b z#AjQ|6Mpw=TT%r9)eSYuCsRa%J})N)Gyx=*okdHh0r-M?Dk>eSeKS~Xg|RAi=G~2A zl@O(VoAk=7FJHmXL0N(gDy+@UwM0^xy;eztu1T211HWtu6e*MscLo#!5uj5+#5oZL zP;N=LEDG{`5GqnF`doT9p8T8i81l zO6%7txQS&(K}8|c8x4qHXpGoNUs?<=f`%71F>Evj#kGQH8t1(!CW)O1_RKn^dg2?) z*6F8rll!fnyAR!GPnHfv4&{R!HJ}o);B~vG=Do6B>2cAx?5;8E{Uui5my)Ld=i>}r+zF-z(JO9*-Rp-)AMD_aX6P8DHJ z4{G<>w1iOufF1pVj1Jln(`}+-EWy-4Mt8N!iR{lGbb9O6GfpZr#}Xp?w8ACfUQy#! zB6^KOH%N8fc(c(?rWAT}iwYbz#VO#JMyOZbF-e3kPoC;HiJd)KJ;ydq3H`a+*gzq^ zMYgAmlUH!%V{A12raAfJ>id%1Dve973Q&oZ|GEn6ouc5@j>Ayw*xEe)(4IrDm*hZ1 zhM(1vyB`V%tSa6jd)bV(GcgynhtzQQ$?oCD^Kt{^7d!o@$;4^MWCh^*cU69YoiSoY z+3)h-?vMi6RWP-;O`sQdKc$fjSdx4yKO z>EK_DK*2e~&6&pU`I5b_s8|B?!NJ;X1uzdmIPM@J3HnzBX&o)Bz);&0a$nra1#QXY znf-^cAGFgfhEHv&0rGJMd()iQ+jp~=TX1Kn!9mmnh#tm;wHRT4*&@Si@plsVR314x zBY6p-mUJvT+znY7ZDW*79QfK)&K!qKmg%r~*!r<+R~6dn$yjfUW6?7D%V1)-(v6Wm z*&2Y#F+>g1=#m*H0!yPhs!_mY^SV&UlyaElmvi7hyd_qjp$P2D20s%_(R%qR@DQsb z621A90B~+A&-jBF+_c`V4RyCYbf#x=-VkeS=9|UgCn?q#y;OsveLSeUqTlH}KA-7m zgxTB_r!lBtu$l+`l{tH#Da!S|7KYr=w9(K3EI-CgpZ>1BkA#YHQoSf#*nD-agNckk z33&ZA6_|}&kl?F>-V-7cB&GWd{$aD-oEcN%u$n)?8G0IQ9!@QKTy+=0@r!oD{k9Q2T}zMnol=;Xh~f{H zY@sI5x|gdc^cUv`NT{D%;;IfNkrvoLoubVE>=al7+pZ9vz4i|GTwW{%?a)heKWvPK z!fGWBkQU$`>z${WYBd1GZ!KW--cv(oYO_G+F_TlfJPz%YmN76_xBPe} zV-~S}^`8xY8(|Ga{6+hZQe07VOCR$6R$y`3)|cj5?UEe#HGwD`_vnixk+sZsPGB5r z^!$Oqb+12(;5V8*e2(=4Bk<{}YNT3@%MW%Yy;mgli2K+J{Q%X^|Frg!MOG?vc?J_<)x>;6BpIzQzz z8`EPJ!dF|Xeg~$Qm3nH9pBTn^6_#K<8sjVc7IFz}ZfZA7VW~B-MYGdi%H zLloB6miC31E)SW*5-{cmyUs|U?{mLJ#n~Vc>~a2m=;Qj-z+ITdDy0wCCO>a=1*9Zd z#O-48AkudbY+13h3z+(?-TBtDEY$!&?&=B%+@AS+sD?d=7Ct_5@|{TVp(&%II?TR2 zVs_VPWl*5qeodY53?T?f+!Jwv>>%>s{$_%5DabQ9*bpLdpbH5NM!rX|4}?`gG?@8K zZl{lJym!l?{;TX1cWkt3quv`_QE6nvq<=~{)1_Sng!+9~5U{|ez$Uh1B_-HMCw&rw z`gJu9>33u(0@49cWNMPNh46GoN-7I^spt|p7y*|EotBdK9<3I7Xtr8$g2Q56XrX=( zoFs>q^zO`;C+R&x>&fSIZ;bkLBAi*;f9olr`gzpmPZWG&$7FEg`BANIv+l2vU)%cD z_kV-%q<{{5{;zEcsw~=hHn>TAdp@JTWxq0|;`_L8#M6ZeM6Ap=&OYKG7$PVYG|?mZ zC}S(|_u4XI2g5(0PzA--ggzbM)4J7CJlY@(==)tE*D|+$Q z-o>+gf;g8ce2O{AusEV>^1i;Qb8O0%AGEEZqCHc~01`1AP$JiW0TbOyvTKe!WWm6S zAN}SitrZv`Yh+Ap$RCVLj29IQCElTPL--6f8c|=~&;#u=o z&pJ(()NX#vT!}#PIHhu~@Nhvg7u7~jkUv2Q>fEiiyG#F&b;tpj&M}6Q;g?2I0n-s^ zZLz#f|OSe zW&YR0FwXeYA3c&r9uSXMk;A<^gA6|=8Je+zFzfH}W7OO8wsrOW_hj5?#^?BO(%xTm z27vM*WYI!fJSe)Tg&^GBQST<~&ql0F<0K;*d4)wmuQL)tcXYl?B90lR0xcq52twD8 z=vmUfwQy^05J826epwB+D)~y#l|Ybq!OG~)K5mF02=MC$RK}*(p#p2zA&)bKkv%x9 z#&c<6R;W!=r=+P@ld-~ZssJsm0ukkw`z$v>KiJ+8lw5Vw$OPjBv69snnE4ZNL4b}P zaW3$o$srZMS172Bp7E9fK!_BsndFBUdrFHf@7sp zu(!wiD%T6PvarMgh*przs7}(Jt8i1!#eWJh57S-OOWlO6W+OVB(LS)7RyXGBQ}j5m z$yZ2{ei$!S=$BDzie+uCnIS%Ljeb1Aw-!5Q6KMRNC^v_!Tqvzu{3$(rW`O06>zh3& zEHOk|W$zo!G&7@tw7O>kUK@u&5$l*O`nbde$Ssy>>{w+4?rB)JQJD>PH`<4#16Vr8 z$|~chvd_WVmx4AP8(b;at%h?UWHd%u344PDFM=(~j!s~w^2frrUGfVPC%NQ6DE6Qa zgbjYDLxxdjh%HJp&5FDg>DJn{woMm~cHN{ERtXl~XwCYz@cU2zELg|SZzhT7YF2X` zKI?er=iVH{(*3r&C#3dTR*T zaBuUca=DJXgpuQ#{t^I$V|N!bYN$IJZR-@J&?ls0jNiz`*TvK2hA~#7Zb0MF)!<=m zw;|*!gTz}TUDa}q^KVWU^?#3E^Lsja-GJsEbqLK2 ziCITOmy75ernS*rsITbta%Q>(KU&Lk8Bac6pnGxlQ8STmT>uvN*^o$9*FKA9ar_?8 zD`G764fD{QaE>FDY&PCFMzMPy&DH6lzavldtqGswUlDKoZSlP0l`fmx?ETI<(_dbx zAI(m^FKf}g*x{T&_4KJ%y#WI_NaJ>5!SI7_07Pa2pHGAkB+-ScGTrc^vnQDI$;l+d z!{s{U(3fq*PQulew(qHE(&Zs&h|LpT?rLTL4OCCnn%2gC zvxgF7ua8T0{FBgbXdgAofa8-vTB)wJ$}wgb+D7_y`R`ra5^|p4b)FFAPm`rb^h%4j zg;Xf-pHARiNnCU&2iq^)K{Ex8GvlK>za0X+20q(oe@gt5D|gV>lVRTEv>tyqF-ge6 zj8de)Ud~$(FrvyNv4wYIYd0G+r2t0bNmXuzhu^}fWq4#jHDGr2%qi6}!DX_S+YY9f zhl(fhO- z|B`ig;``lZ!gSk;tMNR{Zc|i-z^hXYN&VxE{i&;o&sQyL(Tx|B+?#Ez5Mc!R1p6n$ zW79zqsYpQDTX%vu|6Id&D7!Czr&L;pg1-){jx5H&GM*+H>29tvl#q5BJSz+9kA?iz z3X*u-g$c6E3Ph}p8u8*M-L+O@35XU`0Ycfi2Lwn_};7JdS9D6^O&Au$y= zL*-+k?LGycFAk7iNg^P8`NkxEQva^A&bEfas3YFumsh7yw3~V{RRQCoVfjlnM|2T^ zgH+kLK?^M`ObYqu ztcE(2x0Sb5l&A!wq=*7ga9na^+5Lp82%>WoTpOY3!kWxBTw8oT2~XlVZ!wpDWNe*u zi}66`kBDe7jP69dYkGQy8NCCQR|kyt*E} z?V0t!|DjKsT^_=7`$tJb;7&z?^Wzw=)v0L`? zFDrt+kP9?5L=C`71Zs4a<_!^0qVhh zC)Can1!DAsSZrt&k|K6+yrW=dxgSjmG0r_r7|XrPsog5l7m<^~p;;2D3n@8J^_x}j zl!Gm-+N^&NGUj$ulVFUbA;1Tr@mH|3r4OI-Uyrnk78~>IObS8;#8h3zoLSJiGo0&H zqZ+d?B&^@yB!UeuSbG&?3=Q#j{E0QHI&AHLN9nKAK-Dj!^O^Bans{W1G(y?#6AS3d zYNC`^2*$9-kV`1$lwOzQ-q|fWF)R*byAj%&R!S!|&Ex$tKmi+Uv1D%pit}pZ6?DN> zkh_Vj$u0?}Yww=S@NZW_=+*3mG8*Kyo9CG+AHx?eEB4BdWmva#Ly?DWOtfO73R)40 zLiCm(Ot*EW9g-;i8ZUi|Za@z985u`O5TyaED@~jg6m5i*EwP!FN?;U&0LOC!{P-Zl zC7r;IY0pUiP@)JbTUO0^EyoEJJx)Ho=mv$ZNV__WC`?i`E2CJ608;gr9j`hH>c)QU z{aucG<^#7(V(XdI(l#WB8*a1j~OB z7Fv&yBhe1KMUB0hJ*z_j?tnrY+#$Y-QwlsW-20Ku@zc=~h>8;Vl||EQbt@GtW@Png z79F+;E-V5bzV45H>k?Sz)^J)<*l)TPC}BrlcmfXaE9ohk)j$?|)Ugv9uCZ6j*kqR% zcKNoy8)%5XqP@g@(DN}@$@fgHIi2rvIHJir9z@C03gcPZidW@2`db8~Yo|6596K=` zOuymmaLdm?Ht8fYaiqS_(1~Qi5llfas>7$eq17=woS?Ccu=)upLEcu{esGq$IwWk=UzBRc~QV^yqeOM#@HO? zND#@2r4;bd0@A4xMT`h<&@5rINP@%?SPN4oZS6n75skxDuu$uYo)hdK<}k*ZW0gK8 zYLwKgLe*E&EoO(JSB)Xy7VZI)iLSI-OBb5Yb7p(&200aH%=g1A(f?`^IG*gB*%13F zT50Kv*-<(ln!ktQ90qKy7@oy4g}FDyT*!b~IhUM1bwd@j! zL`@yB!6A&3Ls%0)Z%1?%i`BIf(`%rV@rLzi5Ibr64K?)!qq6rIyBMmOO+W+mv8u66 zR#zZ|iQr7mYVRQ)$TN@8*s48jvS$Ddkip4iaCp5x~zd(~9|j2?pbOuDb^5`+8;6W)gaZxuga zOd`;(5pMD#z2h?2M40#c%9T3LG>nfx@O~53z8G}n-GKa`eH7s8QL^*Vi+8mbaYpX0 zPL{gZBFj3W>5txX0JBr&PZ-yu<&Mq2Ds-M3Mq}{88q={wTv1|T{CMEF(q$SxUF>SM zv@`2ys4CWz#%xsRV+%$^Q@i4VCVmw}{r1@n$XY*b$XI?H|0!Bui;dV&ZKpma8X;mQ zT_C*TpzGcG4RWSr9Lm%=ws?_dsB_~Uh0ZC1Tc{(xl9Vl?+IY9S>Nv-fr4Bc2n3SuF zm<0PqXO&*H_fVN=F);&tHnOrmo{l^X&&o}-(aQ0DSE)<0=&E6m=aRNAlAYOycN61$ z5DS-`*bISp6cKWjks0bs-#8=OwdeY%7*H&WMPj{^vR4V+a-kw6aWnUpio}t|MTwmJ z5gF+=^7LmBEubK!1sU-kp}t1CmU64;TNd7fmxn3>J1iiPI7lvk+gpNAKoS4}0tb_*o4a6l7KMEq;bM-+!gryDA9`ZFmzFAe$l`a)xaYDY#^Ce93=4ph4>Ks@qw+#yYRlZ<2 zV2l>_NgV#J`dU#Hl(ERSJc~(As6ArtU0qzn4gY!0zRmPjf*9r+g)a0b)D@N^$0|P+ z-sF?Ln||!#oX5b%j&e7caS_X(xEdli%mKJI2Z<=viwXNh#1U>XPgIAu+BbV(dh#`H znQv0J$8Rx~R0)o9s`UbluS7Na8lfgJG+I&gSa-}sA!)n4!@OI=&6=8w8CiFu*mlw; z8E=x1&QY%3p?vAV?!mU8T{}R-ceArPBih&ona8WQB7q~E{a#V@RDL#hs9a9bVz|-I z=UHiJFxrTzzM(7wW{83JWw{e$Sqj|~Ulo!@oQ!eGU^48ayZV=2W51O^@Rucd$J7)% z#O(VyEc~!on0<3LIfqVGo#?9ul2y8Q*@o9>PSm|oA89$j=zKdebvxesrovY`ya`T)wVZ9G^bf2 zMO{Qb;bY~w01NXKo`!zZ+t$C>nlh-)Fm^ee$yc< z2~};#~yv!uUgN>i?mn)xkS)@L}=~kRmJrw z){LO`#Rh~%&a8allt)9#pSd=g0q5Dcbd{YU(bC~`X<@Q-^ipCXT#K~Gs4?}V#Dfd< zRhLTaJPO?{E5FtQNR+;O5(yvM=+ouc(FmkyC0iG1#YMk3XgX&E`PI!DLT%97Du@ya zh!8yQAG2lqvvdTzH-}CKpwv6@<#8KYN#&239T}4SkyZyz5OXIZhx<@55&^5fY{fla z{{pwO9!5@+6ox>STpl|1bb6ybPiTUm<4&Y{r5NnNg@hh%`)H-JOULJokb!n@n~5Yi zW~T2#zJQ+6{bbvQLEc7vCs3{7+U0R2&Ne1Gau)ND)?CxrFQ(F`7`Wum>OkV_s_f@O zlvE<%ULvaq=oBi3jm^(O;GmRRdi=}j0Xp9o#Z{WYP0A7Z6e}L0_LIa`9U0|jmG3&i zF_s~-BQ&#>!PGp?Kx^Ez->fW@3m%is`+w|ffB4SrT_>fNINmPG!(V#h82@M03(g?JzD9XoFN_)y7}UfuuOTYC}vUULYp+HdOsZM%)} zDx73jf%19>5X33c2_rq*Ak|Z2$XY@vZVRrj;bS!psgPNBxV>{%PukNSY|_Kvh{4W^^8OejMJF zTIXa;gBeU|Er3P>z@tBQW^H|IqDPE|gbG2;XKtrXyN^ofXHG@=?Y5#Q;ZQmqv4j~T*AH1NOS_W3N)33cJ zOz`m>ItQRXV#W;(X&rKUT*L6f_^u~_G~hg*C&saf#>u=%#y$80!jhYDmCs4pq8^M; zhv|>v^$T01k9!Mo%iDOTLLkx;gw~*JgxO6g@1MR2S)9*R2h|)V_jR<>i7~D%AdVyzu zH=xRqnFi@CXiNnEl%U7|(X*D$;O-eZ&8R5O{~(wbfe<4Fu3XwadoNB?#TxY>8s~fZ z7fR?s`Qij@y94p4@(dMwPD|NY7!Pc8Ci>vzz1?&*9VO0@dJ?wI00))`i*0Wf;~dh| zGrj7(N=u#SXQz9ZS!`U3Pw(5G^~Hy0xFj51WcQ)eef{c^>PmbECx@o-A?{(wo(KmZ zf)5^!iJ5mp(!Kko%sQBLr=EQ`fX7AeLR;JoD?SlOza(@<&qC92d29r?nQ20%_|`*} zyB=eES{$#RHue>x6bR>Y78{|LZcECzG9o}+NmF?zgDXZ<^?>e$Q-0S`^`MRto!{S* zBlO(_fmu4Kq%^!Pfg9tZGrWpphu6Uwh~EAPg@)};>>Oj~?0%51iG~{H^x~RR)*iv$ z;$Ekl;IjsY_L$QIJKkpB9m*brv7FEn`T8E~2>;UD4ZVn}Xy11{yp;9P(MKr1rdUMyDt;G~Ik6LlQ^%nsSmt9XtJOBm0Lx)}#2g4(bHidva8O07;xK@r2E> z5E-k;^?kM?nLe?L)$WN?p=Wf%lU62a%q82sP*lJ$XLO%aFP~0M4|XclXDky#rp8F8 zUjf!oV9caPl`Zsg{W4t4!EFCh(8##oJNQ+zWgl%50!wWmjg@b4P;=OvKH1x-^tmq= zWTV6Rtw+F5iIgz9O7RwNS#c8pwSHLv;|7a{8d(^roSCGUw6{(lCH+;wEWr@I(xjfn zeC$vMo8-Zv%kop23*zB=Y*}aWqYcaxUVe6omj!I^JUDt5*}woZf;C&a52FUHDfdBq z`A{I&Y*2EGjO+y2@IJ8dspXPbhbs!<=`m60W5 zp#8~0gWpbMZA$BV3bfEpMHU%?G;*ko(k=?mcVaB;%y<;|^nbZ5oE+~aLVyA2S}gU995;iLiUyEE>!?37+&+gtp@INMmd$7vF{H-cK3AG~;G3!6Ff zi7?vvI^&|VSc7Ev4wDbTawpW!bH8SQVF_AKX;GyPV4#TSF6l;DLVdGkX`y}ktJF71 zT$bGr{YnVZ^iu<&w?rM^SBWM_9Py#pi=s4cgV+fVM)C=bijVuWJlik`X+Y>Q(RllD zOR#qO^@TR*`;Law20eFzA$Ivn`#9@4%!y&C$C%x%$tKSqJgl%Lk|rZ{E;HJDOh@o% zSm8MBP-{^TES~G0H~gNtm-;}n?Tb4>^6An|f7;fzK7x>Uxube+yZA?VXY6t!P4x4w zh}p%FgV6V0ER%4KRuEl^RhH5peTS6Ef@Fg9^|?{mmXHdp4xM1)7zj&MNUmW07AanRZ8|vln72>0 zr|jE`ADe6ODxZ9~VChPK$2V8eV>9bJ57i={-1w?g@-)zoC#H?Q@xmFS`S&U!nPHhX z&2>Bno@`>}RqfzOZl8>+Dt4tzzXCho{TC>D+lWmpB=aSi9H5;VDi^N~SDMj|5~qcS z_|b5Lt7mkfdN4G90awv|tXPHdNh!pWlMXBGBWC@upA{qc5cSMO=$B;V#NNkYOp9|Z zOqz%=D1L2l+stw#q=0S{{pys`-`yh8Y6umft7X(JFIdUy)0f=g4%WW-m<5LL750~8 zf9OZ%z<*AcnK$iZmH5|ET>=fo0*sl@$|4< zZsFHR!)+TAQ@ez1utgfCeRy!LBNzfo#Gj*!7#WhPZiV0uVz0~`u(ru|HkmaMEh10D zonenVbkxVPZE;M6S(@~&bz}yfrb&ruF&cywP?>pJRD!`5@OLQba4^6pT|W3~KF&%0 z8{a?B@*?m&|K7YMdW^ddxLklPUm9{+-M`1Gwf+68F_FXDcm3t49%YiLippuN6fofS z@-vk{I@k0^W_NRm!1oOk;0r?siuRut4{U$TPE++T9FUc7w2)$PUiBmK0RpdO4yybW z35oZW$k6gG2FjLN``=xurA0cfPMHf>ihHjJgUeFvjoPLy4xK%f1`hINEx`jK| z@nCVP64sy4gdm1UY5~47P&1JFRR;>qGS*PqA6$I>%i_tz*8p&MqE8e3p_$E-fh#>= z%d_bqPg+=UfXVkv#Xh{Z?Z&kKGwl*C`IA?jRE~`YkRdAbASAXrzJS6z37(kK$+Btf%HIZlI_)qQ z(8^x>@lXOaR+bxT0)5`EYAC(uW zrUDB@#u1!Ajy?`@730*hJgJYl0BJk4R3pn%ef{diyW)myay!d_QBPh7<|%V`ydP()Zi0qe(wJNDKR?8;Y567}$bteHhqELkKP4EdH!UAB%!ZYU zz}VoZc+G0yjXPWFK;nK_GFS;!FW7^zv8{}wpBd6>1%(Tv0|_}7NBLriaI@4I3EsqN zgth8MXdg$+gtv%VU2U7z2P5}>|6sjBIE9~v`w4?En-euSG-N$XKjahYt8z7$N2a%e z$KBqo`iSecSS3!QAUjR4N$tC4Yai2MYe2vdllEp%LOl)rCA3E}7l-vj*)HWknrjRi z)iD{K#UVxW0?;~?la{{I;@@ey!<`ni^uyiibETeGJz<@u8)wTyn|q=7OcEJISdU5a z@6HrP6z$S%cCLQuc)9Ik&+MH~RMYkox8fQM`ty~*b+|cTH>JS8WDQ*WYS(LDuqIkl zaCwu_$o)g`&jXKl`m8hm5i-)!z{L9x%_}8XT1Cd*&(TZmMX_oXCK=e)a!x8}{hB)8 zR1MEnQ+dz~Dk>K+H4OGZ+bD%kiyjP)wUDVN(AGK0v?7S6Soh$zEd3m5?I2RRd2E>U zXl*R1%^t@$7**+7)`XD}8u|AERIgKLe7HVGRqyNI>d24zRd9cOoE@91U_T!MwGvAR z{R9scmmco&xdYb7D@RGcNmivfY`rE_MWrKy!6tU^`sEaG$ba+l?2%5FDNj8lC6F|v zT$$+Pif{2&;5MK1TbrqCs5H#@Iz1m88FoEMEro$9A{$nOG+r3nYnc?KdnTcKEtm+I z5E|t$6KA^b!L9|d`^P)iO%alp_SUs#qfCapT&D6C=Z|kb!8nk;ANA-HOD0Pb)V5?pLc1g#Gv4(gc)aLM1|Lo zeK1;nxyZ|>735Zl)wa?=?@#bxexg?cqXUb$>BDCTH<|A zx8+-uCk`e<-zyB%K@@hVQZ%Y#n9Ft%$&ui2G&ue;4JvEOx==;dY_k5(A_r@DZ~F#o zMZ#(}{Co`fxVf$NC6h0|LKk9NhB@zu`F<;W(BEs{9rv*veYT5QQUP^K!y>rz(%n|< z=>@J2NG$3L*{yvA0iI=60CXBuaca^9p-V0vI?;xj_;DY!$mCR_vK&y;dXW-)@lit9 z*6X^{dMdrf*ieiX)DHjBX)1*SForPaQD*>_JnL0VV7OqfLT&qoS^V+z=y{#~vT4gU zt&Z*rqc({?4?l5N;aP2*?xQb4mN zlRMzy)dw%2OKZG?alz*Jl^yG|0iETUl!F1Vyj+c8d&3AtAEh|(`k$W6V9?T}8 zgtXU5lD=f)&a;T>h10>;>s_;SVGqbHjMj)=&>6_&r@BZ3jA`Rsar*p2gThv zB(Z`*ejnRk%f_5M1uM0{$N`VR4VW#lwQFDmn3##=@6CauFxO~QlICODJ9$CC^^KHn zA3(!g6>WO~p{l>p5nv~M zWB;gc_t4uxWJPm-G1Y8TL&c~?AqS4NXsynQvGKf7MvGFFk85Yr+``QfxNhLg_djIi z7CEaFNFgjUfH$cZzjby-sxfBw7${8|D8nJF1*;%!_s5A-;fP{A!YKW_JJTjnhCT+TZPRfuh3Ae-LRFxe+Fbbf8= zL+KULg1xFZ*He%Z@Ya5GdH`Q2WgTHTr9+c%ttY?+kZVh_!x5aUfq#`kk?OB=ma1xJ zlF`LUYK9H+6;9ngKQrxEx+2?3Vk=PX3bSg~B`hU(sOxB*>TXvOTV4;Nj67ZNO`*P0 z*Dg&zan2#TTw*dC>eAh&;(8^Fh>mguGJYP%Quu)#__ZW_wv)da1|(Gj)u_6HSga=P zFKxZV%~qcHxP3M^^KP*dl^XdCveleQ=R@yj@ad0>}3h`ow~pf%^0SS>2cF&ckB z*NR!(Ey~G0VBbyK%qHoRUD8WBAg10{3xx4oX z9$uGy=@A&O`C-7wJ#`)Ft_*ASE2+2f`*tJFA*lu+^fy*7TQb!k+MhyM;hd$LA>IoJ z{&3BeCTns<6S=>yf^dGn=WO^&?9v^JqeX1bP}?ZqLW&N+=$EmDih&7@lc_Uq-{sXj zFehdEjBtV2$!!77;L2c46Q^ZvY^2(Q2BN1N0n(p;xvxb*7joz4Nbyccm727BLil!< zg5kcN0%BNG3-4(wlIXu1Nr#h8f|hR_b=_yWz|Y!O>V+5T?z269cZhK$&wmm+hw;q) z_HdhuGhTOcig&F+VvJ=;U#l6)&YVa6ibGGUyXqde9I?B;pe!X_`S>f_eZT9Gu$${y zF{+~pm8c_q{m66t=-8_1GJkpzMENaQ^8@btwzctT!#y$CW0wnJ8bha9&s6a2=>s41 z5PCeCG!UyCZU>V=^jy?U8XXWzDo(Lm0b}+nZQMx6CciL`0ZTfBJ*Le;+4?rL^~Zkt)8;x1GE?PaY z6M++M9)&fm8RFn?NS+E&wtW&8IWX4)Q3^%iB>nDKuf6z>F~5}|Y!$BKfIWYep^1S^ z$Fb|eWsoxWbGX5om#=e^fy4-I9ZW2y(XR6)J!*hf`e_S~++VbXp=;|b-jUuMVipB3 zs5TLUUUZ2f>5ONbKBNP=Ji$^zaD}r~D=e@y(;I%9FTk@2O3Zr$Hw-599ElM}))2EB zKY@k$LzkJ^wID9VLp>}uI=5G2%H+ZTQMfN^h+n{1X9&Vap#f3Ekz{|1I*2)GSOD>0 z*Yb{-sf1qP()czCV9d2*aKP3QndM9Km9sZiKefx5|7hvC>Da+pYQ4%-(;?-laXM&> z^@1pKQNHaKEx2qwHMyY6*G6n}r=7m&1S1}LSs{C~1qyF$hl}w@7k4(e4^#rnm0Azj zI?BZ;wBPD5HRD8O0$g3Jg|Us~z)&$3Qf%=NbVsmF4u$ynoMGfD=Plh@KV~G&?Dx|f zHFrmmPPAl60(R*uyWGdn$J)D7kDq^U(K+qc*ekN?>3qr~vyRC`UQu;{xZM8RgqNG^<11oeX(|yEm8Sg}oD!Aay zL%OZ-r`kid0{@YNDg5%;qI$`IPYo~BNzw~_m~%g-4@YmHI{vhU8t2eg=d}VxB;kIdN0HPP@8uislFM0X z?Z>L`ro50)SAXqR@1B0N_tLwCU5vg_{xT=B&&1w>vOqPsmHK43VFPe$^4}qyP@@iW z2Z+eG$w8#9*ilzuXE-*hWTu2NUG4>lA)ONpA*M9M_(g2>bxK^v(842)AMbkst&sTL zH~m*yDGwjpb;2|=Mb_~<%`Jf&=w$wbcGyhK7(@`ON#rxS)WXHLA^?w{r;ycsLWE@1nWh& z_0YnY@B@49n(m9@_HKg`wuh9UF35=As066qJ8$=PTnFf_NRJ6LQNfQGfxXoyvGI;9 zvhexKhhGvx8<zWv7b;~3N<{jO^gCA`&^;Gop^(3P#AfN6>Gqawnj2j9Cp_sAGt~)H z2bXT7np;R8^Lo&bXNkPKTZZ*ZDDJvrY@{9i6g3+*WwbqzV4_Ud2U0yViuW6ris$1_sY(I)KP>-zk*9=vD(ou+}(|240nF zSiPD(OKpPJdvbrl{xi z@p1Il(+tBTk)6x@nTIN-cMI)S_>*_*;%U)8h~@d4YDB1gc(tr6(Z8YO6}}<)d8?Ca z^swBA1^Jl#@nRV(ar+)!LDb9OO5zY1hFJ#D2w$G8V{c;q?jjY>^)upZEoOmpwq=hXaV4+veT!{_E|iEp zT|i$hEU7&b_#4g93(;}(tflU8X;bA%0|MzQ551TvN7vk{kF}@&->$WT&0&uUgt)5C z%|Q&F?MDYHT5Zw<&6(>N;72-78=Y|W}y};SMOtG-! z=LyVP&3cZz>Qpj6R`#d^GVas()d9#V=L7f$!P*HA+0!myIqOqs$q6i#kI^rpZ%6zu zT0~#)1@J5TXf%!{VPp-H=b@?>Y)mJs?)8nZ@&=4?e`w}4O>!v0a^l|gdIu(U^=$k> zs7w3|sP3z{$YG}O&X<545esLt7aiC!oBKvO6)A+CltONcDjlsg057|lvvL?T#>RDT z8nXm9uHiyI1M>oEM+zqnt+~Q7$n5x$8GiL{Py)q4WDlxkZWU~C?@OOm&h(xe#%7s% zPHlNa$$v*z}gLilfJVqX7klSZ_P z5%3bkEg?dYF(Pr%8^Usz*OH=3afh9Y{G>F6*`6AJRB0|brKvY*lZS*MPo}jPY+l7w zts~?#CZ42ih@XlsK!jyOI|Jo{#?Sy_nHAq>bYYTqzW96j*w}O+r_j35Ujd_ouf0!? zUj*qz8UP^8d=5Iau42q$-MC_r4L%BnfK`77j0g&ul*_N zil7^5k0oOK{OhEp*WQe9Wn#FH1Im(Sjv!E_?QMHR;u5I6UI&^%C^YJ)L}_x|_Xr-W zQ~n7^_stJm?-Wmv1#!VoS-~^IDVX+E2D<|fyjc=!`JX8R;+@Zmz)L8Nop1H}x5S8A zi%Q#(416UpZ`6km@k0z?+}jE=HtazV8Bxu=RK%n&H;b zQe&XsF=7GV>EjwC?AtZPa3?gRA-h2nihk8uHM_5??h<-Be7Nz)=HWg?dOL|~GjvB4 zTuZd{dF&dbAf?G2Z14nS!~Iy{I}&RW!iV^N*1@Hmndn79UAgo}i+ux)9+b+iIacfh zkd`e?{G9$Gr>m%Q6?(lp04oecc4gX2B8v|GdqqQ9NajFWP`MW|m&F(RO!hVP#Kbv~ zVFBT={Zlve1U#*eG%zi^TO7eQLG^4n(+s#O^Y4*x@T?-foCV7Jx5ArQxGjjoe@pV- ztU0k-YYFXVs&d_zPbt`9O*=>aLZ=PqFE|-gT05Ia8wNs0GU4@eUvNB7kw^=n?9YP! zeU6(h!_yk12%RN$5KeB>hUmsY0k$n+l?ZMn9@W!t)ia7zIK}vK2&HTUApWC!C#Kcokf|LB;#`49a|Z-@3dN3X{k~{RRlro2zUgKT zvoPLlM5^<0J+33$O>0Ga}**~GT#%x+z8bYk!bpxWXzNKx-N{ew7B`A1Xpm7FT7hm^V{|EdRnDO zYFSfGdmB*dMB6j6$2&b*c;C&QEJbAWbD%xOZ#rB!fbu|-OA zyS%YgE??ni=a(2~o)G$yrF(QoEFZh7f*dpDqjiA1@Nia^8`rBGZT{~R$KUvMO358A zUW3E*@9}2SCbxSRmzLSzyGX@uP`xQZEERcG5s-;|mHH}_^drrYA6`+n3Oit-NLUpF z>uyk8>JtqjG4MY^RfuSw<#8k7rP(gC1`#UJgb{G7L}r99Lptq+a)qjs`Bh_yQ>AW6 zt%oV&001vdNkl1Od0+8FTd;LTxV89J=Dy%ujO#Oo3N#x>^Ij zNa_*4dRzr$NQ^eJg>>OX%a=A+%LWUtJx+>;9?QBG@L*^M;rYwlqiI0lDrBvR{Ihf8 z-ZHI*BOe8@?k;KWC8$(G=6>7QUGdywCELDw+zY4&J(wk*X~aWY{pB^%$Y%5;5c1ko z0qIp{hP0@roH#U9o^g^XP1^X6TDzL3FpLdY6}nj=-kLg~#jLXeTobx3M3Q^WKT)8r zB#k1FRJX4ADnU#?3Pwh?8eJF)$ZvE&v@^Obn`ixa5cz*3<4EPCmsp3t99PxvMH~nUD?nIplUglLkf;q7jFLIcz&6?O#|eqHp*RW zb$AjtqnrPS2;SfI<=4G)$3LIG<+-JEKf8{N)osozc-@s|^0^#_x;J<|^zmkx2BW4e zm(IGCRWYPFdM7h&+itZ0qEwd0c7+)WtuNh2h%40So@xX93v)1GNZejix#LV{@u6lBc4g4Y5ld{#Q{ z{WJd)ZwfG@b?D%;PEa|q3bj3nsNN}IWp|ZD89#opNQ)lN`jk#dXu_L7^HFCcWW8}0 zJp9QuoesYJC}j5jeA@u4GC%?LID1&$T+UtoK8uxU4t%!V;jp@^hgRL;Pp1gSk4*60 zMAiu1*sQ{*arhCw5QPni%b!&rA47XxE5H-!^oN|P**689a==O^z_LH@CnxiD1nKnA zwOB=Lg{z%)H#a=QaK!Rar$gMtl`n@T*-lA32ZC$dSq#RX{v%2 zgJ>in`6Ti{i98h`ih${_BcI2=D8d3)|5V?WSK;bHP(1mXxj54f5uC;eD%oQCb9bv{ zX7Naw;8?cD99@p00J8|xdszNF`{*#p8oCx%T(x!JodQ%EKMd``QfK}Li`?qvh;oge z$s5q{7PCZ7{}}ms@Pm+@_ah(q1Ex!S_ATF6M!G6$#w;+lsF&w^87y*+w7eAuroysG zf7VrjWU&W8s&(3wBtSOgoY>Y28KojYs7;s^hfTD`HKTjw#L1K8YyZJF^Wx?d*O#u8 zpZTF5jY0^o;@$YPo61+e{`J9q@xq1jb3gLKsdts}0c}pUz+Hty8}v@A;hbMPiWMP} z1s#!W`3ST4qtYCz{)*>Kmp}Q4pO~pi(AEe}1(Rq)rUcvQaE4>{lRO{4uJ5rb=gZ`i zSb-h~Lp=|L+!0JFe1*#DK6eN!AIKbY<^k(7fQ){p02IK*B+BICZx@B zUHQtd|GJbv^w5LlXMgNR^Ez1;kx0TY`*lJ|uoIG>r+xG^ou}st&5nE0=e>X53-p&q zX6T`dKYz#YgZKLb*L4brutAnH0pMI8v?;@~bXQyfI4lV=iIK) zXL;6X=q|vYpjp{Sce5zWIsoqZO1a0!e!V^qwweHBx z2p%}9?V}!{Ue!U8aWV<`_7qTSq4IF@=i+Zy^N)p5;B>qC)T=yg@{u<($aGa=`B3{` zg$>=nM2RbK_$d#oYjRUT=y#V}NtW>qjsk@}FoWUXT-bzP^8t_$1!|PQnDjlBv%L9e ztJIFUjA$^`d0*kHX0B0c$COFDf}&BaLFRjia!comKf;X?xC78@4gB#b7lp>b0TO?d zO6*Y{;9Mk%!{0ZG@Wqd}U-c@Lb1-k;azZ$>$meHR4EEd(@==NiUnTIH{#j`dT;;^l z;M@W>^Iu2*HtT>briR)hK4Xj@OOrPEG(&(8&&WZ&ODXF10Z0V`FHQXILVV{o<1Ti zpHMcZxM+@ks}^0H4C!`2IubHn&-HV{=V@~Wdhn9L{7z6ZSmjHAG~ zg*qSgIttTy%&qf!v?~ChiqtD{Qp^AD4-Hb*m}hpJ5);UROb4TuYcYk^vy+01G&)q8 zM>#mmSM8;YPXKhnub~2OX1|>QIM=%#a4PUaml^Hgx1DA=WJWB2A--7zf8ngpbkd`) z-zpwV@r5lGZ_}9VzIXOq$0qE+Vsbq&6NIMfKg>yfp zsb^KZ1Js(X-aRj=yqC9t1FZaf`6E_2aO9ca@i1_}svtToNgAQtCj4Ylkk;LIjXUD% zz{mKqlHb_g+7AHEyXmug}c#yL#kbvoK3yK=F>i0cCuXTz_y0~43g1PcVVyc+75thx4{Ijqqp*EGyy$D^yKMUgOGh{p zV0!X&rY-J9I{|yDOGgP+3WV+sV8GpO&k)@EbL_jtY2Y3fN_7r+l~8y$x&%vYtyOpd zSe+s(cvTD}34K`r$}eD{mVe!VHLS=JhM&Y36S%H(DuW|jrxI-Qg{`MQ^RDuFU-H`W z;+K7Tx#^Z$${{{2<}P3dt-rFkSnmDMhs*E$`kTvJe(Sd}KO8VPggR%}yB>8pRgmUu zKva%KR0D8C+6gs3*O}}r@c~z*)anmQVev??j0Ym#2g8{GdE&iqDbsvI@Webn zUC-?rt%^H{>>`{J5dOl`?kYEY=GTJ{<>M`)%WwVHTq$4S*YLK=E;n~3*}7#rm;)h% zoAUq{dk38g;OKY$2adIatN-0Ae99)HpCYAV|B*TK}X z%10j$Gg-xQD&Fv3L`13rn4l&1`SmB>JaXJ+fByH&H-6W5mSZPQ2=OF$`ugk3GoJOV z^0}}5;__R+`lj+vzu}vB)oP1TWRw28hKq2kHY!jxb=*mKhemxaew_N$FDuu*^s7?mt-t@fWpHV! zeA3OlKnVPR+dD&!hdH@nL?c|+0oe(t0QResMrxw~T8CHwECEN!Loa-A8F9}ii@d9# z@J8O+rey}FKW+)DHgrP<^kT2nhk+lk&n_J~? ze*M>$fA)hvKyGy_D=X!F?|*-J>@j}Lo0iU;xxPH_dCx0Hk8pVs_nOyzNqOl02g<+w z-@m6!%(6lTV+f?ou(_5emBuw`uF6JRK?M3Fr&4qZ;sTH}gaJ<&`HYpCmQmkHGb2B7c%j_&hY#^( z^tmbckM#(5QCeu-<@%aJuTwZ7b)p1HQ<7k4RS4}{bs3r_V6uzn>PTqz-IG7<)?3Oq z|I_bkCFPB8d}H~+@B3Hf{6h~T5bvK-7gK-J?YEVG^OHYOKK*4c3+!vY^h?Sce&k1) zkLf6?s}ktPUDQGWlUe7f@lt8#A3gR%ULN*LvG(}ZANh%q@cpIHANk=QDsTF~ezFWN zKFYgsFppt7fA*I0+OPlC@|9oncO&4N?|Dgi^|$|E`MvM`+euHeE?D}&+sgR|KT>YE z?XEJ*8shpFeondgdq2YH=N&liAgzg4B(K|%H9pU*szi@c0bDaXHBtAuS{^#6(z#)=KpEZ#dkG}MH z@@G0*J;Y|*hd3)dB(gK|N9?oQZr|XNr~);uldmnU;B_@kJu;F9LjPGJI%;W(&5*Y3 z@@b#>iX7pZe)qfIUB2_{UtiWAd9<8j0eEWRNc_n|hs)A^50-!VZQnUM=(+CHsdD7H z6D-afIbyil*@_*`;sk1HtK%>})`bx$&>qvtD_{G%^8A;*JOEBl|MWY)z5L?8`1W$g z)j-bd62^+JccTQz3MQi^-g|h6niBuc=Vh*VS zmo~Vzyv{=$r-UdAs4sI@(R(Bc)uUn`3ww!$Xwp7Us20JgoxBe3Xqq7Hw7@(IHvYSs z_usA0cm|KC`KB!XEx-Gpx&5>QlX!+KFwRi#gPThqf3#f29P6@W#4?CODXW{6oD}Cz z!=b`O=j`N|i*922W!*IRKldxYYE=3=zx7+?zrNuo%5%;fXQWPMUG2jWJ2uHj9_~0f zU;gYr{Oj_8Kl$TPoo9dkSHTdmLGSc*`S{!4%mWvMg**B5d&&nO8TyA|D-{-?ZOkg4UdZvkTh;@Lshkdai2SN&&ks1yW#Mws` zfYI-%q1J-6U~d6Yx%P-eDFVfn^IQQ_7IM#`iXeaOMe@kp7bbZM8tk{ zQ1cCI9h%5=5lMrr?@z6`&)2zFaFzeFKmAkXisP|8zMzKR+TQH+NW( z?=U*oS69kycRsxwZ;M2!6=}#9pGd{L?=(ZgWMKk;6Gd}^W~)WMzj^z#+wLe&|0I4X z9H&+JwV(Ovaub_*>q>H6B-);M=n|PnIEj1ro8FK*{<-1qPbpI;&SEy%p|Cy}T=+&YfHf>*^z(xk-X%~0w$`sug=qj}mDAuBFaFrVWWMTU zbG2_>NW!Tw`3X@1!ZyN{Q_{3(9%|pg5=Y>Al_UxP%%oZnb4_4NHa4Ldw>FgAeES{c zd4KJb%X9J1xclxrzV!*-e7E`s{K?Kno}8N;OR9md5T5FdJ3H^gjU7hN$s5j&iY`3* z@zP&k&ge6<-W?PN70@N?MIhkYzH+&&Uw)#f0OFrMaedjmk1Za;J%mE-ef+F*Aw>j=r0pMR8goPXCp#VMrQUN%3*yXvxo@cckgkX+hX`Y`)0rQ^PGGN{Ud;IRs^1R$~-9a;~*=tPjyak)qodzdqyC^+FvBT&dQs)xRlhu(Qs|&%|ZuDEWwZ6tlp4-Fv6vC}yY(>yJYPBgOWEO(hLU4^UsS>7I+ zo?0o7zxz!nz(3A8!{IwWzmyNZ19R+j$j{iFdSU4wzB$$3^T)qko^#V>1U*k1GKyA} zhK}ZZfpzG21o&o8?rV7>s26tRU`8GVqX1e7zU7kvrp0CdUro2b=}Zm@ALHBp-UrNG zKZV+SB_Tq0ZG&;n+Cia4@Z?Ee;JeWK1+g$)U0c$rP~A4LQv$$tS@=Eolb>IH;+KA* zoZ_HIx515_x4rFc6z%r0xou7g zXV~V=uxOj%b?)wBpcha8t=&zSo zy#T90qizTkmag9QqkRdUgTd~6Jrd3WaNGh2ZLiJ4vyFDAICO;Q?1IIefFn@QxK2#m zkxRc6s6Xgs*yi_41y-egTMS1D#M$L19rWhxyI6jbxe?T|W$YAO`bXdYeIwz&=e_SK z-}tp(S3dUM_wh;gT^_QqXGRcH?46JDn(EPGM`3!T5i~ZVcP@8~DzI@^QwnWAf1EUP zr9(k3oj*6Kdiw0y?A>$T?~@wUM9mKOYWqe9NNDEBv2y6dsnnG*E0@oeBfLSXPG|+D zW?6jg++Qwy^sVLQdtOs!kKS08PrQhc`P-#`=uDZo?$cBEgYSP&xpDUWW$y3{J0cMA zU%G0ykOY0qUY$?Myq<)luJ#a?tJ1 z^<7^2+bINbFMW&@0QkDN1ev5WP?U#MjVve1#RidT)YA0sajo>uXFt2#^C>S3Wt)ur zZ-4zal}G>QpOv$R7s~0Q$IEf%)kAF0yyBJb`oWM1ADfLid88B-bq{aP9!tH& z#ig?P`2A&$-GgNMS^3Pd?C6$1{L5jOLY=fbqa>~cGtV^;rH(gXeBp-W`m;Xh@-y$9 zVvrZ%(nKr+uqt;(KEz~1i-y{PlP99WiFcGp1bLeY@yK0G&-3|7Rur#Kk36_y48baB40jIbG#Zy&9_UgQ&(;fOJSri2^8W;v;8o zI|V>`F%tg5g$}w?mvEYoQCI348z~D2{urzM9TzT^2@`9}LXqbMN7xR&{-3ar z^0}!l^$9AX5fPPw3SuJ>1W5@Cab1x?4x`9)Prt=N^LKyojib^}|DrD~pZ2={73T1v zgsyTrjVAlcqAnC)_~l<)?s&;(rj8*0^-cet-%a*WtLOXdd$9npHT4hmmf14CIj}Q_ zPn6*eU(WvPQ<8qqyWUdnI`tUyzNbB1$HIUv2_N#gTlvv-pX<30u3+`H-kfprR1PI+ zvGs%3I{e4GC4A!EO{^R*qwpI)JK*!zJ*GKxm_bhFdpkHMdmQfH^M^U^U61#Qx72>}OI}ib z@>hPTyx^rT4Xl6sO+QcDw)j~}O{3J=vGh{_Tvd*=N=i}qci+`c)RLLGx$>6(_vg!> zz57oBprZZV|MSPo7rg#k%QTC(P3{nGq9j|;G`DcHy!xB|dHLLL{g)#J{LlaS_sXSr z{zs-Q>^(&6GLOq-8+0)zy*m&7CjD9siN~M&4W&1CW8S=Z_FBv3LWKj)MpTo zA9^H*e^-%3o@>-vp3?Bfm}68}kJTWgQZfmH@BPq+$~)frhvhR~RZZcS{;jVnpYrLS zR{r#l|3_I~T0$A-%QILf+|5owv;6QQk5GMBZn^npGj<{(R$4=ovM<|6naUeE-~WwYSN_#6zNy^8Q^6UYM|{OU`@Zs7fAjB_ z`~K(uC~J$Ccocl5-0{gTD#y=0ts>#?d*Ang@_+yH*OylvugtQKS-C5J8t~ZFSFY!F zKUOZ?`-kPG=e~voFlWHHd++^NIkEfBvM|SQ>|j&t)FInCV#jz^6`D$RPQnADun#&L zrhaTUAzQ!>8-T_fEOt0CQvvtn@6sao2B@BGpNe5$fRhZvI26jYjbEo#uu>3Z5MrDh z@YVJR!KLv!PbbdA^oo%Vf6upnNBOZ|cw>1sg4W$~#~txWjQx4%yWUm4{%gLbe9Jd~ zOZne85!8L^D_&kc>4h&SKl`IU4ndrpVY=FWeuh)JPz{`n%T6BkRFQO+*ToFl4g6e^Xxh%2x*V^ewj){k7b$|HgkTKl?BKL3!ESg>q<`(GLUi zB#a?6;1|XHK`gDYhcL7JV8r5weyQx;{kb_45Z`+eJ4w2kl`)I6{;1Qn9aj?N$21=ggMF1B+rQ~BP|a^qmrsKy5t#8`@kFWKWIc| z*;qRAv?4Ar0Wc;VDzk2Qo*A+Cc4YBdYn$C?6kmAYf%28F`TX)FU-Q-Fb6)eBatn`# z-G}?AcyVd5y#IagFTe3?zgB+l&A(Bm);G!@|C6XTfh06S^hqbHF2vmQWEKb(nCxI+mAk2zV~l@ zN%`ehyt;h$>%Oc!_nv#o$?HxsZTX8KJLSTKC(57l(2Zi2;`rLVB9I}W#(6(mCp09XO4$NyBu_^u&r9> z4IjU#dX%++I|hZi3F4z?&QvAg4WA?Y|(L~u9mBM!bR#CVmNAmoUGQ&$JQz+~%2S&RqOXU!6)!cEkUv9f@ zj&0urqaWqrQNkRDKXd#P47*n@Rk+&bOn~@|k98+^%G|9lEyus`7qj5|?|=A~vhm;k zMtRxu4(G|5U*uwAK|i5E@BM>tP;SX>rwBUv(U~%N8(DwtW*X&WvG-*p&Qut`?mYZY zY!iRAl#hI*?7W>zrJP3k%N^Tvow0)F6*}W=5nX0+2`VojZ?W+6k#CL|5L$a{C{O;n zHKpHB@)LM25MAPUWZ^f1@??-WEXFvs-GgTVDi`Iw;lK2Snfqf^AT_Q_OdyQo>;mXA zZ^d3ITl~0!dbEI9KgyYajyBLTR;io`OcCxpc0TYY*~6=fHs#a3(}71Tt&@uRo6)Xt zuSbz`In&xPp#s$@g8tY@>JFGA7kIbuIEc6{!25X@Fx$TT!5P1gbGanSv>gFOUMP`@ zR4<28hkDWb*w-9^Fp~Dl?44g4;Y-y={^*y>XP@RdyI<-8iI*>9l^D4>ywjYB$B_Tk zymax}EeXaSbmrkxq?sq8HKLhxIr$YNpSz=9W~uw0d&!5K2@tVq2W;&RG+Nl|TPOcI z@@!@-9q~%HB=7a^2Uq_wX|bSsOX)0`rum;yKFNw%bDRBeAnKnm1p-`PS?=wcjz_jp zk+SN_ZvY2dhm^uLPj$SAc2gn$YMx3EEFCONA?Z}B6msO-NBKB2kWrpK+O{8rU_(=H z_>v(5o44G4dDQH(yT5Q#nZ5n9gYlt;)U$d*=X=sFht8a;H>^jPq#56_f;dv^GFtYHXE>ET zY^npJvi)pMu1Z$mrP2Sr;bRPgUCvvxd9APlu?-eZ2tkD5o6tze={ily6h|OXSsc=%HdWP|!wQ``RJJA87ET##o7v*w3F~WLRSATh zU{RQZuI&xN>2ma?-&Xo__0sFxe&-j;vyWYj$sB4wJ-x-u4&9GqR|ncwB$UUuD8K+O zT-FoeXzSm#7}n)+BI!43t)nhQ_$mUO&U^l>1s*xa4?xkb+HS2ViE+IAY%VbXIO8gJ z-#x>VOmR@H^Ys)_Xt7)^8QSJHYX98i?(D>){hi?@kewE6dAbc{?U)m7fK)hU4ZVsR8SLbIPK=TDd`LYrjr&4p1)6}BcYBbzjRuYv~_ zLsYMWlj;2JG~vkdmhb#suPJ9f>l=6%@4+&C`pzA7>4ki*BSjS=&hi^h?TEvd>-QSZYv5Sk`aAKGdNVG{0W%~&U0 z_svAYB*;`7aQ=;wbO@6Rx@dFdFUV|xQQp;InSupiF-dP61$pJm5U;@XnF>?_;(a98 z=f{(0Z+d>2f9@BLgulA6UH;tBKtw1AM7DS>w?gJ%!dilY&=J8@q1rYWqdY>?dXk-m z4?r&N{Pv&Mx$8TCyzWJB=2`i>vaKJ4bS+?98tU7>S1z6}YahG69AO9HgQX9A-~;79 zz43?3XCC^)^7J!Da#|Q7MUZ@kh_tYoDn{J$=)06>J!>|PxZm+EZWcq@nZtZp4C^Hy9zC~P z&U0B+g|KD+h+~o0(0cTP1>jr18`LTQR$=eg;nQ~zW%=G5!tJ`_ZBvmrLY~m)<;!D~><5Yb9WD3*k}-2&BsD3it*=-E>7h0Yc>?AhBX)vgw*GVPnA(AtY#| zWYtK3AR;PV5Ec+~QHinh+K>V%IC|~y`~A<%>(@a}Jjr} zLlL_0=~05Uq5?E$dXZ^rr8QM%hHHSz+kEViyaVftJCr>yh5GWRFM?*ZPuZhK`IRuZ z^9!buod9sMI0VNW5BzU^`@!(eOUH-NuO1MMha+=84A1^~7#1JC1NU1~i*!hn0wrlt zBVgx&0>G<`)uE+Y4;MqBZGxry1gcy&#Pus&qTVEyuQGUTgw48qmCRJO=NW&qT&s(Z za8!M9g(-qMXY8-}yxgDenH#>jvORopiG{Z$$UuYiX;7r}$6xHcZE+Of#Ky)ar;Z+d z50?K$Tn1O@<7V|rCgQPD?Fnbn2qYyu`;_*J5c_6ilhtY?BEk*J3Z5;EKpsqLBPxrhf~;nlwYqKo%HsS6n}SP$?i(=G1mRbi0X zTQU~i-)4cgg&?#x$uRitz5Q}xC?ipZ>_vu>ci6bC#2kVklyGg}u|Pjvz(3h*X%Jofw| zXZcs$YKb`(PRE?mp$uUvJtzBj1qTG%h0?ZK0gpAAD@9OSJW_>1TNNQNRFn{A>vW0` z6|PnvB_P$s>-KA0AQ1c`{GDn`(Bvh+?;t#Hyz9tx7eT-&Fz@>OAB zkMu!Ei2%**TE?s((}t>phHU2)G{W;?V(zv_kmd5pGXRyOX!E-2g?|V)?-uki)&NgD zc{tNX1U*HBB!{R*yUGi^D|qr3m36B51M7Cf`StZrng3n@eDw#du2sPaEW#r%t99>o zF1saF2-Xp61@1LkXTMfnn3}Z)4s{Jq=6Yb{;D$N{oT%ViUUxr>`;S+kJX3^trBUGg z3E?db^VDUk!XPq})KZy3fkJ2yl2`wKKc@pH08Qzq(2cUn4ux4N4i*4H&%o?cfF&tw z5Fl#;Rl2oef8};@aejF4E~LSV{`|+x0~vgE3Iu^rR%4CSECA!o3vaBff7-w&fqi?! zzprdA)9_?|8AJ-uaJNEzu9qZd&>YC9Y&J4o^P1Fx=0c_y62P>SL=ZL+L;heSDT6{5OAnIQhoPrDdx2gx@KEwdcRzSOWPH z-6D98P8C*V!0VC0Hy`sgIB0j)BLYLX=53HC*{}`<#{cuD+6`T zy~2to@f!j5-4keZW9Tp`7d;S~l!GqH^v8!e*JnFt?|=vHz1#uw&1J`NnDNWS%Rlmx zsjfExItp3<3ELpAQIMtAzg%5P!3}?U?;DDT;iHX>muF_@p66No&3TaM>5SE(tXd5P zegv&>>x8Z_cj3%aZXerb+JLfr$Uy}AH-2501KP{ zgu*SIYX0pkkgRZlloLEGHS=obRvA+abu==pJK!*{2{U!VO#=<0JWfzqOuHx)Z|}M$ z5X!z`s;U;B;+40GNm3aT!oB<*Ukcx>ZFCfj0seQDAG~(UN1JO{_PL8c58v>+Ml}o3 zJFuaTR9M^|Gu>q5&m;Vo_oE38?H@iGjh30Ck3;3VT6S&g3PCJA%x?l{c?pbQNZm!` z@Cd5Z^xFEF*K*7KN0pAz->hNnmSTPl#|9HArF1{)3GWptjM}bPs`x-L#LUPpLz9*)f2B>T)VJ8Ayt!; zz*{x4{{8iJ9%&i=`SgAFJq2S=fca@w28+C_cNE<1;{l+Cj(Sr_OM^On9cA7_i134~ z1gOxzUL#6Ybc-3FLI~GejqWCs=dMMs+p8a2Mala)3?tQ zmQj@9#Jy3MofOUVdeSuqkvfKW2vQHbKntXq4bC+`hx2FI4ZZV^3#VhEvxn!_{{G?W-p8+}P~Iy0 Y8(T}xfgsM06951J07*qoM6N<$f=3-ffB*mh literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-alt-tab-60x60@2x.png b/website/assets/images/app-icon-alt-tab-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..eedca1335cefd11613b1adb973d6406a97249778 GIT binary patch literal 11047 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-amadeus-pro-60x60@2x.png b/website/assets/images/app-icon-amadeus-pro-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b8486ecbec8cd868a83a6ff1269a35a70121d186 GIT binary patch literal 27340 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%0Df}P>O*fPt> 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 Aod5s; literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-amethyst-60x60@2x.png b/website/assets/images/app-icon-amethyst-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f3b33ab8f3939f83676876a7f403b405f912bcfe GIT binary patch literal 18011 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

0F~ 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 JPDHLkV1mVWJyQSx literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-amie-60x60@2x.png b/website/assets/images/app-icon-amie-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bfbe24a046598e5da5d189e3b75a2f399f64d5d7 GIT binary patch literal 11808 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-angry-ip-scanner-60x60@2x.png b/website/assets/images/app-icon-angry-ip-scanner-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4ffb1e5d02e0971104d06d13eeb935c793181d8c GIT binary patch literal 12693 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 P00000NkvXXu0mjfqNIo* literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-antinote-60x60@2x.png b/website/assets/images/app-icon-antinote-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3c7b3327c8cee2ec1058ca3372061c91b210664c GIT binary patch literal 10108 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 literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-anytype-60x60@2x.png b/website/assets/images/app-icon-anytype-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..97ac4a99dd02f41a5915408fe069eab0af79029f GIT binary patch literal 8756 zcmaia1yohh*6u!Z3IZa{0YsWZgGe{h9n#WuXlV{eh)8#XbhmU#DIuNGNOuW`{EzqE zckdl<{BOKH#@cJ{IlsBqoU3Dpt18RlVv%710DvnmC#8;vVSfV#8sgm}VmgF~P^`q2 z!~vit8vD)^74Z#zC#S9i0NyVVxL^Rd`HSBH0Cx@m*fRkD!4v>^?v&A@CWH`3S?J1J zDk%ZX2pR(bh1mco2nvJ`)gg z2|v$&p++7@U;0)PL8hsatq-gyZ`0>Kg;$X zTtwlDUc<~e?@MHob z1doTgpot!1pWtgbn{$PJw}b-YvxWqE7;U9>V!@2QMYF_o66#LNSqw}}zC>53S4^6t ziauN_=*MqVuaRNDgU8uz-}gTkQ+>8GQg6Rk7R7V>Ic6U{bUbtf1l$YxWhfXj2Wldf zpr~W!6UfoWya6YQ{jZG2NBWpop`TKil82soIJWE-a(el!g*<0oW6>^Wlnu}!m~EmF ziH^$;x8&8nv87^F=Apc@n<-a29b}I$sTMVu+xyOTXSh}v!b7u}7#XM5ui}43_zhn! zJl#3t)Zp+f*Egl6aUUO%Bx4q%iW6%pnX-lG{*py(6jB!cKwzt%9LgHjRV~DPn(ikF zdb`;+p;Kj)iTf<7mdR=BYzT7f)kD5KHoLUsm*G#HJ-Tg$_vFbRdEIt`VIKHWpSts# z65Sm#3RZWb2uaFH%|WIQROzrXic z3`D-o{I=B91tY|0`}ULri=RHdYb~-m^i{Tw%vN!rmrM#bu=i8Kkv9GfUsqW_}wtzQ3yC~ zmQ{5KZWknfZJ~T^@)R!`FTu4s(=HU-s=Yc!pT)O6G{=(OBJa zNu0fLgRPd4PPlS@ii3az`4fPN>%8)PI}1Z!vWf`&ciZs2=#To96GZEPXmhWAg|1XC z_;<}7e0}ps@*+xFb*0PQ%?$$weu&h~=DIZuALZ{jjYMUhtn$As`|^zpD<~8R_SNXq zHgm}g|=`&=Ex(0>n^ z$+1!T77Uk#v*=VFsG_A-`EIgo`@x5djXG~WO>g!o5GQK^+{Pu;DW|$FVvZU`9?8?b zmD!x{`n|prlhW;DvXqiy<_$hB%y#@)hWMXGyk2>HxJsVxiPTa(P3SM9LDu`=qBBb* zR$bTFc-1~Yfnj~#la_tIr_*^O!W1ytx^jPXR&O(@UNEC-tKKzvRQ3uL#m5|Tc~%Zz zaVEih_eA*ipstVHv1x7b13KO^d`d&*a@VEhd3K3iFbW9`C(lgZ@43vnX$k}1(?02& zx0+otV{#ej!P7LRv?Uvp*$)@tdl&6avBUoQ=jpQ>V#ib-Qz=P;RQD9@~|HqBjm$BHfyoN zLb0xFJ|6N&v2q_oB}*ckNelYDS_-%;EvsaQ7_|vFoRd#&DM-6p{MgB{(pS;T{1(kp zN$scPX3h~S0yFN`Xw8QAGKkb%e~+c(7ka#NO`HEU4pNTmh!0{Bm_)*~PjZVAM!x+n5V7p!J+=!NRDf|x|1Sl@lsUTHieSn4Y5gkqDF}mZ#XtpT8Mt%)oNr4SFj6MNOO*kh1Gc z;?S`ZZjEmC`=&ALjcMZUKBBHsy-+TuZuo)>b?kh0g8h8FJ%X66<*<1>E4|h0e2WOE zm~AimSli?NL4>VtrGjRCwZrfBjl2wsJS(8k+6(F2WP|GEt_`>d`rG_kd3hLS9^1*< z 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 b&Szv9{XzRGmVSzVl6vK(Rir8;jD!Cd%`E-g literal 0 HcmV?d00001 diff --git a/website/assets/images/app-icon-app-fair-60x60@2x.png b/website/assets/images/app-icon-app-fair-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9c936850e4f10e0af1967212a2e79a6050dcbccc GIT binary patch literal 13377 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