Ho lavorato con un consulente tecnico senior presso Apple su questo tema da oltre un anno e ho lavorato con un altro consulente senior per un po 'di tempo prima. Abbiamo fatto "acquisizione dati" per inviare ad Apple Engineers in diverse occasioni e fatto registrazioni su schermo in diverse occasioni per dimostrare cosa sta succedendo in Activity Monitor, Image Capture e, in definitiva, in un plist che icdd mantiene su / Users / user_name / Libreria / Supporto applicazione / icdd / deviceInfoCache.plist (visualizzandolo in Xcode).
A questo punto, ecco la mia migliore stima di ciò che sta accadendo:
Il processo icdd (Image Capture Device Database) vede gli scanner andare e venire su una rete occupata. Tenta di mantenere una lista dei loro file di icone in una tabella hash, che scrive anche nel file deviceInfoCache.plist menzionato sopra. Sì, sembra pazzesco, sta mantenendo i riferimenti ai file delle icone degli scanner. Ma anche più pazzo è che, per qualche ragione, quasi tutte le voci in questo file puntano a file .icns che non esistono. Di diversi sistemi che ho visto, ci sono state molte migliaia di voci nel file, ma solo alcuni dei file .icns esistevano su una delle macchine, e nessuna esisteva sulle altre. Credo che quando questo file diventa grande, icdd passi un sacco di tempo a cercare di verificare l'esistenza di voci nel file .plist e modificare il file. Ci credo per due motivi. Innanzitutto, quando porto a casa il portatile, il processo icdd a volte continua a funzionare a circa il 100% di una CPU, ma quando poi lo uccido, torna alla "normale" circa dallo 0,0 allo 0,1%, ogni volta. Quindi, penso che a volte stia ancora cercando di elaborare le informazioni sulle voci quando lo apro a casa. Ma quando lo uccido mentre si trova sulla rete occupata, spesso torna quasi al 100% subito. Quando il numero di scanner mostrati in Image Capture diminuisce (cosa che succede spesso, ma periodicamente aumenta per qualche motivo), icdd alla fine si sistemerà. E in secondo luogo, l'eliminazione del file deviceInfoCache.plist fa sì che icdd si comporti ragionevolmente per un breve periodo - fino a quando il numero di voci non si ricompone. Nota che icdd mantiene una copia di queste voci in memoria, quindi se elimini il file dall'account utente, icdd lo riscrive immediatamente. E, naturalmente, non è possibile uccidere icdd abbastanza a lungo da eliminare il file, quindi è necessario disconnettersi ed eliminare il file da un altro account amministratore tramite il terminale. icdd ricreerà il file quando riaccedi, ma avrà relativamente poche voci e si comporterà bene per un po '.
Per dare un'idea delle scale, gli ingegneri Apple sono rimasti scioccati nel vedere che ho avuto fino a 85 scanner visualizzati in Image Capture. Spesso, tuttavia, questo numero si assesterà a circa 6 sullo stesso sistema e durante gli stessi periodi di tempo. Il file deviceInfoCache.plist ha avuto tra 8.000 e 12.600 voci sui sistemi che ho visto che hanno avuto problemi di icdd - il mio è il più grande, e credo che questo sia stato trasferito da un vecchio computer da quando avevo problemi con icdd da quando ho installato il mio nuovo MacBook Pro nel 2016-Dic. Quando ho eliminato il file plist, il numero di voci iniziali nel file appena creato era 44 e per alcuni giorni l'utilizzo della CPU icdd si avvicinava allo 0,0%. Tuttavia, dopo circa 5 giorni nel campus, il mio file plist ha 964 entrate e l'utilizzo della CPU icdd rimbalzerà regolarmente tra il 30% e il 90% sulla rete affollata dell'università. Quando sono a casa, il file plist aumenterà il suo numero di voci da 0 a 2 nel corso della giornata. Delle 12.600 voci nel mio precedente file plist, solo 2 di esse contengono un "deviceName", il resto contiene una "iconPathLocation", che punta a file .icns inesistenti. Con l'attuale plist, ci sono ancora esattamente 2 voci che contengono un "deviceName", e il resto contiene una "iconPathLocation" che non esiste.
Quindi, la soluzione a breve termine è quella di eliminare il file plist da un altro account amministratore tramite terminale mentre si è disconnessi dal proprio account utente. Si spera che, con queste informazioni ora fornite agli ingegneri Apple dal mio Senior Advisor, gli ingegneri Apple disporranno di informazioni sufficienti per capire perché icdd agisce in questo modo e risolve il problema. Ovviamente, sarebbe probabilmente di aiuto se puoi verificare la mia soluzione a breve termine e continuare a riportare ciò che trovi ad Apple.