Использование CocoaPods с несколькими проектами
У меня есть рабочее пространство, содержащее:
- myiPhone.xcodeproj
- sharedStuff/sharedStuff.xcodeproj
sharedStuff.xcodeproj создает статическую библиотеку, которая является зависимостью от myiPhone.xcodeproj(для простоты предполагаем, что каждый проект имеет одну цель).
Теперь я хочу добавить библиотеку через CocoaPods, которые должны быть доступны для обоих проектов.
My Podsfile выглядит так:
workspace 'myWorkspace.xcworkspace'
platform :ios
target :myiPhone do
xcodeproj 'myiPhone.xcodeproj'
pod 'MBProgressHUD', '~> 0.6'
end
target :sharedStuff do
xcodeproj 'sharedStuff/sharedStuff.xcodeproj'
pod 'MBProgressHUD', '~> 0.6'
end
Когда я создаю, я получаю следующие ошибки:
diff:/../Podfile.lock: нет такого файла или каталога diff:/Manifest.lock: нет такого файла или каталога error: Песочница не синхронизирована с Podfile.lock. Запустите "pod install" или обновите свои CocoaPods установка.
Кто-нибудь знает, что происходит здесь?
UPDATE:
Из его взглядов переменная PODS_ROOT не устанавливается, когда выполняется фаза сборки "Check Pods Manifest.lock".
Ответы
Ответ 1
Первые цели в ваших проектах xcode имеют фазу сборки для выполнения diff для двух файлов блокировки. Но похоже, что ваши конфигурации проектов xcode не ссылаются на пользовательские настройки, настроенные в Pods/Pods-libPods.xcconfig.
Похоже, вы пытаетесь связать Pod с конкретными целями в нескольких xcodeprojs. Если мое предположение верно, вы неправильно используете атрибут target
. Атрибут target
создает новую статическую библиотеку в проекте Pods, который включает в себя настройки, которые вы настроили в пределах этого target
.
Целью по умолчанию для Pods xcodeproj является libPods, которая генерирует статическую библиотеку libPods.a. Это генерируется, если вы не укажете target
. Поэтому, если вам не нужно создавать несколько статических libaries в Pods xcodeproj, не мешайте определить цель и используйте атрибут link_with
, чтобы связать libPods по умолчанию target
(статическая библиотека) с целями в ваших xcodeprojs.
Например, следующий подфайл создаст цель libPods в Pods.xcodeproj, которая добавит источники MBProgressHUD к фазе компиляции, а затем добавит файл xcconfig, определяющий PODS_ROOT и PODS_HEADER_SEARCH_PATH, например, для каждого из ваших xcodeproj. Затем он свяжет эту статическую библиотеку с целями, указанными с помощью link_with
и xcodeproj
workspace 'myWorkspace.xcworkspace'
platform :ios
xcodeproj 'myiPhone.xcodeproj'
link_with 'myiPhone'
xcodeproj 'sharedStuff/sharedStuff.xcodeproj'
link_with 'sharedStuff'
pod 'MBProgressHUD', '~> 0.6'
Ответ 2
У меня есть 2 проекта в моей рабочей области, и принятый ответ не работает для меня. Но, наконец, я справился с тем, как правильно использовать Cocoapods с двумя проектами. Вот как выглядит мой файл pod:
workspace 'Projects.xcworkspace'
platform :ios, '8.0'
use_frameworks!
# ignore all warnings from all pods
inhibit_all_warnings!
def shared_pods
# all the pods go here
# pod 'Parse' etc.
end
xcodeproj 'Project1.xcodeproj'
xcodeproj 'Project2/Project2.xcodeproj'
target :Project1 do
xcodeproj 'Project1'
shared_pods
end
target :Project2 do
xcodeproj 'Project2/Project2.xcodeproj'
shared_pods
end
Ответ 3
Это моя структура папок
OB
|podfile
|Project1->Project1.xcodeproj
|Project2->Project2.xcodeproj
и это мой подкайл в папке OB
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
workspace 'OB.xcworkspace'
use_frameworks!
# ignore all warnings from all pods
inhibit_all_warnings!
project 'Project1/Project1.xcodeproj'
project 'Project2/Project2.xcodeproj'
abstract_target 'OB' do
pod 'Alamofire', '~> 4.0'
target 'Project1' do
project 'Project1/Project1.xcodeproj'
end
target 'SchoolKids' do
project 'Project2/Project2.xcodeproj'
end
end
Это добавит Afnetworking/Alamofire к обоим проектам. Если нам нужен эксклюзивный блок для конкретного проекта, мы можем сделать это
target 'Project1' do
project 'Project1/Project1.xcodeproj'
pod 'Alamofire', '~> 4.0'
end