Smart Software is Addigy's most flexible deployment tool. It allows you to deploy virtually any software, script, or configuration to your managed devices — along with any MDM profiles (Device Settings in Addigy) the software requires, all from a single item in your Catalog.
This article is a complete reference for creating and configuring a Smart Software item. For a higher-level overview of how Smart Software works, see Smart Software Overview.
Getting Started: Create a New Smart Software Item
- In the left sidebar, navigate to Catalog.
- Click the Software tab.
-
Smart Software will be selected by default. Click New.
- Enter a Software Name and Version.
Note: The Software Name cannot be changed after creation. The following special characters are not supported in the name field:
& < > " ' /
Installation Files
Click Select File(s) in the Installation section to upload the files needed to install your software. Smart Software supports a wide range of file types, including .pkg, .dmg, .zip, .sh, .app, .mobileconfig, .tar.gz, .xml, and .json. Some Smart Software items — such as script-only deployments — don't require any installation files at all.
After a file is uploaded, Smart Software will automatically scan it for application Bundle IDs and display how many apps were detected in the Add Profiles column. This is used to generate MDM profiles (Device Settings) for whitelisting (see Attached Profiles below).
Duplicate File Detection
If you upload a file that matches an existing file in your account (by MD5 hash), Addigy will display a "Duplicate files already found in your account" message and automatically link to the existing file instead of uploading a copy. This is expected behavior. If the existing file is correct for your item, continue configuring — no additional upload is needed.
If you genuinely need to upload a different build that Addigy is treating as a duplicate, compress the installer into a .zip file before uploading. Zipping the file changes its MD5 hash, allowing it to be uploaded as a new file. You can then use the following script in your Installation Command to unzip and run the package — replace installer.zip with your actual filename:
#!/bin/bash
WORKDIR=$(pwd)
ZIP="$WORKDIR/installer.zip"
unzip -q "$ZIP" -d "$WORKDIR"
PKG=$(find "$WORKDIR" -name "*.pkg" -type f | head -n 1)
if [ -z "$PKG" ]; then
echo "No pkg found"
exit 1
fi
installer -pkg "$PKG" -target /Installation Command
After uploading a .pkg or .sh file, click the Add link in the Install Command column to auto-generate an Installation Command for that file. For other file types, you'll need to write the command manually — see these guides for help:
- How-To: Create Smart Software Items (.dmg files)
- How-To: Create Smart Software Items (.app files)
- How-To: Create Smart Software items (.zip files)
Important: If the software developer provides an official installation script, always use that instead of Addigy's auto-generated command. Developer scripts are tailored to the specific requirements of their software and are more likely to produce a clean, complete installation.
License Keys and Per-Client Values
If your installation requires a license key or other value that varies per client, use Addigy Variables to inject those values dynamically at install time rather than hardcoding them into the script.
How set -e Affects Installation Scripts
All Smart Software Installation Scripts are automatically preceded by the Bash command set -e. This causes the shell to exit immediately if any command in the script returns a non-zero exit status, preventing a partially failed installation from continuing.
This is useful in most cases, but can cause issues with scripts provided by software developers that intentionally use non-zero exit codes for non-fatal conditions. If your script exits unexpectedly, add set +e to the very beginning of the Installation Command to disable this behavior.
Warning: With
set +eenabled, the installation script will continue running even if a critical step fails, which could result in a corrupted or incomplete installation. Use with caution.
Priority Order
The Priority Order field controls the order in which Smart Software items are installed on a device relative to other items in the same policy. The default value of 10 is appropriate for most deployments. For more information, see Overview: Priority Deployments.
Attached Profiles
Many applications require MDM profiles (Device Settings in Addigy) to be in place before installation — for example, to grant Full Disk Access or allow system extensions to load — otherwise end users will see permission prompts or the installation may fail silently. Smart Software allows you to create and attach PPPC, Service Management, and System Extension profiles directly within the item, so they're automatically deployed alongside the software.
Important: Profiles attached to a Smart Software item are only applied when the item is deployed via a Policy. They will not apply when the item is run via GoLive. Some profiles (such as Full Disk Access) must also be installed before the software runs — this ordering is handled automatically by Installation Priority when deployed via policy.
For profile types not available within Smart Software (such as Web Content Filter or Kernel Extensions), create and deploy them as standalone Device Settings. See Device Settings: Overview.
Note: When deploying System Extensions through Smart Software, Addigy automatically adds the Removable System Extensions key and matches the team identifier to any bundle identifiers added. This allows an administrator to remove the extension at a later date if needed.
Option 1: Auto-Sensing Profiles
When a qualifying file is uploaded, Addigy scans it for Bundle IDs and Code Requirements and uses them to generate profiles automatically. To use this feature:
- Click the # apps found dropdown in the Attached Profiles section. A list of all detected apps will appear.
- For each app, select which profile types you want to create: PPPC, Service Management, and/or System Extension.
- Click Create Profiles. The generated profiles will appear in the Attached Profiles section.
- Expand any profile to review its contents. You can delete profiles that aren't needed.
If no apps are detected, one of the following is likely the cause:
- The file type doesn't support auto-sensing (e.g., a plain
.shscript) - The application binaries are nested too deep within the installer — Addigy's scanner only searches a limited number of subdirectory levels
In either case, add the profiles manually using the steps below.
Option 2: Adding Profiles Manually
- In the Attached Profiles section, click the profile type you want to add under Add manually: PPPC, Service Management, or System Extension. A placeholder profile will appear under Manually Added Profiles.
- Expand the placeholder profile, enter a descriptive name, and fill in the appropriate Bundle IDs, Code Requirements, Team IDs, or other required values.
Tip: When manually adding profiles, always consult the software developer's documentation for the correct Bundle IDs and Code Requirements. Using incorrect values can result in permission prompts or failed installations.
Condition for Install
A Condition for Install is a script or set of criteria that Addigy evaluates on a device before deciding whether to run the Installation Command. If the condition is met, the software installs. If not, the installation is skipped.
Important: Smart Software items without a Condition for Install will only be installed once per device. After the first attempt, Addigy will not retry the installation on future policy runs — even if the software was subsequently removed. Adding a Condition for Install (for example, checking whether the application exists in
/Applications) enables ongoing enforcement so that the software is reinstalled any time the condition is met.
Prebuilt Conditions
Prebuilt Conditions are no-code checks built into Addigy. You can combine one or more of the following without writing any scripts:
- If app — checks whether a specific application is installed, optionally at a minimum version
- If OS version — checks the macOS version on the device
- If device architecture — checks whether the device is Intel or Apple Silicon
- If file exists — checks for the presence of a specific file path
- If file does not exist — checks for the absence of a specific file path
- If profile exists — checks whether a specific profile (Device Setting) is installed
- If process not running — checks whether a named process is currently active
To preview the underlying script for a prebuilt condition, enable the condition, enter values, and click Preview command at the bottom right of the Condition for Install section.
Custom Conditional Commands
For conditions that can't be expressed with the prebuilt options, expand Advanced: Custom Conditional Commands and paste or write your own script. Custom commands run after any enabled Prebuilt Conditions.
The Install if return value is 0 checkbox controls how the exit code of your script determines whether to install:
-
Enabled (default): The software installs when the script exits with code
0(success). A non-zero exit code skips installation. - Disabled: The software installs when the script exits with a non-zero code.
Note: The Install if return value is 0 option only appears when a Custom Conditional Command is present. Addigy recommends leaving it enabled in most cases. Exit code reference:
0= success, any non-zero value = error/condition not met.
End User Apps
The End User Apps section controls how the Smart Software item appears in Self Service and Assist.
- Icon: The image displayed for the item in Self Service and Assist. A 256×256 PNG is recommended. If no icon is uploaded, a default image is shown.
- Category (Self Service Only): Groups items in Self Service so end users can browse by type. Defaults to General if no category is selected.
- Description (Self Service Only): A short explanation of what the software does. Especially useful for script-only items where the name alone may not be self-explanatory.
Removal Command
The Removal Command is an optional script that Addigy runs to uninstall the software when any of the following occurs:
- A device is removed from the policy the Smart Software item is assigned to
- The Smart Software item is removed from a policy (runs on all devices in that policy)
- A device is unenrolled from Addigy entirely
In all cases, the Removal Command runs on the device's next regular policy deployment.
Warning: Removal Commands must be added with great caution. Only add a Removal Command if you are experienced with bash scripting, or if you are using an official removal script from the software developer and have a clear understanding of what it does. Always test removal commands on a non-production device before deploying fleet-wide. Our Support Team is not able to write Removal Commands on behalf of customers — if you have a script but are unsure whether it is safe to use, contact support@addigy.com and we can help review it.
Step 1: Use a Developer-Provided Removal Script (Recommended)
Before writing your own Removal Command, check whether the software developer provides an official uninstaller or removal script. Many applications store data in multiple locations beyond /Applications — only the developer knows all of those paths. Using an official removal script is the only way to guarantee a complete, clean uninstall. If the developer provides one, paste it directly into the Removal Command field.
Step 2: Generate a Simple Removal Command (If No Developer Script Is Available)
For applications that can be fully removed by deleting the app bundle, Addigy can generate a basic removal command. Enter the path to the application in the Add directory path to script field and click Add to script. Addigy will generate a command like:
/bin/rm -Rf '/Applications/YourApp.app'
Warning: The
rm -Rfcommand permanently and irreversibly deletes files. There is no undo. Verify the path is exactly correct before saving — an incorrect path can cause significant data loss or severe device issues. Keep in mind that this simple command may not fully uninstall applications that store data outside of/Applications. When in doubt, contact the software developer for an official removal script.