Ios CocoaPods将重复项目添加到xcworkspace

Ios CocoaPods将重复项目添加到xcworkspace,ios,cocoapods,xcode6,Ios,Cocoapods,Xcode6,我的工作区结构如下: -项目A --项目b --项目C -豆荚 我运行“pod更新”,得到的是 -项目A --项目b --项目C -豆荚 -ProjectB请将其注册为coocapods中的bug。 生成的xcworkspace文件不正确 <?xml version="1.0" encoding="UTF-8"?> <Workspace version = "1.0"> <FileRef location = "group:ProjectA.

我的工作区结构如下:
-项目A
--项目b
--项目C
-豆荚

我运行“pod更新”,得到的是
-项目A
--项目b
--项目C
-豆荚

-ProjectB请将其注册为coocapods中的bug。 生成的xcworkspace文件不正确

<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:ProjectA.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:Pods/Pods.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:ProjectA/ProjectB/ProjectB.xcodeproj">
   </FileRef>
</Workspace>


替换了
lib/cocoapods/installer/user\u project\u integrator.rb中的这一行

new_file_references = file_references - workspace.file_references
改为使用此代码:

new_file_references = file_references - workspace.file_references    
absolute_paths = workspace.file_references.map { |fr| fr.absolute_path(workspace_path) }
new_file_references = new_file_references.select { |fr| absolute_paths.include? fr.absolute_path(workspace_path)  }
基本上使用绝对路径来过滤已经添加到工作区的项目。

TLDR:这是用户的工作区错误。要解决此问题,只需在文本编辑器中打开工作区的
contents.xcworkspacedata
,并简化所有相关路径。例如,
OMGNotExistingDirectory/./FirstLibrary/FirstLibrary.xcodeproj
现在应该看起来像
FirstLibrary/FirstLibrary.xcodeproj

因此,有时在工作区中重新安排项目时,您的
内容.xcworkspacedata
可能会以如下方式结束:

<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:App/App.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:OMGNotExistingDirectory/../FirstLibrary/FirstLibrary.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:SecondLibrary/SecondLibrary.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:ThirdLibrary/ThirdLibrary.xcodeproj">
   </FileRef>
</Workspace>

查看
OMGNotExistingDirectory/./FirstLibrary/FirstLibrary.xcodeproj
?是的,这就是问题所在。即使路径中的文件夹不再存在,路径的
/..
部分也允许XCode忽略它,并且可以正常工作

现在我们运行
pod安装
。这里的问题是,当CocoaPods重新组装工作空间时,它会比较相对路径而不是绝对路径,以避免重复。当然,
FirstLibrary/FirstLibrary.xcodeproj
不是
OMGNotExistingDirectory/./FirstLibrary/FirstLibrary.xcodeproj
,即使它们指向同一个文件

因此,要解决这个问题,您必须通过删除工作区中的冗余部分来简化工作区中的相对路径


感谢您的回答,为问题所在提供了线索。

只是出于好奇:为什么要使用xcodeproj“Libraries/ProjectB/ProjectB”?2次项目B?请回答上面的问题好的。xcodeproj'ProjectB/ProjectB'被假定为ProjectB/ProjectB.xcodeproj抱歉,我不知怎么错过了这个问题。但是@bllakjakk是绝对正确的。我报告了错误:,但它已关闭。因为我已经通过创建与您相同的结构进行了验证。因此,这种方法是正确的。但是CocoaPods还不支持这一点。目前,我建议您通过删除重复关系来更新xcworkspace文件。它可以正常工作,因为POD已经与嵌套项目关联。享受。@bllakjakk您知道如何自动更新xcworkspace(例如,在每次pod安装/更新之后)?2017年,有关于此的更新吗?遇到同样的问题将于2019年1月12日发生:(嗯……如果我理解正确,在安装了
pod
之后,它将此添加到了我的xcworkspacedata
location=“group:../submodules/MySDK/MySDK.xcodeproj”>
,我只是去删除
。/submodules/
?但是如果我再次运行
pod install
,它仍然会显示,在像以前一样构建时会出现重复错误吗?@Tj3n不是真的。在您的情况下,组与您的工作区不在同一目录中。例如,您的项目文件夹包含
主项目
sub模块
目录。如果
主项目
文件夹包含您的工作区,而
子模块/MySDK
包含
MySDK.xcodeproj
,那么为了引用
MySDK.xcodeproj
您的工作区必须使用这些路径部分。基本上它意味着“进入父目录”。如果您的路径在
。/
部分之前没有任何内容,则无需简化:(我认为这对我的情况没有帮助?即使在pod 1.8中,这个问题仍然存在,我一直在寻找一种方法,通过安装后钩子删除重复的一个,但找不到任何代码。@Tj3n您的原始和重复位置看起来如何?在
工作空间数据中
pod install
之后,我的设置看起来与OP相同
上面提到的显示MyApp+pod+MySDK,如果我删除该MySDK组,
MySDK
在MyApp项目中保持良好,并且副本消失,原始MySDK似乎不会显示在
工作空间数据中
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:App/App.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:OMGNotExistingDirectory/../FirstLibrary/FirstLibrary.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:SecondLibrary/SecondLibrary.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:ThirdLibrary/ThirdLibrary.xcodeproj">
   </FileRef>
</Workspace>