Юрий Василевский «Автоматизация в XCode»
Yandex Mobile Camp в Санкт-Петербурге 2012
http://events.yandex.ru/events/yamobcamp/spb-may-2012/
Xcode — основной инструментарий разработки приложений под Mac OS X и Apple iOS. Он обладает широкими возможностями как для редактирования кода, так и для автоматизации задач. Мы обсудим некоторые из аспектов автоматизации (Code Sense, Targets, Services, Help), связанные с нумерацией сборок билдов, форматированием и контролем стиля кода, анализом дублированных участков кода, управлением внешними библиотеками.
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Юрий Василевский «Автоматизация в XCode»
1. Yandex Mobile Camp
Санкт-Петербург, 30 мая 2012 г.
Автоматизация в Xсode.
Практический аспект
Юрий Василевский
ведущий разработчик
yury_vasileuski@epam.com
y.vasileuski yvasileuski y.vasileuski
EPAM Systems, Mobile Solutions
2. План выступления
• Автоматизация в процессе разработки
• Code sense или Как писать код быстрее
• Services или Как форматировать код
• Warnings или Как править код нагляднее
• Targets или Как собирать приложение
• Workspace или Как управлять библиотеками
• Quick Help или Как использовать подсказки
1
3. Автоматизация в процессе разработки
Обязанности одного программиста
Написать код локально
Собрать готовое приложение
2
4. Автоматизация в процессе разработки
Обязанности группы программистов
Написать код локально
Поделиться кодом
Собрать готовое приложение
3
5. Автоматизация в процессе разработки
Реальный процесс разработки
Написать код локально
Проверить сборку приложения локально
Поделиться кодом
Собрать готовое приложение
4
6. Автоматизация в процессе разработки
Реальный процесс разработки
Написать код локально
Проверить сборку приложения локально
Проверить сборку приложения в реальном
окружении
Поделиться кодом
Собрать готовое приложение
5
7. Автоматизация в процессе разработки
Реальный процесс разработки
Написать код локально
Проверить сборку приложения локально
Проверить сборку приложения в реальном
окружении
Проверить юнит-тесты
Поделиться кодом
Собрать готовое приложение
6
8. Автоматизация в процессе разработки
Реальный процесс разработки
Написать код локально
Проверить сборку приложения локально
Проверить сборку приложения в реальном
окружении
Проверить юнит-тесты
Проверить стиль кода
Поделиться кодом
Собрать готовое приложение
7
9. Автоматизация в процессе разработки
Реальный процесс разработки
Написать код локально
Проверить сборку приложения локально
Проверить сборку приложения в реальном
окружении
Проверить юнит-тесты
Проверить стиль кода
Пройти код ревью
Поделиться кодом
Собрать готовое приложение
8
10. Автоматизация в процессе разработки
Общие системы автоматизации
Jira
Apache Gerrit
BugZilla
Maven
Hudson
Ant
Trac
Perforce
Jankings
svn
TeamCity Git
9
11. Автоматизация в процессе разработки
+/- Общие системы автоматизации
Преимущества:
• Автоматизация – это хорошо
Недостатки:
• Нет универсального решения
• Команда поддержки
• Быстрое развитие IT и смена технологий
• Собственная инфраструктура заказчика
10
12. Code sense или Как писать код быстрее
Code Sense и Code Completion
11
13. Code sense или Как писать код быстрее
Code Sense и Code Completion
12
14. Code sense или Как писать код быстрее
User Code Snippets
инициализация объекта
объявление расширения
инициализация свойства
13
15. Code sense или Как писать код быстрее
Custom Code Snippets
инициализация объекта
объявление расширения
инициализация свойства
14
16. Code sense или Как писать код быстрее
Custom Code Snippets
ls ~/Library/Developer/XCode/UserData/CodeSnippets/
Содержимое сниппета pragma mark (XML файл)
15
17. Code sense или Как писать код быстрее
+/- Code Sense
Преимущества:
• Легко создавать, использовать, распространять
• Формат кода сниппетов одинаков у всех
разработчиков
Недостатки:
• Вчера Text Macros, сегодня Code Snippet, а завтра?
• Трудно использовать много сниппетов
• Разработчик имеет свои предпочтения и свой набор
сниппетов
16
18. Services или Как форматировать код
Правила Code Style
Apple Code style
• https://developer.apple.com/library/mac/#documentation/
Cocoa/Conceptual/CodingGuidelines/
CodingGuidelines.html
Google code style:
• http://google-styleguide.googlecode.com/svn/trunk/
objcguide.xml
17
19. Services или Как форматировать код
Services & uncrustify
18 https://github.com/tonyarnold/Xcode-4-Uncrustify-Automator-Services
20. Services или Как форматировать код
+/- Services & uncrustify
Преимущества:
• Доступны в любых редакторах (AppCode, Emacs)
• Очень легко использовать
• Можно запускать по собственному усмотрению
Недостатки:
• Надо знать Automator, AppleScript
• Очень трудно настроить правила форматирования
(167 правил) и адаптировать их под заказчика
• Полностью переписывает содержимое файла
• Программист не учится форматированию кода
• Надо вызывать команду вручную
19
23. Services или Как форматировать код
+/- pre-commit контроля
Преимущества:
• Обучает писать красивый код
• Полная интеграция Xcode c git
• Обязательное следование стилю
• Работает на всех системах контроля версий
• Легко расширить новыми правилами, например
длина метода < 50 или длина файла < 1000
Недостатки:
• Необходимо разработать свою систему проверки кода
• Разные способы интеграции для git, perforce, svn
• Приходится вручную исправлять неверный код
22
27. Warnings или Как править код нагляднее
+/- code style warnings
Преимущества:
• Простая интеграция в билд процесс
• Наглядность и точность замечаний по сравнению с
консольным выводом
Недостатки:
• Проверка внешних библиотек (игнор лист .epmlint)
• Дополнительный этап сборки проекта
• Продолжительный анализ всех файлов (modified only)
26
28. Warnings или Как править код нагляднее
CPD & copy-past warnings
27 http://pmd.sourceforge.net/cpd.html
29. Warnings или Как править код нагляднее
CPD проблемы
28 http://pmd.sourceforge.net/cpd.html
30. Warnings или Как править код нагляднее
CPD build
29 http://pmd.sourceforge.net/cpd.html
31. Warnings или Как править код нагляднее
+/- CPD warnings
Преимущества:
• Наглядность замечаний
• Устранение копи-паста (да, CPD работает :-)
• Относительно легкая интеграция в билд процесс
Недостатки:
• Проверка внешних библиотек (группировка по
папкам)
• Тяжело обучить - не все замечания верны / могут
быть найдены (флаг minimum-tokens)
• Дополнительный этап сборки проекта
30
32. Targets или Как собирать приложение
Проблемы сборок
• Как к таргету добавить редко исполняемый шаг?
• Как проверить сборку приложения и убедиться, что
изменения в коде одной сборки не сломали другие?
• Как автоматически менять номер сборки
приложения?
31
35. Targets или Как собирать приложение
Info.plist preprocessing & Автонумерация сборок
34
36. Targets или Как собирать приложение
Info.plist preprocessing & Автонумерация сборок
35
37. Targets или Как собирать приложение
Info.plist preprocessing & Автонумерация сборок
36
38. Targets или Как собирать приложение
Info.plist preprocessing & Автонумерация сборок
37
39. Targets или Как собирать приложение
Info.plist preprocessing & Автонумерация сборок
38
40. Targets или Как собирать приложение
+/- сборок
Преимущества:
• Все настройки задаются через UI
• Cобирать можно как c UI, так и с консоли (xcodebuild)
• Легко проверить кросс-влияние сборок
• Легко автоматизировать изменение настроек
приложения
Недостатки:
• Сложно настраивать взаимодействие сборок
• Сложно “размножать” однотипные этапы сборок
между проектами (project.pbxproj, workspace)
39
41. Workspace или Как управлять библиотеками
Workspace или разделение проектов
40
43. Workspace или Как управлять библиотеками
CocoaPods
PodFile:
platform :ios, :deployment_target => '4.0’
dependency 'JSONKit'
dependency 'SDURLCache’
dependency 'SMXMLDocument’
target :’CTC-iPad' do
dependency 'JSONKit’
dependency 'SVProgressHUD’
dependency 'YandexMapKit', :podspec => 'https://<…>/
YandexMapKit.podspec'
end
42
44. Workspace или Как управлять библиотеками
+/- CocoaPods
Преимущества:
• Отделение внешних библиотек от кода
• Авто настройка workspace и проекта
• Простое управление библиотеками
• Авто генерация документации с appledoc
Недостатки:
• Не все библиотеки имеют podspec спецификации
• Не всегда легко подружить с Xcode
43
45. Quick Help или Как использовать подсказки
Documentation & appledoc
44
46. Quick Help или Как использовать подсказки
Quick Help & appledoc
45
47. Quick Help или Как использовать подсказки
+/- appledoc
Преимущества:
• Отличная интеграция с Xcode
• Поддержка синтаксиса Doxygen
• Быстрый доступ к документации
Недостатки:
• Надо генерировать на локальной машине
• Надо самому писать документацию
46
48. Yandex Mobile Camp
Санкт-Петербург, 30 мая 2012 г.
Автоматизация в Xсode.
Практический аспект
Юрий Василевский
ведущий разработчик
yury_vasileuski@epam.com
y.vasileuski yvasileuski y.vasileuski
EPAM Systems, Mobile Solutions