Upload
yandex
View
3.406
Download
7
Embed Size (px)
DESCRIPTION
Доставка результатов работы разработчиков – это очень важный, сложный и кропотливый процесс в жизни каждого iOS-проекта. В то же время он очень скучный и чреват ошибками. Единственный способ избежать этих неприятных вещей – автоматизировать процесс и превратить сборку проекта в нажатие одной кнопки «Собрать!». Роман Бусыгин поделился советами, которые могут оказаться полезными для автосборок проектов, и рассказал о том, как осуществляется автоматизация в Яндексе.
Citation preview
План рассказа
Зачем?
Основные этапы сборки
Как мы автоматизируем
Советы и приёмчики
2
Зачем нужна автосборка?
3
Зачем мне автосборка?
4
Если что-то делаешь вручную третий раз, то это повод задуматься об автоматизации этого
Андрей Субботин, Яндекс
Зачем мне автосборка?
Сделать жизнь проекта проще
Сократить количество ошибок
Не отвлекает разработчика
5
Какие проблемы мы решали?
6
Два аккаунта вiTunes Connect
AppStoreAppPre!x.ru.yandex.mobile.search
EnterpriseAppPre!x.ru.yandex.mobile.search
7
Большое количество проектов
8
Большое количество проектов
8
Недостаточная поддержка со стороны CI
Свыше 30 различных CI server
Jenkins близок к идеалу
Мы используем Teamcity
9
Основные этапы сборки
10
Сборка iOS-проекта в Яндексе
Внутреннее тестирование — InHouse
Релиз в App Store — AppStore
11
Этапы сборки1. Установка версии
2. Компиляция
3. Проверка подписи
4. Генерация артефактов
5. Переподписывание
6. Публикация артефактов
12
Шаг 1. Установка версии
YourProject.xcodeproj/project.pbxproj
NSPropertyListOpenStepFormat
-[NSDictionary initWithContentsOfFile:]
13
Шаг 1. Установка версии
defaults write Info.plist CFBundleVersion 562
defaults write Info.plist CFBundleShortVersionSting 4.5.1
14
Шаг 2. Компиляция
xcodebuild -target YourApp -configuration InHouse -xcconfig OurConfig.xcconfig
15
Шаг 2. Компиляция
$ cat OurConfig.xcconfig
CONFIGURATION_BUILD_DIR = /Path/To/Xcodeproject/build/
CODE_SIGN_IDENTITY = iPhone Distribution: Yandex LLC
PROVISIONING_PROFILE =
16
Шаг 3. Проверка подписи
codesign -dvvv --entitlements - YourApp.app | grep 'iPhone Distribution'
17
Шаг 3. Проверка подписи
YourApp.app/embedded.mobileprovision
PKCS7 подписанный plist, однозначно соответствующий code signing identity
https://github.com/quadion/iOSValidation
18
Шаг 4. Артефакты
Отладочная информация
YourApp.app + YourApp.app.dSYM → zip
Приложение
YourApp.app → YourApp.ipa (InHouse)
YourApp.app → YourApp.zip (AppStore)
19
Шаг 4. Артефакты InHouse
xcrun -sdk iphoneos -find PackageApplication
xcrun -sdk iphoneos PackageApplication YourApp.app -o YourApp.ipa
20
Шаг 4. Артефакты AppStore
zip --recurse-path --symlinks -1 YourApp.app
21
Шаг 5. Переподписывание
PackageApplication не обновляет application preSx в entitlements приложения
22
Шаг 6. Публикация артефактов
YourApp.ipa для Over-The-Air распространения (в том числе и для App Store)
YourApp.zip для iTunes Connect (только для App Store сборок)
23
Как мы автоматизируем
24
YXBuildKit
Набор скриптов на Bash/Perl
Делает все, что я уже описал
Решает все наши проблемы
Простая интеграция
25
Интеграция с YXBuildKit
1. Добавить в проект две build conSguration: InHouse и AppStore
2. Положить в папку с проектом конфиг
26
Настройка 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"
Процесс сборки, итого
1. Нажимаем Run
2. Несколько минут магии
3. PROFIT
28
YXBuildKit, планы
Переписать на Ruby
Поддержка отладочного режима
Маркировка иконки InHouse сборки как в Почте
Выложить в open source?
29
Советики
30
Хранение dSYM
Git → Teamcity
31
Именование dSYM
YourApp.AppStore.451.562-(armv6 01234567)-(armv7 01234567).app+dSYM.zip
dwarfdump --uuid YourApp.dSYM
32
Специальная иконка
33
Итого
Польза автоматизации сборки
Как автоматизировать
YXBuildKit
Советики
34
Вопросы?Спасибо, что выслушали
Роман Бусыгин, @nskboy