Class: Pod::Target::BuildSettings::PodTargetSettings

Inherits:
Pod::Target::BuildSettings show all
Defined in:
lib/cocoapods/target/build_settings.rb

Overview

A subclass that generates build settings for a PodTarget

Since:

  • 1.5.0

Constant Summary

Constants inherited from Pod::Target::BuildSettings

CONFIGURATION_BUILD_DIR_VARIABLE, PLURAL_SETTINGS, XCFRAMEWORKS_BUILD_DIR_VARIABLE

Public API collapse

Attributes inherited from Pod::Target::BuildSettings

#target

Public API collapse

Paths collapse

Frameworks collapse

Libraries collapse

Clang collapse

Swift collapse

Linking collapse

Packaging collapse

Target Properties collapse

Methods inherited from Pod::Target::BuildSettings

#_ld_runpath_search_paths, #add_inherited_to_plural, #clang_warn_quoted_include_in_framework_header, #code_sign_identity, define_build_settings_method, #framework_search_paths_to_import_developer_frameworks, #gcc_preprocessor_definitions, #initialize_copy, #load_xcframework, #merge_spec_xcconfig_into_xcconfig, #merged_xcconfigs, #other_cflags, #other_ldflags, #pods_build_dir, #pods_configuration_build_dir, #pods_xcframeworks_build_dir, #quote_array, #save_as, #select_maximal_pod_targets, #to_h, #use_recursive_script_inputs_in_script_phases, xcframework_intermediate_dir

Constructor Details

#initialize(target, non_library_spec = nil, configuration: nil) ⇒ PodTargetSettings

Initializes a new instance

Parameters:

Since:

  • 1.5.0


570
571
572
573
574
575
576
577
578
579
580
581
582
583
# File 'lib/cocoapods/target/build_settings.rb', line 570

def initialize(target, non_library_spec = nil, configuration: nil)
  super(target)
  if @non_library_spec = non_library_spec
    @test_xcconfig = non_library_spec.test_specification?
    @app_xcconfig = non_library_spec.app_specification?
    @xcconfig_spec_type = non_library_spec.spec_type
    @library_xcconfig = false
  else
    @test_xcconfig = @app_xcconfig = false
    @xcconfig_spec_type = :library
    @library_xcconfig = true
  end
  (@configuration = configuration) || raise("No configuration for #{self}.")
end

Instance Attribute Details

#app_xcconfigBoolean (readonly) Also known as: app_xcconfig?

Returns whether settings are being generated for an application bundle.

Returns:

  • (Boolean)

    whether settings are being generated for an application bundle

Since:

  • 1.5.0


541
542
543
# File 'lib/cocoapods/target/build_settings.rb', line 541

def app_xcconfig
  @app_xcconfig
end

#library_xcconfigBoolean (readonly) Also known as: library_xcconfig?

Returns whether settings are being generated for an library bundle.

Returns:

  • (Boolean)

    whether settings are being generated for an library bundle

Since:

  • 1.5.0


547
548
549
# File 'lib/cocoapods/target/build_settings.rb', line 547

def library_xcconfig
  @library_xcconfig
end

#non_library_specSpecification (readonly)

Returns The non-library specification these build settings are for or nil.

Returns:

  • (Specification)

    The non-library specification these build settings are for or nil.

Since:

  • 1.5.0


557
558
559
# File 'lib/cocoapods/target/build_settings.rb', line 557

def non_library_spec
  @non_library_spec
end

#test_xcconfigBoolean (readonly) Also known as: test_xcconfig?

Returns whether settings are being generated for a test bundle.

Returns:

  • (Boolean)

    whether settings are being generated for a test bundle

Since:

  • 1.5.0


535
536
537
# File 'lib/cocoapods/target/build_settings.rb', line 535

def test_xcconfig
  @test_xcconfig
end

Class Method Details

.build_settings_namesObject


528
529
530
# File 'lib/cocoapods/target/build_settings.rb', line 528

def self.build_settings_names
  @build_settings_names | BuildSettings.build_settings_names
end

Instance Method Details

#application_extension_api_onlyString

The application_extension_api_only build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: application_extension_api_only, build_setting, memoized.

Returns:

  • (String)

1006
1007
1008
# File 'lib/cocoapods/target/build_settings.rb', line 1006

define_build_settings_method :application_extension_api_only, :build_setting => true, :memoized => true do
  target.application_extension_api_only ? 'YES' : nil
end

#build_library_for_distributionString

