КакаоПоди та вилки GitHub


108

Це мій перший проект для створення проекту GitHub, і я не надто компетентний з CocoaPods, тому, будь ласка, поводьтеся зі мною.

В основному, я розіслав проект на GitHub, використовуючи наступне у своєму Podfile:

pod 'REActivityViewController', '~> 1.6.7', :git => 'https://github.com/<username>/REActivityViewController.git'

Потім я внесла деякі зміни у вилку, і, звичайно, коли зробила pod installдля установки іншого стручка, вона перевстановила оригінал REActivityViewControllerта стерла зміни.

Я усвідомлюю, що мені потрібно натиснути зміни на вилку перед іншим pod install, але як я можу знати, що це вилка встановлюється, враховуючи, що це репо, встановлене CocoaPods? Я подивився в REActivityViewControllerпапку, встановлену під Podsпапкою, і немає файлів git.

Чи потрібно мені працювати на вилці поза моїм проектом, а потім використовувати CocoaPods для встановлення змін? Це занадто громіздкий робочий процес.

Або мені потрібно щось робити з підмодулями?

Відповіді:


185

Я відповім на це запитання на прикладі. У мене є вилка TTTAttributedLabel з деякою додатковою функціональністю, яку я додав тут:

https://github.com/getaaron/TTTAttributedLabel

Для того, щоб використовувати це у проекті Cocoapods, я:

  1. Змініть мої вилки на зміни
  2. Налаштуйте мій Podfile, щоб отримати зміни та оновлення

Після того, як ви натиснули зміни на вилку, отримайте SHA останнього зобов’язання. Це можна зробити за допомогою git rev-parse origin/master | pbcopyабо на сторінці GitHub зобов’язань для вашого проекту: Знімок екрана копіювання SHA комітету на GitHub

Потім ви можете вказати конкретну комісію для вашого вилки у своєму Podfile так:

pod 'TTTAttributedLabel', :git => 'https://github.com/getaaron/TTTAttributedLabel.git', :commit => 'd358791c7f593d6ea7d6f8c2cac2cf8fae582bc1'

Після цього pod updateоновіть цю конкретну комісію з вашої вилки. Якщо ви хочете, ви також можете зробити podspecсвою вилку, але я вважаю такий підхід більш простим, і я не вношу зміни досить часто, щоб виправдати новий робочий процес.

Чи потрібно мені працювати на вилці поза проектом, а потім використовувати Cocoapods для встановлення змін? Це спосіб, який є громіздким робочим процесом.

Ви можете це зробити так, але я зазвичай:

  1. Відредагуйте код у моєму проекті та переконайтесь, що він працює
  2. Скопіюйте зміни на мій вил, автор
    • експортування патча, або
    • копіювання над усім файлом вихідного коду
  3. Введіть і натисніть на GitHub
  4. Оновіть Podfile новою SHA
  5. Біжи pod update.

Або мені потрібно щось робити з підмодулями?

Ні, не потрібно.


Наступне запитання: Тож оновлення Podfile новим SHA дійсно необхідне? pod installне буде автоматично клонувати найновішу версію за допомогою останньої версії?
Рамзель

Якщо ви перейменовуєте свій проект на щось інше і робите власний файл podspec, ви можете вказати його на власне репо і використовувати pod 'MyForkName', :headзамість цього.
Аарон Брагер

1
:head:вказує на новітній фіксації, але ви не можете використовувати :gitі :headв одній і тій же лінії.
Аарон Брагер

4
Це ідеальне виправлення використання користувацької вилки громадського проекту. У моєму випадку я роздвоював та модифікував проект і мав відкритий PR для підтримуючого об'єднати ці зміни, але хотів оновити Podfile свого проекту, щоб негайно використовувати ці зміни. Це спрацювало чудово!
cbowns

2
@AaronBrager показує "Неможливо знайти специфікацію для" <pod name> "" Ви знаєте, як її вирішити?
Сусім Саманта

34

Інший варіант - ваш проект посилається на стручок безпосередньо, а не через github. Таким чином, вам не потрібно продовжувати робити вилки або копіювати / вставляти код лише для перевірки змін. Ви можете одночасно працювати з двома різними проектами Xcode і вводити окремо свої відповідні проекти.

pod 'AFNetworking', :path => '~/Documents/AFNetworking'

Документація щодо CocoaPods: http://guides.cocoapods.org/using/the-podfile.html#using-the-files-from-a-folder-local-to-the-machine

введіть тут опис зображення


1
Як це вирішує проблему? Pod буде витягувати ці джерела та розміщувати їх як проект Pods у проекті-джерелі. Будь-які зміни цих файлів (тепер включені через Pods) не відслідковуються Git '~ / Documents / AFNetworking', чи не так?
Радж Паван Гумдал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.