Хотите внедрить непрерывную интеграцию (или даже CI/CD) в свой собственный проект или проект компании с помощью Codemagic? Продолжить чтение!

В этой статье я расскажу об использовании Codemagic в качестве нашего CI/CD для нашего проекта iOS.

Что означает CI/CD?

TL;DR CI/CD — это процесс, упрощающий тестирование и быстрое развертывание приложений разработчиками.

На самом деле это аббревиатура от «Continuous Integration» и «Continuous Delivery/Deployment». Хотите верьте, хотите нет, но использование обоих на самом деле легче понять, чем сами термины.

Но прежде всего, почему CI/CD?

Знаете ли вы, на что вам важно обратить внимание после написания кода? Убедитесь, что код, который вы написали, правильный и прошел тесты перед выпуском. Не позволяйте пользователю загружать приложение, но в нем так много ненужных ошибок или сбоев. Это может означать, что будет много отзывов о приложениях с 1 звездой в App Store. Конечно же, ты не хочешь этого? Вот почему вы должны знать о CI/CD.

Тогда что такое CI/CD?

Непрерывная интеграция – это процесс, с помощью которого мы, как разработчики, можем интегрировать код в репозиторий, такой как GitHub, и быстро и автоматически запускать тесты. Так что, если есть ошибка, ее можно быстро найти и обработать, и, если тест прошел успешно, вы можете, например, встроить проект в IPA (расширение приложения iOS).

Принимая во внимание, что непрерывная доставка — это процесс после успешной интеграции кода, его можно затем развернуть в рабочей среде.

Теперь вернемся к основной теме: как реализовать CI/CD в нашем проекте iOS с помощью Codemagic?

Выполнение

Прежде всего, поместите свой проект в облачный репозиторий, такой как GitHub (вы можете использовать все, что захотите). После того, как сделано, давайте начнем!

Откройте Codemagic и войдите с помощью GitHub/Bitbucket/GitLab или создайте новую учетную запись, используя электронную почту. Я бы рекомендовал войти в систему, используя первый третий вариант, чтобы упростить задачу.



После входа в систему вы будете перенаправлены на панель инструментов, где вы сможете найти такие меню, как «Приложения», «Сборки» и т. д. Мы можем просто добавить наше приложение, нажав «Добавить приложение» в правом верхнем углу. После этого вам будет предложено выбрать поставщика Git или добавить репозиторий по URL-адресу. В моем случае я буду использовать GitHub.

После этого мы можем авторизовать интеграцию и следовать инструкциям на вашем экране. После этого мы можем выбрать наш репозиторий и тип проекта. Не забудьте выбрать «Приложение для iOS», если вы разрабатываете собственное приложение для iOS.

Вы будете перенаправлены на страницу настроек только что созданного приложения в Codemagic. Следуйте инструкциям, чтобы добавить файл «codemagic.yaml» в свой репозиторий, так как он необходим для интеграции.

Для начала вы можете добавить эту конфигурацию в ваш codemagic.yaml

workflows:  
  ios-project-debug: # Workflow ID
    name: iOS Debug # Workflow name
    environment:
      xcode: latest
      cocoapods: default
      vars:
          XCODE_PROJECT: "App.xcodeproj" # Replace with your xcodeproj name
          XCODE_SCHEME: "App" # Replace with your project name
    scripts:
      - name: Run tests
        script: |
          xcodebuild \
          -project "$XCODE_PROJECT" \
          -scheme "$XCODE_SCHEME" \
          -sdk iphonesimulator \
          -destination 'platform=iOS Simulator,name=iPhone 14,OS=16.2' \
          clean build test CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO          
      - name: Build debug app
        script: |
          xcodebuild build -project "$XCODE_PROJECT" \
          -scheme "$XCODE_SCHEME" \
          CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO          
    artifacts:
      - $HOME/Library/Developer/Xcode/DerivedData/**/Build/**/*.app
    publishing:
      email:
        recipients:
          - [email protected] # Replace with your email

После этого нажмите «Проверить файл конфигурации» в левом верхнем углу, и тогда мы можем приступить к запуску первой сборки.

