Как опубликовать новую официальную версию пода?

Не удалось обновить версию модуля.

Я использую Xcode 8.2.1 и CocoaPods v1.1.1, а мой код - Swift 3

Моя проблема связана с публикацией новой версии моего модуля или обновлением существующей версии, которая не выполняется по спецификации модуля.

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

Что я сделал?

Я создал новый тег и попытался протолкнуть его, но не прошел проверку:

git tag 0.1.1 (successful)
git push origin 0.1.1 (successful)
pod spec lint PlaybuzzSDK.podspec (unsuccessful with error below)
pod trunk push PlaybuzzSDK.podspec  (unsuccessful with error below) 

-> PlaybuzzSDK (0.1.1) - ОШИБКА | [iOS] unknown: обнаружена неизвестная ошибка ([!] / usr / bin / git clone https://github.com/LudaFuxPlaybuzz/playbuzz-ios-sdk.git / var / folder / h0 / knhpn8z16n3cz6tkny5rmtn00000gn / T / d20161228-47834-nli8c4 --template = --single-branch --depth 1 - -ветвь v0.1.1

Клонирование в '/ var / folder / h0 / knhpn8z16n3cz6tkny5rmtn00000gn / T / d20161228-47834-nli8c4' ... предупреждение: не удалось найти удаленную ветку v0.1.0 для клонирования. фатальный: удаленная ветвь v0.1.0 не найдена в исходном источнике) во время проверки.

[!] Спецификация не прошла валидацию из-за 1 ошибки. [!] Валидатор для проектов Swift по умолчанию использует Swift 3.0, если вы используете другую версию swift, вы можете использовать файл .swift-version, чтобы установить версию для вашего Pod. Например, чтобы использовать Swift 2.3, запустите: echo "2.3"> .swift-version.

Дополнительные вещи, которые я пробовал:

  • Я удалил проект из своего компа и снова клонировал его
  • Я почистил кеш CocoaPods rm -rf ~/Library/Caches/Cocoapods rm -rf ~/.cocoapods/repos
  • Я попытался создать новую ветку и попытался подкрепить ветку.

Но я получаю эту ошибку каждый раз.

Что я ожидал произойти

Я ожидал, что с этого момента, если кто-нибудь добавит

pod 'PlaybuzzSDK' 

и обновят свои стручки, они получат новую версию

Новая версия означает, что reloadItem будет иметь следующую сигнатуру:

public func reloadItem(_ itemAlias:String,
                         companyDomain: String,
                         showItemInfo:Bool)

Что случилось вместо

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

public func reloadItem(_ userID: String,
                    itemAlias:String,
                    showRecommendations: Bool,
                    showShareButton: Bool,
                    showFacebookComments: Bool,
                    showItemInfo: Bool,
                    companyDomain: String)

Проект, демонстрирующий проблему

https://github.com/LudaFuxPlaybuzz/playbuzz-ios-sdk


