Управляйте зависимостями нескольких целей с помощью Cocoapods

Я только начал возиться с кокоаподами для управления зависимостями моих проектов iOS. В настоящее время я пытаюсь интегрировать модульные тесты с помощью GHIOSUnit. Я следовал всем их инструкциям и пробовал их пробные тесты, и все это работало как шарм.

Настройка проекта 1введите здесь описание изображения

Однако проблемы начинаются, когда я начинаю использовать свои настоящие файлы проекта для тестирования.

Я использую AFNetworking для связи клиент-сервер, и всякий раз, когда я обращаюсь к моему общему клиенту под названием «CRLClient», оболочке для AFHTTPClient, он выдает мне ошибки с неопределенными символами.

Undefined symbols for architecture armv7:
  "_OBJC_METACLASS_$_AFHTTPClient", referenced from:
      _OBJC_METACLASS_$_CRLClient in CRLClient.o
  "_OBJC_CLASS_$_AFJSONRequestOperation", referenced from:
      objc-class-ref in CRLClient.o
  "_OBJC_CLASS_$_AFHTTPClient", referenced from:
      _OBJC_CLASS_$_CRLClient in CRLClient.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Файл пода для управления зависимостями выглядит так

workspace 'Storyboards.xcworkspace'
platform :ios, '5.0'
pod 'AFNetworking', '1.1.0'
target :UnitTests, :exclusive => true do
pod 'GHUnitIOS', '0.5.6'
end

Фактическая цель проекта отлично строится и отлично работает с AFNetworking.

P.S. Мне также необходимо добавить все тестируемые файлы в цель UnitTest. Тогда что делает добавление «Целевой зависимости» на этапах сборки?

введите здесь описание изображениявведите здесь описание изображения

Вкратце,

  1. как разделить общие зависимости между разными целями?
  2. что на самом деле делает добавление целевых зависимостей, если мне все еще нужно добавлять каждый файл в новую цель?

person tGilani    schedule 29.01.2013    source источник
comment
Наличие похожей проблемы. Похоже, нам нужен способ НЕ импортировать классы, а добавить пути поиска, чтобы это работало…   -  person Corey Floyd    schedule 30.01.2013
comment
Я решил проблему, связавшись с файлом libPod.a, сгенерированным модулями для основного проекта, а также в Test Target ... они выглядят точно так же. Возможно, это неправильный способ сделать это. ОДНАКО, мне все еще нужно добавить каждый проверенный файл в обе цели.. =(   -  person tGilani    schedule 31.01.2013


Ответы (1)


Используя

target :UnitTests, :exclusive => true do
  pod 'GHUnitIOS', '0.5.6'
end

Вы говорите, что единственная библиотека, которую вы хотите связать с целью UnitTests, это GHUnit, в основном говоря, что вы не хотите также связывать AFNetworking. Проблема в том, что вы также импортируете свой подкласс AFHTTPClient в UnitTests, где он не может найти компоненты AFNetworking, с которыми он пытается связать.

Чтобы исправить это, вы должны иметь возможность удалить эксклюзивный вызов

target :UnitTests do
  pod 'GHUnitIOS', '0.5.6'
end

При этом вы свяжете GHUnit только с вашей целью UnitTests, но свяжете AFNetworking с обоими. «Цель по умолчанию будет включать зависимости, определенные вне блока, если не указана опция :exclusive => true». (из здесь)

person Keith Smiley    schedule 21.03.2013
comment
интересно .. вернусь с результатами - person tGilani; 21.03.2013