Рубрики
Uncategorized

CI & CD для приложений iOS

Тома Хартз. Помечено мобильным, iOS, DEVOPS.

Непрерывная интеграция и непрерывная доставка стали столпами современного развития. Сообщение о нарушении изменений обратно в вашу DEV Team быстро может улучшить как качество, так и скорость, в которой вы доставляете программное обеспечение. Аналогично, автоматизация выброса трубопровода для ваших результатов вырезает на резервный труд и позволяет сосредоточиться больше времени на значимой работе. Это все относится к царству разработки мобильных приложений, но есть некоторые особые соображения для учета с платформой iOS.

Создание приложений IOS требует оборудования MAC. Это означает, что ваша команда разработки понадобится MacBooks, но это также означает сделать CI/CD, вам понадобится сервер работает MacO. Недавно в проекте я проработал настроить Mac Mini Machine в качестве бамбукового агента постройки для выполнения задач CI/CD для обеих мобильных платформ (планы сборки Android можно выполнить по любому типу агента: Windows/Linux/Mac). В этой статье я поделился некоторыми вопросами, которые я столкнулся, как и некоторые из шагов плана бетона.

Обнаружение вещей

Стандартная установка CI собирается начать с обнаружения ветвления. Каждый раз, когда новый код нажимается на филиал функции, тесты модуля выполняются против изменений. Эта часть вашего трубопровода не должна быть ограничена платформой, даже если вы создаете собственное приложение iOS и имейте набор случаев Xctest в Swift. Чекстовые случаи предположительно могут быть сделаны в Беги в Linux , хотя я никогда лично не пробовал. Вероятно, проще и проще настроить эту часть на агенте MAC с XCode в любом случае, а другие шаги потребуют его. Шаги плана выявления об обнаружении вещей следующие:

  1. Оформить заказ исходного кода
  2. Пробеги тесты подразделения
  3. Проверьте покрытие кода

Объединение филиала функции в разработку/Master должна требовать проходящего тестового набора и один или несколько разрешений обзора кода.

Тестирование UI

Как правило, после объединения одного или нескольких филиалов объектов, следующий шаг для Ci/Cd — создать сборку для автоматических тестов пользовательского интерфейса и/или ручного регрессионного тестирования. Автоматическое тестирование UI для iOS имеет некоторые существенные проблемы! Использование симулятора устройства легче для управления, но вы не можете установить какую-либо данную .ipa на него, он должен быть скомпилирован специально для симулятора CPU архитектур.

Архитектура CPU IOS IOS:

  • ARM64 — это текущая 64-битная архитектура CPU ARM, используемая с момента iPhone 5S, а затем (6, 6S, SE и 7), Air iPad Air, Air 2 и Pro, с A7 и более поздним фиксациями.
  • ARMV7S (A.K.A. Свифт, не путать с языком того же имени), используемый в фишках Apple и A6 и A6x на iPhone 5, iPhone 5C и iPad 4.
  • ARMV7, старая вариация 32-битного процессора ARM, как используется в A5 и ранее.

IOS Simulator CPU архитектуры:

  • i386 (то есть 32-битная Intel) — единственный вариант на iOS 6.1 и ниже.
  • X86_64 (I.E. 64-битный Intel) необязательно доступен начиная с iOS 7.0.

К сожалению, это означает, что вы не можете проверить пакет приложения, используя симулятор, а затем продвигаю тот же «артефакт» для выпуска. Для iOS вы должны сделать тестирование физического устройства, из которого вы можете продвигать пакет приложений к производству. Имейте в виду, что автоматическое тестирование на привязанных физических устройствах потребует больше накладных расходов, и поддерживать работу трубопровода CI.

Строить

Создание файла .ipa из автоматизированной сборки может быть сделано в двух этапах:

1. Создать архив и подписать

security unlock-keychain -p $PASSWORD login.keychain

