Próbowałem naprawić ten problem, który był dla mnie koszmarem przez cały ostatni tydzień i naprawiłem go pod koniec długiego wysiłku. Nie było to powszechne rozwiązanie.
Czy naprawdę potrzebujesz tego artykułu do naprawy?
Może tak.
Ponieważ podczas dochodzenia, przeczytałem zbyt wiele forów (włączając chińskie, ale nie czytałem, tylko patrzyłem :)), artykułów, wpisów na StackOverflow itp. ale żaden z nich nie mógł mi pomóc. Dlatego chcę stworzyć kompilację poprawek dla tego problemu.
Przed rozpoczęciem, możesz znaleźć mój scenariusz w następujący sposób.
Mam aplikację Cordova i generuję build przez Cordova CLI. Ale ogólnie rzecz biorąc, nie różni się to od natywnego budowania aplikacji ios. Właściwie to działało poprawnie do czasu aktualizacji macOS i XCode.
Po aktualizacjach Mojave i XCode 10 nie mogę wygenerować kompilacji na Jenkinsie. W sposób ciągły pojawiał się następujący błąd. To jest keychain i certyfikat zależny problem dokładnie.
..........errSecInternalComponent
Command /usr/bin/codesign failed with exit code 1
Możemy zacząć do rozwiązań. Powinieneś wiedzieć, że te wspólne rozwiązania są na początku listy.
Wspólne rozwiązanie 1: Sprawdź ważny certyfikat
Powinieneś sprawdzić łańcuch kluczy do ważnego certyfikatu jest dodawany poprawnie. Można to zrobić za pomocą aplikacji Keychain Access lub następujące polecenie przez terminal.
security find-identity -vp codesigning
Twój certyfikat musi być w wyniku. Jeśli nie, proszę usunąć i dodać certyfikat do keychain ponownie.
Common Solution 2: Lock and Unlock Keychain
Inne najczęstsze rozwiązanie tutaj. Uruchom następujące komendy w terminalu. Powinieneś dodać swoją własną nazwę keychain i hasło.
security lock-keychain temp.keychain
security unlock-keychain -p p@ssw0rd temp.keychain
W tym przypadku, używając nazwy keychain jest „temp” i jego hasło jest „p@ssw0rd”. Można również znaleźć pełną ścieżkę do keychaina w poniższym poleceniu i można go użyć zamiast nazwy keychaina (temp).
security list-keychains
Wspólne rozwiązanie 3: Restart Machine
Może to być postrzegane jako zabawne, ale to rozwiązanie wysoko upvoted na większości stron internetowych. Jeśli dodasz nowy certyfikat, ponowne uruchomienie maszyny może być przydatne. Możesz użyć następującego polecenia do restartu.
sudo reboot
Common Solution 4: Set Keychain Password to Partition List
To rozwiązanie jest naprawianie problemów z monitem o hasło. W niektórych przypadkach, podpisywanie kodu czeka na hasło keychain z monitu, ale zdalny dostęp nie ma tej funkcji. Dlatego, ogólnie rzecz biorąc, proces podpisywania kodu zakończył się niepowodzeniem.
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k p@ssw0rd /Users/ceyhunkeklik/Library/Keychains/temp.keychain-db
Możesz znaleźć pełną ścieżkę do keychaina za pomocą metody, która została opisana w „Common Solution 1”.
Rozwiązanie mojego przypadku: Sprawdź i usuń zduplikowane klucze prywatne
W moim przypadku, temp keychain miał ważny certyfikat i jego klucz prywatny. Nie wiem dlaczego, ale „Systemowy” keychain miał klucz prywatny, który był związany z moim ważnym certyfikatem. Sprawdziłem wszystkie klucze prywatne we wszystkich keychainach i usunąłem wszystkie zduplikowane klucze z nieistotnych keychainów. Usunąłem również wszystkie wygasłe certyfikaty, jeśli takie istnieją.
Domyślam się, że te duplikaty pojawiły się z powodu aktualizacji Mojave, ale naprawdę nie wiem dlaczego.
Wnioski 🙂
.