Юрий Василевский «Автоматизация в xcode»
DESCRIPTION
Юрий Василевский «Автоматизация в 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), связанные с нумерацией сборок билдов, форматированием и контролем стиля кода, анализом дублированных участков кода, управлением внешними библиотеками.TRANSCRIPT
Автоматизация в Xсode. Практический аспект
EPAM Systems, Mobile Solutions
Yandex Mobile Camp Санкт-Петербург, 30 мая 2012 г.
y.vasileuski yvasileuski y.vasileuski
Юрий Василевский ведущий разработчик
• Автоматизация в процессе разработки • Code sense или Как писать код быстрее • Services или Как форматировать код • Warnings или Как править код нагляднее • Targets или Как собирать приложение • Workspace или Как управлять библиотеками • Quick Help или Как использовать подсказки
План выступления
1
Написать код локально Собрать готовое приложение
Обязанности одного программиста Автоматизация в процессе разработки
2
Написать код локально
Собрать готовое приложение Поделиться кодом
Автоматизация в процессе разработки Обязанности группы программистов
3
Написать код локально
Собрать готовое приложение
Проверить сборку приложения локально Поделиться кодом
Реальный процесс разработки Автоматизация в процессе разработки
4
Написать код локально
Собрать готовое приложение
Проверить сборку приложения локально Проверить сборку приложения в реальном окружении Поделиться кодом
Реальный процесс разработки Автоматизация в процессе разработки
5
Написать код локально
Собрать готовое приложение
Проверить сборку приложения локально Проверить сборку приложения в реальном окружении Проверить юнит-тесты Поделиться кодом
Реальный процесс разработки Автоматизация в процессе разработки
6
Написать код локально
Собрать готовое приложение
Проверить сборку приложения локально Проверить сборку приложения в реальном окружении Проверить юнит-тесты Проверить стиль кода Поделиться кодом
Реальный процесс разработки Автоматизация в процессе разработки
7
Написать код локально
Собрать готовое приложение
Проверить сборку приложения локально Проверить сборку приложения в реальном окружении Проверить юнит-тесты Проверить стиль кода Пройти код ревью Поделиться кодом
Реальный процесс разработки Автоматизация в процессе разработки
8
Apache
Общие системы автоматизации
Trac
BugZilla
Jira
Maven
Ant Jankings
Hudson
TeamCity svn
Git
Perforce
Автоматизация в процессе разработки
Gerrit
9
+/- Общие системы автоматизации Автоматизация в процессе разработки
Преимущества: • Автоматизация – это хорошо Недостатки: • Нет универсального решения • Команда поддержки • Быстрое развитие IT и смена технологий • Собственная инфраструктура заказчика
10
Code sense или Как писать код быстрее Code Sense и Code Completion
11
Code sense или Как писать код быстрее Code Sense и Code Completion
12
Code sense или Как писать код быстрее User Code Snippets
инициализация объекта
объявление расширения
инициализация свойства
13
Code sense или Как писать код быстрее Custom Code Snippets
инициализация объекта
объявление расширения
инициализация свойства
14
Code sense или Как писать код быстрее Custom Code Snippets
ls ~/Library/Developer/XCode/UserData/CodeSnippets/
Содержимое сниппета pragma mark (XML файл)
15
Code sense или Как писать код быстрее +/- Code Sense
Преимущества: • Легко создавать, использовать, распространять • Формат кода сниппетов одинаков у всех разработчиков
Недостатки: • Вчера Text Macros, сегодня Code Snippet, а завтра? • Трудно использовать много сниппетов • Разработчик имеет свои предпочтения и свой набор сниппетов
16
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
Services или Как форматировать код Services & uncrustify
https://github.com/tonyarnold/Xcode-4-Uncrustify-Automator-Services 18
Services или Как форматировать код +/- Services & uncrustify
Преимущества: • Доступны в любых редакторах (AppCode, Emacs) • Очень легко использовать • Можно запускать по собственному усмотрению Недостатки: • Надо знать Automator, AppleScript • Очень трудно настроить правила форматирования
(167 правил) и адаптировать их под заказчика • Полностью переписывает содержимое файла • Программист не учится форматированию кода • Надо вызывать команду вручную
19
Services или Как форматировать код pre-commit контроль: git, svn, perforce
.git/hooks/pre-commit: #!/bin/sh j=$(exec git diff --name-only $HEAD) epmlint lint $j retval=$? exit $retval
perforce.sh: #!/bin/sh j=$(p4 diff -se) epmlint lint $j
svn: • svn lint • epmlint lint
20
Services или Как форматировать код Xcode & git
21
Services или Как форматировать код +/- pre-commit контроля
Преимущества: • Обучает писать красивый код • Полная интеграция Xcode c git • Обязательное следование стилю • Работает на всех системах контроля версий • Легко расширить новыми правилами, например длина метода < 50 или длина файла < 1000
Недостатки: • Необходимо разработать свою систему проверки кода • Разные способы интеграции для git, perforce, svn • Приходится вручную исправлять неверный код
22
Warnings или Как править код нагляднее Xcode warnings
23
Warnings или Как править код нагляднее Code style warnings
24
Warnings или Как править код нагляднее Code style build
25
Warnings или Как править код нагляднее +/- code style warnings
Преимущества: • Простая интеграция в билд процесс • Наглядность и точность замечаний по сравнению с консольным выводом
Недостатки: • Проверка внешних библиотек (игнор лист .epmlint) • Дополнительный этап сборки проекта • Продолжительный анализ всех файлов (modified only)
26
Warnings или Как править код нагляднее CPD & copy-past warnings
http://pmd.sourceforge.net/cpd.html 27
Warnings или Как править код нагляднее CPD проблемы
http://pmd.sourceforge.net/cpd.html 28
Warnings или Как править код нагляднее CPD build
http://pmd.sourceforge.net/cpd.html 29
Warnings или Как править код нагляднее +/- CPD warnings
Преимущества: • Наглядность замечаний • Устранение копи-паста (да, CPD работает :-) • Относительно легкая интеграция в билд процесс Недостатки: • Проверка внешних библиотек (группировка по папкам)
• Тяжело обучить - не все замечания верны / могут быть найдены (флаг minimum-tokens)
• Дополнительный этап сборки проекта
30
Targets или Как собирать приложение Проблемы сборок
• Как к таргету добавить редко исполняемый шаг? • Как проверить сборку приложения и убедиться, что изменения в коде одной сборки не сломали другие?
• Как автоматически менять номер сборки приложения?
31
Targets или Как собирать приложение Aggregate target
32
Targets или Как собирать приложение Верификация сборок
33
Targets или Как собирать приложение Info.plist preprocessing & Автонумерация сборок
34
Targets или Как собирать приложение Info.plist preprocessing & Автонумерация сборок
35
Targets или Как собирать приложение Info.plist preprocessing & Автонумерация сборок
36
Targets или Как собирать приложение Info.plist preprocessing & Автонумерация сборок
37
Targets или Как собирать приложение Info.plist preprocessing & Автонумерация сборок
38
Targets или Как собирать приложение +/- сборок
Преимущества: • Все настройки задаются через UI • Cобирать можно как c UI, так и с консоли (xcodebuild) • Легко проверить кросс-влияние сборок • Легко автоматизировать изменение настроек приложения
Недостатки: • Сложно настраивать взаимодействие сборок • Сложно “размножать” однотипные этапы сборок между проектами (project.pbxproj, workspace)
39
Workspace или Как управлять библиотеками Workspace или разделение проектов
40
Workspace или Как управлять библиотеками CocoaPods
$ pod install
41
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
Workspace или Как управлять библиотеками +/- CocoaPods
Преимущества: • Отделение внешних библиотек от кода • Авто настройка workspace и проекта • Простое управление библиотеками • Авто генерация документации с appledoc Недостатки: • Не все библиотеки имеют podspec спецификации • Не всегда легко подружить с Xcode
43
Quick Help или Как использовать подсказки Documentation & appledoc
44
Quick Help или Как использовать подсказки Quick Help & appledoc
45
Преимущества: • Отличная интеграция с Xcode • Поддержка синтаксиса Doxygen • Быстрый доступ к документации Недостатки: • Надо генерировать на локальной машине • Надо самому писать документацию
Quick Help или Как использовать подсказки +/- appledoc
46
Автоматизация в Xсode. Практический аспект
EPAM Systems, Mobile Solutions
Yandex Mobile Camp Санкт-Петербург, 30 мая 2012 г.
y.vasileuski yvasileuski y.vasileuski
Юрий Василевский ведущий разработчик