Od ponad roku współpracuję ze starszym doradcą technicznym Apple w tej sprawie, a wcześniej pracowałem z innym starszym doradcą. Zrobiliśmy „przechwytywanie danych”, aby kilkakrotnie przesyłać do inżynierów Apple, i kilkakrotnie nagrywaliśmy ekrany, aby zademonstrować, co się dzieje w Monitoru aktywności, Przechwytywaniu obrazu, a ostatecznie w liście, którą icdd utrzymuje pod adresem / Users / nazwa_użytkownika / Library / Application Support / icdd / deviceInfoCache.plist (wyświetlając go w Xcode).
W tym miejscu oto moje najlepsze oszacowanie tego, co się dzieje:
W procesie icdd (baza danych urządzeń do przechwytywania obrazów) skanery przychodzą i wychodzą w ruchliwej sieci. Próbuje zachować listę plików ikon w tablicy skrótów, którą zapisuje również w wyżej wymienionym pliku deviceInfoCache.plist. Tak - to brzmi szalenie - zachowuje odniesienia do plików ikon skanerów. Ale bardziej szalone jest to, że z jakiegoś powodu prawie wszystkie wpisy w tym pliku wskazują na pliki .icns, które nie istnieją. Z kilku systemów, które obejrzałem, w pliku znajduje się wiele tysięcy wpisów, ale tylko kilka plików .icns istniało na jednym komputerze i żaden nie istniał na innych. Uważam, że gdy ten plik staje się duży, icdd spędza dużo czasu próbując sprawdzić, czy istnieją wpisy w pliku .plist i zmodyfikować plik. Wierzę w to z dwóch powodów. Po pierwsze, kiedy zabieram laptopa do domu, proces icdd czasami nadal działa na około 100% procesora, ale kiedy go zabiję, wraca do „normalnego” około 0,0 do 0,1% za każdym razem. Dlatego myślę, że czasem wciąż próbuje przetwarzać informacje o wpisach, gdy otwieram je w domu. Ale kiedy go zabiję, gdy jestem w zajętej sieci, często natychmiast wraca prawie w 100%. Kiedy liczba skanerów pokazanych w Image Capture spadnie (co często robi, ale z jakiegoś powodu okresowo rośnie), icdd w końcu się uspokoi. Po drugie, usunięcie pliku deviceInfoCache.plist powoduje, że icdd zachowuje się rozsądnie przez krótki czas - aż liczba wpisów ponownie się nie zwiększy. Zauważ, że icdd zachowuje kopię tych wpisów w pamięci, więc jeśli usuniesz plik z konta użytkownika, icdd po prostu przepisuje go natychmiast. I oczywiście, nie możesz zabić icdd wystarczająco długo, aby usunąć plik, więc musisz się wylogować i usunąć plik z innego konta administratora za pośrednictwem terminala. icdd odtworzy plik po ponownym zalogowaniu, ale będzie miał stosunkowo niewiele wpisów i przez jakiś czas będzie się dobrze zachowywał.
Aby dać wyobrażenie o skalach, inżynierowie Apple byli zszokowani, widząc, że mam aż 85 skanerów wyświetlających się w Image Capture. Często jednak liczba ta spada do około 6 w tym samym systemie i w tych samych ramach czasowych. Plik deviceInfoCache.plist zawiera od 8 000 do 12 600 wpisów w systemach, na które patrzyłem, które miały problemy z icdd - mój jest większy i sądzę, że został przeniesiony ze starszej maszyny, ponieważ miałem problemy z icdd od momentu skonfigurowania mojego nowego MacBooka Pro w grudniu 2016 r. Kiedy usunąłem plik plist, liczba początkowych wpisów w nowo utworzonym pliku wynosiła 44 i przez kilka dni użycie procesora icdd wahało się w pobliżu 0,0%. Jednak po około 5 dniach w kampusie mój plik listy plist ma 964 wpisów, a użycie procesora icdd będzie rutynowo odbijało się od 30% do 90% w ruchliwej sieci na uniwersytecie. Kiedy jestem w domu, plik plist zwiększy tylko liczbę wpisów o 0 do 2 w ciągu dnia. Z 12,600 wpisów w moim poprzednim pliku plist tylko 2 z nich zawierają „deviceName”, reszta zawiera „iconPathLocation”, z których wszystkie wskazują na nieistniejące pliki .icns. Przy obecnym plist wciąż są dokładnie 2 wpisy zawierające „deviceName”, a reszta zawiera „iconPathLocation”, który nie istnieje. z których wszystkie wskazują na nieistniejące pliki .icns. Przy obecnym plist wciąż są dokładnie 2 wpisy zawierające „deviceName”, a reszta zawiera „iconPathLocation”, który nie istnieje. z których wszystkie wskazują na nieistniejące pliki .icns. Przy obecnym plist wciąż są dokładnie 2 wpisy zawierające „deviceName”, a reszta zawiera „iconPathLocation”, który nie istnieje.
Krótkoterminowym rozwiązaniem jest więc usunięcie pliku plist z innego konta administratora za pośrednictwem terminala po wylogowaniu z konta użytkownika. Mam nadzieję, że dzięki tym informacjom dostarczonym teraz inżynierom Apple od mojego starszego doradcy, inżynierowie Apple będą mieli wystarczającą ilość informacji, aby dowiedzieć się, dlaczego icdd działa w ten sposób i rozwiązać problem. Oczywiście prawdopodobnie pomogłoby to, gdybyś mógł zweryfikować moje krótkoterminowe rozwiązanie i kontynuować zgłaszanie tego, co znajdziesz w Apple.