iphone: Хорошая практика для обновления моих сторонних библиотек? - PullRequest
7 голосов
/ 16 июля 2010

Я хочу спросить о вашей практике, чтобы легко обновлять сторонние библиотеки.

В своем проекте iPhone я использую довольно много сторонних библиотек (таких как TouchXML, JSON, RegexKit, YAJL, MGTwitterEngine ...). Большинство из них хранятся в GitHub, и их версия, особенно MGTwitterEngine, меняется довольно быстро (из-за добавления новой функции, исправления ошибки, изменения формата ответа сервера (например, Twitter) ...).

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

Когда я получил ошибку, потому что старые библиотеки. Я часто хожу на Github, скачиваю новую версию, потом нужно много кода поменять. Поскольку загрузка новой версии означает, что я делаю перемотку с очень старой версии до последней версии. Я думаю, что будет менее болезненно, если я буду обновлять библиотеку чаще.

Как вы подходите к этой задаче?

Ответы [ 2 ]

5 голосов
/ 23 апреля 2012

Сейчас 2012 год, и с тех пор, как этот вопрос был задан, появилось два проекта, цель которых - упростить управление зависимостями проектов в коде iOS: CocoaPods и VendorKit .Оба вдохновлены менеджером зависимостей Ruby Bundler .CocoaPods, вероятно, является наиболее зрелым и активным проектом, но оба набирают обороты.

Подмодули Git помогают много в организации вашего проекта и зависимостей, но все еще может быть трудно получитьправильные пути поиска и флаги компоновщика, не говоря уже о том, чтобы выяснить, что не так, если зависимости нарушаются.Также трудно иметь дело с ситуацией, когда A и B зависят от C, где A - ваш собственный проект, а B и C - зависимости.Поэтому на данный момент мой совет - использовать один из этих проектов и поддержать их, написав спецификации для различных библиотек.

Существует также менее известный Kit , реализованныйв Хаскеле.Стоит проверить.

4 голосов
/ 16 июля 2010

Вы смотрели на подмодули git ?

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

Попробуйте выполнить следующую команду из корневого каталога вашего репозитория:

git submodule add ssh://url/to/external/library.git local/path

Для этого необходимо выполнить следующие шаги (дословно взято из приведенного выше URL):

  • Клонирует подмодуль в текущем каталоге и по умолчанию извлекает основную ветвь.
  • Добавляет путь клона подмодуля в файл .gitmodules и добавляет этот файл в индексе готов к фиксации.
  • Добавляет текущий идентификатор фиксации подмодуля в индекс, готовый к фиксации.

Затем вы можете использовать

git submodule update

команда для обновления информации.

Кроме того, в качестве примечания, если вы делаете то, что я (например, вносите прямые изменения в репозиторий подмодуля), вам нужно перейти в корневой каталог репозитория подмодуля и зафиксировать эти изменения ПЕРВЫМ до принятия суперпроекта. Это связано с тем, что git отслеживает версии подмодулей (smart), поэтому, если вы сначала зафиксируете суперпроект, вы будете хранить ссылку на изменения, которые не были зафиксированы в хранилище подмодулей. Любой, кто попытается клонировать ваш суперпроект, получит ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...