Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CodeFest 2012. Бусыгин Р. Автосборки iOS-проект...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
CodeFest
April 20, 2012
810
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CodeFest 2012. Бусыгин Р. Автосборки iOS-проектов в Яндексе
CodeFest
April 20, 2012
More Decks by CodeFest
See All by CodeFest
CodeFest 2019. Илья Редько (ONLY) — Дизайн без правок
codefest
1
930
CodeFest 2019. Александр Зезюлин (Wargaming) – Прекрасное далёко
codefest
0
890
CodeFest 2019. Александр Баяндин (Badoo) — Нетрадиционное использование автотестов
codefest
0
1.4k
CodeFest 2019. Антон Кочепасов (Rambus) — Как считать на питоне быстрее, чем на C++
codefest
0
890
CodeFest 2019. Александр Лысковский (iFarm Project, Alawar, Welltory) — Как придумывать новое: продукты, бизнесы, ниши
codefest
0
980
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.3k
CodeFest 2019. Андрей Паньгин (Одноклассники) — JVM TI: как сделать «плагин» для виртуальной машины
codefest
0
1.3k
CodeFest 2019. Владимир Плизга (ЦФТ) — Перевод Spring Boot микросервисов с Java 8 на 11: что может пойти -не- так?
codefest
0
1.8k
Featured
See All Featured
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
280
The SEO identity crisis: Don't let AI make you average
varn
0
560
エンジニアに許された特別な時間の終わり
watany
109
250k
Leo the Paperboy
mayatellez
10
2.3k
RailsConf 2023
tenderlove
30
1.5k
KATA
mclloyd
PRO
35
15k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
Mind Mapping
helmedeiros
1
360
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
500
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
The Cost Of JavaScript in 2023
addyosmani
55
10k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
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