Делаем патч для Pods библиотеки

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Приветствую друзья на связи автор телеграм канала ReactNative - info, недавно столкнулся с одной интересной проблемой, сборка архива для iOS приложения постоянно завершалась такой ошибкой:

error: Abort trap: 6 (in target 'iOSPhotoEditor' from project 'Pods')

В то время как локальные сборки на эмуляторы и устройства собирались корректно. 

Проблема оказалась в файле CropView.swift который лежал в директории Pods, нужно было подкорректировать один блок if(), заменив в нем вызов функции UI_USER_INTERFACE_IDIOM() на UIDevice.current.userInterfaceIdiom. 

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

На GitHub давно висит issue с этой ошибкой и фиксом на нее, делать новый pull request смысла нет. Создавать свой форк и заливать его на GitHub/CocoaPods показалось бессмысленно ради одной строчки кода. Пришел к выводу что нужно сделать локальный патч который бы применялся после каждой установки подов.

Итак, приступим. Полазив на просторах Google нашел утилиту которая выполняет всю рутину за вас, но у меня ее запустить так и не удалось, но на всякий случай оставлю ссылку (cocoapods-patch).

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

Для начала необходимо сгенерировать diff изменений в проблемном файле. Чтобы это сделать необходимо дублировать наш файл и сделать в нем необходимые правки. Новый файл я назвал CropViewPatched.swift.

Далее из папки iOS проекта в терминале я выполнил следущую команду:

git diff -u ./Pods/iOSPhotoEditor/Photo\ Editor/Photo\ Editor/CropView.swift ./Pods/iOSPhotoEditor/Photo\ Editor/Photo\ Editor/CropViewPatched.swift > iOSPhotoEditor.patch

Давайте разберемся что тут происходит:

  • параметр -u генерирует diff патч;

  • вторым аргументом идет путь к оригинальному файлу CropView.swift;

  • третьим аргументом идет путь к измененному файлу CropViewPatched.swift;

  • далее идет такая конструкция > iOSPhotoEditor.patch она позволяет сохранить полученный diff изменений в файл iOSPhotoEditor.patch в той директории откуда вы запустили данную команду; 

Полученный файл (iOSPhotoEditor.patch) будет выглядеть примерно так:

iOSPhotoEditor.patch
iOSPhotoEditor.patch

Далее в папке iOS я создал папку patches чтобы в дальнейшем хранить там все патчи если это потребуется и поместил туда полученный iOSPhotoEditor.patch.

Остался финальный шаг, необходимо найти в вашем Podfile секцию post_install

post_install do |installer|
 ...
end

Если таковой нет то создайте ее в конце вашего файла. Обратите внимание на то что данная секция может быть только одна в вашем Podfile.

Теперь в конце этой секции необходимо вставить следующую инструкцию:

post_install do |installer|
 ...
 puts '						
Источник: https://habr.com/ru/post/664316/


Интересные статьи

Интересные статьи

Вы никогда не задумывались о том, что компьютеры чрезвычайно глупы? Даже самый мощный процессор не может много сделать. Однако он может делать то, что делает, очень быстро и повторять это много раз. К...
Представьте, что у вас имеется большой проект по машинному обучению. Естественно, сначала над ним работали дата-сайентисты, а затем инженеры-программисты, которые оптимизировали модель дл...
Вы под давлением коллег или сокурсников из более успевающих групп решились на отчаянный шаг, способный разделить вашу жизнь на период "до" и "после" (прошли vimtutor), и теперь не знаете что дела...
Бизнес-смыслы появились в Битриксе в начале 2016 года, но мало кто понимает, как их правильно использовать для удобной настройки интернет-магазинов.
1С Битрикс: Управление сайтом (БУС) - CMS №1 в России по версии портала “Рейтинг Рунета” за 2018 год. На рынке c 2003 года. За это время БУС не стоял на месте, обрастал новой функциональностью...