В разгар разработки неизбежно возникают изменения, которые вам нужно будет внести в вашу среду разработки. Например, обновление Xcode, обновление вашей версии Cocoapods, интеграция новой зависимости.

Часто это кажется прекрасным, например… что может пойти не так?!

И тут вдруг вы пытаетесь запустить свой проект, и всплывают вроде бы не связанные с ним ошибки, которых вы никогда раньше не видели и не знаете, как исправить.

Когда такие вещи случаются, я задаю себе два вопроса:

  1. Как я могу это исправить?
  2. Почему это случилось?

Мой инстинкт обычно состоит в том, чтобы сначала ответить на первый вопрос. Я просто не хочу, чтобы меня больше блокировали, и я просто хочу исправить это и двигаться дальше.

Однако... в глубине души я знаю, что последний вопрос важнее и на него труднее ответить.

Итак… например, я получал комбинацию ошибок, и в этом случае я, казалось, мог решить одну, а затем появлялась другая.

  • pods are integrated into targets that do not have the same Swift version
  • Duplicate interface definition for class ‘Mixpanel’
  • ADiOSUtilities required by Vida (Swift 3.0), VidaTests (Swift 3.0.1), EarlGreyVidaTests (Swift 3.0)

Изменения, которые могли или не могли вызвать это, были связаны со следующими изменениями, которые были объединены в течение пары недель разными разработчиками:

  • Включены новые библиотеки: Fastlane, EarlGrey
  • Обновлены Cocoapods с 1.0.1 до 1.2.0.

Как это было решено:

  • Изолируйте ошибки и устраняйте их по одной. Например, когда я переключился на другую ветку, в которой была предыдущая версия Cocoa pods, я понял, что мне нужно указать версию Cocoapods, указав: pod _1.0.1_ install
  • Затем дублированное определение интерфейса было вызвано тем, что мы объявляли библиотеку Mixpanel по-разному в рамках проекта — это нужно было сделать согласованным для каждого файла.
  • Наконец, мне нужно было указать, что нам не нужно использовать устаревший язык Swift.
  • Вдобавок ко всему, с каждой сборкой я удалял папку с производными данными, чистил проект и сбрасывал симулятор…
    Это все для обыденных мелочей часового вращения колеса…

Мои основные выводы:

Я до сих пор не выяснил основную причину каждой из возникших проблем, но я знаю, что когда несколько человек вносят изменения в одну и ту же среду, могут возникать каскадные негативные последствия.

Я бы порекомендовал:

  • обновляйте по одной вещи за раз и убедитесь, что каждый PR не зависит от других изменений среды
  • не обновляйте свою среду или инструменты, когда вы находитесь в середине проекта, подождите, пока вы не окажетесь в органической точке остановки. Или сделайте согласованную органическую точку остановки.
  • когда вы вносите изменения в проект, которые повлияют на других разработчиков, убедитесь, что они знают, что будет дальше :)

И тогда, по крайней мере, биться головой о стену тоже может быть приятно: