CocoaPods 文件引用是多个组的成员
Posted
技术标签:
【中文标题】CocoaPods 文件引用是多个组的成员【英文标题】:CocoaPods file reference is a member of multiple groups 【发布时间】:2015-10-28 15:51:56 【问题描述】:我有一个带有共享扩展的应用。我的应用程序依赖于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.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
这是我的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
为什么需要这种解决方法?当我在两个目标之间实际上有不同的子规范依赖时会发生什么?
编辑
这看起来与CocoaPods Issue 4370 有关。我在github 上发布了我的示例项目。
【问题讨论】:
同样的问题,点赞!顺便说一句,尽管出现错误,您是否尝试过归档产品?它是否会给您与伞形标题相关的错误? Cocoapods + use_frameworks! + xcode 7.1 完全搞砸了我的环境 :( @ale0xB 使用 Xcode 7.1 可以解决您的问题吗? Xcode 7.1 没有帮助。 【参考方案1】:这是 Cocoapods 中的一个错误 - 很可能在很长一段时间内都不会修复 -
在终端上运行 export COCOAPODS_DISABLE_DETERMINISTIC_UUIDS=YES
似乎暂时抑制了警告。
2016 年 2 月编辑:
在最新版本的 Cocoapods 中,它现在已移至 Podfile 的安装部分:install! 'cocoapods', :deterministic_uuids => false
【讨论】:
他们声称这是在1.0.0.beta.4
github.com/CocoaPods/CocoaPods/issues/… 中修复的
不,这不是cocoapods
的错误。它可能是由 Xcode 引起的。我添加了my answer
这可能是Xcode在将文件从一个文件夹移动到另一个文件夹时犯的错误,参考my answer【参考方案2】:
这是不同目录中的重复文件引起的。
当您在 Xcode 的项目导航器中拖动(按Command + 1
打开)将文件移动到另一个目录时,有时Xcode 可能会出错并重复文件。这些重复的文件是孤立的,没有被添加到 Xcode 项目中,所以一切正常。但是,pod install
接受了 Development Pods 中的所有文件,包括这些孤立文件。
为了找到这些重复的文件,我有如下两种解决方案,
解决方案 1
find . -path ./.git -prune -o -type f -exec basename + | sort | uniq -d
其中-path ./.git -prune -o
表示查找时排除.git
目录
解决方案 2
-
将错误消息复制到名为
duplicateUUIDs.txt
的文本文件中
获取排序后的文件名并输出重复项
grep -E '[a-zA-Z+]+\.(h|m|swift)' -o duplicateUUIDs.txt | sort | uniq -d
下一步
删除不必要的文件。
【讨论】:
不确定,如果我跟随。它给了我这个列表:at.h awaitable.h context.h endpoint.h error.h executor.h protocol.h reactor.h service.h spawn.h stream.h
。我从哪里删除它们?
@Houman 重复的文件必须位于不同的文件夹中。为了找到你的项目使用的文件夹,打开Xcode项目导航器,在at.h
这样的文件上右击(shift+click),然后选择Show In Finder
,你就会知道正确的文件夹了。【参考方案3】:
通过以下步骤为我解决了问题:(我也按照@ale0xB 的建议进行了更改)
-
清理项目
关闭 Xcode
删除派生数据
如果您已经安装了 POD,请删除“.xcworkspace”和“Podfile.lock”文件
再次安装 pod
打开“.xcworkspace”并运行
【讨论】:
【参考方案4】:我在添加应用程序扩展时遇到了这个错误。
我通过将应用程序目标中的platform :ios, '7.0'
行也重复到我的新目标来修复它。
确保两个目标使用相同的平台为我解决了这个问题。
【讨论】:
【参考方案5】:在 podfile 中写入这一行 ==> 安装! 'cocoapods', :deterministic_uuids => false
例如: 平台:ios,'10.0' 安装! 'cocoapods', :deterministic_uuids => false
目标 'WheeboxExamSheetScanner' 做 config = use_native_modules!
【讨论】:
以上是关于CocoaPods 文件引用是多个组的成员的主要内容,如果未能解决你的问题,请参考以下文章