Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CodeFest 2012. Бусыгин Р. Автосборки iOS-проект...
Search
CodeFest
April 20, 2012
0
800
CodeFest 2012. Бусыгин Р. Автосборки iOS-проектов в Яндексе
CodeFest
April 20, 2012
Tweet
Share
More Decks by CodeFest
See All by CodeFest
CodeFest 2019. Илья Редько (ONLY) — Дизайн без правок
codefest
1
870
CodeFest 2019. Александр Зезюлин (Wargaming) – Прекрасное далёко
codefest
0
820
CodeFest 2019. Александр Баяндин (Badoo) — Нетрадиционное использование автотестов
codefest
0
1.3k
CodeFest 2019. Антон Кочепасов (Rambus) — Как считать на питоне быстрее, чем на C++
codefest
0
820
CodeFest 2019. Александр Лысковский (iFarm Project, Alawar, Welltory) — Как придумывать новое: продукты, бизнесы, ниши
codefest
0
930
CodeFest 2019. Роман Квартальнов (Zephyr) — Почему Project Manager косячит?
codefest
0
1.2k
CodeFest 2019. Florian Rival (Facebook) — Beyond Web-Apps: WebAssembly, JS and React to rewrite native apps
codefest
0
1.1k
CodeFest 2019. Андрей Паньгин (Одноклассники) — JVM TI: как сделать «плагин» для виртуальной машины
codefest
0
1.2k
CodeFest 2019. Владимир Плизга (ЦФТ) — Перевод Spring Boot микросервисов с Java 8 на 11: что может пойти -не- так?
codefest
0
1.7k
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
Agile that works and the tools we love
rasmusluckow
331
21k
Into the Great Unknown - MozCon
thekraken
40
2.2k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
A better future with KSS
kneath
240
18k
Automating Front-end Workflow
addyosmani
1371
200k
Six Lessons from altMBA
skipperchong
29
4.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Statistics for Hackers
jakevdp
799
230k
BBQ
matthewcrist
89
9.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Transcript
Автосборка iOS проектов в Яндексе Роман Бусыгин Переживаю за iOS-приложения
CodeFest, апрель 2012
План рассказа Зачем? Основные этапы сборки Как мы автоматизируем Советики
2
Зачем нужна автосборка? 3
Зачем мне автосборка? 4 Ничто не является более тягостным для
мудрого человека и ничто не доставляет ему большего беспокойства, чем необходимость тратить на пустяки и бесполезные вещи больше времени, чем они того заслуживают. — Платон, промо-ролик Яндекс.Навигатора
Зачем мне автосборка? 5 Если что-то делаешь вручную третий раз,
то это повод задуматься об автоматизации этого — Андрей Субботин, курилка в Яндексе
Какие проблемы мы решали? 6
Одно приложение в двух аккаунтах 7
Более 3500 сотрудников 8 © http://clubs.ya.ru/company/31029
iOS Developer Program До 100 iOS устройств Установка приложений через
iTunes 9
10 © http://www. ickr.com/photos/mamabarns/776704386
iOS Developer Enterprise Program ∞ iOS устройств Установка приложений через
WiFi 11
12 © http://memegenerator.net
Some people, when confronted with a problem, think “I know,
I’ll use regular expressions.” Now they have two problems. 13 — Jamie Zawinski
14 Standard Enterprise
14 Standard Enterprise
15 Большое количество проектов
16
16
16
16
16
16
Недостаточная поддержка со стороны CI 17
4 года ведётся разработка под iOS SDK 18
30 продуктов для непрерывной интеграции 19
20 © http://www. ickr.com/photos/maplestreetsoaps/2542237327
Jenkins CI Близок к идеалу Развивающийся Xcode plug-in 21 https://wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin
Teamcity Мы пользуемся Teamcity Неудобный Xcode plug-in 22
Основные этапы сборки 23
Сборка iOS-проекта в Яндексе Внутреннее тестирование — InHouse Релиз в
App Store — AppStore 24
Этапы сборки 1. Установка версии 2. Компиляция 3. Проверка подписи
4. Генерация артефактов 4.a. Переподписывание 5. Публикация артефактов 25
1. Установка версии 26 © http://www. ickr.com/photos/entropyphoto/5104335182
1. Установка версии YourProject.xcodeproj/project.pbxproj NSPropertyListOpenStepFormat -[NSDictionary initWithContentsOfFile:] 27
1. Установка версии defaults write Info.plist CFBundleVersion 562 defaults write
Info.plist CFBundleShortVersionSting 4.5.1 28
2. Компиляция 29 © http://www. ickr.com/photos/benhosking/4461285294
2. Компиляция xcodebuild -target YourApp -configuration InHouse -xcconfig OurConfig.xcconfig 30
2. Компиляция $ cat OurConfig.xcconfig CONFIGURATION_BUILD_DIR = /Path/To/ Xcodeproject/build/ CODE_SIGN_IDENTITY
= iPhone Distribution: Yandex LLC PROVISIONING_PROFILE = 31
3. Проверка подписи 32 © http://www. ickr.com/photos/photo36/3582630359
3. Проверка подписи codesign -dvvv --entitlements - YourApp.app | grep
'iPhone Distribution' 33
3. Проверка подписи YourApp.app/embedded.mobileprovision PKCS7 подписанный plist, однозначно соответствующий code
signing identity https://github.com/quadion/iOSValidation 34
4. Артефакты 35 © http://www. ickr.com/photos/francescocarta/6538483531
4. Артефакты Отладочная информация YourApp.app + YourApp.app.dSYM → zip Приложение
YourApp.app → YourApp.ipa (InHouse) YourApp.app → YourApp.zip (AppStore) 36
4. Артефакты InHouse xcrun -sdk iphoneos PackageApplication YourApp.app -o YourApp.ipa
37
4. Артефакты AppStore zip --recurse-path --symlinks -1 YourApp.app 38
4a. Переподписывание 39 © http://www. ickr.com/photos/francescocarta/6538483531
4a. Переподписывание 40 xcrun -sdk iphoneos --sign "iPhone Distribution: InHouse"
--embed inhouse.mobileprovision PackageApplication YourApp.app -o YourApp.ipa
4a. Переподписывание PackageApplication не обновляет application pre x в entitlements
приложения 41
4a. Переподписывание 42 $ mate `xcrun -sdk iphoneos -find PackageApplication`
4a. Переподписывание Используйте resouce rules, если нужно изменить ресурсы после
сборки 43 http://developer.apple.com/library/mac/#technotes/tn2206/_index.html
6. Публикация артефактов 44 © http://www. ickr.com/photos/kenjonbro/4499665964
6. Публикация артефактов YourApp.ipa для Over-The-Air распространения (в том числе
и для App Store) YourApp.zip для iTunes Connect (только для App Store сборок) 45
Как мы автоматизируем 46
YXBuildKit Набор скриптов на Bash/Perl Простая интеграция с проектами Дружелюбен
с Teamcity 47
Интеграция с YXBuildKit 1. Добавить в проект две build con
guration: InHouse и AppStore 2. Положить в папку с проектом конфиг 48
Настройка YXBuildKit 49 PREBUILD_SCRIPT = yxbuildkit-prebuild.sh POSTBUILD_SCRIPT = yxbuildkit-postbuild.sh IPA_TITLE
= "Яндекс.Карты" IPA_FILE = yandexmaps-iphoneos.ipa CODE_SIGN_IDENTITY_InHouse = "iPhone Distribution: Yandex LLC" CODE_SIGN_IDENTITY_AppStore = "iPhone Distribution: Yandex, LLC" APP_VERSION = 451 RESIGN_APPSTORE_BUILD_FOR_ADHOC_TESTING = 1 MOBILEPROVISION = "Resources/inhouse.mobileprovision"
Процесс сборки, итого 50
Процесс сборки, итого 50
Процесс сборки, итого 50
Советики 51
Хранение dSYM Git → Teamcity 52
Именование dSYM YourApp.AppStore.451.562-(armv6 01234567)-(armv7 01234567).app +dSYM.zip dwarfdump --uuid YourApp.dSYM 53
Разблокирование keychain 54 $ security help unlock-keychain
Специальная иконка 55
Итого Польза автоматизации сборки Основы сборки iOS-проекта Советики 56
Вопросы? Спасибо, что выслушали Роман Бусыгин
[email protected]
twitter.com/nskboy