7 votes

Pourquoi une modification de la ligne de commande vers ~/Library/Preferences/com.apple.LaunchServices.plist n'est-elle pas immédiatement efficace?

Lorsque la fenêtre d'informations de Finder est utilisée pour associer des fichiers d'un type particulier à une application :

  • la préférence est effective immédiatement.

Lorsque Terminal est utilisé pour apporter une modification similaire à ~/Library/Preferences/com.apple.LaunchServices.plist

  • la préférence n'est pas effective immédiatement.

Question

Pourquoi Launch Services ne respecte-t-il pas immédiatement un enregistrement dans le fichier com.apple.LaunchServices.plist de l'utilisateur ?

Une réponse idéale pourrait faire référence à une page de la zone de développement Apple.

Les réponses ne nécessitent pas l'exécution d'une commande.

Contexte

Agent ou daemon ?

Me demandant si un daemon ou un agent rendent effectives les modifications dans ce fichier .plist, j'ai lancé :

sudo launchctl list

Dans la liste, sous la rubrique label, je ne vois rien qui pourrait être lié à Launch Services.

Références

Une réponse à la question de Stack Overflow Comment définir l'application par défaut pour des types de fichiers spécifiques sur Mac OS X? suggère :

… pour être rechargé. Vous pouvez vous déconnecter, attendre quelques minutes ou forcer le redémarrage de launchservices …

Dans mon cas :

La réponse acceptée à la question Super User Existe-t-il un moyen plus rapide de modifier les applications par défaut associées aux types de fichiers sur OS X? suggère :

… redémarrer le système d'exploitation pour appliquer les changements (se déconnecter et se reconnecter n'est pas suffisant) …

— si un redémarrage suffit, cela est probablement moins chronophage que de tuer puis recharger la base de données de Launch Services.

2 votes

lsregister -kill -seed ne prend pas autant de temps (quelques secondes sur mon Air), mais cela fait apparaître les avertissements d'ouverture des applications pour la première fois sur OS X. C'est pourquoi redémarrer est généralement une méthode moins ennuyeuse pour appliquer les changements.

9voto

Ryan Spears Points 1524

De Guide de programmation des Launch Services d'Apple (toutes les mises en évidence sont miennes) :

Toutes les applications disponibles sur le système de l'utilisateur doivent être enregistrées pour être connues des Launch Services et copier leurs liens de documents et autres informations dans leur base de données. Il n'est généralement pas nécessaire d'effectuer cette tâche explicitement, car une variété d'utilitaires et de services intégrés au logiciel du système Mac OS X s'en chargent automatiquement :

  • Un outil en arrière-plan intégré, exécuté chaque fois que le système est démarré ou qu'un nouvel utilisateur se connecte, parcourt automatiquement les dossiers Applications dans les domaines système, réseau, local et utilisateur et enregistre toutes les nouvelles applications qu'il y trouve. (Cette opération est analogue à "reconstruire le bureau" dans les versions antérieures de Mac OS.)
  • Le Finder enregistre automatiquement toutes les applications lorsqu'il en prend connaissance, comme lorsqu'elles sont glissées sur le disque de l'utilisateur ou lorsque l'utilisateur navigue vers un dossier les contenant.
  • Lorsque l'utilisateur tente d'ouvrir un document pour lequel aucune application préférée ne peut être trouvée dans la base de données des Launch Services, le Finder présente une boîte de dialogue demandant à l'utilisateur de sélectionner une application avec laquelle ouvrir le document. Il enregistre ensuite cette application avant de la lancer.

Malgré ces utilitaires d'enregistrement automatique, il peut parfois être nécessaire d'enregistrer une application explicitement avec les Launch Services. Par exemple, bien que les développeurs soient encouragés à emballer leurs applications pour qu'ils puissent être installés en les faisant simplement glisser sur le disque de l'utilisateur, certaines applications peuvent nécessiter un logiciel d'installation personnalisé plus élaboré. Dans ces cas, l'installateur doit appeler une des fonctions d'enregistrement des Launch Services LSRegisterFSRef ou LSRegisterURL pour enregistrer l'application explicitement.

Remarquez les appels API nécessaires pour la seule procédure d'enregistrement manuelle nommée (source non disponible sur opensource.apple.com, je crains).

En travaillant sur un bug dans le traitement des Services de lancement sur Leopard avec FileVault activé, j'ai remarqué que ~/Library/Preferences/com.apple.LaunchServices.plist est :

  • traité uniquement lors de la connexion après le démarrage, en tant que données d'entrée à l'élaboration de la base de données propre des Services de lancement (Leopard avec FileVault souvent échouait à effectuer cette étape, résultant en des paramètres utilisateur apparemment perdus) ; et

  • mises en cache tant que la machine n'est pas redémarrée.

En résumé, c'est la couche de persistance de domaine utilisateur des Services de lancement, et les modifications à cette couche de persistance ne sont prises en compte que lors du prochain traitement - redémarrage ou réensemencement.

2 votes

@GrahamPerrin: Au fait, si vous avez besoin d'un moyen d'ajouter des entrées à la base de données Launch Services sans les tracas d'écrire dans com.apple.LaunchServices.plist et de redémarrer, essayez duti - c'est ce que j'ai utilisé pour contourner ce même problème avec GoodCompany.

0 votes

duti est une réponse acceptée, il y a une note à puces indiquant que le redémarrage est nécessaire. Peut-être que les exigences diffèrent là où FileVault 1 n'est pas utilisé ? Juste une supposition. J'aimerais discuter de cela dans Ask Different Chat, à votre convenance, adressez-vous à moi et à @bmike si vous le souhaitez. Merci. (Mes commentaires concernant cela sont répartis sur plusieurs questions dans plusieurs piles - pas nécessairement une mauvaise chose, mais j'aimerais un seul endroit pour la discussion.)

1 votes

@GrahamPerrin: Je vais essayer d'être en discussion chaque fois que possible, mais je peux déjà signaler qu'un redémarrage n'était pas nécessaire pour changer le gestionnaire par défaut pour une extension txt en utilisant duti sur mon système (Lion, non-FileVault).

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