The build_library_for_distribution build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: build_library_for_distribution, build_setting, memoized.

Returns:

  • (String)

1011
1012
1013
# File 'lib/cocoapods/target/build_settings.rb', line 1011

define_build_settings_method :build_library_for_distribution, :build_setting => true, :memoized => true do
  target.build_library_for_distribution ? 'YES' : nil
end

#configuration_build_dirString

The configuration_build_dir build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: configuration_build_dir, build_setting, memoized.

Returns:

  • (String)

1000
1001
1002
1003
# File 'lib/cocoapods/target/build_settings.rb', line 1000

define_build_settings_method :configuration_build_dir, :build_setting => true, :memoized => true do
  return if non_library_xcconfig?
  target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE)
end

#consumer_frameworksArray<String>

The consumer_frameworks build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: consumer_frameworks, memoized.

Returns:

  • (Array<String>)

615
616
617
# File 'lib/cocoapods/target/build_settings.rb', line 615

define_build_settings_method :consumer_frameworks, :memoized => true do
  spec_consumers.flat_map(&:frameworks)
end

#dependent_targetsArray<PodTarget>

The dependent_targets build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: dependent_targets, memoized.

Returns:


1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
# File 'lib/cocoapods/target/build_settings.rb', line 1020

define_build_settings_method :dependent_targets, :memoized => true do
  select_maximal_pod_targets(
    if test_xcconfig?
      target.dependent_targets_for_test_spec(non_library_spec, :configuration => @configuration)
    elsif app_xcconfig?
      target.dependent_targets_for_app_spec(non_library_spec, :configuration => @configuration)
    else
      target.recursive_dependent_targets(:configuration => @configuration)
    end,
  )
end

The dependent_targets_to_link build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: dependent_targets_to_link, memoized.

Returns:


1033
1034
1035
1036
1037
1038
1039
1040
1041
# File 'lib/cocoapods/target/build_settings.rb', line 1033

define_build_settings_method :dependent_targets_to_link, :memoized => true do
  if test_xcconfig?
    # we're embedding into an app defined by an app spec
    host_targets = target.app_host_dependent_targets_for_spec(non_library_spec, :configuration => @configuration)
    dependent_targets - host_targets
  else
    dependent_targets
  end
end

#dynamic_frameworks_to_importArray<String>

The dynamic_frameworks_to_import build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: dynamic_frameworks_to_import, memoized.

Returns:

  • (Array<String>)

665
666
667
668
669
670
671
672
673
674
# File 'lib/cocoapods/target/build_settings.rb', line 665

define_build_settings_method :dynamic_frameworks_to_import, :memoized => true do
  dynamic_frameworks_to_import = vendored_dynamic_frameworks.map { |f| File.basename(f, '.framework') }
  dynamic_frameworks_to_import.concat vendored_xcframeworks.
    select { |xcf| xcf.build_type.dynamic_framework? }.
    map(&:name).
    uniq
  dynamic_frameworks_to_import << target.product_basename if target.should_build? && target.build_as_dynamic_framework?
  dynamic_frameworks_to_import.concat consumer_frameworks
  dynamic_frameworks_to_import
end

#dynamic_libraries_to_importArray<String>

The dynamic_libraries_to_import build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: dynamic_libraries_to_import, memoized.

Returns:

  • (Array<String>)

808
809
810
811
812
813
# File 'lib/cocoapods/target/build_settings.rb', line 808

define_build_settings_method :dynamic_libraries_to_import, :memoized => true do
  dynamic_libraries_to_import = linker_names_from_libraries(vendored_dynamic_libraries)
  dynamic_libraries_to_import.concat spec_consumers.flat_map(&:libraries)
  dynamic_libraries_to_import << target.product_basename if target.should_build? && target.build_as_dynamic_library?
  dynamic_libraries_to_import
end

#file_accessorsArray<Sandbox::FileAccessor>

The file_accessors build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: file_accessors, memoized.

Returns:


1067
1068
1069
1070
1071
1072
1073
# File 'lib/cocoapods/target/build_settings.rb', line 1067

define_build_settings_method :file_accessors, :memoized => true do
  if non_library_xcconfig?
    target.file_accessors.select { |fa| non_library_spec == fa.spec }
  else
    target.file_accessors.select { |fa| fa.spec.spec_type == @xcconfig_spec_type }
  end
end

#framework_header_search_pathString

The framework_header_search_path build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: framework_header_search_path, memoized.

Returns:

  • (String)

705
706
707
708
# File 'lib/cocoapods/target/build_settings.rb', line 705

