Am încercat să rezolv această problemă care a fost un coșmar pentru mine în toată săptămâna trecută și am rezolvat-o la sfârșitul efortului lung. Nu a fost o soluție obișnuită.
Ai nevoie cu adevărat de acest articol pentru remediere?
Poate.
Pentru că, în timpul investigației, am citit prea multe forumuri (inclusiv cele chinezești. dar nu am citit, doar m-am uitat :)), articole, intrări StackOverflow etc., dar nici unul dintre ele nu m-a putut ajuta. Prin urmare, vreau să creez o compilație de remediere a acestei probleme.
Înainte de a începe, puteți găsi scenariul meu în cele ce urmează.
Am o aplicație Cordova și generez o compilație prin Cordova CLI. Dar, în general, acest lucru nu este diferit de compilarea aplicației native ios. De fapt, a funcționat corect până la actualizările MacOS și XCode.
După actualizările Mojave și XCode 10, nu pot genera o construcție pe Jenkins. În următoarea eroare a apărut în mod continuu. Aceasta este exact problema dependentă de keychain și de certificat.
..........errSecInternalComponent
Command /usr/bin/codesign failed with exit code 1
Puteți începe să găsiți soluții. Ar trebui să știți că acele soluții comune sunt la începutul listei.
Soluția comună 1: Verificați certificatul valabil
Ar trebui să verificați dacă keychain-ul la certificatul valabil este adăugat corect. Puteți face acest lucru prin intermediul aplicației Keychain Access sau prin următoarea comandă prin terminal.
security find-identity -vp codesigning
Certificatul dvs. trebuie să fie în rezultat. Dacă nu, vă rugăm să eliminați și să adăugați din nou certificatul dvs. la keychain.
Soluția comună 2: Blocați și deblocați Keychain
O altă soluție cea mai comună aici. Rulați următoarele comenzi în terminal. Ar trebui să adăugați propriul nume și parolă de lanț de chei.
security lock-keychain temp.keychain
security unlock-keychain -p p@ssw0rd temp.keychain
În acest caz, folosind numele de lanț de chei este „temp” și parola sa este „p@ssw0rd”. De asemenea, puteți găsi calea completă a brelocului de chei în următoarea comandă și poate fi folosită în locul numelui brelocului de chei (temp).
security list-keychains
Soluția comună 3: Reporniți mașina
Poate fi văzută ca fiind amuzantă, dar această soluție este foarte votată pe majoritatea site-urilor web. Dacă adăugați noul certificat, repornirea mașinii poate fi utilă. Puteți utiliza următoarea comandă pentru a reporni.
sudo reboot
Soluție comună 4: Setați parola Keychain în lista de partiții
Această soluție rezolvă problemele de solicitare a parolei. În unele cazuri, codesign așteaptă parola keychain din prompt, dar accesul la distanță nu are această funcție. Prin urmare, în general, procesul de semnare a codului s-a finalizat fără succes.
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k p@ssw0rd /Users/ceyhunkeklik/Library/Keychains/temp.keychain-db
Puteți găsi calea completă a keychain-ului cu metoda care a fost descrisă în „Soluția comună 1”.
Soluția cazului meu: Verificați și eliminați cheile private duplicate
În cazul meu, keychain-ul temporar avea un certificat valid și cheia sa privată. Nu știu de ce, dar keychain-ul „System” avea o cheie privată care avea legătură cu certificatul meu valabil. Am verificat toate cheile private din toate brelocurile și am eliminat toate cheile duplicate din brelocurile irelevante. De asemenea, am eliminat toate certificatele expirate, dacă există.
Cred că aceste duplicate au apărut din cauza actualizării Mojave, dar chiar nu știu de ce.
Concluzie 🙂