多个 pods 在一个工作区

Multiple pods in one workspace

我有一个很大的工作空间,我想使用它作为基础,使用它的代码在它上面创建另一个项目。 我不想直接处理代码,而是想用 myPodProject 创建另一个项目 myProject,这样我就可以访问他们的代码和他们的 pods,并独立添加我的代码和 pods。

原结构:

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

我所做的是用我的项目创建我自己的工作区,将所有核心项目拖到工作区中并用"Header Search Path"指向核心项目。

所以新的结构是:

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

到这里一切都很好。

现在,我想拥有自己的pods。但似乎在同一个工作区中有 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

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

  1. 打开"MyProject.xcworkspace"
  2. 添加"CoreProject.xcodeproj"及其"Pods.xcodeproj"
  3. Link "CoreProject" 来自 "MyProject"

不要使用 "CoreProject.xcworkspace" 编辑 "MyProject"。

这是本例中的项目结构。

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

分享pods解决方案

如果你能接触到CoreProject的Pods,下面的解决方案是合适的。

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

项目结构如下所示(与您的 "new structure" 相同,但 pods 已替换为新的)。

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

这是您工作区的示例 Podfile。 如果你从"MyProject"link"CoreProject",在这种情况下,你可以在两个项目中使用"AFNetworking",但只能在"MyProject"中使用"SDWebImage" .

播客文件

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

作为 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 的回答非常有帮助,但我需要做一些不同的事情来适应我的不寻常情况,也许其他人会遇到和我一样的问题。