Eu trabalho com um consultor técnico sênior da Apple nessa questão há mais de um ano e trabalhava com outro consultor sênior há algum tempo antes disso. Fizemos "captura de dados" para enviar aos engenheiros da Apple em várias ocasiões e gravações de tela em várias ocasiões para demonstrar o que está acontecendo no Activity Monitor, no Image Capture e, finalmente, em uma lista que o icdd mantém em / Users / user_name / Library / Application Support / icdd / deviceInfoCache.plist (exibindo-o no Xcode).
Neste ponto, aqui está minha melhor estimativa do que está acontecendo:
O processo icdd (Image Capture Device Database) vê os scanners entrarem e saírem em uma rede ocupada. Ele tenta manter uma lista de seus arquivos de ícone em uma tabela de hash, que também grava no arquivo deviceInfoCache.plist mencionado acima. Sim - isso parece loucura - está mantendo referências aos arquivos de ícone dos scanners. Mas o mais louco é que, por algum motivo, quase todas as entradas deste arquivo apontam para arquivos .icns que não existem. Dos vários sistemas que eu observei, existem muitos milhares de entradas no arquivo, mas apenas alguns dos arquivos .icns existiam em uma das máquinas e nenhum nos outros. Acredito que quando esse arquivo fica grande, o icdd gasta muito tempo tentando verificar a existência de entradas no arquivo .plist e modificá-lo. Eu acredito nisso por duas razões. Primeiro, quando levo meu laptop para casa, o processo icdd às vezes continua sendo executado em cerca de 100% de uma CPU, mas quando eu o mato, ele volta ao "normal" aproximadamente de 0,0 a 0,1%, todas as vezes. Por isso, acho que às vezes ainda está tentando processar informações sobre as entradas quando as abro em casa. Mas quando eu o mato na rede ocupada, ele geralmente volta a quase 100% imediatamente. Quando o número de scanners mostrados no Image Capture diminui (o que geralmente ocorre, mas periodicamente aumenta por algum motivo), o icdd acaba se acalmando. Segundo, a exclusão do arquivo deviceInfoCache.plist faz com que o icdd se comporte razoavelmente por um curto período de tempo - até que o número de entradas seja acumulado novamente. Observe que o icdd mantém uma cópia dessas entradas na memória; portanto, se você excluir o arquivo da conta de usuário, o icdd apenas o reescreve imediatamente. E claro, você não pode matar o icdd por tempo suficiente para excluir o arquivo; portanto, é necessário sair e excluir o arquivo de outra conta de administrador através do terminal. O icdd recriará o arquivo quando você efetuar login novamente, mas terá relativamente poucas entradas e se comportará bem por um tempo.
Para dar uma idéia das escalas, os engenheiros da Apple ficaram chocados ao ver que eu tinha até 85 scanners exibidos no Image Capture. Muitas vezes, no entanto, esse número é estabelecido em cerca de 6 no mesmo sistema e durante os mesmos prazos. O arquivo deviceInfoCache.plist teve entre 8.000 e 12.600 entradas nos sistemas que eu observei que tiveram problemas com o icdd - o meu é o maior e acredito que isso foi transferido de uma máquina mais antiga desde que eu estava tendo problemas com o icdd desde a instalação do meu novo MacBook Pro em dezembro de 2016. Quando excluí o arquivo plist, o número de entradas iniciais no arquivo recém-criado era 44 e, por alguns dias, o uso da cpu icdd pairou perto de 0,0%. No entanto, após cerca de 5 dias no campus, meu arquivo plist possui 964 entradas, e o uso da CPU icdd retornará rotineiramente entre 30% e 90% na rede ocupada da universidade. Quando estou em casa, o arquivo plist aumentará seu número de entradas em 0 a 2 ao longo de um dia. Das 12.600 entradas no meu arquivo plist anterior, apenas 2 delas contêm um "deviceName", o restante contém uma "iconPathLocation", todas apontando para arquivos .icns inexistentes. Com o plist atual, ainda existem exatamente 2 entradas que contêm um "deviceName" e o restante contém um "iconPathLocation" que não existe. todos apontam para arquivos .icns inexistentes. Com o plist atual, ainda existem exatamente 2 entradas que contêm um "deviceName" e o restante contém um "iconPathLocation" que não existe. todos apontam para arquivos .icns inexistentes. Com o plist atual, ainda existem exatamente 2 entradas que contêm um "deviceName" e o restante contém um "iconPathLocation" que não existe.
Portanto, a solução a curto prazo é excluir o arquivo plist de outra conta de administrador via terminal enquanto estiver desconectado da sua conta de usuário. Felizmente, com essas informações agora sendo fornecidas aos engenheiros da Apple pelo meu consultor sênior, os engenheiros da Apple terão informações suficientes para descobrir por que o icdd está agindo dessa maneira e resolver o problema. Obviamente, provavelmente ajudaria se você pudesse verificar minha solução de curto prazo e continuar relatando o que encontrou para a Apple.