What does inherit! :search_paths do?

限于喜欢 提交于 2019-11-30 06:04:19
Christopher Reyes

The purpose behind behind inherit!, according to https://guides.cocoapods.org/syntax/podfile.html#inherit_bang (which I would agree is not very clear), is to provide one of 3 available modes:

  • :complete The target inherits all behaviour from the parent.
  • :none The target inherits none of the behaviour from the parent.
  • :search_paths The target inherits the search paths of the parent only.

In this question's example it is the :search_paths mode that is being expressed. The three different modes serve different roles when testing a Pod project.

Here is an additional link pertaining to Framework Search Paths in Xcode that helped clear some confusion for me.

A target with a dependency can use this functionality. The best example is Test target that uses app target. In this case you can create a hierarchy in your 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

Take a look at Pods/Targets Support Files/ directory and compare

  • Pods-<App_target_name>/Pods-<App_target_name>.<debug/release>.xcconfig
  • Pods-<Test_target_name>/Pods-<Test_target_name>.<debug/release>.xcconfig

You will find that settings which are passed to to the real target are different for different inherit! setting. In case with :search_paths - FRAMEWORK_SEARCH_PATHS, HEADER_SEARCH_PATHS... were inherited and were passed to the corresponding fields in Build Settings

Use case of inherit! :complete. When you develop a framework that has a third-party dynamic framework and you have a test target. If you run tests you will get dyld: Library not loaded[About]. inherit! :complet to the rescue.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!