define_build_settings_method :framework_header_search_path, :memoized => true do
  return unless target.build_as_framework?
  "#{target.build_product_path}/Headers"
end

#framework_search_pathsArray<String>

The framework_search_paths build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: framework_search_paths, build_setting, memoized, sorted, uniqued.

Returns:

  • (Array<String>)

696
697
698
699
700
701
702
# File 'lib/cocoapods/target/build_settings.rb', line 696

define_build_settings_method :framework_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true do
  paths = super().dup
  paths.concat dependent_targets.flat_map { |pt| pt.build_settings[@configuration].framework_search_paths_to_import }
  paths.concat framework_search_paths_to_import
  paths.delete(target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE)) if library_xcconfig?
  paths
end

#framework_search_paths_to_importArray<String>

The framework_search_paths_to_import build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: framework_search_paths_to_import, memoized.

Returns:

  • (Array<String>)

725
726
727
728
729
730
731
# File 'lib/cocoapods/target/build_settings.rb', line 725

define_build_settings_method :framework_search_paths_to_import, :memoized => true do
  paths = framework_search_paths_to_import_developer_frameworks(consumer_frameworks)
  paths.concat vendored_framework_search_paths
  return paths unless target.build_as_framework? && target.should_build?

  paths + [target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE)]
end

#frameworksArray<String>

The frameworks build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: frameworks, memoized, sorted, uniqued.

Returns:

  • (Array<String>)

620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
# File 'lib/cocoapods/target/build_settings.rb', line 620

define_build_settings_method :frameworks, :memoized => true, :sorted => true, :uniqued => true do
  return [] if target.build_as_static? && library_xcconfig?

  frameworks = []
  frameworks.concat consumer_frameworks
  if library_xcconfig?
    # We know that this library target is being built dynamically based
    # on the guard above, so include any vendored static frameworks and vendored xcframeworks.
    if target.should_build?
      frameworks.concat vendored_static_frameworks.map { |l| File.basename(l, '.framework') }
      frameworks.concat vendored_xcframeworks.
        select { |xcf| xcf.build_type.static_framework? }.
        map(&:name).
        uniq

      # Include direct dynamic dependencies to the linker flags. We used to add those in the 'Link Binary With Libraries'
      # phase but we no longer do since we cannot differentiate between debug or release configurations within
      # that phase.
      frameworks.concat target.dependent_targets_by_config[@configuration].flat_map { |pt| pt.build_settings[@configuration].dynamic_frameworks_to_import }
    else
      # Also include any vendored dynamic frameworks of dependencies.
      frameworks.concat dependent_targets.reject(&:should_build?).flat_map { |pt| pt.build_settings[@configuration].dynamic_frameworks_to_import }
    end
  else
    frameworks.concat dependent_targets_to_link.flat_map { |pt| pt.build_settings[@configuration].frameworks_to_import }
  end

  frameworks
end

#frameworks_to_importArray<String>

The frameworks_to_import build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: frameworks_to_import, memoized, sorted, uniqued.

Returns:

  • (Array<String>)

686
687
688
# File 'lib/cocoapods/target/build_settings.rb', line 686

define_build_settings_method :frameworks_to_import, :memoized => true, :sorted => true, :uniqued => true do
  static_frameworks_to_import + dynamic_frameworks_to_import
end

#header_search_pathsArray<String>

The header_search_paths build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: header_search_paths, build_setting, memoized, sorted.

Returns:

  • (Array<String>)

901
902
903
904
905
906
907
908
909
910
911
912
# File 'lib/cocoapods/target/build_settings.rb', line 901

define_build_settings_method :header_search_paths, :build_setting => true, :memoized => true, :sorted => true do
  paths = target.header_search_paths(:include_dependent_targets_for_test_spec => test_xcconfig? && non_library_spec, :include_dependent_targets_for_app_spec => app_xcconfig? && non_library_spec, :configuration => @configuration)

  dependent_vendored_xcframeworks = []
  dependent_vendored_xcframeworks.concat vendored_xcframeworks
  dependent_vendored_xcframeworks.concat dependent_targets.flat_map { |pt| pt.build_settings[@configuration].vendored_xcframeworks }
  paths.concat dependent_vendored_xcframeworks.
    select { |xcf| xcf.build_type.static_library? }.
    map { |xcf| "#{BuildSettings.xcframework_intermediate_dir(xcf)}/Headers" }.
    compact
  paths
end

#ld_runpath_search_pathsArray<String>

