Objective c 一个工作区中有多个吊舱

Objective c 一个工作区中有多个吊舱,objective-c,xcode,cocoapods,xcode-workspace,Objective C,Xcode,Cocoapods,Xcode Workspace,我有一个很大的工作空间,我想使用它的代码,在上面创建另一个项目。 我不想直接处理代码,而是想用myPodProject创建另一个项目myProject,这样我就可以访问他们的代码和pod,并独立添加我的代码和pod 原始结构: CoreApp | +-- CoreApp.xcworkspace | +-- CoreProject.xcodeproj +-- Pods.xcodeproj 我所做的是用我的项目创建我自己的工作区,将所有核心项目拖到工作区中,并用“标题

我有一个很大的工作空间,我想使用它的代码,在上面创建另一个项目。 我不想直接处理代码,而是想用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

更新:在同一个工作区中可以有两个“Pods.xcodeproj”,但不可能在同一个目录中

子目录解决方案 如果将“CoreProject”签出到“MyProject”的子目录中,则可以在“MyProject”和“CoreProject”两个目录中执行
pod install
。这样,两个项目都可以有自己的“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
最后,您应该执行以下步骤

  • 打开“MyProject.xcworkspace”
  • 添加“CoreProject.xcodeproj”及其“Pods.xcodeproj”
  • 从“MyProject”链接“CoreProject”
  • 不要使用“CoreProject.xcworkspace”编辑“MyProject”

    这是本例中的项目结构

    MyProject.xcworkspace
    |
    +-- MyProject.xcodeproj
    +-- Pods.xcodeproj (for MyProject)
    +-- CoreProject.xcodeproj
    +-- Pods.xcodeproj (for CoreProject)
    
    共享吊舱解决方案 如果您可以触摸CoreProject的POD,则以下解决方案是合适的

    您应该创建一个新的“Pods.xcodeproj”,并与“MyProject”和“CoreProject”共享它

    项目结构如下所示(与您的“新结构”相同,但POD被新结构替换)

    这是一个用于您的工作区的示例文件。 如果您将“CoreProject”与“MyProject”链接起来,在这种情况下,您可以在两个项目中使用“AFNetworking”,但只能在“MyProject”中使用“SDWebImage”

    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
    

    作为对熊茂茂答案的补充,如果您的第二个项目(在本例中,让我们假设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
    
    def mockito_共享_pod
    pod“Ocmocito”,“~>3.0”
    结束
    目标“MyProjectTests”是什么
    继承!:搜索路径
    mockito_共享_吊舱
    结束
    目标“CoreProjectTests”是什么
    mockito_共享_吊舱
    xcodeproj'../CoreProject.xcodeproj'
    结束
    
    如您所见,这里重要的是为每个项目定义两个目标,对于与项目关联的目标,如果该目标不在MyProject/Podfile目录中,则需要通过添加
    xcodeproj
    值来指定该项目的位置

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


    我之所以发布这篇文章,是因为熊茂茂的回答非常有帮助,但我需要做一些不同的事情来适应我的特殊情况,也许其他人也会遇到和我一样的问题。

    听起来不错,但我不想碰我从Core收到的播客文件。我根本不想碰他们的密码我的答案是错的。实际上,在同一个工作区中可以有两个“Pods.xcodeproj”。但毕竟不可能将它们放在同一个目录中,因此您可以将“CoreProject”签出到“MyProject”的子目录中,并将其添加到由POD生成的工作区中。这有点难看,但很简单。请用子目录解决方案创建一个新的答案,我会检查它是否正确。谢谢!更正了错误的说明并添加了新的解决方案。
    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