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.
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
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
duplicateUUIDs.txt
grep -E '[a-zA-Z+]+\.(h|m|swift)' -o duplicateUUIDs.txt | sort | uniq -d
Next Step
Delete unnecessary files.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With