The ld_runpath_search_paths build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: ld_runpath_search_paths, build_setting, memoized.

Returns:

  • (Array<String>)

979
980
981
982
983
# File 'lib/cocoapods/target/build_settings.rb', line 979

define_build_settings_method :ld_runpath_search_paths, :build_setting => true, :memoized => true do
  return if library_xcconfig?
  _ld_runpath_search_paths(:test_bundle => test_xcconfig?,
                           :uses_swift => other_swift_flags_without_swift? || dependent_targets.any?(&:uses_swift?))
end

#librariesArray<String>

The libraries build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: libraries, memoized, sorted, uniqued.

Returns:

  • (Array<String>)

772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
# File 'lib/cocoapods/target/build_settings.rb', line 772

define_build_settings_method :libraries, :memoized => true, :sorted => true, :uniqued => true do
  return [] if library_xcconfig? && target.build_as_static?

  libraries = []
  if non_library_xcconfig? || target.build_as_dynamic?
    libraries.concat linker_names_from_libraries(vendored_static_libraries)
    libraries.concat libraries_to_import
    xcframework_libraries = vendored_xcframeworks.
                            select { |xcf| xcf.build_type.static_library? }.
                            flat_map { |xcf| linker_names_from_libraries([xcf.slices.first.binary_path]) }.
                            uniq
    libraries.concat xcframework_libraries
  end
  if non_library_xcconfig?
    libraries.concat dependent_targets.flat_map { |pt| pt.build_settings[@configuration].dynamic_libraries_to_import }
    libraries.concat dependent_targets_to_link.flat_map { |pt| pt.build_settings[@configuration].static_libraries_to_import }
  end
  libraries
end

#libraries_to_importArray<String>

The libraries_to_import build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: libraries_to_import, memoized, sorted, uniqued.

Returns:

  • (Array<String>)

816
817
818
# File 'lib/cocoapods/target/build_settings.rb', line 816

define_build_settings_method :libraries_to_import, :memoized => true, :sorted => true, :uniqued => true do
  static_libraries_to_import + dynamic_libraries_to_import
end

#library_search_pathsArray<String>

The library_search_paths build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: library_search_paths, build_setting, memoized, sorted, uniqued.

Returns:

  • (Array<String>)

821
822
823
824
825
826
827
828
829
830
831
832
833
834
# File 'lib/cocoapods/target/build_settings.rb', line 821

define_build_settings_method :library_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true do
  library_search_paths = should_apply_xctunwrap_fix? ? ['$(PLATFORM_DIR)/Developer/usr/lib'] : []
  return library_search_paths if library_xcconfig? && target.build_as_static?

  library_search_paths.concat library_search_paths_to_import.dup
  library_search_paths.concat dependent_targets.flat_map { |pt| pt.build_settings[@configuration].vendored_dynamic_library_search_paths }
  if library_xcconfig?
    library_search_paths.delete(target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE))
  else
    library_search_paths.concat(dependent_targets.flat_map { |pt| pt.build_settings[@configuration].library_search_paths_to_import })
  end

  library_search_paths
end

#library_search_paths_to_importArray<String>

The library_search_paths_to_import build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: library_search_paths_to_import, memoized.

Returns:

  • (Array<String>)

865
866
867
868
869
870
871
872
873
874
875
# File 'lib/cocoapods/target/build_settings.rb', line 865

define_build_settings_method :library_search_paths_to_import, :memoized => true do
  search_paths = vendored_static_library_search_paths + vendored_dynamic_library_search_paths
  if target.uses_swift? || other_swift_flags_without_swift?
    search_paths << '/usr/lib/swift'
    search_paths << '${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}'
    search_paths << '$(PLATFORM_DIR)/Developer/Library/Frameworks' if test_xcconfig?
  end
  return search_paths if target.build_as_framework? || !target.should_build?

  search_paths << target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE)
end

#linker_names_from_libraries(libraries) ⇒ Array<String>

Converts array of library path references to just the names to use link each library, e.g. from '/path/to/libSomething.a' to 'Something'

Parameters:

  • libraries (Array<String>)

Returns:

  • (Array<String>)

Since:

  • 1.5.0


767
768
769
# File 'lib/cocoapods/target/build_settings.rb', line 767

def linker_names_from_libraries(libraries)
  libraries.map { |l| File.basename(l, File.extname(l)).sub(/\Alib/, '') }
end

#merged_pod_target_xcconfigsHash{String, String}

Merges the +pod_target_xcconfig+ for all pod targets into a single hash and warns on conflicting definitions.

