web-dev-qa-db-fra.com

De quoi hérite! : search_paths faire?

Après avoir examiné le propre exemple de CocoaPods (extrait de 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

Je ne vois pas pourquoi inherit! :search_paths est nécessaire? Les 3 cibles, ShowsiOS, ShowsTV et ShowsTests ont accès à ShowsKit à partir de leur cible parent.

L'exemple spécifique pour inherit! (de https://guides.cocoapods.org/syntax/podfile.html#inherit_bang ) n'ajoute aucune clarté

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

Pouvez-vous m'aider à comprendre ce que inherit! :search_paths est pour?

38
Quentin

Le but derrière derrière inherit!, selon https://guides.cocoapods.org/syntax/podfile.html#inherit_bang (dont je conviens que ce n'est pas très clair), consiste à fournir l'un des 3 modes disponibles:

  • :complete La cible hérite de tout comportement du parent.
  • :none La cible n'hérite d'aucun comportement du parent.
  • :search_paths La cible hérite uniquement des chemins de recherche du parent.

Dans l'exemple de cette question, c'est le :search_paths mode qui est exprimé. Les trois modes différents remplissent des rôles différents lors du test d'un projet Pod.

Voici un lien supplémentaire se rapportant aux chemins de recherche de framework dans Xcode qui a aidé à éliminer une certaine confusion pour moi.

16
Christopher Reyes

Une cible avec une dépendance peut utiliser cette fonctionnalité. Le meilleur exemple est Test target qui utilise app target. Dans ce cas, vous pouvez créer une hiérarchie dans votre 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

Jeter un coup d'œil à Pods/Targets Support Files/ répertoire et comparer

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

Vous constaterez que les paramètres qui sont passés à la cible réelle sont différents pour différents inherit! réglage. Dans le cas avec :search_paths - FRAMEWORK_SEARCH_PATHS, HEADER_SEARCH_PATHS... ont été hérités et ont été transmis aux champs correspondants dans Build Settings

1
yoAlex5