Использование CocoaPods с несколькими проектами - программирование
Подтвердить что ты не робот

Использование 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".

4b9b3361

Ответ 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