The merged_pod_target_xcconfigs build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: merged_pod_target_xcconfigs, memoized.

Returns:

  • (Hash{String, String})

1061
1062
1063
1064
# File 'lib/cocoapods/target/build_settings.rb', line 1061

define_build_settings_method :merged_pod_target_xcconfigs, :memoized => true do
  merged_xcconfigs(pod_target_xcconfig_values_by_consumer_by_key, :pod_target_xcconfig,
                   :overriding => non_library_xcconfig? ? target.build_settings[@configuration].merged_pod_target_xcconfigs : {})
end

#module_map_file_to_importArray<String>

The module_map_file_to_import build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: module_map_file_to_import, memoized.

Returns:

  • (Array<String>)

887
888
889
890
891
892
893
894
895
896
897
898
# File 'lib/cocoapods/target/build_settings.rb', line 887

define_build_settings_method :module_map_file_to_import, :memoized => true do
  return unless target.should_build?
  return if target.build_as_framework? # framework module maps are automatically discovered
  return unless target.defines_module?

  if target.uses_swift?
    # for swift, we have a custom build phase that copies in the module map, appending the .Swift module
    "${PODS_CONFIGURATION_BUILD_DIR}/#{target.label}/#{target.product_module_name}.modulemap"
  else
    "${PODS_ROOT}/#{target.module_map_path.relative_path_from(target.sandbox.root)}"
  end
end

#module_map_filesArray<String>

The module_map_files build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: module_map_files, memoized.

Returns:

  • (Array<String>)

882
883
884
# File 'lib/cocoapods/target/build_settings.rb', line 882

define_build_settings_method :module_map_files, :memoized => true do
  dependent_targets.map { |pt| pt.build_settings[@configuration].module_map_file_to_import }.compact.sort
end

#non_library_xcconfig?Boolean

Returns:

  • (Boolean)

Since:

  • 1.5.0


550
551
552
# File 'lib/cocoapods/target/build_settings.rb', line 550

def non_library_xcconfig?
  !library_xcconfig?
end

#other_swift_flagsArray<String>

The other_swift_flags build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: other_swift_flags, build_setting, memoized.

Returns:

  • (Array<String>)

931
932
933
934
935
936
937
938
939
940
# File 'lib/cocoapods/target/build_settings.rb', line 931

define_build_settings_method :other_swift_flags, :build_setting => true, :memoized => true do
  return unless target.uses_swift? || other_swift_flags_without_swift?

  flags = super()
  flags << '-suppress-warnings' if target.inhibit_warnings? && library_xcconfig?
  if !target.build_as_framework? && target.defines_module? && library_xcconfig?
    flags.concat %w( -import-underlying-module -Xcc -fmodule-map-file=${SRCROOT}/${MODULEMAP_FILE} )
  end
  flags
end

#other_swift_flags_without_swift?Boolean

Returns:

  • (Boolean)

See Also:

Since:

  • 1.5.0


924
925
926
927
928
# File 'lib/cocoapods/target/build_settings.rb', line 924

def other_swift_flags_without_swift?
  return false if library_xcconfig?

  target.uses_swift_for_spec?(non_library_spec)
end

#pod_target_xcconfig_values_by_consumer_by_keyHash{String,Hash{Target,String}]

Returns the +pod_target_xcconfig+ for the pod target and its spec consumers grouped by keys

Returns:

  • (Hash{String,Hash{Target,String}])

    HashString,Hash{Target,String]

Since:

  • 1.5.0


1048
1049
1050
1051
1052
1053
1054
# File 'lib/cocoapods/target/build_settings.rb', line 1048

def pod_target_xcconfig_values_by_consumer_by_key
  spec_consumers.each_with_object({}) do |spec_consumer, hash|
    spec_consumer.pod_target_xcconfig.each do |k, v|
      (hash[k] ||= {})[spec_consumer] = v
    end
  end
end

#pods_development_languageString

The pods_development_language build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: pods_development_language, build_setting.

Returns:

  • (String)

606
607
608
# File 'lib/cocoapods/target/build_settings.rb', line 606

define_build_settings_method :pods_development_language, :build_setting => true do
  '${DEVELOPMENT_LANGUAGE}'
end

#pods_rootString

The pods_root build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: pods_root, build_setting.

Returns:

  • (String)

596
597
598
# File 'lib/cocoapods/target/build_settings.rb', line 596

define_build_settings_method :pods_root, :build_setting => true do
  '${SRCROOT}'
end

