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 - Мы продолжаем получать сообщение об ошибке после:
- переключение с
xbuild
вmsbuild
версия 15.3.0.0 - установка jenkins keychain на "Разрешить всем приложениям доступ к этому элементу"
- удаление папки производных данных
- не используя относительные пути для
security
команды
Аналогичная проблема описана на форуме Apple.
2 ответа
Что решило проблему:
Расширение имени файла цепочки для ключей изменено с *.keychain на *.keychain-db на macOS Sierra. Ошибка подписи кода была вызвана ссылкой на старый файл цепочки для ключей, когда мы редактировали файл jenkins.keychain-db, содержащий обновленные сертификаты. Цепочки для ключей с новым расширением отклоняются при загрузке с помощью плагина цепочки для ключей Дженкинса. Поэтому мы больше не используем плагин цепочки для ключей и храним сертификаты подписи внутри login.keychain-db. Благодаря этому мы можем успешно собрать приложение без неизвестной ошибки.
Мое решение этой проблемы заключалось в том, чтобы у Mac были соответствующие разрешения на использование нового сертификата. У меня возникала проблема с подписью кода при попытке запустить задание Jenkins, но на моем локальном компьютере все работало нормально. Когда я попытался вручную подписать код одной из библиотек Swift (например,libswiftos.dylib
), затем Mac запросил пароль для использования нового сертификата. Как только я это сделал, задание Дженкинса было успешно выполнено.