Я працюю з старшим технічним радником Apple в цьому питанні вже більше року, і деякий час до цього працював з іншим старшим радником. Ми зробили "захоплення даних", щоб декілька разів надсилати інженерам Apple, і кілька разів робили записи на екрані, щоб продемонструвати, що відбувається в "Моніторі діяльності", "Захопленні зображень", і, нарешті, в списку, який підтримує icdd в / Користувачі / Ім'я користувача / Бібліотека / Підтримка програм / icdd / deviceInfoCache.plist (відображаючи його в Xcode).
На даний момент ось моя найкраща оцінка того, що відбувається:
Процес icdd (база даних пристроїв захоплення зображень) бачить, як сканери приходять і переходять у зайняту мережу. Він намагається зберегти список їхніх файлів значків у хеш-таблиці, яку він також записує у згаданий вище файл deviceInfoCache.plist. Так - це звучить божевільно - він зберігає посилання на файли значків сканерів. Але навіть більш божевільним є те, що чомусь майже всі записи цього файлу вказують на файли .icns, які не існують. З декількох систем, які я переглянув, у файл було багато тисяч записів, але лише кілька файлів .icns існували на одній із машин, а на інших - жодної. Я вважаю, що коли цей файл набуває великих розмірів, icdd витрачає багато часу, намагаючись перевірити наявність записів у файлі .plist та змінити файл. Я вважаю це з двох причин. По-перше, коли я беру свій ноутбук додому, Процес icdd іноді продовжує працювати приблизно на 100% процесора, але коли я його вбиваю, він щоразу повертається до "нормального" приблизно від 0,0 до 0,1%. Отже, я думаю, що іноді все ще намагаються обробити інформацію про записи, коли я відкриваю її вдома. Але коли я вбиваю його, перебуваючи в напруженій мережі, він часто повертається майже на 100% відразу. Коли кількість сканерів, зображених у програмі Capture Image, зменшиться (що це часто робиться, але періодично з певних причин періодично зростає), icdd з часом вщухне. По-друге, видалення файлу deviceInfoCache.plist змушує icdd поводитись розумно ненадовго - доки кількість записів знову не накопичується. Зауважте, що icdd зберігає копію цих записів у пам'яті, тому якщо ви видалите файл з облікового запису користувача, icdd просто переписує його негайно. І звичайно, ви не можете вбити icdd досить довго, щоб видалити файл, тому вам доведеться вийти та видалити файл з іншого облікового запису адміністратора через термінал. icdd відтворить файл, коли ви знову ввійдете в систему, але він буде мати відносно мало записів і буде добре поводитися деякий час.
Щоб дати уявлення про масштаби, інженери Apple були шоковані, побачивши, що у мене є аж 85 сканерів, що відображаються в програмі Image Capture. Однак часто ця кількість може відповідати приблизно 6 в тій же системі та протягом тих же часових кадрів. У файлі deviceInfoCache.plist було від 8000 до 12 600 записів у системах, які я переглянув, у яких виникли проблеми з icdd - моя більша, і я вважаю, що це перенесло на старіші машини, оскільки у мене виникли проблеми з icdd з часу, коли я створив свій новий MacBook Pro у 2016-му грудні. Коли я видалив файл plist, кількість початкових записів у новоствореному файлі становила 44, і протягом декількох днів використання процесора icdd cpu становило близько 0,0%. Однак, приблизно через 5 днів у кампусі, у моєму файлі плістів налічується 964 учасники, та використання ICDD-процесора регулярно відскакує від 30% до 90% у напруженій мережі університету. Коли я вдома, файл plist лише збільшить кількість записів на 0 до 2 протягом дня. З 12 600 записів у моєму попередньому файлі плістів, лише 2 містять "deviceName", решта містять "iconPathLocation", усі вони вказують на неіснуючі файли .icns. У поточному списку є ще рівно 2 записи, які містять "deviceName", а решта містять "iconPathLocation", який не існує. всі вони вказують на неіснуючі файли .icns. У поточному списку є ще рівно 2 записи, які містять "deviceName", а решта містять "iconPathLocation", який не існує. всі вони вказують на неіснуючі файли .icns. У поточному списку є ще рівно 2 записи, які містять "deviceName", а решта містять "iconPathLocation", який не існує.
Отже, короткострокове рішення - видалити файл plist з іншого облікового запису адміністратора через термінал під час виходу з облікового запису користувача. Сподіваємось, що ця інформація зараз надається інженерам Apple від мого старшого радника, у Apple Engineers буде достатньо інформації, щоб зрозуміти, чому icdd діє таким чином, і вирішити проблему. Звичайно, це, мабуть, допоможе, якщо ви зможете перевірити моє короткострокове рішення і продовжувати звітувати про те, що ви знайдете в Apple.