Comment réparer l’erreur de signature de code d’une application iOS ?

J’ai essayé de réparer ce problème qui a été un cauchemar pour moi pendant toute la semaine dernière et je l’ai réparé à la fin de ce long effort. Ce n’était pas une solution commune.

Avez-vous vraiment besoin de cet article pour la fixation ?
Peut-être.

Parce que pendant l’enquête, j’ai lu trop de forums (y compris les chinois. mais pas lire, seulement regarder :)), articles, entrées StackOverflow etc. mais aucun d’eux ne pouvait m’aider. Par conséquent, je veux créer une compilation de correctifs pour ce problème.

Avant de commencer, vous pouvez trouver mon scénario dans ce qui suit.

J’ai une application Cordova et je génère une construction via Cordova CLI. Mais généralement, ce n’est pas différent de la construction de l’application native ios. En fait, cela fonctionnait correctement jusqu’aux mises à jour de MacOS et de XCode.

Après les mises à jour de Mojave et de XCode 10, je ne peux pas générer un build sur le Jenkins. L’erreur suivante est apparue en permanence. C’est exactement le problème dépendant du trousseau de clés et du certificat.

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

Nous pouvons commencer à des solutions. Vous devez savoir que ces solutions communes sont au début de la liste.

Solution commune 1 : Vérifiez le certificat valide

Vous devriez vérifier le trousseau de clés au certificat valide est ajouté correctement. Vous pouvez le faire via l’app Keychain Access ou la commande suivante via le terminal.

security find-identity -vp codesigning

Votre certificat doit être dans le résultat. Si ce n’est pas le cas, veuillez supprimer et ajouter à nouveau votre certificat au trousseau.

Solution courante 2 : verrouiller et déverrouiller le trousseau

Une autre solution la plus courante ici. Exécutez les commandes suivantes dans le terminal. Vous devriez ajouter votre propre nom de trousseau et mot de passe.

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

Dans ce cas, l’utilisation du nom de trousseau est « temp » et son mot de passe est « p@ssw0rd ». En outre, vous pouvez trouver le chemin complet de keychain dans la commande suivante et il peut être utilisé à la place du nom de keychain (temp).

security list-keychains

Solution commune 3 : redémarrer la machine

Il peut être vu comme drôle mais cette solution haut-votée sur la plupart des sites Web. Si vous ajoutez le nouveau certificat, redémarrer la machine peut être utile. Vous pouvez utiliser la commande suivante pour redémarrer.

sudo reboot

Solution commune 4 : Définir le mot de passe du trousseau à la liste des partitions

Cette solution corrige les problèmes d’invite de mot de passe. Dans certains cas, la signature de code attendant le mot de passe du trousseau à partir de l’invite, mais l’accès à distance ne dispose pas de cette fonctionnalité. Par conséquent, généralement, le processus de signature de code s’est terminé sans succès.

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

Vous pouvez trouver le chemin complet du trousseau de clés avec la méthode qui a été décrite dans « Solution commune 1 ».

Solution de mon cas : Vérifier et supprimer les clés privées dupliquées

Dans mon cas, temp keychain avait un certificat valide et sa clé privée. Je ne sais pas pourquoi mais le trousseau « System » avait une clé privée qui se rapportait à mon certificat valide. J’ai vérifié toutes les clés privées de tous les trousseaux et supprimé toutes les clés dupliquées des trousseaux non pertinents. De plus, j’ai supprimé tous les certificats expirés s’il y en a.

Je suppose que ces doublons sont apparus à cause de la mise à jour Mojave mais vraiment je ne sais pas pourquoi.

Conclusion 🙂

.