Подтвердить что ты не робот

Изменение импортированной библиотеки с использованием cocoapods

Я работаю над проектом, использующим cocoapods, и вдруг вижу, что я делаю некоторые изменения в одной из библиотек. Как я могу гарантировать, что эти изменения никогда не будут отменены с помощью pod update? Есть ли способ внести изменения в блок без обновления проекта github?

ОБНОВЛЕНИЕ: запуск проекта

Я попытался разветкить проект и создать новый specfile, чтобы указать на новый проект. Я смог установить базовый материал, однако по какой-то причине есть некоторые зависимости, которые установлены, но не могут быть указаны внутри проекта pods. В настоящее время у меня это в моем podsfile:

'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec'

Вилка библиотеки находится в https://github.com/tiagoalmeida/WhirlyGlobe

UPDATE2: Отсутствующие заголовки

Я обнаружил, что заголовки (Pods/Headers) для boost и Eigen (используемые из WhirilyGlobe) не генерируются.

UPDATE3: попытка сделать что-то о заголовках

Я попытался посмотреть в некоторых конфигурациях, которые находятся в этом потоке, и я пробовал решения в FAQ, но я считаю, что моя проблема другая. Заголовки на самом деле отсутствуют.

UPDATE4: атака версии cocoapods

Я удалил cocoapods и установил версию 0.20.2 (которая работала, прежде чем пытаться использовать мою вилку), и она все равно сохраняет:/.

4b9b3361

Ответ 1

@pgb и wattson предоставили мне хорошую информацию, но в конечном итоге проблема была в сочетании вещей.

Я не знаю, почему, но кажется, что cocoapods 0.22 обрабатывает заголовки по-разному. Я удалил cocoapods и установил версию 0.20.2.

Чтобы проверить версию cocoapods, я использовал gem query, и я удалил cocoapods с gem uninstall cocoapods и установил cocoapods с gem install cocoapods --version 0.20.2.

Я использовал свой подкайл следующим образом:

'WhirlyGlobe', :podspec => 'https://raw.github.com/tiagoalmeida/WhirlyGlobe/master/WhirlyGlobe.podspec'

Где podspec указывает на мой новый podspec. Я сделал это так, потому что мне нужно удалить тег: из исходного podfile (в противном случае он всегда указывает на одно и то же место), и таким образом у меня больше контроля над файлом.

В podspec я изменил исходный код:

s.source = { :git => "https://github.com/tiagoalmeida/WhirlyGlobe.git"} 

Чтобы указать на мою вилку и удалить тег.

Спасибо @pgb и @wattson за попытки помочь мне. Они были оба полезны.

Ответ 2

Вы можете разветкить репозиторий, а затем добавить разветвленное репо в качестве контейнера, так что скажите, что вы разветкили репо на https://github.com/tiago/ThePodProject.git, а затем установите pod для:

pod 'ThePodProject', :git => 'https://github.com/tiago/ThePodProject.git'

см. здесь для более подробной информации (в разделе "От podspec в корне библиотеки репо" )

Ответ 3

Вы близки к тому, что он работает с вашим разветвленным хранилищем.

Я просто попробовал его со следующим Podfile:

pod 'WhirlyGlobe', :git => 'https://github.com/tiagoalmeida/WhirlyGlobe'

Загрузил WhirlyGlobe, а затем не удалось, поскольку hg отсутствовал. Я просто установил его, используя Homebrew: brew install mercurial, а затем runnning pod install смог установить все зависимости.

Проект компилируется, но я не уверен, что он работает, и попробуйте его.

Помните, что для загрузки и компиляции всех зависимостей (shapelib в частности) потребовалось очень много времени.

Ответ 4

Просто хочу добавить несколько минут к ответу. Я сталкиваюсь с той же проблемой. Как и кто-то предложил выше, я пошел в подклассы pod lib. Я использовал ACEDrawingView, и у него есть свойство image, которое является readonly. Я подклассифицировал его и сделал это свойство read/write. Я лично чувствую, что переход к подклассу более изящный и без проблем позволяет решить эту проблему. Если не будет огромного развития, вы хотите сделать на стороне вашего основного проекта.

Ответ 5

Сохранение пользовательских изменений с использованием только Git (без разветвления)

Для тех, кто ищет простое решение, я успешно решил эту проблему, используя Git stashes.

Как уже упоминалось, pod update перезапишет любые сделанные вами изменения. Однако, если вы используете Git, мне нравится делать все мои изменения, кроме изменений моего модуля.

Как только изменения, которые у меня есть на моей ветке, являются изменениями в Pods, я сохраняю эти изменения, запустив git stash save "Custom Cocoapod changes, apply after every pod update". Вы можете дать ему любое сообщение, которое вы хотите, изменив текст между ".".

Эта команда имеет побочный эффект перепродажи вашего рабочего каталога предыдущей HEAD, поэтому, если вы хотите повторно применить эти штампы, вы можете просто запустить git stash apply, чтобы вернуть эти изменения, а затем вы можете зафиксировать их для их сохранения.

Не используйте git stash pop, так как это удалит трюк после его применения.

Теперь, в какое-то неопределенное время в будущем, когда вы обновляете свои контейнеры и время их применения, чтобы снова применить тайник, вы должны выполнить git stash list. это вернет список всех задержек, которые вы сделали с последним индексированием с нулевой отметкой. Вероятно, вы увидите что-то вроде этого:

[email protected]{0}: On featureFooBar: foo bar
[email protected]{1}: On Master: Custom Cocoapod changes, apply after every pod update
...

Если пользовательский cocoa pods изменяет stash в stash @{0}, тогда отлично, вы можете просто запустить git stash apply снова, и вы получите эти изменения в своем рабочем каталоге. В противном случае, как только вы обнаружите, какой номер штемпеля изменил ваш код, вы можете применить этот штамп, запустив git stash apply [email protected]{1}

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

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

Ответ 6

Существует еще один способ, при котором вы можете разветвлять репозиторий, изменять изменения и поддерживать библиотеку с помощью cocoapods для будущих исправлений ошибок и улучшения возможностей..... enter image description here

Я недавно опубликовал учебник для того же здесь https://medium.com/@mihirpmehta/how-to-modify-cocoapods-library-within-pods-647d2bf7e1cb