Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CocoaPods file reference is a member of multiple groups

I have an app with a share extension. My app depends on CocoaLumberjack/Default, and my share extension depends on CocoaLumberjack/Core. When I build with use_frameworks!, I get the following error:

$ 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] warning: The file reference for "CocoaLumberjack.framework" is a member of multiple groups ("Products" and "Products"); this indicates a malformed project. Only the membership in one of the groups will be preserved (but membership in targets will be unaffected). If you want a reference to the same file in more than one group, please add another reference to the same path.

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.framework,path:CocoaLumberjack.framework,sourceTree:BUILT_PRODUCTS_DIR,,displayName:CocoaLumberjack.framework,explicitFileType:wrapper.framework,includeInIndex:0,isa:PBXFileReference,name:CocoaLumberjack.framework,path:CocoaLumberjack.framework,sourceTree:BUILT_PRODUCTS_DIR,,displayName:Pods_MyProject.framework,explicitFileType:wrapper.framework,includeInIndex:0,isa:PBXFileReference,name:Pods_MyProject.framework,path:Pods_MyProject.framework,sourceTree:BUILT_PRODUCTS_DIR,,displayName:Pods_MyShare.framework,explicitFileType:wrapper.framework,includeInIndex:0,isa:PBXFileReference,name:Pods_MyShare.framework,path:Pods_MyShare.framework,sourceTree:BUILT_PRODUCTS_DIR,,displayName:Products,isa:PBXGroup,name:Products,sourceTree:,/Products/children/displayName:CocoaLumberjack.framework,explicitFileType:wrapper.framework,includeInIndex:0,isa:PBXFileReference,name:CocoaLumberjack.framework,path:CocoaLumberjack.framework,sourceTree:BUILT_PRODUCTS_DIR,/Products/CocoaLumberjack.framework

This is my 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 

I was able to work around this problem by making both of my targets use the same CocoaLumberjack subspec. My working Podfile is below:

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 

Why is this workaround necessary? What happens when I actually have different subspec dependencies between two targets?

EDIT

This looks related to CocoaPods Issue 4370. I posted my example project on github.

like image 628
Heath Borders Avatar asked Oct 28 '15 15:10

Heath Borders


2 Answers

This is a bug in Cocoapods -And probably it won't be fixed in a long while-

Running export COCOAPODS_DISABLE_DETERMINISTIC_UUIDS=YES on the Terminal seems to suppress the warnings for now.

EDIT Feb 2016:

In latest version of Cocoapods this has now been moved to the install section of the Podfile: install! 'cocoapods', :deterministic_uuids => false

like image 198
Alejandro Benito-Santos Avatar answered Nov 12 '22 16:11

Alejandro Benito-Santos


It's caused by duplicate files in different directories. Sometimes Xcode might make mistake and duplicate files when you move files to another directory by dragging in Xcode's Project Navigator (press Command + 1 to open). These duplicated files were left orphans and had not been added to the Xcode project, so everything works OK. However, pod install accepted all files in Development Pods including these orphans.

To find these duplicate files, I have two solutions as follows,

Solution 1

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

where -path ./.git -prune -o means to exclude .git directory when finding

Solution 2

  1. Copy error messages to a text file named such as duplicateUUIDs.txt
  2. Get sorted file names and output duplicated items
grep -E '[a-zA-Z+]+\.(h|m|swift)' -o duplicateUUIDs.txt | sort | uniq -d 

Next Step

Delete unnecessary files.

like image 38
DawnSong Avatar answered Nov 12 '22 18:11

DawnSong