#ИМЯ?

Мы используем 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.