person Luda    schedule 28.12.2016    source источник
comment
Вы должны обновить свою версию и указать источник, чтобы исправить git с правильным тегом, возможно, версией и тегом 0.1.3? Кроме того, сначала сделайте pod spec lint, прежде чем пытаться его нажать.   -  person Tj3n    schedule 28.12.2016
comment
Хочу, чтобы обновление было на мастере. Не новые ветки и теги ..   -  person Luda    schedule 28.12.2016
comment
Модуль будет использовать тег для обновления своего кода, а не ветку, он отображается в вашем пакете podspec, вы указываете его на git с тегом 0.1.0   -  person Tj3n    schedule 28.12.2016
comment
Так что же мне делать?   -  person Luda    schedule 28.12.2016
comment
просто следуйте инструкциям по обновлению и сделайте то, что я сказал, укажите вещь в podspec на правильный тег, управление модулем по тегу, только при установке вы можете использовать ветку   -  person Tj3n    schedule 29.12.2016
comment
@ Tj3n У вас есть ссылка на руководство по обновлению?   -  person Luda    schedule 29.12.2016
comment
Это очень просто, просто измените свой podspec новой версией, источник указывает на правильный тег (еще не созданный), затем отправьте свой проект в свой git и создайте тег с этой версией, затем выполните pod trunk push   -  person Tj3n    schedule 29.12.2016
comment
@ Tj3n, я так и сделал: git tag 0.1.4, git push origin 0.1.4. Пока все хорошо. Но эта строка: pod trunk push PlaybuzzSDK.podspec, дает мне следующую ошибку: PlaybuzzSDK (0.1.4) - ERROR | [iOS] unknown: обнаружена неизвестная ошибка ([!] / usr / bin / git clone github.com/LudaFuxPlaybuzz/playbuzz-ios-sdk.git / var / folder / h0 / .. --template = --single-branch --depth 1 --branch v0.1.4 Клонирование в '/ var / папки / ... предупреждение: не удалось найти удаленную ветвь v0.1.4 для клонирования. fatal: удаленная ветка v0.1.4 не найдена в исходном источнике) во время проверки.   -  person Luda    schedule 29.12.2016
comment
ваша версия и тег в git - 0.1.1, он должен быть похож ... Вы должны сначала отправить все на мастер, прежде чем создавать тег   -  person Tj3n    schedule 29.12.2016
comment
@ Tj3n Где вы видите 0.1.1? Если я запускаю: pod trunk info PlaybuzzSDK, я получаю: PlaybuzzSDK - Версии: - 0.1.0 (2016-12-07 14:59:36 UTC) - Владельцы: - Luda Fux ‹[email protected]  -  person Luda    schedule 29.12.2016
comment
@ Tj3n И podspec указывает 0.1.4   -  person Luda    schedule 29.12.2016
comment
Podspec в вашем теге 0.1.4 показывает вашу версию, а тег - 0.1.1, ваша основная ветка правильная, но файл в вашем теге - нет, перейдите в тег 0.1.4 в своем git и убедитесь сами   -  person Tj3n    schedule 29.12.2016
comment
@ Tj3n Теперь понятно. Я не понимаю, почему это происходит. У моего локального подфайла версия 0.1.4. Я зафиксировал и синхронизировал все изменения в GtHub. Xcode кажется синхронизированным. Так почему же на git нет обновлений кода? Между прочим - ты супер пупер классный !!!!   -  person Luda    schedule 29.12.2016
comment
убедитесь, что вы зафиксировали / отправили все сначала, прежде чем создавать тег и нажимать его, вы можете пропустить какой-то шаг, вы также можете удалить тег и воссоздать его   -  person Tj3n    schedule 29.12.2016
comment
@ Tj3n Я фиксирую и проталкиваю свой код через клиент GitHub Mac и через Xcode (на всякий случай). Может мне стоит зафиксировать и протолкнуть через терминал?   -  person Luda    schedule 29.12.2016
comment
@ Tj3n Кстати, я удалил всю версию из git. Но похоже, что я не могу создавать новые теги с тем же именем. Например: git tag 0.1.1 fatal: тег 0.1.1 уже существует   -  person Luda    schedule 29.12.2016
comment
Вам также необходимо удалить его из вашей системы, я думаю, ваша система также записывает ваши теги, я делаю все через терминал, чтобы убедиться, что я сделал все шаги, иногда могу запутаться   -  person Tj3n    schedule 30.12.2016
comment
@ Tj3n, у нас есть прогресс. Я удалил проект из своего комп. И теперь можно снова создать тег 0.1.1. Более того, теперь тег github.com/LudaFuxPlaybuzz/playbuzz-ios-sdk/tags содержать обновленный код. Что потрясающе. Но проект по-прежнему не проходит валидацию с той же ошибкой, которая упоминалась в вопросе. И как мне загрузить правильный тег в отдельном проекте? Когда я пишу pod Playbuzz, он загружает первый тег (0.1.0) со старым кодом.   -  person Luda    schedule 01.01.2017
comment
@ Tj3n, проблема решилась! Если посмотреть на podspec, s.source установлен на тег v0.1.0, но вставленный тег - 0.1.0. Попробуйте изменить podspec и обновить тег, чтобы он ссылался на новую фиксацию. Но я хотел бы отблагодарить вас за вашу помощь. Пожалуйста, поставьте это как ответ, и я проверю его и дам вам награду   -  person Luda    schedule 02.01.2017
comment
Хорошо, поместил резюме в качестве ответа: D рад помочь вам   -  person Tj3n    schedule 03.01.2017


Ответы (2)


Резюме для обновления модуля:

  1. Заранее обновите версию и тег в podspec
  2. Зафиксируйте, отправьте код в git
  3. Создайте новый тег с текущим кодом, убедитесь, что это тот же тег, что и в podspec

    git tag 0.1.1

    git push origin 0.1.1

  4. Позвоните pod spec lint, чтобы проверить и pod trunk push, чтобы обновить его в главном списке репо

    pod lib lint YourSDK.podspec

    pod trunk push YourSDK.podspec

Похоже, что ваш подфайл использует тег v0.1.1, однако тег в вашем репозитории - 0.1.1 без v. Это также приведет к сбою линтинга.

person Tj3n    schedule 03.01.2017
comment
pod push trunk должно быть pod trunk push. - person swordray; 12.02.2018
comment
Я использую репозиторий pod с частным исходным кодом, поэтому все может быть по-другому. Но я использовал pod repo push myprivatesourcepodrepo YourSDK.podspec вместо pod trunk push YourSDK.podspec. - person Jonny; 15.06.2018
comment
Также кажется, что вы советуете использовать pod spec lint, но тогда в примере используется pod lib lint. Это предназначено? Похоже, что у этих двух вариантов использования разные. - person Jonny; 15.06.2018
comment
pod lib lint может помочь вам выяснить проблему в локальном файле спецификации перед отправкой, убедившись, что он работает, затем вы можете нажать и использовать pod spec lint, чтобы проверить, может ли ваш модуль клонировать и работать с git, pod trunk push также выполняет spec lint, поэтому здесь это не требуется , ваш выбор - person Tj3n; 15.06.2018
comment
Спасибо за разъяснения, но уверены ли вы, что не наоборот? pod spec lint похоже, что проверяет podspec, а pod lib lint проверяет библиотеку ... - person Jonny; 15.06.2018
comment
Вы можете проверить различные здесь - person Tj3n; 15.06.2018

Вам необходимо добавить файл с именем .swift-version на верхний уровень вашего репозитория, чтобы ваши пользовательские проекты были правильно настроены при установке модуля.

На верхнем уровне вашего проекта выполните эту команду:

echo "3.0" > .swift-version

Затем зафиксируйте это и обновите свой тег до этого коммита.

Также похоже, что ваш подфайл использует тег v0.1.1, однако тег в вашем репозитории - 0.1.1 без v. Это также может привести к сбою линтинга.

person Dave Lyon    schedule 03.01.2017
comment
Дэйв, используя pod 1.4, нам больше не нужно создавать файл .swift-version. В этой версии мы можем объявить что-то вроде: s.swift_version = 3.0 - person Igor De Oliveira Sá; 02.03.2018