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
之后,它将此添加到了我的xcworkspacedatalocation=“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>