Hogyan lehet kijavítani az iOS-alkalmazás kódaláírási hibáját?

Megpróbáltam megoldani ezt a problémát, amely a múlt héten egy rémálom volt számomra, és a hosszú erőfeszítés végén rögzítettem. Nem volt egy általános megoldás.

Tényleg szükség van erre a cikkre a javításhoz?
Meglehet.

Mert a nyomozás során túl sok fórumot (kínaiakat is. de nem olvastam, csak néztem :)), cikkeket, StackOverflow bejegyzéseket stb. olvastam, de egyik sem tudott segíteni. Ezért szeretnék létrehozni egy javításokat tartalmazó összeállítást erre a problémára.

A kezdés előtt a következőben találja a forgatókönyvemet.

Van egy Cordova alkalmazásom, és a Cordova CLI-n keresztül generálok egy buildet. De általában ez nem különbözik a natív ios alkalmazás buildjétől. Tulajdonképpen a MacOS és az XCode frissítésekig megfelelően működött.

A Mojave és az XCode 10 frissítések után nem tudok buildet generálni a Jenkins-en. A következő hiba jelent meg folyamatosan. Ez a kulcstár és tanúsítvány függő probléma pontosan.

..........errSecInternalComponent
Command /usr/bin/codesign failed with exit code 1

Megoldásokhoz kezdhetünk. Tudnia kell, hogy ezek a közös megoldások a lista elején vannak.

Közös megoldás 1: Ellenőrizze az érvényes tanúsítványt

A kulcsláncot az érvényes tanúsítványhoz helyesen kell hozzáadni. Ezt megteheti a Keychain Access alkalmazással vagy a következő paranccsal a terminálon keresztül.

security find-identity -vp codesigning

A tanúsítványának az eredményben kell lennie. Ha nem, kérjük, távolítsa el és adja hozzá újra a tanúsítványát a kulcstárhoz.

Gyakori megoldás 2: Kulcstár zárolása és feloldása

Egy másik leggyakoribb megoldás itt. Futtassa a következő parancsokat a terminálban. Hozzá kell adnia a saját kulcstár nevét és jelszavát.

security lock-keychain temp.keychain
security unlock-keychain -p p@ssw0rd temp.keychain

Ebben az esetben a kulcstár neve “temp”, jelszava pedig “p@ssw0rd”. A kulcstartó teljes elérési útját is megtalálhatja a következő parancsban, és ez használható a kulcstartó neve (temp) helyett.

security list-keychains

3. általános megoldás: Indítsa újra a gépet

Ez viccesnek tűnhet, de ez a megoldás a legtöbb weboldalon magasan feljebb szavazott. Ha hozzáadjuk az új tanúsítványt, hasznos lehet a gép újraindítása. Az újraindításhoz a következő parancsot használhatja.

sudo reboot

Common Solution 4: Set Keychain Password to Partition List

Ez a megoldás a jelszavas prompt problémákat javítja. Bizonyos esetekben a codesign várja a kulcstár jelszavát a promptból, de a távoli hozzáférés nem rendelkezik ezzel a funkcióval. Ezért általában a kódaláírási folyamat sikertelenül fejeződött be.

security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k p@ssw0rd /Users/ceyhunkeklik/Library/Keychains/temp.keychain-db

A kulcstartó teljes elérési útját a “Közös megoldás 1” pontban leírt módszerrel találhatja meg.

Az én esetem megoldása:

Az én esetemben a temp kulcstartóban volt egy érvényes tanúsítvány és annak magánkulcsa. Nem tudom miért, de a “Rendszer” kulcstartónak volt egy olyan privát kulcsa, amely az érvényes tanúsítványomhoz kapcsolódott. Ellenőriztem az összes magánkulcsot az összes kulcstárban, és eltávolítottam az összes duplikált kulcsot az irreleváns kulcstárakból. Továbbá eltávolítottam az összes lejárt tanúsítványt, ha van ilyen.

Gondolom, ezek a duplikátumok a Mojave frissítés miatt jelentek meg, de valójában nem tudom, miért.

Következtetés 🙂