一个工作区中有多个pod

时间:2015-01-26 11:15:43

标签: objective-c xcode cocoapods xcode-workspace

我有一个大型工作区,我想使用基础,使用它的代码在其上创建另一个项目。 我不想直接在代码上工作,而是想用myPodProject创建另一个项目myProject,这样我就可以访问他们的代码和他们的pod,并独立添加我的代码和pod。

原始结构:

CoreApp
|
+-- CoreApp.xcworkspace
     |
     +-- CoreProject.xcodeproj
     +-- Pods.xcodeproj

我所做的是用我的项目创建自己的工作区,将所有核心项目拖入工作区,并使用“标题搜索路径”指向核心项目。

所以新结构是:

MyApp
|
+-- MyApp.xcworkspace
     |
     +-- MyProject.xcodeproj
     +-- CoreProject.xcodeproj
     +-- Pods.xcodeproj

直到这里一切都很好。

现在,我想拥有自己的豆荚。但似乎在同一个工作区中有2个Pods.xcodeproj是一个问题。

我该怎么办呢?

MyApp
|
+-- MyApp.xcworkspace
     |
     +-- CoreProject.xcodeproj
     +-- CorePods.xcodeproj
     +-- MyPods.xcodeproj
     +-- MyProject.xcodeproj

2 个答案:

答案 0 :(得分:3)

更新:可以有两个" Pods.xcodeproj"在相同的工作区中,但不可能将它们放在同一个目录中。

子目录解决方案

如果你结账" CoreProject"进入" MyProject"的子目录,您可以在两个目录中执行pod install" MyProject"和" CoreProject"。通过这种方式,两个项目都可以拥有自己的" Pods.xcodeproj"。

这是执行后的文件结构。

MyProject
├── MyProject
├── MyProject.xcodeproj
├── MyProject.xcworkspace
├── Podfile
├── Podfile.lock
├── Pods
│    └── Pods.xcodeproj
└── CoreProject
    ├── Core.m
    ├── CoreProject
    ├── CoreProject.xcodeproj
    ├── CoreProject.xcworkspace
    ├── Podfile
    ├── Podfile.lock
    └── Pods
         └── Pods.xcodeproj

最后,您应该执行以下步骤。

  1. 打开" MyProject.xcworkspace"
  2. 添加" CoreProject.xcodeproj"和它的" Pods.xcodeproj"
  3. Link" CoreProject"来自" MyProject"
  4. 不要使用" CoreProject.xcworkspace"编辑" MyProject"。

    这是这种情况下的项目结构。

    MyProject.xcworkspace
    |
    +-- MyProject.xcodeproj
    +-- Pods.xcodeproj (for MyProject)
    +-- CoreProject.xcodeproj
    +-- Pods.xcodeproj (for CoreProject)
    

    分享广告连播解决方案

    如果您可以触摸CoreProject的Pod,则以下解决方案是合适的。

    你应该创建一个新的" Pods.xcodeproj"并与" MyProject"分享和" CoreProject"。

    项目结构如下所示(与您的"新结构"相同,但是pods被新的替换)。

    MyApp
    |
    +-- MyApp.xcworkspace
         |
         +-- MyProject.xcodeproj
         +-- CoreProject.xcodeproj
         +-- Pods.xcodeproj (your own)
    

    这是工作区的Podfile示例。 如果您链接" CoreProject"来自" MyProject",在这种情况下,您可以使用" AFNetworking"在这两个项目中,但可以使用" SDWebImage"仅在" MyProject"。

    <强> Podfile

    workspace 'MyApp'
    xcodeproj 'CoreProject.xcodeproj'
    xcodeproj 'MyProject.xcodeproj'
    
    target "CoreProject" do
      pod 'AFNetworking'
      xcodeproj 'CoreProject.xcodeproj'
    end
    
    target "CoreProjectTests", :exclusive => true do
      pod 'OCMockito'
      xcodeproj 'CoreProject.xcodeproj'
    end
    
    target "MyProject" do
      pod 'SDWebImage'
      xcodeproj 'MyProject.xcodeproj'
    end
    
    target "MyProjectTests", :exclusive => true do
      pod 'OCHamcrest'
      xcodeproj 'MyProject.xcodeproj'
    end
    

答案 1 :(得分:0)

作为xiongmaomaomao答案的补充,如果你的第二个项目(在这种情况下,假设是CoreProject)存在于另一个目录(与MyProject和你的Podfile分开)并且你想使用一个pod(例如OCMockito,用于单元测试) )在这两个项目中,你需要在你的Podfile中做这样的事情:

def mockito_shared_pod
  pod 'OCMockito', '~> 3.0'
end

target "MyProjectTests" do
  inherit! :search_paths
  mockito_shared_pod
end

target "CoreProjectTests" do
  mockito_shared_pod
  xcodeproj '../<path_to_proj_file>/CoreProject.xcodeproj'
end

正如您所看到的,重要的是为每个项目定义2个目标,对于与MyProject / Podfile目录中不存在的项目相关联的目标,您需要通过添加项目来指定项目的位置xcodeproj值。

mockito_shared_pod定义不是必需的,但它避免了必须指定pod两次(每个目标一次)。

我发布这个是因为xiongmaomaomao的答案非常有帮助,但我需要做一些不同的事情以适应我的不寻常案例,也许其他人会遇到与我相同的问题。