0 votes

Comment vérifier si les notifications sont activées ou non pour mon application ligne de commande sur macOS Big Sur?

Comment vérifier si les notifications sont activées ou non pour mon application à partir du terminal / de la ligne de commande sur macOS Big Sur ?

De plus, je souhaite activer ou désactiver les notifications de force en utilisant des privilèges administratifs/root.

2voto

Swapnil hajare Points 31

Enfin, après avoir passé toute la journée à lire des centaines d'articles, j'ai finalement obtenu ma réponse. Remplacez simplement par l'ID de bundle pour lequel vous souhaitez effectuer la vérification.

#!/bin/bash

# vérifier si les notifications sont activées pour l'utilisateur connecté ou non
# si ce n'est pas activé, l'activer pour votre application

# Obtenir l'utilisateur connecté actuellement
user=$(echo "show State:/Users/ConsoleUser" | scutil | awk '/Name :/ { print $3 }')

#Emplacement du fichier plist des préférences du centre de notifications pour l'utilisateur actuel
notification_plist="/Users/$user/Library/Preferences/com.apple.ncprefs.plist"

#Nombre de bundles existant dans le plist
count=$(/usr/libexec/PlistBuddy -c "Print :apps" "${notification_plist}" | grep -c "bundle-id")

#Drapeau indiquant si le centre de notifications doit être redémarré
restart=0

for ((index=1; index<"${count}"; index++)); do
  bundle_id=$(/usr/libexec/PlistBuddy -c "Print apps:${index}:bundle-id" "${notification_plist}");
      if [[ "${bundle_id}" ==  ]]; then
         flags_value=$(/usr/libexec/PlistBuddy -c "Print apps:${index}:flags" "${notification_plist}");
         if [[ $flags_value == 276* ]]; then
            /usr/libexec/PlistBuddy -c "Set :apps:${index}:flags 41951246" "${notification_plist}"
            restart=1
         fi
      fi
done

if [[ ${restart} = 1 ]]; then
    # Redémarrer le centre de notifications pour que les modifications prennent effet.
    killall sighup usernoted
    sleep 1
    # attendre que le centre de notifications redémarre
    while ! pgrep -x "usernoted" >/dev/null; do sleep 1; done
fi

Le code ci-dessus a fonctionné pour moi. D'autres peuvent avoir besoin d'ajuster flags_value selon leurs besoins.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X