Cocoapods link_with XCTest генерирует ошибки дублирования символов
-
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
вместо этого, но это не сработало для меня.Если кто-нибудь захочет объяснить, почему, это было бы здорово, но сейчас я оставлю свое решение здесь для других людей на случай, если они столкнутся с подобной проблемой.
Видеть это другой вопрос для соответствующей информации