Ссылка на файл CocoaPods является членом нескольких групп

У меня есть приложение с расширением общего доступа. Мое приложение зависит от CocoaLumberjack/Default, а расширение общего ресурса зависит от CocoaLumberjack/Core. Когда я строю с use_frameworks!, я получаю следующую ошибку:

$ rm -rf Pods Podfile.lock; pod install
Updating local specs repositories
Analyzing dependencies
Downloading dependencies
Installing CocoaLumberjack (2.0.3)
Generating Pods project

2015-10-28 10: 46: 04.015 ruby ​​[53095: 3440989] предупреждение: ссылка на файл для «CocoaLumberjack.framework» является членом нескольких групп («Продукты» и «Продукты»); это указывает на искаженный проект. Будет сохранено только членство в одной из групп (но это не повлияет на членство в целевых объектах). Если вам нужна ссылка на один и тот же файл в нескольких группах, добавьте еще одну ссылку на тот же путь.

Integrating client project
Sending stats
Sending stats
Pod installation complete! There are 2 dependencies from the Podfile and 1 total
pod installed.

[!] [Xcodeproj] Generated duplicate UUIDs:

PBXFileReference - /mainGroup/children/children:displayName:CocoaLumberjack.framework,explicitFileType:wrapper.framework,includeInIndex:0,isa:PBXFileReference,name:CocoaLumberjack.frameworks::CocoaTreeCocoaLumberjack. .framework, explicitFileType: wrapper.framework, includeInIndex: 0, isa: PBXFileReference, имя: CocoaLumberjack.framework, путь: CocoaLumberjack.framework, sourceTree: BUILT_PRODUCTS_DIR`` displayName: Pods_MyProject.framework: includeFramework: includeFramework isa: PBXFileReference, имя: Pods_MyProject.framework, путь: Pods_MyProject.framework, sourceTree: BUILT_PRODUCTS_DIR ,, displayName: Pods_MyShare.framework, explicitFileType: wrapper.framework_, includeInIndexworkS: 0, pathShare_Share_Share_Share: .framework, sourceTree: BUILT_PRODUCTS_DIR ,, displayName: Products, isa: PBXGroup, name: Products, sourceTree:, / Products / children / displayName: CocoaLumberjack.framework, explicitFileType: wrapper.fra mework, includeIndex: 0, isa: PBXFileReference, имя: CocoaLumberjack.framework, путь: CocoaLumberjack.framework, sourceTree: BUILT_PRODUCTS_DIR, / Products / CocoaLumberjack.framework

Это мой Podfile:

workspace 'MyWorkspace'
xcodeproj 'MyProject/MyProject.xcodeproj'

use_frameworks!

source 'https://github.com/CocoaPods/Specs.git'

link_with 'MyProject', 'MyShare'

target :MyProject do
  pod 'CocoaLumberjack', '~> 2.0.1'
end

target :MyShare do
  pod 'CocoaLumberjack/Core', '~> 2.0.1'
end

Я смог обойти эту проблему, заставив обе мои цели использовать один и тот же подспек CocoaLumberjack. Мой рабочий Podfile ниже:

workspace 'MyWorkspace'
xcodeproj 'MyProject/MyProject.xcodeproj'

use_frameworks!

source 'https://github.com/CocoaPods/Specs.git'

link_with 'MyProject', 'MyShare'

target :MyProject do
  pod 'CocoaLumberjack/Core', '~> 2.0.1'
end

target :MyShare do
  pod 'CocoaLumberjack/Core', '~> 2.0.1'
end

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

ИЗМЕНИТЬ

Похоже, это связано с проблемой 4370 CocoaPods. Я разместил свой пример проекта на github.


person Heath Borders    schedule 28.10.2015    source источник
comment
Та же проблема здесь, проголосовали за! Кстати, вы пробовали заархивировать продукт, несмотря на ошибки? Это дает вам ошибки, связанные с заголовками зонтиков? Cocoapods + use_frameworks! + xcode 7.1 полностью испортил мой env :(   -  person Alejandro Benito-Santos    schedule 30.10.2015
comment
@ ale0xB Любое решение вашей проблемы с использованием Xcode 7.1?   -  person Victor Sigler    schedule 05.11.2015
comment
Xcode 7.1 не помог.   -  person Heath Borders    schedule 06.11.2015


Ответы (5)


Это ошибка в Cocoapods - и, вероятно, она не будет исправлена ​​в ближайшее время -

Запуск export COCOAPODS_DISABLE_DETERMINISTIC_UUIDS=YES на Терминале, похоже, на данный момент подавляет предупреждения.

ИЗМЕНИТЬ февраль 2016 г .:

В последней версии Cocoapods это теперь перемещено в раздел установки Podfile: install! 'cocoapods', :deterministic_uuids => false

person Alejandro Benito-Santos    schedule 30.10.2015
comment
Они утверждают, что это было исправлено в 1.0.0.beta.4 github.com/CocoaPods/CocoaPods/issues/ < / а> - person Heath Borders; 28.03.2016
comment
Вероятно, это ошибка Xcode при перемещении файлов из одной папки в другую, см. мой ответ - person DawnSong; 17.07.2020

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

Чтобы найти эти повторяющиеся файлы, у меня есть два следующих решения:

Решение 1

find . -path ./.git -prune -o -type f -exec basename {} + | sort | uniq -d

где -path ./.git -prune -o означает исключить .git каталог при нахождении

Решение 2

  1. Скопируйте сообщения об ошибках в текстовый файл с именем, например duplicateUUIDs.txt
  2. Получение отсортированных имен файлов и вывод повторяющихся элементов
grep -E '[a-zA-Z+]+\.(h|m|swift)' -o duplicateUUIDs.txt | sort | uniq -d

Следующий шаг

Удалите ненужные файлы.

person DawnSong    schedule 23.03.2020
comment
Не уверен, если я последую. Это дает мне этот список: at.h awaitable.h context.h endpoint.h error.h executor.h protocol.h reactor.h service.h spawn.h stream.h. Откуда мне их удалить? - person Houman; 16.05.2021

Проблема устранена для меня, выполнив следующие действия: (Я также внес изменения в соответствии с предложением @ ale0xB)

  1. Очистить проект
  2. Закройте Xcode
  3. Удалить производные данные
  4. Если вы уже установили POD, удалите файлы «.xcworkspace» и «Podfile.lock».
  5. Установите модуль еще раз
  6. Откройте «.xcworkspace» и запустите
person Ashvin A    schedule 16.08.2019
comment
Не сработало .... - person Houman; 16.05.2021

Я столкнулся с этой ошибкой при добавлении расширения приложения.

Я исправил это, повторив строку platform :ios, '7.0', присутствующую в моей цели приложения, для моей новой цели.

Убедившись, что две цели используют одну и ту же платформу, я решил проблему.

person ofavre    schedule 22.02.2017

напишите эту строку в podfile == ›install! 'cocoapods', :terministic_uuids = ›ложь

например: платформа: ios, '10 .0 'установить! 'cocoapods', :terministic_uuids = ›ложь

target 'WheeboxExamSheetScanner' do config = use_native_modules!

person Yasir Munir    schedule 21.06.2021