Создание, тестирование и развертывание приложений Xcode

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

В этом кратком руководстве показано, как создавать и развертывать проекты Xcode с помощью конвейеров YAML в Azure Pipelines.

Необходимые компоненты

  • Организация и проект Azure DevOps, где у вас есть разрешение на создание конвейеров и развертывание приложений.
  • Проект Xcode 9+ и приложение в репозитории GitHub. Дополнительные сведения см. в разделе "Создание проекта Xcode для приложения".

Создание конвейера

Внимание

Во время процедур GitHub может появиться запрос на создание подключения службы GitHub или перенаправление на GitHub для входа, установки Azure Pipelines или авторизации Azure Pipelines. Следуйте инструкциям на экране, чтобы завершить процесс. Дополнительные сведения см. в разделе Access к репозиториям GitHub.

  1. В проекте Azure DevOps выберите конвейер Pipelines>New или Create pipeline, если этот конвейер является первым в проекте.
  2. Выберите GitHub в качестве расположения исходного кода.
  3. На экране "Выбор репозитория" выберите репозиторий для проекта Xcode.
  4. На экране "Настройка конвейера" выберите Xcode.

Azure Pipelines предоставляет начальный конвейер на основе шаблона Xcode . Просмотрите код в azure-pipelines.yml.

Среда сборки

Xcode предварительно установлен для агентов macOS, размещенных в Майкрософт, в Azure Pipelines, поэтому вам не нужно настраивать инфраструктуру. Точные версии Xcode, которые предварительно установлены, см . в программном обеспечении, размещенном корпорацией Майкрософт.

Узел pool в верхней части файла azure-pipelines.yml выбирает соответствующий пул агентов.

pool:
  vmImage: 'macOS-latest'

Задача сборки Xcode

Задача Xcode создает, тестирует или архивирует рабочую область Xcode в macOS и при необходимости может упаковывать приложение. Шаг Xcode в начальном azure-pipelines.yml файле создает проект iOS с помощью схемы по умолчанию для симулятора и без упаковки. Вы можете изменить значения и добавить параметры в соответствии с конфигурацией проекта.

steps:
- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: ''
    sdk: 'iphoneos'
    configuration: 'Release'
    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
    xcodeVersion: 'default' # Options: 10, 11, 12, 13, 14, default, specifyPath

Сохранение и запуск конвейера

Завершив проверку кода в azure-pipelines.yml, нажмите кнопку "Сохранить и запустить".

Снимок экрана: кнопка

При необходимости измените сообщение "Фиксация" и укажите описание. Затем нажмите кнопку "Сохранить и снова запустить ", чтобы зафиксировать файл azure-pipelines.yml в репозиторий и запустить сборку.

На странице выполнения сборки отображаются сведения о сборке и ходе выполнения. Если вы хотите просмотреть конвейер в действии, выберите задание в нижней части страницы.

Теперь у вас есть рабочий конвейер YAML, azure-pipelines.yml в репозитории, который готов к настройке.

Настройка конвейера

Чтобы внести изменения в конвейер, выберите "Изменить " на странице конвейера. В следующих разделах описаны некоторые распространенные способы настройки конвейера Xcode.

Добавление задач подписи и подготовки

Приложение Xcode должно быть подписано и подготовлено, чтобы иметь возможность работать на устройстве или публиковать в App Store. Процесс подписи и подготовки должен получить доступ к сертификату подписи P12 и одному или нескольким профилям подготовки. Дополнительные сведения см. в разделе "Подписать мобильное приложение".

Чтобы сделать сертификат и профиль доступными для Xcode во время сборки, добавьте в конвейер задачи "Установка сертификата Apple " и "Установка профиля подготовки Apple".

Использование переменной среды Carthage

Если в проекте используется Carthage с частным репозиторием Carthage, можно настроить проверку подлинности с помощью переменной среды с именем GITHUB_ACCESS_TOKEN с значением маркера, имеющего доступ к репозиторию. Carthage автоматически обнаруживает и использует эту переменную среды.

Не добавляйте маркер секрета непосредственно в yamL конвейера. Вместо этого выберите переменные на странице конвейера, чтобы открыть область "Переменные" и создать переменную для этого маркера. Обязательно включите значок блокировки для шифрования значения переменной. Дополнительные сведения см. в разделе "Задание секретных переменных".