Если тест прошел успешно, вы увидите зеленую галочку рядом с названием приложения в обзоре сборки. Это пример успешной сборки моего приложения «FeelJournal», приложения для журнала, использующего НЛП. Вы также получите электронное письмо, чтобы сообщить вам, удалась ли сборка или нет.

Мы также можем проверить журнал сборки, щелкнув один из шагов сборки, чтобы проверить журнал или найти ошибку, если наша сборка не удалась. Вы также можете добавить дополнительные конфигурации, если хотите, прочитав документацию на веб-сайте Codemagic.

Ссылка: https://docs.codemagic.io/

Объяснение конфигураций codemagic.yaml

Давайте разобьем код на несколько частей!

workflows:  
  ios-project-debug: # Workflow ID
    name: iOS Debug # Workflow name

Это ваш идентификатор рабочего процесса и имя, которое вы можете указать. Это обычай, и вы можете положить туда что угодно.

    environment:
      xcode: latest
      cocoapods: default
      vars:
          XCODE_PROJECT: "App.xcodeproj" # Replace with your xcodeproj name
          XCODE_SCHEME: "App" # Replace with your project name

Для среды мы можем просто указать, что мы используем последнюю версию xcode и версию Cocopods по умолчанию. Нам также нужно указать там наш проект XCode и имя схемы. Для моего проекта это «FeelJournal.xcodeproj» и «FeelJournal», поскольку название проекта и схема моего приложения — «FeelJournal».

    scripts:
      - name: Run tests
        script: |
          xcodebuild \
          -project "$XCODE_PROJECT" \
          -scheme "$XCODE_SCHEME" \
          -sdk iphonesimulator \
          -destination 'platform=iOS Simulator,name=iPhone 14,OS=16.2' \
          clean build test CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO          
      - name: Build debug app
        script: |
          xcodebuild build -project "$XCODE_PROJECT" \
          -scheme "$XCODE_SCHEME" \
          CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO

Это скрипт для запуска тестов нашего проекта, таких как UnitTests и тому подобное. Лучше всего предположить, что это самая важная часть нашего codemagic.yaml, поскольку она отвечает за проверку того, вызывает ли наш код ошибки или нет.

    artifacts:
      - $HOME/Library/Developer/Xcode/DerivedData/**/Build/**/*.app
    publishing:
      email:
        recipients:
          - [email protected] # Replace with your email

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

Распространенные проблемы неудачных сборок

Ваш код сам содержит ошибки.

Сначала исправьте свой код, а затем отправьте новейшую фиксацию в свой облачный репозиторий, прежде чем снова пытаться выполнить сборку из Codemagic. Легче сказать, чем сделать, наверное?

Схема проекта в настоящее время не настроена для тестового действия.

Вам нужно иметь тестовую цель в вашем проекте XCode. Вы можете добавить тестовую цель (например, Модульный тест) в свой проект, нажав «Файлы › Создать › Цель…», а затем выбрать Пакет модульного тестирования.

После этого введите название продукта и нажмите «Готово». Вам не нужно добавлять туда какие-либо функции модульного тестирования, если вы этого не хотите. Просто отправьте новые изменения напрямую в свой облачный репозиторий, и все готово!

Не удалось найти запрошенное устройство, так как нет доступных устройств, соответствующих запросу.

Это может быть связано с тем, что ваша версия XCode и используемые симуляторы отличаются от моих, вы можете проверить доступные устройства в журнале сборки. А потом выбрать один. Например, Айфон 14.

Не забудьте указать назначение устройства в вашем codemagic.yaml в этом формате (измените только имя и ОС) внутри скрипта:

-destination 'platform=iOS Simulator,name=iPhone 14,OS=16.2'

После этого не забудьте внести изменения и попробуйте снова выполнить сборку с помощью Codemagic.

Вот и все, что касается непрерывной интеграции и доставки собственного приложения iOS с использованием Codemagic. Я надеюсь, что вы найдете эту статью полезной для интеграции вашего проекта iOS с Codemagic!