#ИМЯ?
Мы используем Jenkins для непрерывной интеграции. Все, что нам нужно сделать для того, чтобы скомпилировать наше приложение, выполняется через командную строку (сценарий bash), потому что у нас есть несколько машин, на которых сборка выполняется без какого-либо человеческого доступа к устройствам.
Как вы можете себе представить, я был очень рад видеть новый флаг функции xcodebuild -allowProvisioningUpdates в XCode9.
Я понимаю, что мне нужно добавить учетные данные нашего Apple ID в настройки XCode.
Учетные данные добавляются на вкладку учетной записи XCode в "Предпочтениях", но когда я пытаюсь скомпилировать с помощью "xcodebuild... -allowProvisioningUpdates", появляется следующее сообщение об ошибке:
2017-09-19 09:47:59.692 xcodebuild[74979:3824315] DVTAssertions: Warning in /Library/Caches/com.apple.xbs/Sources/DVTFrameworks/DVTFrameworks-13231/DVTFoundation/Portal/DVTDeveloperAccountCredentialsManager.m:38
Details: Unable to find default keychain.
Object: <DVTDeveloperAccountCredentialsManager>
Method: +defaultAccountCredentialsManager
Thread: <NSThread: 0x7fe17860aa40>{number = 4, name = (null)}
Please file a bug at http:/
2017-09-19 09:47:59.792 xcodebuild[74979:3824308] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7fe17d45cf20>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." UserInfo={NSLocalizedDescription=Locating signing assets failed., IDEDistributionSigningAssetStepUnderlyingErrors=(
"Error Domain=DVTServicesSessionErrorDomain Code=0 \"Unable to log in with account '[email protected]'.\" UserInfo={NSLocalizedFailureReason=Unable to log in with account '[email protected]'., NSLocalizedRecoverySuggestion=The login details for account '[email protected]' were rejected., DVTDeveloperAccountErrorAccount=<DVTAppleIDBasedDeveloperAccount 0x7fe179b016c0: username: [email protected]>, NSUnderlyingError=0x7fe179e8ee60 {Error Domain=DVTDeveloperAccountErrorDomain Code=4 \"[email protected] could not sign in.\" UserInfo={NSLocalizedRecoverySuggestion=Cannot sign in to this account. Try signing into it again in the Accounts preference pane., [email protected] could not sign in., DVTDeveloperAccountErrorAccount=<DVTAppleIDBasedDeveloperAccount 0x7fe179b016c0: username: [email protected]>}}}",
"Error Domain=IDEProfileLocatorErrorDomain Code=1 \"No profiles for 'com.yyy.CITestProject' were found\" UserInfo={NSLocalizedDescription=No profiles for 'com.yyy.CITestProject' were found, NSLocalizedRecoverySuggestion=Xcode couldn't find any iOS App Store provisioning profiles matching 'com.yyy.CITestProject'.}"
)}
error: exportArchive: The operation couldnt be completed. Unable to log in with account '[email protected]'.
Кто-нибудь знает, как решить эту проблему?
Обновление: Мы используем этот плагин для запуска ssh-сессий с нашими подчиненными Jenkins для выполнения buildjob: https://wiki.jenkins.io/display/JENKINS/SSH+Slaves+plugin
Ответы
Ответ 1
У меня та же проблема. Я сообщил об ошибке Apple, но безуспешно. Чтобы двигаться вперед с Xcode 9, я переключился на ручную подпись только для Jenkins. (Разработчики все еще используют автоматическое подписание.)
/usr/bin/xcodebuild -exportArchive \
DEVELOPMENT_TEAM=*your-dev-team-id* \
CODE_SIGN_STYLE=Manual \
CODE_SIGN_IDENTITY="iPhone Distribution: *your cert*" \
PROVISION_PROFILE="*your*.mobileprovision" \
*rest of your parameters*
Ответ 2
Этот -allowProvisioningUpdates работал у меня в финальной версии Xcode 9.
Убедитесь, что вы можете создать проект автокодирования Xcode с использованием Xcode IDE
- 1) Откройте проект Xcode, настроенный для автоматической подписи
- Выберите цель из Цели > Общие > Подписание
- [x] Автоматическое управление подписанием
- Введите учетные данные учетной записи вашей команды.
- 2) Создайте проект и убедитесь, что сборка выполнена успешно.
Закрыть проект Xcode и Build с помощью xcodebuild с параметрами -allowProvisioningUpdates
- 1) Добавить опцию "xcodebuild... -allowProvisioningUpdates
- 2) При появлении запроса "xcode хочет получить доступ к ключу" доступ к идентификатору ящика xcode "в вашей цепочке ключей
- Введите учетные данные и нажмите кнопку Всегда разрешать
Теперь сборка командной строки Jenkins должна работать.
Ответ 3
У меня была такая же проблема после недавнего обновления с XCode 7.x до версии 9.3.
Решением для меня был параметр -allowProvisioningDeviceRegistration в дополнение к -allowProvisioningUpdates для xcodebuilder:
/usr/bin/xcodebuild -exportArchive \
-allowProvisioningUpdates -allowProvisioningDeviceRegistration \
...
Отлично работает с Дженкинсом.
Ответ 4
Xcode сохраняет учетные данные в ключевом ключе по умолчанию. Чтобы получить доступ к нему через ssh, вам сначала нужно разблокировать эту брелок:
/usr/bin/security unlock-keychain /Users/xxx/Library/Keychains/login.keychain-db
При использовании jenkins вам нужно разблокировать брелок либо внутри ваших заданий сборки, либо при запуске агента. Вы можете, например, добавить его в /Library/Application Support/Jenkins/jenkins-slave-runner.sh
.
Ответ от "Ed of the Montain" работает только потому, что xcodebuild проверяет каталоги /Library/MobileDevice/ProvisioningProfiles
(и другие) для действительных профилей, если он находит один, то параметр -allowProvisioningUpdates
просто использует этот профиль и не выполняет нужен логин.
Ответ 5
Когда вы имеете дело с ошибками XCode через SSH, обычно лучше попробовать те же команды, используя графический интерфейс. Он часто показывает, к каким записям цепочки для ключей он пытается получить доступ.
В моем случае это побудило меня разрешить xcodebuild доступ к Xcode-AlternateDSID
и Xcode-Token
в моей цепочке для ключей. Я предоставил ему доступ с помощью "Всегда разрешать". Вы также можете редактировать эти записи в Keychain Access и разрешить доступ к ним всем приложениям, если вы не слишком беспокоитесь о безопасности.
Я уже запускал security unlock-keychain -p mypassword /Users/myuser/Library/Keychains/login.keychain-db
до запуска xcodebuild, так что это, вероятно, также необходимо.
После этого экспорт работал.
Ответ 6
Я исправил это. Проблема заключалась в том, что я указал команду с помощью команды team_id
Fastlane. Вместо этого вы должны использовать enable_automatic_code_signing
. Также конфигурация не была указана. Теперь у меня есть этот скрипт:
enable_automatic_code_signing(
team_id: <YOUR_TEAM_ID_REQUIRED_HERE>,
)
gym(
scheme: <YOUR_SCHEME_REQUIRED HERE>,
configuration: <YOUR_CONFIGURATION_REQUIRED HERE>,
export_method: "development",
xcargs: "-allowProvisioningUpdates",
)
Кроме того, я нашел эту страницу. Я попробовал это одновременно с изменениями выше, поэтому я не знаю, что мне помогло. Но я отменил изменение со страницы, и оно все еще работает. Поэтому я предполагаю, что проблема была в team_id
и configuration
.