#pods_target_srcrootString

The pods_target_srcroot build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: pods_target_srcroot, build_setting.

Returns:

  • (String)

601
602
603
# File 'lib/cocoapods/target/build_settings.rb', line 601

define_build_settings_method :pods_target_srcroot, :build_setting => true do
  target.pod_target_srcroot
end

#product_bundle_identifierString

The product_bundle_identifier build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: product_bundle_identifier, build_setting.

Returns:

  • (String)

995
996
997
# File 'lib/cocoapods/target/build_settings.rb', line 995

define_build_settings_method :product_bundle_identifier, :build_setting => true do
  'org.cocoapods.${PRODUCT_NAME:rfc1034identifier}'
end

#public_header_search_pathsArray<String>

The public_header_search_paths build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: public_header_search_paths, memoized, sorted.

Returns:

  • (Array<String>)

915
916
917
# File 'lib/cocoapods/target/build_settings.rb', line 915

define_build_settings_method :public_header_search_paths, :memoized => true, :sorted => true do
  target.header_search_paths(:include_dependent_targets_for_test_spec => test_xcconfig? && non_library_spec, :include_dependent_targets_for_app_spec => app_xcconfig? && non_library_spec, :include_private_headers => false, :configuration => @configuration)
end

#requires_fobjc_arc?Boolean

The requires_fobjc_arc? build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: requires_fobjc_arc?, memoized.

Returns:

  • (Boolean)

    whether the -fobjc-arc linker flag is required.


973
974
975
976
# File 'lib/cocoapods/target/build_settings.rb', line 973

define_build_settings_method :requires_fobjc_arc?, :memoized => true do
  target.podfile.set_arc_compatibility_flag? &&
    file_accessors.any? { |fa| fa.spec_consumer.requires_arc? }
end

#requires_objc_linker_flag?Boolean

Note:

this is only true when generating build settings for a test bundle

Returns whether the -ObjC linker flag is required.

Returns:

  • (Boolean)

    whether the -ObjC linker flag is required.

Since:

  • 1.5.0


967
968
969
# File 'lib/cocoapods/target/build_settings.rb', line 967

def requires_objc_linker_flag?
  test_xcconfig? || app_xcconfig?
end

#should_apply_xctunwrap_fix?Boolean

Xcode 11 causes an issue with frameworks or libraries before 12.2 deployment target that link or are part of test bundles that use XCTUnwrap. Apple has provided an official work around for this.

The should_apply_xctunwrap_fix? build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: should_apply_xctunwrap_fix?, memoized.

Returns:

  • (Boolean)

    Whether to apply the fix or not.

See Also:


1091
1092
1093
1094
1095
1096
# File 'lib/cocoapods/target/build_settings.rb', line 1091

define_build_settings_method :should_apply_xctunwrap_fix?, :memoized => true do
  library_xcconfig? &&
    target.platform.name == :ios &&
    Version.new(target.platform.deployment_target) < Version.new('12.2') &&
    (frameworks_to_import + weak_frameworks_to_import).uniq.include?('XCTest')
end

#skip_installString

The skip_install build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: skip_install, build_setting.

Returns:

  • (String)

990
991
992
# File 'lib/cocoapods/target/build_settings.rb', line 990

define_build_settings_method :skip_install, :build_setting => true do
  'YES'
end

#spec_consumersArray<Specification::Consumer>

The spec_consumers build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: spec_consumers, memoized.

Returns:

  • (Array<Specification::Consumer>)

1076
1077
1078
1079
1080
1081
1082
# File 'lib/cocoapods/target/build_settings.rb', line 1076

define_build_settings_method :spec_consumers, :memoized => true do
  if non_library_xcconfig?
    target.spec_consumers.select { |sc| non_library_spec == sc.spec }
  else
    target.spec_consumers.select { |sc| sc.spec.spec_type == @xcconfig_spec_type }
  end
end

#static_frameworks_to_importArray<String>

The static_frameworks_to_import build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: static_frameworks_to_import, memoized.

Returns:

  • (Array<String>)

651
652
653
654
655
656
657
658
659
660
661
662
# File 'lib/cocoapods/target/build_settings.rb', line 651

define_build_settings_method :static_frameworks_to_import, :memoized => true do
  static_frameworks_to_import = []
  static_frameworks_to_import.concat vendored_static_frameworks.map { |f| File.basename(f, '.framework') } unless target.should_build? && target.build_as_dynamic?
  unless target.should_build? && target.build_as_dynamic?
    static_frameworks_to_import.concat vendored_xcframeworks.
      select { |xcf| xcf.build_type.static_framework? }.
      map(&:name).
      uniq
  end
  static_frameworks_to_import << target.product_basename if target.should_build? && target.build_as_static_framework?
  static_frameworks_to_import
