Jak opravit chybu podepisování kódu aplikace iOS?

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 🙂

.