Jag försökte fixa det här problemet som var en mardröm för mig under hela förra veckan och fixade det i slutet av den långa strävan. Det var inte en vanlig lösning.
Behövs verkligen den här artikeln för att åtgärda felet?
Möjligen.
För att jag under utredningen har läst för många forum (inklusive kinesiska. men inte läsa, bara titta :)), artiklar, StackOverflow-inlägg etc. men ingen av dem kunde hjälpa mig. Därför vill jag skapa en fixarsammanställning för detta problem.
För att börja kan du hitta mitt scenario i följande.
Jag har en Cordova-applikation och genererar ett bygge via Cordova CLI. Men generellt sett är detta inte annorlunda än det ursprungliga ios-applikationsbygget. Egentligen fungerade det korrekt fram till MacOS- och XCode-uppdateringarna.
Efter Mojave- och XCode 10-uppdateringarna kan jag inte generera ett bygge på Jenkins. I följande fel dök upp kontinuerligt. Detta är nyckelring och certifikat beroende problem exakt.
..........errSecInternalComponent
Command /usr/bin/codesign failed with exit code 1
Vi kan börja till lösningar. Du bör veta att dessa vanliga lösningar är i början av listan.
Gemensam lösning 1: Kontrollera giltigt certifikat
Du bör kontrollera nyckelknippan för att det giltiga certifikatet är lagt till korrekt. Du kan göra det via appen Keychain Access eller följande kommando via terminalen.
security find-identity -vp codesigning
Ditt certifikat måste finnas i resultatet. Om inte, ta bort och lägg till ditt certifikat i nyckelknippan igen.
Gemensam lösning 2: Lås och lås upp nyckelknippan
En annan vanlig lösning här. Kör följande kommandon i terminalen. Du bör lägga till ditt eget namn och lösenord för nyckelknippan.
security lock-keychain temp.keychain
security unlock-keychain -p p@ssw0rd temp.keychain
I det här fallet använder du nyckelknippans namn ”temp” och dess lösenord är ”p@ssw0rd”. Du kan också hitta nyckelringens fullständiga sökväg i följande kommando och den kan användas i stället för nyckelringsnamnet (temp).
security list-keychains
Samhällslösning 3: Starta om maskinen
Det kan ses som lustigt, men den här lösningen är högt uppröstad på de flesta webbplatser. Om du lägger till det nya certifikatet kan det vara användbart att starta om maskinen. Du kan använda följande kommando för att starta om.
sudo reboot
Gemensam lösning 4: Ange nyckelringens lösenord till partitionslistan
Den här lösningen åtgärdar problem med lösenordsprompter. I vissa fall väntar codesign på nyckelringslösenordet från prompten men fjärråtkomst har inte den här funktionen. Därför slutfördes kodsigneringsprocessen i allmänhet utan framgång.
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k p@ssw0rd /Users/ceyhunkeklik/Library/Keychains/temp.keychain-db
Du kan hitta nyckelringens fullständiga sökväg med den metod som beskrevs i ”Gemensam lösning 1”.
Lösning för mitt fall: Kontrollera och ta bort duplicerade privata nycklar
I mitt fall hade temp keychain ett giltigt certifikat och dess privata nyckel. Jag vet inte varför men ”System” keychain hade en privat nyckel som relaterade till mitt giltiga certifikat. Jag har kontrollerat alla privata nycklar i alla nyckelringar och tagit bort alla duplicerade nycklar från irrelevanta nyckelringar. Jag har också tagit bort alla utgånga certifikat om det finns några.
Jag antar att dessa dubbletter dök upp på grund av Mojave-uppdateringen men egentligen vet jag inte varför.
Slutsats 🙂