Skip to content

Re-add iMazing Profile Editor as a macOS FMA#43574

Merged
allenhouchins merged 1 commit intomainfrom
allenhouchins-imazing-profile-editor
Apr 14, 2026
Merged

Re-add iMazing Profile Editor as a macOS FMA#43574
allenhouchins merged 1 commit intomainfrom
allenhouchins-imazing-profile-editor

Conversation

@allenhouchins
Copy link
Copy Markdown
Member

@allenhouchins allenhouchins commented Apr 14, 2026

Register iMazing Profile Editor as a Fleet-maintained app: add input metadata, add app entry to outputs/apps.json, and add darwin-specific version/installer info with install/uninstall scripts and checks. Update frontend icon mapping to include the human-readable name, and adjust fleet configs (workstations self-service slug, dynamic label bundle identifier, and macOS patch policy) to reference the new imazing-profile-editor/darwin slug and com.DigiDNA.iMazingProfileEditorMac bundle ID.

Summary by CodeRabbit

  • New Features

    • Added iMazing Profile Editor to the software catalog with automatic installation and update support
    • Enhanced application display and recognition across the platform
  • Chores

    • Updated software management policies, deployment configurations, and system labels for iMazing Profile Editor

Register iMazing Profile Editor as a Fleet-maintained app: add input metadata, add app entry to outputs/apps.json, and add darwin-specific version/installer info with install/uninstall scripts and checks. Update frontend icon mapping to include the human-readable name, and adjust fleet configs (workstations self-service slug, dynamic label bundle identifier, and macOS patch policy) to reference the new imazing-profile-editor/darwin slug and com.DigiDNA.iMazingProfileEditorMac bundle ID.
@github-actions
Copy link
Copy Markdown
Contributor

Script Diff Results

ee/maintained-apps/inputs/homebrew/imazing-profile-editor.json

ERROR: Could not retrieve previous version of file (file may not exist in previous commit)

ee/maintained-apps/outputs/imazing-profile-editor/darwin.json

ERROR: Could not retrieve previous version of file (file may not exist in previous commit)

@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 14, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 66.90%. Comparing base (86b5eaf) to head (1c7259b).
⚠️ Report is 3 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main   #43574   +/-   ##
=======================================
  Coverage   66.90%   66.90%           
=======================================
  Files        2600     2600           
  Lines      208391   208391           
  Branches     9333     9334    +1     
=======================================
+ Hits       139428   139432    +4     
+ Misses      56275    56271    -4     
  Partials    12688    12688           
