Codesign возвращает неизвестную ошибку после "замены существующей подписи"

Я пытаюсь создать приложение Xamarin для iOS, используя xbuild на Jenkins. Иногда во время процесса кодирования происходит сбой сборки с неизвестной ошибкой -1=ffffffffffffffff, а иногда сборка завершается успешно. Профиль обеспечения хранится в отдельной цепочке ключей jenkins.keychain (не в цепочке ключей системы или входа в систему), на которую ссылается Jenkins через плагин Связки ключей и профили обеспечения.

Это консольный журнал Jenkins:

Target _CodesignAppBundle:
    Codesign Task
      CodesignAllocate: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate
      DisableTimestamp: False
      Entitlements: obj/iPhone/In-House/Entitlements.xcent
      Keychain: <null>
      Resources:
        bin/iPhone/In-House/MyApp.app
      ResourceRules: <null>
      SigningKey: 123
      ExtraArgs: <null>
      IsAppExtension: False
    Tool /usr/bin/codesign execution started with arguments: -v --force --sign 123 --entitlements /private/var/lib/jenkins/workspace/Master/Apps/iOS/obj/iPhone/In-House/Entitlements.xcent /private/var/lib/jenkins/workspace/Master/Apps/iOS/bin/iPhone/In-House/MyApp.app


bin/iPhone/In-House/MyApp.app: error : /private/var/lib/jenkins/workspace/Master/Apps/iOS/bin/iPhone/In-House/MyApp.app: replacing existing signature
   /private/var/lib/jenkins/workspace/Master/Apps/iOS/bin/iPhone/In-House/MyApp.app: unknown error -1=ffffffffffffffff
    Task "Codesign" execution -- FAILED
    Done building target "_CodesignAppBundle" in project "/private/var/lib/jenkins/workspace/Master/Apps/iOS/MyApp.csproj".-- FAILED

Как и предполагалось в Codesign, вернулась неизвестная ошибка -1=ffffffffffffffff я добавил set-key-partition-list -S apple-tool:,apple:,codesign: -s -k ${KEYCHAIN_PW} ${KEYCHAIN_PATH} к моему сценарию сборки, но это не решило проблему.

У вас есть идеи, как решить эту проблему? Почему существует существующая подпись для замены?

Обновление 1 - Мы продолжаем получать сообщение об ошибке после:

Аналогичная проблема описана на форуме Apple.

2 ответа

Решение

Что решило проблему:

Расширение имени файла цепочки для ключей изменено с *.keychain на *.keychain-db на macOS Sierra. Ошибка подписи кода была вызвана ссылкой на старый файл цепочки для ключей, когда мы редактировали файл jenkins.keychain-db, содержащий обновленные сертификаты. Цепочки для ключей с новым расширением отклоняются при загрузке с помощью плагина цепочки для ключей Дженкинса. Поэтому мы больше не используем плагин цепочки для ключей и храним сертификаты подписи внутри login.keychain-db. Благодаря этому мы можем успешно собрать приложение без неизвестной ошибки.

Мое решение этой проблемы заключалось в том, чтобы у Mac были соответствующие разрешения на использование нового сертификата. У меня возникала проблема с подписью кода при попытке запустить задание Jenkins, но на моем локальном компьютере все работало нормально. Когда я попытался вручную подписать код одной из библиотек Swift (например,libswiftos.dylib), затем Mac запросил пароль для использования нового сертификата. Как только я это сделал, задание Дженкинса было успешно выполнено.

Перезагрузка Mac может решить проблему

Другие вопросы по тегам