Pokusil jsem se vyřešit tento problém, který byl pro mě noční můrou po celý minulý týden, a na konci dlouhého snažení jsem ho opravil. Nebylo to běžné řešení.
Potřebujete k opravě opravdu tento článek?
Možná.
Protože jsem během pátrání pročetl příliš mnoho fór (včetně čínských. ale nečetl, jen se díval :)), článků, záznamů na StackOverflow atd. ale žádný z nich mi nedokázal pomoci. Proto chci pro tento problém vytvořit kompilaci oprav.
Před začátkem najdete můj scénář v následujícím textu.
Mám aplikaci Cordova a generuji kompilaci přes Cordova CLI. Obecně se to ale neliší od sestavení nativní ios aplikace. Vlastně to fungovalo správně až do aktualizací MacOS a XCode.
Po aktualizacích Mojave a XCode 10 nemohu generovat sestavení na Jenkins. V následujícím se průběžně objevovala chyba. Jedná se přesně o problém závislý na klíčenkách a certifikátu.
..........errSecInternalComponent
Command /usr/bin/codesign failed with exit code 1
Můžeme začít s řešením. Měli byste vědět, že ta běžná řešení jsou na začátku seznamu.
Běžná řešení 1: Zkontrolujte platný certifikát
Měli byste zkontrolovat, zda je správně přidán klíčový svazek k platnému certifikátu. Můžete to provést prostřednictvím aplikace Keychain Access nebo následujícím příkazem přes terminál.
security find-identity -vp codesigning
Váš certifikát musí být ve výsledku. Pokud tomu tak není, odstraňte a znovu přidejte certifikát do sady klíčů.
Obvyklé řešení 2: Uzamčení a odemčení sady klíčů
Další nejčastější řešení zde. V terminálu spusťte následující příkazy. Měli byste přidat své vlastní jméno a heslo do klíčenky.
security lock-keychain temp.keychain
security unlock-keychain -p p@ssw0rd temp.keychain
V tomto případě použijte jméno klíčenky „temp“ a její heslo „p@ssw0rd“. V následujícím příkazu také najdete úplnou cestu ke klíčence a můžete ji použít místo názvu klíčenky (temp).
security list-keychains
Obvyklé řešení 3: Restart počítače
Může se to zdát jako legrační, ale toto řešení má na většině webových stránek vysoký počet upvotů. Pokud přidáte nový certifikát, může být restartování počítače užitečné. K restartování můžete použít následující příkaz.
sudo reboot
Obvyklé řešení 4: Nastavení hesla klíčenky do seznamu oddílů
Toto řešení řeší problémy s výzvou k zadání hesla. V některých případech codesign čeká na heslo keychain z výzvy, ale vzdálený přístup tuto funkci nemá. Proto se zpravidla proces podepisování kódu dokončil neúspěšně.
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k p@ssw0rd /Users/ceyhunkeklik/Library/Keychains/temp.keychain-db
Úplnou cestu ke klíčence můžete zjistit pomocí metody, která byla popsána v části „Běžné řešení 1“.
Řešení mého případu: Zkontrolujte a odstraňte duplicitní soukromé klíče
V mém případě měl dočasný svazek klíčů platný certifikát a jeho soukromý klíč. Nevím proč, ale „systémový“ svazek klíčů měl soukromý klíč, který se vztahoval k mému platnému certifikátu. Zkontroloval jsem všechny soukromé klíče ve všech svazcích klíčů a odstranil všechny duplicitní klíče z nerelevantních svazků klíčů. Také jsem odstranil všechny prošlé certifikáty, pokud nějaké existují.
Hádám, že tyto duplikáty se objevily kvůli aktualizaci Mojave, ale opravdu nevím proč.
Závěr 🙂
.