Что наследует!: search_paths делать?
После просмотра собственного примера CocoaPods (от https://guides.cocoapods.org/syntax/podfile.html#abstract_target)
# Note: There are no targets called "Shows" in any of this workspace Xcode projects
abstract_target 'Shows' do
pod 'ShowsKit'
# The target ShowsiOS has its own copy of ShowsKit (inherited) + ShowWebAuth (added here)
target 'ShowsiOS' do
pod 'ShowWebAuth'
end
# The target ShowsTV has its own copy of ShowsKit (inherited) + ShowTVAuth (added here)
target 'ShowsTV' do
pod 'ShowTVAuth'
end
# Our tests target has its own copy of
# our testing frameworks, and has access
# to ShowsKit as well because it is
# a child of the abstract target 'Shows'
target 'ShowsTests' do
inherit! :search_paths
pod 'Specta'
pod 'Expecta'
end
end
Я не понимаю, почему inherit! :search_paths
необходимо? Все 3 цели, ShowsiOS
, ShowsTV
и ShowsTests
имеют доступ к ShowsKit
из их родительской цели.
Конкретный пример для inherit!
(из https://guides.cocoapods.org/syntax/podfile.html#inherit_bang) не добавляет ясности
target 'App' do
target 'AppTests' do
inherit! :search_paths
end
end
Можете ли вы помочь мне понять, для чего inherit! :search_paths
?
Ответы
Ответ 1
Цель, стоящая за inherit!
Согласно https://guides.cocoapods.org/syntax/podfile.html#inherit_bang (что, я бы согласился, не очень понятно), заключается в предоставлении одного из 3 доступных режимов:
-
:complete
Цель наследует все поведение от родителя. -
:none
Цель не наследует ни одно из действий от родителя. -
:search_paths
Цель наследует пути поиска только родителя.
В этом примере вопроса :search_paths
режим :search_paths
. Три разных режима играют разные роли при тестировании проекта Pod.
Вот дополнительная ссылка, имеющая отношение к Путям поиска Структуры в XCode, которые помогли прояснить некоторую путаницу для меня.
Ответ 2
Цель с зависимостью может использовать эту функцию. Лучший пример - Test target
, который использует app target
. В этом случае вы можете создать иерархию в вашем Podfile
target 'App' do
target 'Tests' do
# inherit! :none # empty
# inherit! :complete # by default if you do not specify any inherit!
# inherit! :search_paths # uses only 'search' paths
end
end
Взгляните на каталог Pods/Targets Support Files/
и сравните
Pods-<App_target_name>/Pods-<App_target_name>.<debug/release>.xcconfig
Pods-<Test_target_name>/Pods-<Test_target_name>.<debug/release>.xcconfig
Вы обнаружите, что настройки, которые передаются реальной цели, отличаются для разных настроек inherit!
. В случае с :search_paths
- FRAMEWORK_SEARCH_PATHS
, HEADER_SEARCH_PATHS
... были унаследованы и переданы в соответствующие поля в Build Settings
Вариант использования inherit! :complete
. Когда вы разрабатываете фреймворк со сторонней динамической фреймворком и у вас есть цель тестирования. Если вы запустите тесты, вы получите dyld: Library not loaded
[About]. inherit! :complet
на помощь.