Flag Coverage Δ
frontend 54.77% <ø> (+0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@allenhouchins allenhouchins marked this pull request as ready for review April 14, 2026 20:29
@allenhouchins allenhouchins requested a review from a team as a code owner April 14, 2026 20:29
Copilot AI review requested due to automatic review settings April 14, 2026 20:29
Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.

Tip: disable this comment in your organization's Code Review settings.

@allenhouchins allenhouchins merged commit 94674f2 into main Apr 14, 2026
24 of 27 checks passed
@allenhouchins allenhouchins deleted the allenhouchins-imazing-profile-editor branch April 14, 2026 20:29
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 14, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d91a8983-5f25-42f1-8c9a-83a8b4ec9e22

📥 Commits

Reviewing files that changed from the base of the PR and between 86b5eaf and 1c7259b.

📒 Files selected for processing (7)
  • ee/maintained-apps/inputs/homebrew/imazing-profile-editor.json
  • ee/maintained-apps/outputs/apps.json
  • ee/maintained-apps/outputs/imazing-profile-editor/darwin.json
  • frontend/pages/SoftwarePage/components/icons/index.ts
  • it-and-security/fleets/workstations.yml
  • it-and-security/lib/all/labels/macs-with-fleet-maintained-apps-installed.yml
  • it-and-security/lib/macos/policies/patch-fleet-maintained-apps.yml

Walkthrough

This PR adds iMazing Profile Editor as a new Fleet-maintained application for macOS. It includes creating the input manifest definition with metadata (bundle identifier com.DigiDNA.iMazingProfileEditorMac, installer format dmg, version 2.2.0), generating the corresponding output configuration files with installation scripts and checksums, updating the frontend icon mapping to associate "imazing profile editor" with the appropriate icon, and updating existing Fleet configuration, policy definitions, and dynamic labels to reference the new application slug (imazing-profile-editor/darwin) instead of the previous imazing application. The installation script handles DMG extraction, application quitting, backup, installation, and relaunching logic.

Possibly related PRs

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch allenhouchins-imazing-profile-editor

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Registers iMazing Profile Editor as a Fleet-maintained macOS app and updates Fleet configs/UI mappings to reference the new imazing-profile-editor/darwin slug and bundle ID.

Changes:

  • Adds new maintained-app input metadata and generated darwin output (version, queries, installer URL, install/uninstall scripts).
  • Registers the app in outputs/apps.json and updates Fleet configs (policy, dynamic label, workstation self-service entry).
  • Updates the frontend software icon mapping to support the human-readable name.

Reviewed changes

Copilot reviewed 4 out of 7 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
it-and-security/lib/macos/policies/patch-fleet-maintained-apps.yml Renames/retargets patch policy to the new imazing-profile-editor/darwin slug and label.
it-and-security/lib/all/labels/macs-with-fleet-maintained-apps-installed.yml Updates the dynamic label to match the Profile Editor bundle ID.
it-and-security/fleets/workstations.yml Updates self-service software slug to the new maintained-app slug.
frontend/pages/SoftwarePage/components/icons/index.ts Adds a name-to-icon mapping for “imazing profile editor”.
ee/maintained-apps/outputs/imazing-profile-editor/darwin.json Introduces Profile Editor darwin output with version metadata and install/uninstall scripts.
ee/maintained-apps/outputs/apps.json Registers the new app entry (name/slug/platform/unique_identifier/description).
ee/maintained-apps/inputs/homebrew/imazing-profile-editor.json Adds input metadata for generating the maintained app.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 103 to +113
install_software: false
labels_include_any:
- Macs with UTM installed
- name: macOS - iMazing up to date
description: The host may have an outdated version of iMazing, potentially risking security vulnerabilities or compatibility issues.
resolution: "Download the latest version from Self-service or check for updates using iMazing's built-in update functionality. You can also delete iMazing if you are no longer using it."
- name: macOS - iMazing Profile Editor up to date
description: The host may have an outdated version of iMazing Profile Editor, potentially risking security vulnerabilities or compatibility issues.
resolution: "Download the latest version from Self-service or check for updates using iMazing Profile Editor's built-in update functionality. You can also delete iMazing Profile Editor if you are no longer using it."
type: patch
fleet_maintained_app_slug: imazing/darwin
fleet_maintained_app_slug: imazing-profile-editor/darwin
install_software: false
labels_include_any:
- Macs with iMazing installed
- Macs with iMazing Profile Editor installed
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The indentation of the newly added policy block appears inconsistent: - name: at line 106 is not indented, and the labels_include_any list item at line 113 is aligned with the key instead of being indented beneath it. In YAML this can change the parsed structure (or fail parsing entirely), which can break policy loading. Align indentation to match the surrounding policy list entries and ensure list items under labels_include_any: are indented more than the key.

Copilot uses AI. Check for mistakes.
Comment on lines +66 to 70
- name: Macs with iMazing Profile Editor installed
description: macOS hosts with iMazing Profile Editor installed
query: SELECT 1 FROM apps WHERE bundle_identifier = 'com.DigiDNA.iMazingProfileEditorMac';
label_membership_type: dynamic
platform: darwin
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The indentation of this label entry looks inconsistent with the rest of the file (the - name: entry is flush-left in this hunk). If the surrounding YAML defines these labels under a parent key (common for Fleet label bundles), this will break the document structure. Adjust indentation to match the other label entries in this file.

Copilot uses AI. Check for mistakes.
],
"refs": {
"b32c3dd9": "#!/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 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 [[ $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.DigiDNA.iMazingProfileEditorMac'\nsudo rm -rf \"$APPDIR/iMazing Profile Editor.app\"\ntrash $LOGGED_IN_USER '~/Library/Application Scripts/com.DigiDNA.iMazingProfileEditorMac'\ntrash $LOGGED_IN_USER '~/Library/Caches/com.plausiblelabs.crashreporter.data/com.DigiDNA.iMazingProfileEditorMac.Mini'\ntrash $LOGGED_IN_USER '~/Library/Containers/com.DigiDNA.iMazingProfileEditorMac'\ntrash $LOGGED_IN_USER '~/Library/Saved Application State/com.DigiDNA.iMazingProfileEditorMac.savedState'\n",
"c8f6c7ba": "#!/bin/sh\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 [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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 [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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 # Try to launch the application\n if osascript -e \"tell application id \\\"$bundle_id\\\" to activate\" >/dev/null 2>&1; 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)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_and_track_application 'com.DigiDNA.iMazingProfileEditorMac'\nif [ -d \"$APPDIR/iMazing Profile Editor.app\" ]; then\n\tsudo mv \"$APPDIR/iMazing Profile Editor.app\" \"$TMPDIR/iMazing Profile Editor.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/iMazing Profile Editor.app\" \"$APPDIR\"\nrelaunch_application 'com.DigiDNA.iMazingProfileEditorMac'\n"
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The embedded install/uninstall scripts are likely to be brittle in managed execution contexts: (1) they declare #!/bin/sh but use non-POSIX constructs ([[ ... ]], local, (( ... )), SECONDS), which can break if /bin/sh is not bash-compatible; (2) they call sudo even though these scripts are typically executed as root by management tooling, and sudo can fail in non-interactive sessions; (3) the install script does not ensure the DMG is detached/temporary mountpoint removed on failure (no trap/cleanup), which can leave stale mounts/directories; and (4) realpath $INSTALLER_PATH is unquoted, so paths containing spaces can break. Recommendation: either switch the shebang to an interpreter that matches the used syntax (e.g., bash) or make the scripts strictly POSIX-sh; remove sudo and instead enforce/assume root execution; add a trap-based cleanup for detach/removal; and quote $INSTALLER_PATH in the realpath call.

Suggested change
"c8f6c7ba": "#!/bin/sh\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 [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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 [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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 # Try to launch the application\n if osascript -e \"tell application id \\\"$bundle_id\\\" to activate\" >/dev/null 2>&1; 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)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\nsudo cp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\nhdiutil detach \"$MOUNT_POINT\"\n# copy to the applications folder\nquit_and_track_application 'com.DigiDNA.iMazingProfileEditorMac'\nif [ -d \"$APPDIR/iMazing Profile Editor.app\" ]; then\n\tsudo mv \"$APPDIR/iMazing Profile Editor.app\" \"$TMPDIR/iMazing Profile Editor.app.bkp\"\nfi\nsudo cp -R \"$TMPDIR/iMazing Profile Editor.app\" \"$APPDIR\"\nrelaunch_application 'com.DigiDNA.iMazingProfileEditorMac'\n"
"c8f6c7ba": "#!/bin/bash\n\nset -e\n\n# variables\nAPPDIR=\"/Applications/\"\nTMPDIR=$(dirname \"$(realpath \"$INSTALLER_PATH\")\")\nMOUNT_POINT=\"\"\n\nif [[ $EUID -ne 0 ]]; then\n echo \"This installer must be run as root.\"\n exit 1\nfi\n\ncleanup() {\n if [[ -n \"$MOUNT_POINT\" && -d \"$MOUNT_POINT\" ]]; then\n hdiutil detach \"$MOUNT_POINT\" >/dev/null 2>&1 || true\n rmdir \"$MOUNT_POINT\" >/dev/null 2>&1 || true\n fi\n}\n\ntrap cleanup EXIT\n\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 [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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 [[ $EUID -eq 0 && \"$console_user\" == \"root\" ]]; 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 # Try to launch the application\n if osascript -e \"tell application id \\\"$bundle_id\\\" to activate\" >/dev/null 2>&1; 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)\nhdiutil attach -plist -nobrowse -readonly -mountpoint \"$MOUNT_POINT\" \"$INSTALLER_PATH\"\ncp -R \"$MOUNT_POINT\"/* \"$TMPDIR\"\n# copy to the applications folder\nquit_and_track_application 'com.DigiDNA.iMazingProfileEditorMac'\nif [ -d \"$APPDIR/iMazing Profile Editor.app\" ]; then\n\tmv \"$APPDIR/iMazing Profile Editor.app\" \"$TMPDIR/iMazing Profile Editor.app.bkp\"\nfi\ncp -R \"$TMPDIR/iMazing Profile Editor.app\" \"$APPDIR\"\nrelaunch_application 'com.DigiDNA.iMazingProfileEditorMac'\n"

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants