Un Mac nuevo muestra el Dock predeterminado de Apple, y las apps que despliega tu organización no aparecen en él. Con este script, puedes añadir las apps que elijas al final del Dock de cada usuario, una sola vez. No reemplaza lo que ya hay ni bloquea nada: el usuario puede seguir reordenando, quitando o añadiendo elementos después.
Como es un script Bash, la política no gestiona el Dock. El script añade cada app una vez por usuario y después deja el Dock tranquilo.
Si necesitas que la política defina el Dock, fijar apps para que no se puedan quitar o bloquear el Dock, usa la configuración del Dock de la política. Puedes obtener más información siguiendo este enlace.
Requisitos
Dispositivos macOS inscritos en Applivery y asignados a una política.
El agente MDM de Applivery activado en esa política. Es el agente quien ejecuta los scripts. Obtén más información sobre el agente macOS.
Las apps que quieras en el Dock desplegadas en los dispositivos. El script no instala apps, solo las añade al Dock.
El script
add-dock-apps.sh, incluido al final de esta guía.
Cómo funciona el script
Cada vez que se ejecuta, el script hace lo siguiente:
Busca el usuario con sesión iniciada en la consola del dispositivo. Si no hay ninguno (por ejemplo, en la pantalla de inicio de sesión), termina y lo vuelve a intentar en la siguiente ejecución.
Recorre las apps de la lista y decide cuáles siguen pendientes para ese usuario:
Una app que ya se gestionó para ese usuario en una ejecución anterior se omite. Esto es lo que mantiene el Dock editable: si el usuario quitó la app, no vuelve a aparecer.
Una app que aún no está instalada en el dispositivo se omite y se vuelve a comprobar en la siguiente ejecución.
Si no queda ninguna app pendiente, termina sin tocar el Dock.
Espera hasta que el Dock de ese usuario esté en marcha y listo, durante un máximo de cinco minutos. Si para entonces no está listo, termina y lo vuelve a intentar en la siguiente ejecución, para no reemplazar nunca el Dock que macOS crea en el primer inicio de sesión.
Para cada app pendiente:
Si el usuario ya la tiene en el Dock, no cambia nada.
Si no, la añade al final de la sección de apps del Dock.
Registra cada app que ha gestionado para ese usuario en
~/Library/Application Support/AppliveryDockSetup, para no volver a gestionarla.Reinicia el Dock solo si ha añadido algo, para que aparezcan las nuevas apps. Cuando esto ocurre, el Dock parpadea un momento.
El script solo usa herramientas incluidas en macOS. No necesitas instalar nada más en el dispositivo.
Elegir las apps
Abre add-dock-apps.sh en un editor de texto y edita la lista APPS con la ruta completa de cada app, una por línea y entre comillas dobles. Este ejemplo añade cuatro apps:
APPS=(
"/Applications/Google Chrome.app"
"/Applications/Microsoft Teams.app"
"/Applications/Slack.app"
"/Applications/Utilities/Adobe Creative Cloud/ACC/Creative Cloud.app"
)
Las apps se añaden en el orden de la lista. Para obtener la ruta exacta de una app, selecciónala en el Finder, mantén pulsada la tecla Opción y elige Edición > Copiar como nombre de ruta (o pulsa Opción + Comando + C). Después pégala entre las comillas.
Subir el script a Applivery
Una vez en el panel de Applivery, ve a la sección Recursos 1. Selecciona la pestaña Scripts 2 y haz clic en el botón + Crear Script 3.

Rellena el formulario así:
Nombre:
Add-DockApps-UserEditable(o el nombre que prefieras).Descripción: opcional, por ejemplo Añade apps al Dock del usuario una vez y lo deja editable.
Lenguaje: Bash.
Después, haz clic en Cargar desde archivo y selecciona tu archivo add-dock-apps.sh, o pega el contenido del script directamente en el editor. Haz clic en Crear para guardar el script.

Añadir el script a tu política de macOS
A continuación, ve a la sección Políticas 1 y selecciona la política asignada a tus dispositivos macOS, o crea una nueva. En el menú de la izquierda, selecciona la sección Scripts 2.
Los scripts solo están disponibles para dispositivos macOS y necesitan que el agente MDM de Applivery esté activado en la política. Si aún no lo está, ve a la sección Agente de la política y actívalo antes de continuar.
Haz clic en el botón + Añadir Script 3.

