He estado trabajando con un asesor técnico senior en Apple sobre este tema durante más de un año, y estuve trabajando con otro asesor senior durante algún tiempo antes de eso. Hemos realizado "captura de datos" para enviar a los ingenieros de Apple en varias ocasiones y hemos realizado grabaciones de pantalla en varias ocasiones para demostrar lo que está sucediendo en Activity Monitor, Image Capture y, en última instancia, en una lista que icdd mantiene en / Users / user_name / Library / Application Support / icdd / deviceInfoCache.plist (mostrándolo en Xcode).
En este punto, aquí está mi mejor estimación de lo que está sucediendo:
El proceso icdd (Image Capture Device Database) ve a los escáneres ir y venir 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 suena loco, es mantener 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 visto, ha habido muchos miles de entradas en el archivo, pero solo unos pocos archivos .icns existían en una de las máquinas, y ninguno existía en los demás. Creo que cuando este archivo se hace grande, icdd pasa mucho tiempo tratando de verificar la existencia de entradas en el archivo .plist y modificar el archivo. Creo esto por dos razones. Primero, cuando llevo mi computadora portátil a casa, el proceso icdd a veces continúa ejecutándose a aproximadamente el 100% de una CPU, pero cuando lo mato, vuelve a la "normalidad" aproximadamente de 0.0 a 0.1%, cada vez. Por lo tanto, creo que a veces todavía estoy tratando de procesar información sobre las entradas cuando la abro en casa. Pero cuando lo mato mientras estoy en la red ocupada, a menudo vuelve casi al 100% de inmediato. Cuando el número de escáneres que se muestran en Captura de imagen disminuye (lo que suele ocurrir, pero se disparará periódicamente por algún motivo), icdd finalmente se estabilizará. Y segundo, eliminar el archivo deviceInfoCache.plist hace que icdd se comporte razonablemente por un corto tiempo, hasta que el número de entradas se acumule nuevamente. 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 de inmediato. Y por supuesto, no puede matar a icdd el tiempo suficiente para eliminar el archivo, por lo que debe cerrar sesión y eliminar el archivo de otra cuenta de administrador a través del terminal. icdd volverá a crear el archivo cuando vuelva a iniciar sesión, pero tendrá relativamente pocas entradas y se comportará bien por un tiempo.
Para dar una idea de las escalas, los ingenieros de Apple se sorprendieron al ver que tenía hasta 85 escáneres que se mostraban en Captura de imagen. Sin embargo, a menudo, este número se establecerá en aproximadamente 6 en el mismo sistema y durante los mismos plazos. El archivo deviceInfoCache.plist ha tenido entre 8,000 y 12,600 entradas en los sistemas que he visto que han tenido problemas con icdd: el mío es el más grande, y creo que esto se transfirió desde una máquina más antigua ya que tenía problemas con icdd desde el momento en que configuré mi nuevo MacBook Pro en 2016-dic. 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 icdd estuvo cerca del 0.0%. Sin embargo, después de aproximadamente 5 días en el campus, mi archivo plist tiene 964 entradas, y el uso de la CPU icdd rebotará rutinariamente entre 30% y 90% en la red ocupada de la universidad. Cuando estoy en casa, el archivo plist solo aumentará su número de entradas de 0 a 2 en el transcurso de un día. De las 12.600 entradas en mi archivo plist anterior, solo 2 de ellas contienen un "deviceName", el resto contiene un "iconPathLocation", todas las cuales apuntan a archivos .icns inexistentes. Con el plist actual, todavía hay exactamente 2 entradas que contienen un "deviceName", y el resto contiene un "iconPathLocation" que no existe. todo lo cual apunta a archivos .icns inexistentes. Con el plist actual, todavía hay exactamente 2 entradas que contienen un "deviceName", y el resto contiene un "iconPathLocation" que no existe. todo lo cual apunta a archivos .icns inexistentes. Con el plist actual, todavía hay exactamente 2 entradas que contienen un "deviceName", y el resto contiene un "iconPathLocation" que no existe.
Por lo tanto, la solución a corto plazo es eliminar el archivo plist de otra cuenta de administrador a través del terminal mientras está desconectado de su cuenta de usuario. Afortunadamente, con esta información ahora proporcionada a los ingenieros de Apple de mi asesor principal, los ingenieros de Apple tendrán suficiente información para descubrir por qué icdd está actuando de esta manera y solucionar el problema. Por supuesto, probablemente ayudaría si pudiera verificar mi solución a corto plazo y continuar informando lo que encuentre a Apple.