多个 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
最后您应该执行以下步骤。
- 打开"MyProject.xcworkspace"
- 添加"CoreProject.xcodeproj"及其"Pods.xcodeproj"
- 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 的回答非常有帮助,但我需要做一些不同的事情来适应我的不寻常情况,也许其他人会遇到和我一样的问题。
我有一个很大的工作空间,我想使用它作为基础,使用它的代码在它上面创建另一个项目。 我不想直接处理代码,而是想用 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
最后您应该执行以下步骤。
- 打开"MyProject.xcworkspace"
- 添加"CoreProject.xcodeproj"及其"Pods.xcodeproj"
- 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 的回答非常有帮助,但我需要做一些不同的事情来适应我的不寻常情况,也许其他人会遇到和我一样的问题。