Несколько стручков в одном рабочем пространстве
У меня есть большое рабочее пространство, в котором я хочу использовать базу, чтобы создать поверх нее другой проект, используя его код. Вместо того, чтобы работать непосредственно с кодом, я хотел бы создать еще один проект myProject с myPodProject, чтобы я мог получить доступ к их коду и модулям, а также независимо добавлять свой код и модули.
Оригинальная структура:
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 ответа
ОБНОВЛЕНИЕ: Возможно иметь два "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
Наконец, вы должны сделать следующие шаги.
- Откройте "MyProject.xcworkspace"
- Добавьте "CoreProject.xcodeproj" и его "Pods.xcodeproj"
- Ссылка "CoreProject" от "MyProject"
Не используйте "CoreProject.xcworkspace" для редактирования "MyProject".
Это структура проекта в данном случае.
MyProject.xcworkspace
|
+-- MyProject.xcodeproj
+-- Pods.xcodeproj (for MyProject)
+-- CoreProject.xcodeproj
+-- Pods.xcodeproj (for CoreProject)
Решение для совместного использования стручков
Если вы можете дотронуться до модулей CoreProject, подойдет следующее решение.
Вы должны создать новый "Pods.xcodeproj" и поделиться им с "MyProject" и "CoreProject".
Структура проекта выглядит следующим образом (так же, как ваша "новая структура", но модули заменяются на новые).
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
В дополнение к ответу xiongmaomaomao, если ваш второй проект (в данном случае, скажем, CoreProject) находится в другом каталоге (отдельно от MyProject и вашего Podfile), и вы хотите использовать модуль (например, 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
определение не является обязательным, но позволяет избежать необходимости указывать модуль дважды (по одному в каждой цели).
Я публикую это, потому что ответ xiongmaomaomao был очень полезным, но мне нужно было сделать это немного иначе, чтобы соответствовать моему необычному случаю, и, возможно, у кого-то еще возникнет та же проблема, что и у меня.