end

#static_libraries_to_importArray<String>

The static_libraries_to_import build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: static_libraries_to_import, memoized.

Returns:

  • (Array<String>)

793
794
795
796
797
798
799
800
801
802
803
804
805
# File 'lib/cocoapods/target/build_settings.rb', line 793

define_build_settings_method :static_libraries_to_import, :memoized => true do
  static_libraries_to_import = []
  unless target.should_build? && target.build_as_dynamic?
    static_libraries_to_import.concat linker_names_from_libraries(vendored_static_libraries)
    xcframework_libraries = vendored_xcframeworks.
                            select { |xcf| xcf.build_type.static_library? }.
                            flat_map { |xcf| linker_names_from_libraries([xcf.slices.first.binary_path]) }.
                            uniq
    static_libraries_to_import.concat linker_names_from_libraries(xcframework_libraries)
  end
  static_libraries_to_import << target.product_basename if target.should_build? && target.build_as_static_library?
  static_libraries_to_import
end

#swift_include_pathsArray<String>

The swift_include_paths build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: swift_include_paths, build_setting, memoized, sorted, uniqued.

Returns:

  • (Array<String>)

943
944
945
946
947
948
949
950
# File 'lib/cocoapods/target/build_settings.rb', line 943

define_build_settings_method :swift_include_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true do
  paths = dependent_targets.flat_map { |pt| pt.build_settings[@configuration].swift_include_paths_to_import }
  paths.concat swift_include_paths_to_import if non_library_xcconfig?
  vendored_static_library_search_paths = dependent_targets.flat_map { |pt| pt.build_settings[@configuration].vendored_static_library_search_paths }
  paths.concat vendored_static_library_search_paths
  paths.concat ['$(PLATFORM_DIR)/Developer/usr/lib'] if should_apply_xctunwrap_fix?
  paths
end

#swift_include_paths_to_importArray<String>

The swift_include_paths_to_import build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: swift_include_paths_to_import, memoized.

Returns:

  • (Array<String>)

953
954
955
956
957
# File 'lib/cocoapods/target/build_settings.rb', line 953

define_build_settings_method :swift_include_paths_to_import, :memoized => true do
  return [] unless target.uses_swift? && !target.build_as_framework?

  [target.configuration_build_dir(CONFIGURATION_BUILD_DIR_VARIABLE)]
end

#system_framework_search_pathsArray<String>

The system_framework_search_paths build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: system_framework_search_paths, build_setting, memoized, sorted, uniqued.

Returns:

  • (Array<String>)

751
752
753
754
# File 'lib/cocoapods/target/build_settings.rb', line 751

define_build_settings_method :system_framework_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true do
  return ['$(PLATFORM_DIR)/Developer/Library/Frameworks'] if should_apply_xctunwrap_fix?
  []
end

#vendored_dynamic_frameworksArray<String>

The vendored_dynamic_frameworks build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: vendored_dynamic_frameworks, memoized.

Returns:

  • (Array<String>)

739
740
741
# File 'lib/cocoapods/target/build_settings.rb', line 739

define_build_settings_method :vendored_dynamic_frameworks, :memoized => true do
  file_accessors.flat_map(&:vendored_dynamic_frameworks)
end

#vendored_dynamic_librariesArray<String>

The vendored_dynamic_libraries build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: vendored_dynamic_libraries, memoized.

Returns:

  • (Array<String>)

842
843
844
# File 'lib/cocoapods/target/build_settings.rb', line 842

define_build_settings_method :vendored_dynamic_libraries, :memoized => true do
  file_accessors.flat_map(&:vendored_dynamic_libraries)
end

#vendored_dynamic_library_search_pathsArray<String>

The vendored_dynamic_library_search_paths build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: vendored_dynamic_library_search_paths, memoized.

Returns:

  • (Array<String>)

856
857
858
859
860
861
862
# File 'lib/cocoapods/target/build_settings.rb', line 856

define_build_settings_method :vendored_dynamic_library_search_paths, :memoized => true do
  paths = vendored_dynamic_libraries.map { |f| File.join '${PODS_ROOT}', f.dirname.relative_path_from(target.sandbox.root) }
  paths.concat vendored_xcframeworks.
    select { |xcf| xcf.build_type.dynamic_library? }.
    map { |xcf| BuildSettings.xcframework_intermediate_dir(xcf) }
  paths
