2013-06-21 5 views
7

Я пытаюсь связать созданную Cocoapods статическую библиотеку с несколькими целями в моем рабочем пространстве. Когда я это делаю, я получаю ошибку дубликатов символов на этапе связывания при создании. Это имеет смысл, поскольку я связываю библиотеку дважды.Cocoapods: Связывание pod с несколькими задачами выдает

Как мне обойти это? Должен ли я ссылаться только на основную цель и включать пути заголовков в Pods в общих целях? Как мне сделать это в Cocoapods? Я мог бы установить пути заголовка в Pods вручную, но, похоже, победил точку использования pod install.

Ниже приведена моя рабочая станция. Он состоит из основного проекта и нескольких статических библиотек в качестве собственных проектов xcode, которые имеют общий код. Я связываю продукты двух статических библиотечных проектов с главной целью, и они автоматически становятся зависимыми от основной цели.

shared1.xcodeproj -> target shared1 
shared2.xcodeproj -> target shared2 
main.xcodeproj -> target main 

Это мой Podfile:

workspace 'Main.xcworkspace' 
xcodeproj 'Main.xcodeproj' 
xcodeproj 'Shared1.xcodeproj' 
platform :ios 

target :ThirdParty, :exclusive => true do 
    link_with ['main', 'shared1'] 

    pod 'MKNetworkKit' 
    pod 'SBJSON' 
    ... 
end 
+0

Решение, с которым я сейчас работаю, - это просто связать только главную цель и вручную отредактировать параметры сборки общих целей, чтобы добавить рекурсивный путь поиска заголовков в каталог Pods BuildHeaders. –

+0

Это лучшее решение, с которым вы столкнулись? –

+0

Это решение, с которым я столкнулся. Это в основном противоположно вашему и требует меньше работы: http://stackoverflow.com/a/17869668/106703 –

ответ

0

Я пришел через это. Как я исправил это, удалив зависимости для основного проекта. Поскольку основной проект связан с общим проектом, он автоматически получает доступ к зависимостям.

workspace 'Main.xcworkspace' 
xcodeproj 'Main.xcodeproj' 
xcodeproj 'Shared1.xcodeproj' 
platform :ios 

target :ThirdParty, :exclusive => true do 
    link_with ['shared1'] 

    pod 'MKNetworkKit' 
    pod 'SBJSON' 
    ... 
end 
1

Я только что прошел через эту ужасную ситуацию и фиксировал его - теперь у меня есть рабочее пространство, которое будет строить с помощью командной строки или Xcode, которая имеет 4 различных целей с различной пачкой идентификаторов. Проблема с вашим подходом выше заключается в том, что вы в конечном итоге соединяя безумие, поскольку каждая цель будет строить стручки. Что я сделал:

  1. Создать проект с одной целью и настройками.
  2. Скопируйте цель 3 раза и измените идентификатор пачки и т. Д., Используя эту ссылку: http://swwritings.com/post/2013-05-20-concurrent-debug-beta-app-store-builds
  3. Создайте схему уровня рабочей области для каждой из ваших целей.
  4. Создайте схему уровня рабочего пространства для сборки ваших модулей.
  5. Редактируйте свои схемы и отключите «Найти неявные зависимости».
  6. Сделайте свои схемы зависимыми от схемы ваших модулей (вкладка сборки в схемах редактирования).

Мой podfile выглядит следующим образом - так же, как это было в начале:

target 'test-target' do 
    pod 'HockeySDK' 
    pod 'RestKit', '~> 0.23.1' 
    pod 'RKXMLReaderSerialization', :git => 'https://github.com/RestKit/RKXMLReaderSerialization.git', :branch => 'master' 
    pod 'NSLogger' 
    pod 'Parse-iOS-SDK' 
end 

Я имел немало проблем при строительстве, где он продолжал говорить мне, что это не может связать к стручки построить который я решил, изменив «Библиотека путей поиска» в настройках сборки для:

$(PROJECT_DIR)/Build/Products/$(CONFIGURATION)-$(PLATFORM_NAME) 

Это немного странный путь с/Build/Products, но это, кажется, что стручки делает из коробки и если вы сражаетесь с этим, все становится некрасиво.

Трудно написать подробное руководство, так как мне потребовалось 5 дней эксперимента, чтобы получить магическую сборку, работающую в Xcode, xcodebuild и нашем сервере Teamcity CI.

Один из последних результатов - очередь параллелизма сборки !!! (редактирование/схемы/сборка) ...или ваши стручки в свое время для сборки приложения, чтобы увидеть их

4

Вы пытались добавить это в podfile:

link_with 'Target1', 'Target2' 

Я получил 5 различных целей в шахте так и кажется, работает хорошо ,

+0

Это работает, но как уточнять только те стручки, которые мне нужны в Target2, поскольку мне не нужны все контейнеры, доступные для Target1? –