Ho lavorato con un consulente tecnico senior di Apple su questo problema per oltre un anno e ho lavorato con un altro consulente senior per qualche tempo prima. Abbiamo fatto "acquisizione dati" da inviare agli ingegneri Apple in diverse occasioni e registrazioni di schermate in diverse occasioni per dimostrare cosa sta succedendo in Activity Monitor, Image Capture e, infine, in un piano che icdd mantiene su / Users / nome_utente / Library / Application Support / 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 entrare e uscire su una rete occupata. Tenta di mantenere un elenco dei loro file icona in una tabella hash, che scrive anche nel file deviceInfoCache.plist menzionato sopra. Sì, sembra folle, mantiene i riferimenti ai file delle icone degli scanner. Ma ancora più folle è che, per qualche motivo, quasi tutte le voci in questo file indicano 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 nessuno esisteva sugli altri. Credo che quando questo file diventa grande, icdd impiega molto tempo a cercare l'esistenza di voci nel file .plist e a modificare il file. Lo credo per due motivi. Innanzitutto, quando porto il mio laptop a casa, il processo icdd a volte continua a funzionare al 100% circa di una CPU, ma quando poi lo uccido, ritorna al "normale" circa dallo 0,0 allo 0,1%, ogni volta. Quindi, penso che a volte stia ancora cercando di elaborare informazioni sulle voci quando le apro a casa. Ma quando lo uccido mentre sono su una rete occupata, spesso ritorna immediatamente al 100%. Quando il numero di scanner mostrato in Image Capture diminuisce (cosa che spesso accade, ma aumenterà periodicamente per qualche motivo), alla fine Icdd si stabilizzerà. E in secondo luogo, l'eliminazione del file deviceInfoCache.plist provoca un comportamento ragionevole di icdd per un breve periodo, fino a quando il numero di voci non si accumula nuovamente. Nota che icdd conserva una copia di queste voci in memoria, quindi se elimini il file dall'account utente, icdd lo riscrive immediatamente. Ed ovviamente, non puoi uccidere icdd abbastanza a lungo per eliminare il file, quindi devi disconnetterti ed eliminare il file da un altro account amministratore tramite il terminale. icdd ricrea il file quando si accede nuovamente, ma avrà relativamente poche voci e funzionerà bene per un po '.
Per dare un'idea delle scale, gli ingegneri Apple sono rimasti scioccati nel vedere che avevo Image 85 scanner visualizzati in Image Capture. Spesso, tuttavia, questo numero si riduce a circa 6 sullo stesso sistema e negli stessi tempi. Il file deviceInfoCache.plist ha avuto tra le 8.000 e le 12.600 voci sui sistemi che ho visto che hanno avuto problemi con icdd - il mio è il più grande, e credo che questo sia stato riportato da una macchina precedente poiché avevo problemi con icdd dal momento in cui ho installato il mio nuovo MacBook Pro nel 2016-dicembre. 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 è avvicinato allo 0,0%. Tuttavia, dopo circa 5 giorni nel campus, il mio file plist ha 964 entires, e l'utilizzo della CPU icdd rimbalzerà di routine tra il 30% e il 90% sulla rete occupata dell'università. Quando sono a casa, il file plist aumenterà il suo numero di voci solo da 0 a 2 nel corso della giornata. Delle 12.600 voci nel mio precedente file plist, solo 2 contengono un "deviceName", il resto contiene un "iconPathLocation", che indicano tutti i file .icns inesistenti. Con l'attuale plist, ci sono ancora esattamente 2 voci che contengono un "deviceName", e il resto contiene un "iconPathLocation" che non esiste. tutti che puntano a file .icns inesistenti. Con l'attuale plist, ci sono ancora esattamente 2 voci che contengono un "deviceName", e il resto contiene un "iconPathLocation" che non esiste. tutti i quali puntano a file .icns inesistenti. Con l'attuale plist, ci sono ancora esattamente 2 voci che contengono un "deviceName", e il resto contiene un "iconPathLocation" che non esiste.
Pertanto, la soluzione a breve termine è eliminare il file plist da un altro account amministratore tramite terminale mentre si è disconnessi dal proprio account utente. Spero che queste informazioni vengano ora fornite agli ingegneri Apple dal mio consulente senior, gli ingegneri Apple disporranno di informazioni sufficienti per capire perché icdd si sta comportando in questo modo e risolvere il problema. Certo, probabilmente sarebbe di aiuto se tu potessi verificare la mia soluzione a breve termine e continuare a riferire ciò che trovi ad Apple.