Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CodeFest 2012. Бусыгин Р. Автосборки iOS-проект...
Search
CodeFest
April 20, 2012
0
740
CodeFest 2012. Бусыгин Р. Автосборки iOS-проектов в Яндексе
CodeFest
April 20, 2012
Tweet
Share
More Decks by CodeFest
See All by CodeFest
CodeFest 2019. Илья Редько (ONLY) — Дизайн без правок
codefest
1
800
CodeFest 2019. Александр Зезюлин (Wargaming) – Прекрасное далёко
codefest
0
720
CodeFest 2019. Александр Баяндин (Badoo) — Нетрадиционное использование автотестов
codefest
0
1.2k
CodeFest 2019. Антон Кочепасов (Rambus) — Как считать на питоне быстрее, чем на C++
codefest
0
750
CodeFest 2019. Александр Лысковский (iFarm Project, Alawar, Welltory) — Как придумывать новое: продукты, бизнесы, ниши
codefest
0
830
CodeFest 2019. Роман Квартальнов (Zephyr) — Почему Project Manager косячит?
codefest
0
1k
CodeFest 2019. Florian Rival (Facebook) — Beyond Web-Apps: WebAssembly, JS and React to rewrite native apps
codefest
0
830
CodeFest 2019. Андрей Паньгин (Одноклассники) — JVM TI: как сделать «плагин» для виртуальной машины
codefest
0
1.1k
CodeFest 2019. Владимир Плизга (ЦФТ) — Перевод Spring Boot микросервисов с Java 8 на 11: что может пойти -не- так?
codefest
0
1.5k
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
160
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
730
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
Designing the Hi-DPI Web
ddemaree
280
34k
The Cost Of JavaScript in 2023
addyosmani
45
6.8k
RailsConf 2023
tenderlove
29
910
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Facilitating Awesome Meetings
lara
50
6.1k
Visualization
eitanlees
145
15k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
380
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.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