继承!:search_paths有什么作用?

66

查看了CocoaPods官方示例(来源于 https://guides.cocoapods.org/syntax/podfile.html#abstract_target )之后:

# Note: There are no targets called "Shows" in any of this workspace's 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?因为所有三个目标,ShowsiOSShowsTVShowsTests 都可以从它们的父目标中访问 ShowsKit

来自 https://guides.cocoapods.org/syntax/podfile.html#inherit_banginherit! 的具体示例并没有增加任何清晰度。

target 'App' do
  target 'AppTests' do
    inherit! :search_paths
  end
end

你能帮我理解 inherit! :search_paths 是用来做什么的吗?


你在发布问题后是否对我们为什么使用它有了一些清晰的认识? - Jobs
6
很遗憾,不行 :( - Quentin
似乎这是一个从未被使用过的函数 =) - Nike Kov
2个回答

38
inherit! 的目的是为了提供三种可用模式之一, 根据https://guides.cocoapods.org/syntax/podfile.html#inherit_bang (我认为不是很清晰),这三种模式分别是:
  • :complete 目标从父级继承所有行为。
  • :none 目标不继承任何从父级的行为。
  • :search_paths 目标仅继承父级的搜索路径。
在本题示例中,表达的是:search_paths模式。这三种不同的模式在测试Pod项目时扮演不同的角色。 这里有一个额外的链接,涉及到Xcode中框架搜索路径,对我帮助很大。

19

CocoaPods 和继承!

带有依赖关系的 内部 目标可以使用此功能。最好的例子是使用 app targetTest 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!设置中是不同的。

inherit! :search_paths的情况下 - 内部目标的FRAMEWORK_SEARCH_PATHSHEADER_SEARCH_PATHS等被从外部目标继承并传递到Build Settings相应字段中。

inherit! :complete的用例。 当您开发具有第三方动态框架的框架并且有测试目标时,请使用此功能。如果您不这样做并运行测试,您将得到dyld: Library not loaded[关于]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接