Llevo más de un año trabajando con un asesor técnico de alto nivel de Apple en este asunto, y antes estuve trabajando con otro asesor de alto nivel. Hemos hecho "captura de datos" para enviar a los ingenieros de Apple en varias ocasiones y hecho grabaciones de pantalla en varias ocasiones para demostrar lo que está pasando en el Monitor de Actividad, Captura de Imagen, y, en última instancia, en un plist que icdd mantiene en /Users/nombre_de_usuario/Librería/Application Support/icdd/deviceInfoCache.plist (mostrándolo en Xcode).
En este momento, esta es mi mejor estimación de lo que está sucediendo:
El proceso icdd (Image Capture Device Database) ve cómo los escáneres van y vienen en una red ocupada. Intenta mantener una lista de sus archivos de iconos en una tabla hash, que también escribe en el archivo deviceInfoCache.plist mencionado anteriormente. Sí - esto parece una locura - está manteniendo referencias a los archivos de iconos de los escáneres. Pero aún más loco es que, por alguna razón, casi todas las entradas en este archivo apuntan a archivos .icns que no existen. De varios sistemas que he mirado, ha habido muchos miles de entradas en el archivo, sin embargo, sólo algunos de los archivos .icns existían en una de las máquinas, y ninguno existía en las otras. Creo que cuando este archivo se hace grande, icdd está gastando mucho tiempo tratando de comprobar la existencia de entradas en el archivo .plist y modificar el archivo. Creo esto por dos razones. En primer lugar, cuando me llevo el portátil a casa, el proceso de icdd a veces sigue funcionando al 100% de la CPU, pero cuando lo mato, vuelve a la "normalidad" de aproximadamente 0,0 a 0,1%, cada vez. Por lo tanto, creo que a veces sigue tratando de procesar información sobre las entradas cuando lo abro en casa. Pero cuando lo mato mientras estoy en la red ocupada, a menudo vuelve a estar cerca del 100% de inmediato. Cuando el número de escáneres que se muestra en la Captura de Imagen baja (lo que hace a menudo, pero periódicamente se dispara por alguna razón), icdd finalmente se estabiliza. Y en segundo lugar, borrar el archivo deviceInfoCache.plist hace que icdd se comporte razonablemente durante un tiempo - hasta que el número de entradas se acumule de nuevo. Tenga en cuenta que icdd mantiene una copia de estas entradas en la memoria, por lo que si elimina el archivo de la cuenta de usuario, icdd simplemente lo reescribe inmediatamente. Y, por supuesto, no puede matar a icdd el tiempo suficiente para borrar el archivo, así que tiene que cerrar la sesión y borrar el archivo desde otra cuenta de administrador a través del terminal. icdd volverá a crear el archivo cuando vuelva a iniciar la sesión, pero tendrá relativamente pocas entradas y se comportará bien durante un tiempo.
Para dar una idea de las escalas, los ingenieros de Apple se sorprendieron al ver que tenía nada menos que 85 escáneres mostrados en Captura de Imagen. Sin embargo, a menudo este número se reduce a unos 6 en el mismo sistema y durante los mismos periodos de tiempo. El archivo deviceInfoCache.plist ha tenido entre 8.000 y 12.600 entradas en los sistemas que he mirado que han tenido problemas de icdd - el mío es el más grande, y creo que esto se llevó a cabo desde una máquina más antigua ya que estaba teniendo problemas de icdd desde el momento en que configuré mi nuevo MacBook Pro en 2016-diciembre. Cuando eliminé el archivo plist, el número de entradas iniciales en el archivo recién creado fue de 44, y durante unos días el uso de la cpu de icdd rondó cerca del 0,0%. Sin embargo, después de unos 5 días en el campus, mi archivo plist tiene 964 entradas, y el uso de la cpu de icdd rebota rutinariamente entre el 30% y el 90% en la ocupada red de la universidad. Cuando estoy en casa, el archivo plist sólo aumenta su número de entradas de 0 a 2 en el transcurso de un día. De las 12.600 entradas de mi archivo plist anterior, sólo 2 de ellas contienen un "deviceName", el resto contienen un "iconPathLocation", todos los cuales apuntan a archivos .icns inexistentes. Con el plist actual, todavía hay exactamente 2 entradas que contienen un "deviceName", y el resto contienen un "iconPathLocation" que no existe.
Por lo tanto, la solución a corto plazo es eliminar el archivo plist desde otra cuenta de administrador a través de la terminal mientras se cierra la sesión de su cuenta de usuario. Esperemos que, con esta información proporcionada a los ingenieros de Apple por mi asesor principal, los ingenieros de Apple tengan suficiente información para averiguar por qué icdd está actuando de esta manera y solucionar el problema. Por supuesto, probablemente ayudaría si usted puede verificar mi solución a corto plazo y seguir informando de lo que encuentre a Apple.