В разгар разработки неизбежно возникают изменения, которые вам нужно будет внести в вашу среду разработки. Например, обновление Xcode, обновление вашей версии Cocoapods, интеграция новой зависимости.
Часто это кажется прекрасным, например… что может пойти не так?!
И тут вдруг вы пытаетесь запустить свой проект, и всплывают вроде бы не связанные с ним ошибки, которых вы никогда раньше не видели и не знаете, как исправить.
Когда такие вещи случаются, я задаю себе два вопроса:
- Как я могу это исправить?
- Почему это случилось?
Мой инстинкт обычно состоит в том, чтобы сначала ответить на первый вопрос. Я просто не хочу, чтобы меня больше блокировали, и я просто хочу исправить это и двигаться дальше.
Однако... в глубине души я знаю, что последний вопрос важнее и на него труднее ответить.
Итак… например, я получал комбинацию ошибок, и в этом случае я, казалось, мог решить одну, а затем появлялась другая.
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 не зависит от других изменений среды
- не обновляйте свою среду или инструменты, когда вы находитесь в середине проекта, подождите, пока вы не окажетесь в органической точке остановки. Или сделайте согласованную органическую точку остановки.
- когда вы вносите изменения в проект, которые повлияют на других разработчиков, убедитесь, что они знают, что будет дальше :)
И тогда, по крайней мере, биться головой о стену тоже может быть приятно: