36
Автосборка iOS проектов в Яндексе Роман Бусыгин [email protected] @nskboy 1

Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

  • Upload
    yandex

  • View
    3.406

  • Download
    7

Embed Size (px)

DESCRIPTION

Доставка результатов работы разработчиков – это очень важный, сложный и кропотливый процесс в жизни каждого iOS-проекта. В то же время он очень скучный и чреват ошибками. Единственный способ избежать этих неприятных вещей – автоматизировать процесс и превратить сборку проекта в нажатие одной кнопки «Собрать!». Роман Бусыгин поделился советами, которые могут оказаться полезными для автосборок проектов, и рассказал о том, как осуществляется автоматизация в Яндексе.

Citation preview

Page 1: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Автосборка iOS проектов в Яндексе

Роман Бусыгин[email protected]

@nskboy1

Page 2: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

План рассказа

Зачем?

Основные этапы сборки

Как мы автоматизируем

Советы и приёмчики

2

Page 3: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Зачем нужна автосборка?

3

Page 4: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Зачем мне автосборка?

4

Если что-то делаешь вручную третий раз, то это повод задуматься об автоматизации этого

Андрей Субботин, Яндекс

Page 5: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Зачем мне автосборка?

Сделать жизнь проекта проще

Сократить количество ошибок

Не отвлекает разработчика

5

Page 6: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Какие проблемы мы решали?

6

Page 7: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Два аккаунта вiTunes Connect

AppStoreAppPre!x.ru.yandex.mobile.search

EnterpriseAppPre!x.ru.yandex.mobile.search

7

Page 8: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Большое количество проектов

8

Page 9: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Большое количество проектов

8

Page 10: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Недостаточная поддержка со стороны CI

Свыше 30 различных CI server

Jenkins близок к идеалу

Мы используем Teamcity

9

Page 11: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Основные этапы сборки

10

Page 12: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Сборка iOS-проекта в Яндексе

Внутреннее тестирование — InHouse

Релиз в App Store — AppStore

11

Page 13: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Этапы сборки1. Установка версии

2. Компиляция

3. Проверка подписи

4. Генерация артефактов

5. Переподписывание

6. Публикация артефактов

12

Page 14: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Шаг 1. Установка версии

YourProject.xcodeproj/project.pbxproj

NSPropertyListOpenStepFormat

-[NSDictionary initWithContentsOfFile:]

13

Page 15: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Шаг 1. Установка версии

defaults write Info.plist CFBundleVersion 562

defaults write Info.plist CFBundleShortVersionSting 4.5.1

14

Page 16: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Шаг 2. Компиляция

xcodebuild -target YourApp -configuration InHouse -xcconfig OurConfig.xcconfig

15

Page 17: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Шаг 2. Компиляция

$ cat OurConfig.xcconfig

CONFIGURATION_BUILD_DIR = /Path/To/Xcodeproject/build/

CODE_SIGN_IDENTITY = iPhone Distribution: Yandex LLC

PROVISIONING_PROFILE =

16

Page 18: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Шаг 3. Проверка подписи

codesign -dvvv --entitlements - YourApp.app | grep 'iPhone Distribution'

17

Page 19: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Шаг 3. Проверка подписи

YourApp.app/embedded.mobileprovision

PKCS7 подписанный plist, однозначно соответствующий code signing identity

https://github.com/quadion/iOSValidation

18

Page 20: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Шаг 4. Артефакты

Отладочная информация

YourApp.app + YourApp.app.dSYM → zip

Приложение

YourApp.app → YourApp.ipa (InHouse)

YourApp.app → YourApp.zip (AppStore)

19

Page 21: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Шаг 4. Артефакты InHouse

xcrun -sdk iphoneos -find PackageApplication

xcrun -sdk iphoneos PackageApplication YourApp.app -o YourApp.ipa

20

Page 22: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Шаг 4. Артефакты AppStore

zip --recurse-path --symlinks -1 YourApp.app

21

Page 23: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Шаг 5. Переподписывание

PackageApplication не обновляет application preSx в entitlements приложения

22

Page 24: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Шаг 6. Публикация артефактов

YourApp.ipa для Over-The-Air распространения (в том числе и для App Store)

YourApp.zip для iTunes Connect (только для App Store сборок)

23

Page 25: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Как мы автоматизируем

24

Page 26: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

YXBuildKit

Набор скриптов на Bash/Perl

Делает все, что я уже описал

Решает все наши проблемы

Простая интеграция

25

Page 27: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Интеграция с YXBuildKit

1. Добавить в проект две build conSguration: InHouse и AppStore

2. Положить в папку с проектом конфиг

26

Page 28: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Настройка YXBuildKit

27

PREBUILD_SCRIPT = yxbuildkit-prebuild.shPOSTBUILD_SCRIPT = yxbuildkit-postbuild.shIPA_TITLE = "Яндекс.Карты"IPA_FILE = yandexmaps-iphoneos.ipaCODE_SIGN_IDENTITY_InHouse = "iPhone Distribution: Yandex LLC"CODE_SIGN_IDENTITY_AppStore = "iPhone Distribution: Yandex, LLC"APP_VERSION = 451RESIGN_APPSTORE_BUILD_FOR_ADHOC_TESTING =1MOBILEPROVISION="Resources/inhouse.mobileprovision"

Page 29: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Процесс сборки, итого

1. Нажимаем Run

2. Несколько минут магии

3. PROFIT

28

Page 30: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

YXBuildKit, планы

Переписать на Ruby

Поддержка отладочного режима

Маркировка иконки InHouse сборки как в Почте

Выложить в open source?

29

Page 31: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Советики

30

Page 32: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Хранение dSYM

Git → Teamcity

31

Page 33: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Именование dSYM

YourApp.AppStore.451.562-(armv6 01234567)-(armv7 01234567).app+dSYM.zip

dwarfdump --uuid YourApp.dSYM

32

Page 34: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Специальная иконка

33

Page 35: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Итого

Польза автоматизации сборки

Как автоматизировать

YXBuildKit

Советики

34

Page 36: Роман Бусыгин "Автосборки iOS-проектов в Яндексе"

Вопросы?Спасибо, что выслушали

Роман Бусыгин, @nskboy