Ошибка компоновщика Cocoapods
Всякий раз, когда я создаю свою целевую аудиторию (стандартную цель, которую генерирует Xcode), сборка выходит из строя с загадочной ошибкой:
framework not found Pods_AppName_AppNameTests
который я использую для обозначения цели, сгенерированной под ядро для моих тестов, не может быть найден.
Мой podfile довольно прост:
use_frameworks!
target 'AppName' do
pod 'ReactiveCocoa'
pod 'RealmSwift'
pod 'ObjectMapper'
pod 'Moya'
pod 'Moya/ReactiveCocoa'
pod 'pop'
pod 'Heimdallr'
pod 'Heimdallr/ReactiveCocoa'
pod 'Alamofire'
pod 'AlamofireImage'
pod 'SwiftDate'
pod 'DropdownAlert'
pod 'NibDesignable'
target 'AppNameTests' do
pod 'Quick'
pod 'Nimble'
end
end
Я использую Cocoapods 1.0.1.
EDIT:
Это НЕ формат моего подкаста. Это настройка по умолчанию, предоставленная мне, запустив pod init. Там может быть ошибка в cocoapods, но формат правильный.
ИЗМЕНИТЬ 2:
Если я включаю:
inherit! search_paths
в моей тестовой цели, тесты терпят неудачу, говоря:
The bundle "MyApp_Tests" couldn’t be loaded because it is damaged or missing necessary resources. Try reinstalling the bundle.
Без этой строки тесты также не могут быть построены, но на этот раз с ошибкой компоновщика:
Ld/Users/travis/Library/Developer/Xcode/DerivedData/Reactify-fqgxzcgedmqljrangqdkxpwdfxne/Build/Intermediates/Reactify.build/Debug-iphonesimulator/Reactify_Tests.build/Objects-normal/i386/Reactify_Tests normal i386
Эта конкретная ошибка от Travis, но я получаю то же самое в Xcode локально.
Ответы
Ответ 1
Я также сражался с этим на прошлой неделе - "решение", которое я в конечном итоге нашел надежным, заключалось в том, чтобы добавить inherit! search_paths
, установить pod, а затем удалить его и снова установить с целевого объекта тестирования, вот так:
source 'https://github.com/CocoaPods/Specs.git'
project 'CityWeather/CityWeather.xcodeproj'
install! 'cocoapods',
:deterministic_uuids => false
use_frameworks!
platform :ios, '9.3'
abstract_target 'CityWeather_Base' do
<... pod list here, contents don't seem to matter ...>
target 'CityWeather' do
end
target 'CityWeatherTests' do
# NB. If it starts refusing to link the test frameworks,
# adding and then removing inherit! :search_paths here appears to help.
#inherit! :search_paths
end
end
Это меньше хлопот по крайней мере, чем создание новой цели каждый раз, когда это происходит с вами, что, судя по моей прошлой неделе, я предсказываю, что скоро с вами случится. Очень надоедливый. Проделал столько времени, сколько мог, чтобы попытаться вывести из журналов фиксации, где возникает проблема, но это не очевидно. Я обновлю здесь, если мне удастся найти время, чтобы выяснить проблему достаточно, чтобы открыть полезную проблему. Но тем временем, надеюсь, мое "решение" несколько улучшит вашу производительность.
Ответ 2
Это самая странная вещь, и я абсолютно пробовал это раньше, но я просто удалил тестовую цель, создал новую, и вот и она работает. Единственное отличие, насколько я могу судить, между двумя целями - это один из них называется MyApp_Tests
, а другой MyApp_ExampleTests
. Я был бы удивлен, если бы это было причиной, но сейчас трудно сказать.
Я скажу, что в качестве побочной заметки проект, о котором я говорил, не единственный проект, с которым я видел это. Последние четыре из моих проектов столкнулись с этой ошибкой, созданной с момента создания Cocoapods 1.0.0. Это заставляет меня поверить, что там есть скрытая ошибка в тестовой установке Cocoapods, которую мне придется исследовать больше.
Кроме того, исключение цели тестирования и создание нового, похоже, работало именно в этом конкретном случае. В других проектах ошибка сохраняется. И я могу сказать, что это больше, чем просто моя локальная настройка, потому что мои сборки в трейвисе также будут неустойчивыми.