Проблемы командной разработки под iOS

26
Страдания и боль командная разработка под iOS

Transcript of Проблемы командной разработки под iOS

Page 1: Проблемы командной разработки под iOS

Страдания и болькомандная разработка под iOS

Page 2: Проблемы командной разработки под iOS

Инструменты

● XCode 8● Swift 3● CocoaPods● git

Page 3: Проблемы командной разработки под iOS

Storyboard

Page 4: Проблемы командной разработки под iOS

Хмм, выглядит неплохо

Page 5: Проблемы командной разработки под iOS
Page 6: Проблемы командной разработки под iOS

1. А может быть вот так?

Page 7: Проблемы командной разработки под iOS

РешениеИспользовать класс Router для хранения всех идентификаторов и переходов

Выполнять их программно, не используя storyboard segue

Не знал какую картинку сюда вставить, пусть будет котик

Page 8: Проблемы командной разработки под iOS

А что если нас двое?

Page 9: Проблемы командной разработки под iOS

Разработчик 1 Разработчик 2

Page 10: Проблемы командной разработки под iOS
Page 11: Проблемы командной разработки под iOS

2.

Какой же выход?

Page 12: Проблемы командной разработки под iOS

Решения нет

Один разработчик должен выбросить свою верстку и проделать ее заново

Page 13: Проблемы командной разработки под iOS

Решение: Storyboard Reference

Page 14: Проблемы командной разработки под iOS

Использовать Xib-файлы

14

Page 15: Проблемы командной разработки под iOS

3. Передача параметра между VC’амиВ исходном

override func prepareForSegue (segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == “goToTargetViewControllerSegue" { let controller = segue.destinationViewController as? MoviePreviewController controller?.movieViewModel = viewModel.movieViewModel() }}

В целевом

class MoviePreviewController : UIViewController { var movieViewModel: MovieViewModel ! override func viewDidLoad() { super.viewDidLoad() doSomethingWithMovieTitle(movieViewModel.title) }}

Но стоит мне опечататься или в Storyboard или в исходном VC

=> неизбежный RuntimeException

Частичное решение: такое же как и случае 1.Решение: отказаться от storyboard в пользу Xib файлов

Page 16: Проблемы командной разработки под iOS

Верстка кодом

Page 17: Проблемы командной разработки под iOS

Swift

Page 18: Проблемы командной разработки под iOS

Может быть всё-таки ObjC?

1. Swift’у не нужно поддерживать совместимость с C, никаких `@`

2. Swift’у не нужно отдельного заголовочного файла (актуально, т.к. XCode не умеет рефакторинг)

Page 19: Проблемы командной разработки под iOS

Может быть всё-таки ObjC?

3. В Swift не получится “неожиданно” словить NullPointerException

4. При работе со старыми API память не течёт (CoreGraphics, например)

Page 20: Проблемы командной разработки под iOS

Может быть всё-таки ObjC?

5. Удобнее работать со строками (никаких %d, %S, %@ => не ошибёшься)

6. Swift быстрее ObjC (Swift ≈ С++)

7. namespaces (никаких префиксов NS, CG, etc)на SwiftBook были ещё доводы, но они сомнительные

Page 21: Проблемы командной разработки под iOS

Так ли все хорошо?Однажды:

Page 22: Проблемы командной разработки под iOS

Соглашаемся

Page 23: Проблемы командной разработки под iOS

WHAT?!

Page 24: Проблемы командной разработки под iOS
Page 25: Проблемы командной разработки под iOS

а ещё все зависимости из CocoaPods туда же

Page 26: Проблемы командной разработки под iOS

Я готов ответить на ваши вопросы