Специальная кодовая подпись для устройства успешно выполняется в Studio, Fails - в Jenkins
У меня есть приложение Xamarin Forms, которое поддерживает Android и iOS. Я сгенерировал сборки Jenkins для их компиляции. Все сборки Android работают. Сборка iOS Debug компилируется нормально. Тем не менее, сборка Ad-Hoc не может быть полностью выполнена для цели iPhone. Кажется, что происходит сбой во время кодирования. Это работает, если я нацеливаюсь на iPhoneSimulator, но если я нацеливаюсь на устройство iPhone, это не удается.
Выполнение инструмента / usr / bin / codesign началось с аргументов: -v --force --sign 81088F8E194139DC4C6CE640716944E41FB0709F --entitlements "/Users/Shared/Jenkins/.jenkins/workspace/ndomproject path}/obj/iPhone/Ad-Hoc/Entitlements.xcent" --deep "/Users/Shared/Jenkins/.jenkins/workspace/ndomproject path}/bin/iPhone/Ad-Hoc/AppName.app" bin/iPhone/Ad-Hoc/AppName.app: ошибка: /Users/Shared/Jenkins/.jenkins/workspace/ndomproject path}/bin/iPhone/Ad-Hoc/AppName.app: неизвестная ошибка -1=ffffffffffffffff [/Users/Shared/Jenkins/.jenkins/workspace/{ путь проекта}/iDriverMobile.iOS.csproj]
Если я открою Solution в Visual Studio прямо в папке рабочей области Jenkins, чтобы он использовал те же самые файлы, то компиляция работает нормально, что действительно расстраивает.
Глядя на различия между двумя выходами, кажется, что рабочая сборка (из Studio) имеет выход AOT для всех сборок, который выглядит следующим образом:
Компилятор Mono Ahead of Time - сборка сборки /Users/Shared/Jenkins/.jenkins/workspace/ndomproject path}/obj/iPhone/Ad-Hoc/mtouch-cache/32/Build/OpenNETCF.Google.Analytics.dll
Плохая сборка не имеет ни одного из них. Вместо этого у него есть пара строк, которые выглядят так:
MTOUCH: предупреждение MT0095: все файлы не могут быть скопированы в целевой каталог /Users/Shared/Jenkins/.jenkins/workspace/ndomproject path}/obj/iPhone/Ad-Hoc/mtouch-cache/64/Build/Msym/Msym/tmp: не удалось запустить процесс. [/Users/Shared/Jenkins/.jenkins/workspace/ndomproject path}/AppName.csproj]
Хуже всего было то, что эти сборки работали, но потом я перезапустил Mac Mini, на котором работает Jenkins, и все пошло под гору. Я не могу понять, в чем разница между тем, что делает Studio, и вызовом командной строки для msbuild. Они оба указывают на одни и те же двоичные файлы.
Дополнительная информация Это по-прежнему не работает с последними обновлениями на сегодня (24.05.17). Это среда:
- Mac OS X 10.12.5
- Элемент списка
- XCode 8.3.2
- Xamarin.iOS 10.10.0.36
- Сообщество Visual Studio 2017 для Mac 7.0.1 (сборка 24)
- Mono 5.0.1.1
Что не исправляет это:
- Создание новой сборки Jenkins
- Изменение пути к рабочей области Jenkins
- Открытие разрешений (777) для всей папки Jenkins
- Включение LLVM
- Отключение всех ссылок
- Полное удаление и повторная установка Jenkins
- С помощью
xbuild
вместоmsbuild
- Много ругаться
- Мой средний палец
1 ответ
Попробуйте удалить папку производных данных в DerivedData
вашего приложения. Это выглядит как YourAPP_ dasfdsfsdafdsasfdsaf
Об этом сообщает Apple Developer Forum.
DerivedData
папка данных находится в ~/Library/Developer/Xcode/DerivedData/
Если это не работает, все симптомы указывают на проблему с сертификатом подписи (также называемым подписью).
Похоже, когда он был скомпилирован из командной строки, /usr/bin/codesign
не может получить доступ к подписи личности 81088F8E194139DC4C6CE640716944E41FB0709F
, К сожалению, может быть много разных причин:
- брелок был заблокирован
codesign
не разрешен доступ к подписи личности.- в цепочке для ключей существует несколько идентификаторов, и была выбрана неверная идентификация подписи
- Для Ad Hoc build был выбран неправильный профиль обеспечения.
Попробуйте добавить следующие фрагменты кода перед запуском msbuild
при условии, что ваша подпись находится в связке ключей ~/Library/Keychains/login.keychain
:
security unlock-keychain -p <password> ~/Library/Keychains/login.keychain
security set-keychain-settings -l -u -t 3600 ~/Library/Keychains/login.keychain
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k -p <password> ~/Library/Keychains/login.keychain
Не рекомендуется хранить пароль цепочки для ключей в скрипте сборки, вы можете следовать этому руководству, чтобы скрыть их.