From dee10b9991a042683aedf302eefcdfc71ec91581 Mon Sep 17 00:00:00 2001 From: Allen Houchins <32207388+allenhouchins@users.noreply.github.com> Date: Sun, 7 Dec 2025 23:57:31 -0600 Subject: [PATCH] Add Evernote as a macOS FMA (#36857) --- .../inputs/homebrew/evernote.json | 9 +++ .../homebrew/scripts/evernote-install.sh | 60 ++++++++++++++++++ ee/maintained-apps/outputs/apps.json | 7 ++ .../outputs/evernote/darwin.json | 21 ++++++ .../components/icons/Evernote.tsx | 14 ++++ .../SoftwarePage/components/icons/index.ts | 2 + .../images/app-icon-evernote-60x60@2x.png | Bin 0 -> 14176 bytes 7 files changed, 113 insertions(+) create mode 100644 ee/maintained-apps/inputs/homebrew/evernote.json create mode 100755 ee/maintained-apps/inputs/homebrew/scripts/evernote-install.sh create mode 100644 ee/maintained-apps/outputs/evernote/darwin.json create mode 100644 frontend/pages/SoftwarePage/components/icons/Evernote.tsx create mode 100644 website/assets/images/app-icon-evernote-60x60@2x.png diff --git a/ee/maintained-apps/inputs/homebrew/evernote.json b/ee/maintained-apps/inputs/homebrew/evernote.json new file mode 100644 index 0000000000..91e6563909 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/evernote.json @@ -0,0 +1,9 @@ +{ + "name": "Evernote", + "unique_identifier": "com.evernote.Evernote", + "token": "evernote", + "installer_format": "dmg", + "slug": "evernote/darwin", + "default_categories": ["Productivity"], + "install_script_path": "ee/maintained-apps/inputs/homebrew/scripts/evernote-install.sh" +} diff --git a/ee/maintained-apps/inputs/homebrew/scripts/evernote-install.sh b/ee/maintained-apps/inputs/homebrew/scripts/evernote-install.sh new file mode 100755 index 0000000000..e0e1e2f6e5 --- /dev/null +++ b/ee/maintained-apps/inputs/homebrew/scripts/evernote-install.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +# variables +APPDIR="/Applications/" +TMPDIR=$(dirname "$(realpath $INSTALLER_PATH)") + +# functions + +quit_application() { + local bundle_id="$1" + local timeout_duration=10 + + # check if the application is running + if ! osascript -e "application id \"$bundle_id\" is running" 2>/dev/null; then + return + fi + + local console_user + console_user=$(stat -f "%Su" /dev/console) + if [[ $EUID -eq 0 && "$console_user" == "root" ]]; then + echo "Not logged into a non-root GUI; skipping quitting application ID '$bundle_id'." + return + fi + + echo "Quitting application '$bundle_id'..." + + # try to quit the application within the timeout period + local quit_success=false + SECONDS=0 + while (( SECONDS < timeout_duration )); do + if osascript -e "tell application id \"$bundle_id\" to quit" >/dev/null 2>&1; then + if ! pgrep -f "$bundle_id" >/dev/null 2>&1; then + echo "Application '$bundle_id' quit successfully." + quit_success=true + break + fi + fi + sleep 1 + done + + if [[ "$quit_success" = false ]]; then + echo "Application '$bundle_id' did not quit." + fi +} + +# extract contents +# Use 'yes' to automatically accept license agreement when mounting DMG +# This replicates Homebrew's behavior for DMG files with license agreements +MOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX) +yes | hdiutil attach -nobrowse -readonly -mountpoint "$MOUNT_POINT" "$INSTALLER_PATH" || exit 1 +sudo cp -R "$MOUNT_POINT"/* "$TMPDIR" +hdiutil detach "$MOUNT_POINT" || true + +# copy to the applications folder +quit_application 'com.evernote.Evernote' +if [ -d "$APPDIR/Evernote.app" ]; then + sudo mv "$APPDIR/Evernote.app" "$TMPDIR/Evernote.app.bkp" +fi +sudo cp -R "$TMPDIR/Evernote.app" "$APPDIR" + diff --git a/ee/maintained-apps/outputs/apps.json b/ee/maintained-apps/outputs/apps.json index 05317a90fc..5f14a3f741 100644 --- a/ee/maintained-apps/outputs/apps.json +++ b/ee/maintained-apps/outputs/apps.json @@ -323,6 +323,13 @@ "unique_identifier": "epp.package.committers", "description": "Eclipse IDE is an Eclipse integrated development environment for Java." }, + { + "name": "Evernote", + "slug": "evernote/darwin", + "platform": "darwin", + "unique_identifier": "com.evernote.Evernote", + "description": "Evernote is an app for note taking, organising, task lists, and archiving." + }, { "name": "Figma", "slug": "figma/darwin", diff --git a/ee/maintained-apps/outputs/evernote/darwin.json b/ee/maintained-apps/outputs/evernote/darwin.json new file mode 100644 index 0000000000..cd70affd2c --- /dev/null +++ b/ee/maintained-apps/outputs/evernote/darwin.json @@ -0,0 +1,21 @@ +{ + "versions": [ + { + "version": "10.105.4", + "queries": { + "exists": "SELECT 1 FROM apps WHERE bundle_identifier = 'com.evernote.Evernote';" + }, + "installer_url": "https://mac.desktop.evernote.com/builds/Evernote-10.105.4-mac-ddl-stage-20240910164757-a2e60a8d876a07eded5d212fa56ba45214114ad0.dmg", + "install_script_ref": "c4c66da7", + "uninstall_script_ref": "7be36873", + "sha256": "98d1f6d52718a0b05222b7cdce14a3755ece619edf0a1b8557af75afbfe2cd73", + "default_categories": [ + "Productivity" + ] + } + ], + "refs": { + "7be36873": "#!/bin/sh\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 if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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 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.evernote.Evernote'\nquit_application 'com.evernote.EvernoteHelper'\nsudo rm -rf \"$APPDIR/Evernote.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Support/Caches/evernote-client-updater'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.evernote.Evernote'\ntrash $LOGGED_IN_USER '~/Library/Application Support/com.evernote.EvernoteHelper'\ntrash $LOGGED_IN_USER '~/Library/Application Support/Evernote'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.evernote.Evernote'\ntrash $LOGGED_IN_USER '~/Library/Cookies/com.evernote.Evernote.binarycookies'\ntrash $LOGGED_IN_USER '~/Library/Logs/Evernote'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.evernote.Evernote.plist'\ntrash $LOGGED_IN_USER '~/Library/Preferences/com.evernote.EvernoteHelper.plist'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.evernote.Evernote.savedState'\n", + "c4c66da7": "#!/bin/sh\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath $INSTALLER_PATH)\")\n\n# functions\n\nquit_application() {\n local bundle_id=\"$1\"\n local timeout_duration=10\n\n # check if the application is running\n if ! osascript -e \"application id \\\"$bundle_id\\\" is running\" 2>/dev/null; then\n return\n fi\n\n local console_user\n console_user=$(stat -f \"%Su\" /dev/console)\n if [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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# extract contents\n# Use 'yes' to automatically accept license agreement when mounting DMG\n# This replicates Homebrew's behavior for DMG files with license agreements\nMOUNT_POINT=$(mktemp -d /tmp/dmg_mount_XXXXXX)\nyes | hdiutil attach -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\" || exit 1\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\" || true\n\n# copy to the applications folder\nquit_application 'com.evernote.Evernote'\nif [ -d \"$APPDIR/Evernote.app\" ]; then\n\tsudo mv \"$APPDIR/Evernote.app\" \"$TMPDIR/Evernote.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/Evernote.app\" \"$APPDIR\"\n\n" + } +} diff --git a/frontend/pages/SoftwarePage/components/icons/Evernote.tsx b/frontend/pages/SoftwarePage/components/icons/Evernote.tsx new file mode 100644 index 0000000000..3cc213032c --- /dev/null +++ b/frontend/pages/SoftwarePage/components/icons/Evernote.tsx @@ -0,0 +1,14 @@ +import * as React from "react"; + +import type { SVGProps } from "react"; + +const Evernote = (props: SVGProps) => ( + + + +); +export default Evernote; diff --git a/frontend/pages/SoftwarePage/components/icons/index.ts b/frontend/pages/SoftwarePage/components/icons/index.ts index d22342b874..73f04daee8 100644 --- a/frontend/pages/SoftwarePage/components/icons/index.ts +++ b/frontend/pages/SoftwarePage/components/icons/index.ts @@ -45,6 +45,7 @@ import Dropbox from "./Dropbox"; import Eclipse from "./Eclipse"; import Edge from "./Edge"; import EightXEightWork from "./8X8Work"; +import Evernote from "./Evernote"; import Excel from "./Excel"; import Extension from "./Extension"; import Falcon from "./Falcon"; @@ -193,6 +194,7 @@ export const SOFTWARE_NAME_TO_ICON_MAP = { "draw.io": Drawio, dropbox: Dropbox, eclipse: Eclipse, + evernote: Evernote, falcon: Falcon, figma: Figma, firefox: Firefox, diff --git a/website/assets/images/app-icon-evernote-60x60@2x.png b/website/assets/images/app-icon-evernote-60x60@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7b7e216f46ee81bb0056149434cc478e5cdc8a6a GIT binary patch literal 14176 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

BM!e%U#v(3(BGQHBsh!B5ie7}A5{`*8K#3q523 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 q(o__$%hms`2<-n_)zJlgAQTO=V7z{zd;YJwO