Je travaille avec un conseiller technique principal d'Apple sur cette question depuis plus d'un an et je travaillais avec un autre conseiller principal depuis un certain temps auparavant. Nous avons effectué la «capture de données» à envoyer aux ingénieurs Apple à plusieurs reprises et effectué des enregistrements d'écran à plusieurs reprises pour montrer ce qui se passe dans le moniteur d'activité, la capture d'image et, finalement, dans une liste que l'icdd maintient dans / Users / user_name / Library / Application Support / icdd / deviceInfoCache.plist (en l'affichant dans Xcode).
À ce stade, voici ma meilleure estimation de ce qui se passe:
Le processus icdd (Image Capture Device Database) voit les scanners aller et venir sur un réseau occupé. Il tente de conserver une liste de leurs fichiers d'icônes dans une table de hachage, qu'il écrit également dans le fichier deviceInfoCache.plist mentionné ci-dessus. Oui - cela semble fou - cela garde les références aux fichiers d'icônes des scanners. Mais encore plus fou, pour une raison quelconque, presque toutes les entrées de ce fichier pointent vers des fichiers .icns qui n'existent pas. Sur plusieurs systèmes que j'ai examinés, il y a eu plusieurs milliers d'entrées dans le fichier, mais seulement quelques-uns des fichiers .icns existaient sur l'une des machines, et aucun n'existait sur les autres. Je crois que lorsque ce fichier devient volumineux, icdd passe beaucoup de temps à essayer de vérifier l'existence d'entrées dans le fichier .plist et à modifier le fichier. Je crois cela pour deux raisons. Tout d'abord, quand je ramène mon ordinateur portable à la maison, le processus icdd continue parfois de fonctionner à environ 100% d'un processeur, mais quand je le tue, il revient à la "normale" environ 0,0 à 0,1%, à chaque fois. Par conséquent, je pense qu'il essaie parfois encore de traiter les informations sur les entrées lorsque je les ouvre à la maison. Mais quand je le tue sur le réseau occupé, il revient souvent à près de 100% tout de suite. Lorsque le nombre de scanners affichés dans Image Capture diminue (ce qui est souvent le cas, mais augmente périodiquement pour une raison quelconque), icdd finira par se stabiliser. Et deuxièmement, la suppression du fichier deviceInfoCache.plist fait que icdd se comporte raisonnablement pendant un court instant - jusqu'à ce que le nombre d'entrées se reconstitue. Notez que icdd conserve une copie de ces entrées en mémoire, donc si vous supprimez le fichier du compte utilisateur, icdd le réécrit immédiatement. Et bien sûr, vous ne pouvez pas tuer icdd assez longtemps pour supprimer le fichier, vous devez donc vous déconnecter et supprimer le fichier d'un autre compte administrateur via le terminal. icdd recréera le fichier lorsque vous vous reconnecterez, mais il aura relativement peu d'entrées et se comportera bien pendant un certain temps.
Pour donner une idée des échelles, les ingénieurs Apple ont été choqués de voir que j'avais jusqu'à 85 scanners affichés dans Image Capture. Souvent, cependant, ce nombre s'établira à environ 6 sur le même système et dans les mêmes délais. Le fichier deviceInfoCache.plist a eu entre 8 000 et 12 600 entrées sur les systèmes que j'ai examinés qui ont eu des problèmes icdd - le mien est le plus grand, et je crois que cela a été transféré d'une ancienne machine depuis que j'avais des problèmes icdd à partir du moment où j'ai installé mon nouveau MacBook Pro en 2016-décembre. Lorsque j'ai supprimé le fichier plist, le nombre d'entrées initiales dans le fichier nouvellement créé était de 44, et pendant quelques jours, l'utilisation du processeur icdd a oscillé près de 0,0%. Cependant, après environ 5 jours sur le campus, mon dossier de plist compte 964 entrées, et l'utilisation du processeur graphique icdd rebondira régulièrement entre 30% et 90% sur le réseau occupé de l'université. Lorsque je suis à la maison, le fichier plist n'augmentera son nombre d'entrées que de 0 à 2 au cours d'une journée. Sur les 12 600 entrées de mon fichier plist précédent, seulement 2 d'entre elles contiennent un "nom de périphérique", les autres contiennent un "iconPathLocation", qui pointent tous vers des fichiers .icns inexistants. Avec le plist actuel, il y a toujours exactement 2 entrées qui contiennent un "deviceName" et les autres contiennent un "iconPathLocation" qui n'existe pas. qui pointent tous vers des fichiers .icns inexistants. Avec le plist actuel, il y a toujours exactement 2 entrées qui contiennent un "deviceName" et les autres contiennent un "iconPathLocation" qui n'existe pas. qui pointent tous vers des fichiers .icns inexistants. Avec le plist actuel, il y a toujours exactement 2 entrées qui contiennent un "deviceName" et les autres contiennent un "iconPathLocation" qui n'existe pas.
Ainsi, la solution à court terme consiste à supprimer le fichier plist d'un autre compte administrateur via le terminal tout en étant déconnecté de votre compte utilisateur. Si tout va bien, avec cette information étant maintenant fournie aux ingénieurs Apple par mon conseiller principal, les ingénieurs Apple auront suffisamment d'informations pour comprendre pourquoi icdd agit de cette façon et résoudre le problème. Bien sûr, il serait probablement utile que vous puissiez vérifier ma solution à court terme et continuer à signaler ce que vous trouvez à Apple.