3

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

2 回答 2

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. 从“MyProject”链接“CoreProject”

不要使用“CoreProject.xcworkspace”来编辑“MyProject”。

这是本例中的项目结构。

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

共享 pod 解决方案

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

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

项目结构如下所示(与您的“新结构”相同,但 pod 已替换为新结构)。

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

这是您工作区的示例 Podfile。如果从“MyProject”链接“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
于 2015-01-26T15:38:40.077 回答
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 的回答非常有帮助,但我需要做一些不同的事情来适应我不寻常的情况,也许其他人会遇到和我一样的问题。

于 2016-08-31T13:56:56.973 回答