xcodebuild -workspace 'MyProject.xcworkspace' -scheme 'MyProject' -configuration Debug -archivePath ./archive/'MyProject.xcarchive' clean archive -UseModernBuildSystem=NO DEVELOPMENT_TEAM=########## CODE_SIGN_IDENTITY="iPhone Developer: Tom Hartz (##########)" PROVISIONING_PROFILE='MyProject development profile' OTHER_CODE_SIGN_FLAGS='$HOME/Library/Keychains/login.keychain-db' CODE_SIGN_STYLE=Manual

2. Экспортируйте архив в пакет приложения (.ipa)

xcodebuild -exportArchive -archivePath ./archive/MyProject.xcarchive' -exportPath 'archive/ipa' -exportOptionsPlist Development.plist

Development.plist:






    compileBitcode
    
    method
    development
    provisioningProfiles
    
        com.leadingedje.myproject
        MyProject development profile
    


После создания пакета приложения ваш план сборки может сохранить его как артефакт в бамбуке, а также загружать его в TestFlight, Hockeyapp/App Center и т. Д. Для внутреннего развертывания и тестирования.

Артефакт Продвижение и выпуск для производства

После того, как регрессионное тестирование было подписано вашей командой QA, вы захотите последний шаг вашего CD-трубопровода, чтобы забрать этот артефакт и выпустить его на производство. План выпуска в бамбуке будет следующим:

1. Скачать артефакт 2. Изменить для выпуска A. Unzip .ipa пучок b. Замените профиль Provisioning Pensioning с производством C. Удалить существующий код подписи d. Выполните любую пользовательскую конфигурацию приложения (Установить URL-адрес PRED API и т. Д.) е. Уйти в отставку с использованием продуктов производства f. Re-Zip Bundle 3. Загрузить в Apple (App Store Connect)

Вот пример сценария оболочки, который я писал, который выполняет все шаг 2:

echo "begin iOS release build..."

mkdir ipa

cp MyProject.ipa ipa/MyProject.zip

echo "copying provisioning profile..."

cp $HOME/Downloads/MyProject_Distribution_Provisioning_Profile.mobileprovision ./ipa

echo "unzipping ipa..."

cd ipa

unzip MyProject.zip

echo "unlocking keychain..."

security unlock-keychain -p $PASSWORD login.keychain-db

echo "replacing provisioning profile..."

cp "MyProject_Distribution_Provisioning_Profile.mobileprovision" "Payload/MyProject.app/embedded.mobileprovision"

echo "removing existing code signature..."

rm -rf Payload/MyProject.app/_CodeSignature/

echo "signing ipa..."

codesign --entitlements Entitlements.xml -f -s "iPhone Distribution: Leading EDJE LLC (##########)" Payload/MyProject.app

echo "zipping app bundle..."

zip -qr MyProject.ipa Payload/

echo "iOS build done!"

exit

Entitlements.xml:






    application-identifier
    ##########.com.leadingedje.myproject
    aps-environment
    production
    beta-reports-active
    
    com.apple.developer.team-identifier
    ##########
    get-task-allow
    

 

DIY против облако CI

Мой опыт и подход в этой статье сосредоточены на внутреннем пользовательском решении для CI/CD в бамбуке, но есть в наличии сторонних услуг, которые могут предоставить некоторые из этих действий по сборке для вас. Вы можете подписаться на один или несколько из этих услуг, чтобы избежать необходимости покупать оборудование Mac для запуска ваших сборки и тестируемого номера:

Отказ от ответственности: Я не пробовал какие-либо из этих услуг, поэтому ваш пробег с ними может варьироваться. Хотя они могут несколько упростить вещи, я ожидаю, что вам все равно надо настроить их немного с помощью пользовательских шагов по сборке и вариантам, в зависимости от специфики вашего проекта IOS.

Оригинал: «https://dev.to/leading-edje/ci-cd-for-ios-apps-3n21»