В следующем коде конвейера используется секретная переменная с именем myGitHubAccessToken значения переменной GITHUB_ACCESS_TOKEN среды.

- script: carthage update --platform iOS
  env:
    GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)

Тестирование на размещенных в Azure устройствах

Чтобы протестировать приложение в размещенной лаборатории устройств iOS в Центре приложений Visual Studio, добавьте задачу "Тест Центра приложений" в конвейер.

Для этой задачи требуется бесплатная пробная учетная запись Центра приложений, которая должна быть преобразована в платную через 30 дней, чтобы продолжить использовать лабораторию тестирования. Зарегистрируйтесь для учетной записи Центра приложений перед использованием этой задачи.

В следующем примере выполняется набор тестов Центра приложений. Задача использует подключение службы, которое необходимо настроить.

Полный синтаксис задачи и справочные сведения см. в статье "Тестирование Центра приложений". Дополнительные сведения см. в статье Об использовании Azure DevOps для тестирования пользовательского интерфейса.

- task: AppCenterTest@1
  inputs:
    appFile: path/myapp.ipa
    artifactsDirectory: '$(Build.ArtifactStagingDirectory)/AppCenterTest'
    frameworkOption: 'appium'
    appiumBuildDirectory: test/upload
    serverEndpoint: 'My App Center service connection'
    appSlug: username/appIdentifier
    devices: 'devicelist'

Сохранение артефактов с помощью записи сборки

Чтобы сохранить файл пакета iOS AppStore (IPA) с записью сборки или тестом и развернуть его в последующих конвейерах, добавьте задачи копирования файлов и публикации артефактов сборки в конвейер. Дополнительные сведения см. в статье "Публикация и скачивание артефактов конвейера".

- task: CopyFiles@2
  inputs:
    contents: '**/*.ipa'
    targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1
  inputs:
    PathtoPublish: '$(Build.ArtifactStagingDirectory)'
    ArtifactName: 'drop'
    publishLocation: 'Container'

Развертывание в Центре приложений

Чтобы распространить приложение в группу тестировщиков или бета-версий пользователей, или повысить уровень приложения в Intune или Apple App Store, добавьте задачу распространения в Центре приложений. Для задачи требуется бесплатная учетная запись Центра приложений, которая остается бесплатной.

В следующем примере приложение распространяется пользователям. Полный синтаксис задачи и справочник см. в разделе "Распространение в Центре приложений". Дополнительные сведения см. в статье "Развертывание сборок Azure DevOps с помощью Центра приложений".

- task: AppCenterDistribute@3
  inputs:
    serverEndpoint: 'AppCenter'
    appSlug: '$(APP_CENTER_SLUG)'
    appFile: '$(APP_FILE)' # Relative path from the repo root to the IPA file you want to publish
    symbolsOption: 'Apple'
    releaseNotesOption: 'input'
    releaseNotesInput: 'Here are the release notes for this version.'
    destinationType: 'groups'

Установка расширения Apple App Store и развертывание в Apple App Store

Чтобы автоматизировать взаимодействие с Apple App Store, установите расширение Apple App Store и выполните следующие задачи в конвейере. По умолчанию эти задачи проходят проверку подлинности в Apple с помощью подключения к службе, которое необходимо настроить.

Чтобы автоматизировать выпуск обновлений существующих бета-приложений iOS TestFlight или рабочих приложений в App Store, добавьте задачу выпуска App Store.

Существуют ограничения использования этой задачи с двухфакторной проверкой подлинности Apple. Проверка подлинности Apple зависит от региона, а маркеры сеанса fastlane истекают быстро и должны быть повторно созданы и перенастроены.

- task: AppStoreRelease@1
  displayName: 'Publish to the App Store TestFlight track'
  inputs:
    serviceEndpoint: 'My Apple App Store service connection' 
    appIdentifier: com.yourorganization.testapplication.etc
    ipaPath: '$(build.artifactstagingdirectory)/**/*.ipa'
    shouldSkipWaitingForProcessing: true
    shouldSkipSubmission: true

Чтобы автоматизировать продвижение ранее отправленного приложения из iTunes Connect в App Store, добавьте задачу "Продвижение в App Store".

- task: AppStorePromote@1
  displayName: 'Submit to the App Store for review'
  inputs:
    serviceEndpoint: 'My Apple App Store service connection'
    appIdentifier: com.yourorganization.testapplication.etc
    shouldAutoRelease: false