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

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

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

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

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

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

Внимание

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

  1. В проекте Azure DevOps выберите конвейер PipelinesNew или > 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: 'iphonesimulator'
    configuration: 'Debug'
    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
    xcodeVersion: 'default' # Options: 10, 11, 12, 13, 14, default, specifyPath

Рабочая сборка для App Store:

Для рабочих выпусков укажите явную версию Xcode, схему приложения и конфигурацию выпуска:

steps:
- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: 'YourAppScheme'
    sdk: 'iphoneos'
    configuration: 'Release'
    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
    xcodeVersion: '14'
    packageApp: true
    exportPath: '$(build.artifactStagingDirectory)'
    exportOptions: 'automatic'

Основные различия для рабочей среды:

  • xcodeVersion: укажите фиксированную версию (например, '14'вместо 'default' согласованных, воспроизводимых сборок).
  • схема: замените пустую строку фактическим именем схемы приложения.
  • sdk: используется для сборок устройств; используется 'iphoneos''iphonesimulator' для сборок симулятора.
  • конфигурация: использование 'Release' для рабочей среды; использование 'Debug' для разработки.
  • packageApp: задайте для true создания .ipa файла для распространения.
  • exportPath: направляет выходные данные пакета в промежуточный каталог сборки для публикации артефактов.

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

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

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

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

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

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

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

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

  • Подписывание и подготовка: Требуется для развертывания на физических устройствах или в App Store.
  • Управление зависимостями: Настройте проверку подлинности для частных репозиториев.
  • Управление артефактами: Хранение выходных данных сборки для тестирования и развертывания.
  • Распределение: Автоматизация выпуска в TestFlight или App Store.

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

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

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

Управление зависимостями

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

Swift диспетчер пакетов

Диспетчер пакетов Swift (SPM) — это собственный диспетчер зависимостей Apple и интегрирован непосредственно в Xcode. Для проектов, использующих SPM с частными пакетами, необходимо настроить проверку подлинности Git.

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

Не добавляйте секретный токен непосредственно в YAML конвейера, так как это действие подвергает его в исходном коде. Дополнительные сведения см. в разделе "Задание секретных переменных".

Следующий код конвейера использует секретную переменную с именем myGitHubAccessToken для проверки подлинности при разрешении зависимостей пакета Swift:

- task: Xcode@5
  inputs:
    actions: 'build'
    scheme: ''
    sdk: 'iphoneos'
    configuration: 'Release'
    xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
  env:
    GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)

Для частных пакетов, размещенных в Azure Repos или других поставщиках Git, настройте соответствующие учетные данные Git перед шагом сборки.

КакаоПоды

Если проект использует CocoaPods, используйте задачу CocoaPods для установки зависимостей.

- task: CocoaPods@0
  inputs:
    workingDirectory: '$(System.DefaultWorkingDirectory)'
    forceRepo: false

Карфаген

Если ваш проект использует Carthage (диспетчер зависимостей для проектов iOS/macOS) с частным репозиторием Carthage, настройте аутентификацию, используя переменную среды GITHUB_ACCESS_TOKEN, значение которой является токеном, имеющим доступ к репозиторию. Carthage автоматически обнаруживает и использует эту переменную среды.

Не добавляйте секретный токен непосредственно в YAML конвейера, так как это действие подвергает его в исходном коде. Дополнительные сведения см. в разделе "Задание секретных переменных".

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

- script: carthage update --platform iOS
  displayName: 'Update Carthage dependencies'
  env:
    GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)

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

Центр приложений Visual Studio был прекращен 31 марта 2025 г. Узнайте о рекомендуемых альтернативах.

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

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

- task: CopyFiles@2
  inputs:
    contents: '**/*.ipa'
    targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishPipelineArtifact@1
  inputs:
    targetPath: '$(build.artifactStagingDirectory)'
    artifact: 'drop'

Развертывание в Apple App Store или TestFlight

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

Для бета-тестирования и отзывов пользователей рекомендуется использовать:

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

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

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

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

- 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