MacOS Ventura ne nous permet apparemment plus de définir les éléments de l'application Dock par défaut à partir de la racine (la commande échoue silencieusement), de sorte que nous devons nous exécuter dans l'espace utilisateur à partir de notre script de MDM. Malheureusement, cela signifie que je dois enchaîner une commande grep avec SU, ce qui me pose toutes sortes de problèmes pour les éléments contenant des espaces :
zsh pour l'environnement, autre logique pour définir $current_user qui n'est pas pertinente supprimée.
printf '%s%s%s%s%s' \
'<dict><key>tile-data</key><dict><key>file-data</key><dict>' \
'<key>_CFURLString</key><string>' \
"$1" \
'</string><key>_CFURLStringType</key><integer>0</integer>' \
'</dict></dict></dict>'
}
for dockItem in {/Applications/{"Google Chrome","Slack","zoom.us"}.app,"Done"}; do
echo $dockItem
if [[ -e "$dockItem" ]]; then
if ! [[ $dockItem == "Done" ]]; then
# Does not actually work, nor does setting GREP_ARRAY=(-q "$dockItem") with grep "${GREP_ARRAY[@]}"
# does not properly escape the path when executed "Chrome.app does not exist"
EscapedPath=$( echo "$dockItem" | sed 's/ /\\ /g' )
if (/usr/bin/su - "${current_user}" -c "defaults read com.apple.dock persistent-apps | /usr/bin/grep -q $EscapedPath"); then
printf '%s\n' 'Dock icon already found.'
else
printf '%s\n' 'Setting up Dock icons...'
/usr/bin/su - "${current_user}" -c "defaults write com.apple.dock persistent-apps -array-add '$(__dock_item $dockItem)'"
fi
fi
else
printf '%s\n' 'Restarting Dock...'
killall Dock
fi
done
Chaque fois qu'il tente de traiter "Google Chrome", la commande grep échoue et l'application est à nouveau épinglée au dock, ce qui crée un cycle sans fin d'ajout de copies de Chrome.
J'ai essayé plusieurs méthodes pour échapper $dockItem et le convertir en tableau, mais la chaîne complète n'est pas reconnue dans le shell zsh de Ventura.
if (/usr/bin/su - "${current_user}" -c "defaults read com.apple.dock persistent-apps | /usr/bin/grep -q '$dockItem'"); then
n'est pas non plus correctement échappé lorsqu'il est exécuté.