Будет ли `pod update` перезаписывать изменения моего кода, когда доступна новая версия модуля?

Я добавил MKStoreKit версии 4.99 в свой проект, используя cocoapods. Мой подфайл состоит из:

platform :ios, '6.0'
pod 'MKStoreKit', '~> 4.99'

MKStoreKit имеет файл конфигурации MKStoreKitConfigs.h, который необходимо изменить для каждого проекта, и я соответствующим образом изменил файл. Что произойдет, когда MKStoreKit выпустит новую версию, скажем 5.0, и я выполняю pod update? Могут ли быть изменены мои изменения? Не могли бы вы объяснить, почему да или почему нет?

Ответ 1

Да, обновление pod перезапишет ваши изменения. То, что вы могли бы сделать, - это разветкить проект на Github, внести изменения в свою вилку и указать Cocoapods на развилку. См. Использование вилки Restkit на github через cocoaPod? о том, как это сделать.

Ответ 2

Как я понимаю, это известная проблема, а также одно: "Это довольно плохая практика для настройки стороннего lib в файле заголовка".

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

Также вы можете добавить свою вилку в качестве Pod, используя:

pod 'MKStoreKit.MyFork', :path => 'MKStoreKit.MyFork.podspec'

EDIT: Благодаря rounak для уведомления, :local теперь :path. Из cocoapods docs:

С помощью этой опции (:path) CocoaPods будет считать данную папку root из Pod и свяжет файлы прямо оттуда в Проект Pods. Это означает, что ваши изменения будут сохраняться между Установки CocoaPods. Указанная папка может быть проверкой ваш любимый SCM или даже подмодуль git текущего репо.

Ответ 3

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

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

Как только единственные изменения, которые у меня есть на моей ветке, - это изменения в Pods, я запустил изменения pod, запустив 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 и как использовать его в противном случае.