Cocoapods link_with XCTest генерирует ошибки дублирования символов

StackOverflow https://stackoverflow.com//questions/22002149

  •  20-12-2019
  •  | 
  •  

Вопрос

У меня есть основной проект, который будет генерировать статическую библиотеку (назовите ее MySDK).У меня есть компонент (назовите его Analytics) как частный какаопод.

В итоге у меня получается такая файловая структура:

+ MySDK
    - src
+ Pods
    + Pods
        - Analytics

У каждого проекта есть свои тесты, но теперь мне нужно провести интеграционное тестирование, поэтому в своем подфайле я использую link_with, но всякий раз, когда я это делаю, я даже не могу запустить исходные тесты, потому что получаю кучу duplicate symbol ошибки:

duplicate symbol _OBJC_METACLASS_$_PodsDummy_Pods in:
    /.../DerivedData/Build/Products/Release-iphonesimulator/libPods.a(Pods-dummy.o)
    /.../DerivedData/Build/Products/Release-iphonesimulator/libMySDK.a(Pods-dummy.o)
...
duplicate symbol _MYPREFIXFileTableIDColumnName in:
    /.../DerivedData/Build/Products/Release-iphonesimulator/libPods.a(MYPREFIXDatabaseConstants.o)
    /.../Build/Products/Release-iphonesimulator/libMySDK.a(MYPREFIXDatabaseConstants.o)

Все ошибки исходят от моего Analytics компонент.Все файлы, вызывающие проблему, имеют Си-функции (Я имею дело с sqlite напрямую) и/или (глобально) константы, или они категории, но все они имеют префикс.

Мой Podfile выглядит так:

platform :ios, '7.0'
link_with ['MySDK', 'MySDKTests']
pod 'Analytics', '0.0.1'

Моя подсказка для Analytics выглядит так:

Pod::Spec.new do |s|
  s.name     = 'Analytics'
  s.version  = '0.0.1'
  s.platform = :ios
  s.summary  = "Analytics utility"
  s.homepage = 'http://google.com'
  s.author   = { 'Me' => 'me@me.com' }
  s.source   = { :git => 'https://github.com/Company/Analytics.git', :tag => '0.0.1' }
  s.source_files = 'Analytics/**/*.{h,m}'
  s.requires_arc = true
  s.ios.deployment_target = '6.0'
end

Есть ли причина, по которой я получаю эти ошибки?Должен ли я скомпилировать эти файлы как не дуговые или использовать какой-то специальный флаг?

Есть идеи

Это было полезно?

Решение

Я наконец-то заставил его работать!

Мне не следовало связывать свои капсулы с MySDKTests, поскольку конечный продукт (MySDK, библиотека, уже связывалась с Analytics).

Однако я добавил следующее в свой podspec файл:

  s.public_header_files = 'Analytics/**/*.h'

  s.xcconfig = { 'HEADER_SEARCH_PATHS' => '"$(SRCROOT)/Pods/Headers/Analytics"' }

Вторая строка на самом деле не нужна, поскольку она не меняет мой MySDKTests цель.мне пришлось добавить HEADER_SEARCH_PATHS моему MyDSKTests чтобы сделать эти заголовки доступными для тестов.

Я читал, что некоторые люди успешно используют LIBRARY_SEARCH_PATHS вместо этого, но это не сработало для меня.Если кто-нибудь захочет объяснить, почему, это было бы здорово, но сейчас я оставлю свое решение здесь для других людей на случай, если они столкнутся с подобной проблемой.

Видеть это другой вопрос для соответствующей информации

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top