En el modal, busca y selecciona el script Add-DockApps-UserEditable que creaste en el paso anterior. Elige Bucle como método de ejecución y haz clic en 1d junto al campo del intervalo. El campo se rellena con 86400 segundos, así que el script se ejecuta una vez al día. Deja los Argumentos vacíos y haz clic en Añadir.

Te recomendamos Bucle en lugar de Una vez. El script solo actúa sobre el usuario con sesión iniciada en la consola en el momento de ejecutarse, y solo sobre las apps que ya están instaladas. Ejecutarlo cada día recoge lo que una sola ejecución pasaría por alto: una app instalada más tarde, un dispositivo que estaba en la pantalla de inicio de sesión u otro usuario del mismo Mac. En los dispositivos que ya están configurados, la ejecución diaria no encuentra nada pendiente y termina al momento.
El script aparece ahora en la lista. Haz clic en Guardar cambios para publicar una nueva versión de la política. El script se envía a todos los dispositivos asignados a la política.

Antes de desplegarlo en todos tus dispositivos, añade el script a una política piloto con uno o dos dispositivos de prueba y comprueba el resultado como se explica más abajo.
Resultado en el dispositivo
Una vez ejecutado el script, el usuario encuentra las apps al final de la sección de apps del Dock, justo después de los elementos que ya tenía. No se quita ni se reordena nada.
A partir de ese momento, el Dock es del usuario. Puede reordenar las nuevas apps, quitarlas o añadir otras como siempre, y el script no deshará esos cambios en las siguientes ejecuciones.
Verificar la ejecución
Abre el dispositivo en el panel de Applivery, ve a la pestaña Scripts y haz clic en el botón del historial de ejecución para ver las ejecuciones del script. Puedes obtener más información en Scripts siguiendo este enlace.
Una ejecución termina correctamente aunque no se haya añadido nada, por ejemplo porque no había nadie con sesión iniciada o una app aún no estaba instalada. Lee la salida de la ejecución para saber qué ha pasado. El script solo falla cuando no ha podido escribir una app en el Dock.
Este es un ejemplo de la salida de una primera ejecución en un dispositivo donde Slack aún no está instalado:
2026-11-09 09:12:40 [Dock] Not installed yet, will retry on next run: /Applications/Slack.app
2026-11-09 09:12:40 [Dock] Added: /Applications/Google Chrome.app
2026-11-09 09:12:40 [Dock] Added: /Applications/Microsoft Teams.app
2026-11-09 09:12:40 [Dock] Added: /Applications/Utilities/Adobe Creative Cloud/ACC/Creative Cloud.app
2026-11-09 09:12:41 [Dock] Done for jane
Y este es un ejemplo de la siguiente ejecución en el mismo dispositivo, con Slack todavía sin instalar:
2026-11-10 09:12:38 [Dock] Handled before, left as the user has it: /Applications/Google Chrome.app
2026-11-10 09:12:38 [Dock] Handled before, left as the user has it: /Applications/Microsoft Teams.app
2026-11-10 09:12:38 [Dock] Not installed yet, will retry on next run: /Applications/Slack.app
2026-11-10 09:12:38 [Dock] Handled before, left as the user has it: /Applications/Utilities/Adobe Creative Cloud/ACC/Creative Cloud.app
2026-11-10 09:12:38 [Dock] Nothing to add for jane
Resolución de problemas
Salida | Causa | Qué hacer |
|---|---|---|
| El script se ejecutó sin nadie con sesión iniciada en la consola: el dispositivo estaba en la pantalla de inicio de sesión o todavía en el Asistente de configuración. | Nada. Se aplica en una ejecución posterior con un usuario con sesión iniciada. |
| La app no está en la ruta indicada en la lista | Despliega la app en el dispositivo o corrige la ruta en el script. |
| El usuario ya tenía la app en el Dock. | Nada. El Dock no cambia. |
| La app ya se gestionó para este usuario en una ejecución anterior. | Nada. Esto es lo que mantiene el Dock editable. |
| No queda ninguna app pendiente para este usuario. | Nada. |
| El Dock del usuario no estaba en marcha o no estaba listo tras cinco minutos, normalmente durante un primer inicio de sesión. | Nada. Se aplica en la siguiente ejecución. |
| macOS rechazó el cambio en el Dock. La ejecución se marca como fallida. | Revisa el resto de la salida para ver el error. La app se reintenta en la siguiente ejecución. |
Cambiar las apps más adelante
Para añadir más apps al Dock más adelante, crea un nuevo script con la lista APPS actualizada y sustituye el anterior en la política: en la sección Scripts, haz clic en Eliminar en el script antiguo, añade el nuevo con + Añadir Script y haz clic en Guardar cambios. Las apps que ya se gestionaron para un usuario se quedan como ese usuario las tiene, y solo se añaden las nuevas.
Para volver a añadir una app a un usuario que la quitó, borra su registro en ese dispositivo. El registro es un archivo con el nombre de la app dentro de la carpeta de inicio del usuario. Por ejemplo, ejecuta esto como ese usuario:
rm "$HOME/Library/Application Support/AppliveryDockSetup/Google Chrome.app"
La app se vuelve a añadir en la siguiente ejecución del script.
Script
#!/bin/bash
# Adds apps to the Dock of the user logged in at the console, once per user and app.
# Keeps the existing Dock and leaves it unmanaged, so the user can still reorder or remove anything.
# Deployed from Applivery (runs as root). Safe to run in Loop: an app already handled for a
# user is never added again, and an app that is not installed yet is retried on a later run.
set -uo pipefail
# Edit this list (full paths)
APPS=(
"/Applications/Google Chrome.app"
"/Applications/Microsoft Teams.app"
"/Applications/Slack.app"
"/Applications/Utilities/Adobe Creative Cloud/ACC/Creative Cloud.app"
)
log() { echo "$(date '+%F %T') [Dock] $*"; }
USER_=$(stat -f '%Su' /dev/console)
if [ -z "$USER_" ] || [ "$USER_" = "root" ] || [ "$USER_" = "loginwindow" ] || [ "$USER_" = "_mbsetupuser" ]; then
log "No user logged in, will retry on next run"; exit 0
fi
UID_=$(id -u "$USER_")
# The non-root branch only exists so you can test the script by hand in your own session
as_user() { if [ "$(id -u)" -eq 0 ]; then launchctl asuser "$UID_" sudo -H -u "$USER_" "$@"; else "$@"; fi; }
# One marker per app in the user's home: this is what makes a removal by the user stick
MARKS="$(as_user sh -c 'echo "$HOME"')/Library/Application Support/AppliveryDockSetup"
# Apps still to handle for this user: no marker yet and installed on the device
PENDING=()
for app in "${APPS[@]}"; do
if [ -e "$MARKS/$(basename "$app")" ]; then
log "Handled before, left as the user has it: $app"
elif [ ! -e "$app" ]; then
log "Not installed yet, will retry on next run: $app"
else
PENDING+=("$app")
fi
done
[ ${#PENDING[@]} -eq 0 ] && { log "Nothing to add for $USER_"; exit 0; }
# The Dock must be running and have its own list of apps. On a first login macOS is still
# building it, and writing at that point would replace the default Dock instead of adding to it.
CURRENT=""
for _ in $(seq 1 60); do
pgrep -u "$UID_" -x Dock >/dev/null \
&& CURRENT=$(as_user defaults read com.apple.dock persistent-apps 2>/dev/null) \
&& [ -n "$CURRENT" ] && break
CURRENT=""; sleep 5
done
[ -z "$CURRENT" ] && { log "Dock not ready yet, will retry on next run"; exit 0; }
as_user mkdir -p "$MARKS"
CHANGED=0
FAILED=0
for app in "${PENDING[@]}"; do
if grep -qF "file://${app// /%20}" <<<"$CURRENT" || grep -qF "\"$app\"" <<<"$CURRENT"; then
log "Already in Dock: $app"
elif as_user defaults write com.apple.dock persistent-apps -array-add \
"<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>${app//&/&}</string><key>_CFURLStringType</key><integer>0</integer></dict></dict><key>tile-type</key><string>file-tile</string></dict>"; then
log "Added: $app"; CHANGED=1
else
log "Could not add, will retry on next run: $app"; FAILED=1; continue
fi
as_user touch "$MARKS/$(basename "$app")"
done
# The Dock only shows the new apps after it restarts (it blinks for a moment)
[ $CHANGED -eq 1 ] && as_user killall Dock
log "Done for $USER_"
exit $FAILED