CocoaPods将重复的项目添加到xcworkspace

时间:2014-08-19 15:36:44

标签: ios cocoapods xcode6

我的工作区结构如下:
-ProjectA
--ProjectB
--ProjectC
-Pods

我运行了'< pod;更新'我得到的是什么 -ProjectA
--ProjectB
--ProjectC
-Pods
-ProjectB< - 这不应该在这里!

我的Podfile是:

platform :ios, '7.0'
inhibit_all_warnings!
workspace 'ProjectA'

target :ProjectA do
    pod "AFNetworking", "~> 2.0"
    pod 'Facebook-iOS-SDK'
    pod 'SDWebImage'
    pod 'FXBlurView'
    pod 'RESideMenu'
    pod 'RBStoryboardLink'
end

target :ProjectBTests do
    xcodeproj 'Libraries/ProjectB/ProjectB'
    pod 'Expecta'
    pod 'Specta'
    pod 'OCMock'
end

那么有可能对这种行为做任何事情吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

请将其注册为coocoapods中的错误。 生成的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>

答案 1 :(得分:1)

将此行替换为lib/cocoapods/installer/user_project_integrator.rb #create_workspace

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)  }

基本上使用绝对路径来过滤已经添加到工作空间中的项目。

答案 2 :(得分:0)

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

因此,有时在工作区中重新布置项目时,contents.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 install。这里的问题是,当CocoaPods重新组装工作区时,它会比较相对路径而不是绝对以避免重复。而且,FirstLibrary/FirstLibrary.xcodeproj当然不是OMGNotExistingDirectory/../FirstLibrary/FirstLibrary.xcodeproj,即使它们指向的是同一文件。

因此,要解决此问题,您必须通过删除工作空间中的多余路径来简化它们之间的相对路径。

感谢kezi给出问题根源的答案。