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 文件引用是多个组的成员的主要内容,如果未能解决你的问题,请参考以下文章

数据库基础知识

cocos creator图集资源Atlas的创建与引用

PowerShell脚本来计算多个组的成员而不重复

关于Cocos2dx v4.0 和 Cocoapods配合使用

为啥即使它是组的成员,apache也不能写入文件夹?

关于Cocos2d-x头文件的引用