Изменение импортированной библиотеки с помощью 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: отсутствуют заголовки

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

UPDATE3: Пытается что-то сделать с заголовками

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

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

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

5 ответов


@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. Я сделал это, потому что мне нужно удалить тег :из исходного подфайла (иначе он всегда указывает на одно и то же место), и таким образом у меня больше контроля над файлом.

в подспец я изменил источник:

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

, чтобы указать на мою вилку и убрал тег.

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


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

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

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


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

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

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

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

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

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


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


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

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

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

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

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

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

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

stash@{0}: On featureFooBar: foo bar
stash@{1}: On Master: Custom Cocoapod changes, apply after every pod update
...

если пользовательские какао стручки изменения Сташ находится в Сташ@{0} то идеально, вы можете просто запустить git stash apply еще раз, и вы получите эти изменения в своем рабочем каталоге. В противном случае, как только вы найдете номер тайника, который изменяется в ваших стручках, вы можете применить этот тайник бег!--7-->

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

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