end

#vendored_framework_search_pathsArray<String>

The vendored_framework_search_paths build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: vendored_framework_search_paths, memoized.

Returns:

  • (Array<String>)

711
712
713
714
715
716
717
718
719
720
721
722
# File 'lib/cocoapods/target/build_settings.rb', line 711

define_build_settings_method :vendored_framework_search_paths, :memoized => true do
  search_paths = []
  search_paths.concat file_accessors.
    flat_map(&:vendored_frameworks).
    map { |f| File.join '${PODS_ROOT}', f.dirname.relative_path_from(target.sandbox.root) }
  xcframework_intermediates = vendored_xcframeworks.
                              select { |xcf| xcf.build_type.framework? }.
                              map { |xcf| BuildSettings.xcframework_intermediate_dir(xcf) }.
                              uniq
  search_paths.concat xcframework_intermediates
  search_paths
end

#vendored_static_frameworksArray<String>

The vendored_static_frameworks build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: vendored_static_frameworks, memoized.

Returns:

  • (Array<String>)

734
735
736
# File 'lib/cocoapods/target/build_settings.rb', line 734

define_build_settings_method :vendored_static_frameworks, :memoized => true do
  file_accessors.flat_map(&:vendored_static_frameworks)
end

#vendored_static_librariesArray<String>

The vendored_static_libraries build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: vendored_static_libraries, memoized.

Returns:

  • (Array<String>)

837
838
839
# File 'lib/cocoapods/target/build_settings.rb', line 837

define_build_settings_method :vendored_static_libraries, :memoized => true do
  file_accessors.flat_map(&:vendored_static_libraries)
end

#vendored_static_library_search_pathsArray<String>

The vendored_static_library_search_paths build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: vendored_static_library_search_paths, memoized.

Returns:

  • (Array<String>)

847
848
849
850
851
852
853
# File 'lib/cocoapods/target/build_settings.rb', line 847

define_build_settings_method :vendored_static_library_search_paths, :memoized => true do
  paths = vendored_static_libraries.map { |f| File.join '${PODS_ROOT}', f.dirname.relative_path_from(target.sandbox.root) }
  paths.concat vendored_xcframeworks.
    select { |xcf| xcf.build_type.static_library? }.
    map { |xcf| BuildSettings.xcframework_intermediate_dir(xcf) }
  paths
end

#vendored_xcframeworksArray<Xcode::XCFramework>

The vendored_xcframeworks build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: vendored_xcframeworks, memoized.

Returns:


744
745
746
747
748
# File 'lib/cocoapods/target/build_settings.rb', line 744

define_build_settings_method :vendored_xcframeworks, :memoized => true do
  file_accessors.flat_map do |file_accessor|
    file_accessor.vendored_xcframeworks.map { |path| load_xcframework(file_accessor.spec.name, path) }
  end
end

#weak_frameworksArray<String>

The weak_frameworks build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: weak_frameworks, memoized.

Returns:

  • (Array<String>)

677
678
679
680
681
682
683
# File 'lib/cocoapods/target/build_settings.rb', line 677

define_build_settings_method :weak_frameworks, :memoized => true do
  return [] if target.build_as_static? && library_xcconfig?

  weak_frameworks = spec_consumers.flat_map(&:weak_frameworks)
  weak_frameworks.concat dependent_targets.flat_map { |pt| pt.build_settings[@configuration].weak_frameworks_to_import }
  weak_frameworks
end

#weak_frameworks_to_importArray<String>

The weak_frameworks_to_import build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: weak_frameworks_to_import, memoized, sorted, uniqued.

Returns:

  • (Array<String>)

691
692
693
# File 'lib/cocoapods/target/build_settings.rb', line 691

define_build_settings_method :weak_frameworks_to_import, :memoized => true, :sorted => true, :uniqued => true do
  spec_consumers.flat_map(&:weak_frameworks)
end

#xcconfigXcodeproj::Xconfig

The xcconfig build setting for the Pod::Target::BuildSettings#target.

The return value from this method will be: xcconfig, memoized.

Returns:

  • (Xcodeproj::Xconfig)

586
587
588
589
# File 'lib/cocoapods/target/build_settings.rb', line 586

define_build_settings_method :xcconfig, :memoized => true do
  xcconfig = super()
  merge_spec_xcconfig_into_xcconfig(merged_pod_target_xcconfigs, xcconfig)
end