CocoaPods文件引用是多个组的成员

Hea*_*ers 20 ios-frameworks 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
Run Code Online (Sandbox Code Playgroud)

2015-10-28 10:46:04.015 ruby​​ [53095:3440989]警告:"CocoaLumberjack.framework"的文件引用是多个组的成员("Products"和"Products"); 这表明项目格式错误.只保留其中一个组的成员资格(但目标成员资格不受影响).如果要在多个组中引用同一文件,请在同一路径中添加另一个引用.

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:
Run Code Online (Sandbox Code Playgroud)

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,赛:PBXFileReference,名称:CocoaLumberjack.framework,道:CocoaLumberjack.framework,sourceTree:BUILT_PRODUCTS_DIR ,,显示名:Pods_MyProject.framework,explicitFileType:wrapper.framework,includeInIndex:0,赛:PBXFileReference,名称:Pods_MyProject.framework,道:Pods_MyProject.framework,sourceTree:BUILT_PRODUCTS_DIR ,,显示名:Pods_MyShare.framework,explicitFileType:wrapper.framework,includeInIndex:0,赛:PBXFileReference,名称:Pods_MyShare.framework,道:Pods_MyShare .framework,sourceTree:BUILT_PRODUCTS_DIR ,,显示名:产品,赛:PBXGroup,名称:产品,sourceTree:,/产品/儿童/显示名:CocoaLumberjack.framework,explicitFileType:wrapper.frame 工作,includeInIndex:0,赛:PBXFileReference,名称:CocoaLumberjack.framework,道:CocoaLumberjack.framework,sourceTree:BUILT_PRODUCTS_DIR,/产品/ 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
Run Code Online (Sandbox Code Playgroud)

通过使我的两个目标使用相同的子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
Run Code Online (Sandbox Code Playgroud)

为什么这种解决方法是必要的?当我在两个目标之间实际上有不同的subspec依赖关系时会发生什么?

编辑

这看起来与CocoaPods Issue 4370有关.我在github上发布了我的示例项目.

ale*_*0xB 20

这是Cocoapods中的一个错误 - 可能它不会在很长一段时间内修复 -

export COCOAPODS_DISABLE_DETERMINISTIC_UUIDS=YES在终端上运行似乎压制了现在的警告.

编辑2016年2月:

在最新版本的Cocoapods中,现在已将其移至Podfile的安装部分: install! 'cocoapods', :deterministic_uuids => false


Daw*_*ong 7

这是由于不同目录中的重复文件引起的。有时,当您通过拖动Xcode 的项目导航器(按打开)将文件移动到另一个目录时,Xcode 可能会出错并重复文件。这些重复的文件是孤立的,并且没有添加到 Xcode 项目中,因此一切正常。但是,接受了Development Pod中的所有文件,包括这些孤儿文件。Command + 1pod install

为了找到这些重复的文件,我有两种解决方案,如下:

解决方案1

find . -path ./.git -prune -o -type f -exec basename {} + | sort | uniq -d
Run Code Online (Sandbox Code Playgroud)

where表示查找时-path ./.git -prune -o排除目录.git

解决方案2

  1. 将错误消息复制到名为的文本文件中duplicateUUIDs.txt
  2. 获取排序后的文件名并输出重复项
grep -E '[a-zA-Z+]+\.(h|m|swift)' -o duplicateUUIDs.txt | sort | uniq -d
Run Code Online (Sandbox Code Playgroud)

下一步

删除不需要的文件。


Ash*_*iya 5

通过以下步骤为我解决了问题:(我还按照 @ale0xB 建议进行了更改)

\n\n
    \n
  1. 清理项目
  2. \n
  3. 关闭 Xcode
  4. \n
  5. 删除派生数据
  6. \n
  7. 如果您已经安装了 POD,请删除 \xe2\x80\x9c.xcworkspace\xe2\x80\x9d 和 \xe2\x80\x9cPodfile.lock\xe2\x80\x9d 文件
  8. \n
  9. 再次安装 Pod
  10. \n
  11. 打开 \xe2\x80\x9c.xcworkspace\xe2\x80\x9d 并运行
  12. \n
\n