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

#clang_warn_quoted_include_in_framework_header, #code_sign_identity, #framework_search_paths_to_import_developer_frameworks, #gcc_preprocessor_definitions, #initialize_copy, #other_cflags, #other_ldflags, #pods_build_dir, #pods_configuration_build_dir, #pods_xcframeworks_build_dir, #save_as, #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



560
561
562
563
564
565
566
567
568
569
570
571
572
573
# File 'lib/cocoapods/target/build_settings.rb', line 560

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



531
532
533
# File 'lib/cocoapods/target/build_settings.rb', line 531

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



537
538
539
# File 'lib/cocoapods/target/build_settings.rb', line 537

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



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

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



525
526
527
# File 'lib/cocoapods/target/build_settings.rb', line 525

def test_xcconfig
  @test_xcconfig
end

Class Method Details

.build_settings_namesObject



518
519
520
# File 'lib/cocoapods/target/build_settings.rb', line 518

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)


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

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)


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

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)


969
970
971
972
# File 'lib/cocoapods/target/build_settings.rb', line 969

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>)


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

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:



989
990
991
992
993
994
995
996
997
998
999
# File 'lib/cocoapods/target/build_settings.rb', line 989

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:



1002
1003
1004
1005
1006
1007
1008
1009
1010
# File 'lib/cocoapods/target/build_settings.rb', line 1002

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>)


644
645
646
647
648
649
650
651
652
653
# File 'lib/cocoapods/target/build_settings.rb', line 644

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>)


785
786
787
788
789
790
# File 'lib/cocoapods/target/build_settings.rb', line 785

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:



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

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)


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

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>)


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

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>)


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

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>)


605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
# File 'lib/cocoapods/target/build_settings.rb', line 605

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
    end
    # 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 }
  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>)


665
666
667
# File 'lib/cocoapods/target/build_settings.rb', line 665

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>)


873
874
875
876
877
878
879
880
881
882
883
884
# File 'lib/cocoapods/target/build_settings.rb', line 873

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>)


949
950
951
952
# File 'lib/cocoapods/target/build_settings.rb', line 949

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?)
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>)


749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
# File 'lib/cocoapods/target/build_settings.rb', line 749

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>)


793
794
795
# File 'lib/cocoapods/target/build_settings.rb', line 793

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>)


798
799
800
801
802
803
804
805
806
807
808
809
810
811
# File 'lib/cocoapods/target/build_settings.rb', line 798

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>)


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

define_build_settings_method :library_search_paths_to_import, :memoized => true do
  vendored_library_search_paths = vendored_static_library_search_paths + vendored_dynamic_library_search_paths
  return vendored_library_search_paths if target.build_as_framework? || !target.should_build?

  vendored_library_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



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

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})


1030
1031
1032
1033
# File 'lib/cocoapods/target/build_settings.rb', line 1030

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>)


859
860
861
862
863
864
865
866
867
868
869
870
# File 'lib/cocoapods/target/build_settings.rb', line 859

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>)


854
855
856
# File 'lib/cocoapods/target/build_settings.rb', line 854

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



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

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>)


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

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



896
897
898
899
900
# File 'lib/cocoapods/target/build_settings.rb', line 896

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



1017
1018
1019
1020
1021
1022
1023
# File 'lib/cocoapods/target/build_settings.rb', line 1017

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_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)


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

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)


591
592
593
# File 'lib/cocoapods/target/build_settings.rb', line 591

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)


964
965
966
# File 'lib/cocoapods/target/build_settings.rb', line 964

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>)


887
888
889
# File 'lib/cocoapods/target/build_settings.rb', line 887

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.



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

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



937
938
939
# File 'lib/cocoapods/target/build_settings.rb', line 937

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:



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

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)


959
960
961
# File 'lib/cocoapods/target/build_settings.rb', line 959

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>)


1045
1046
1047
1048
1049
1050
1051
# File 'lib/cocoapods/target/build_settings.rb', line 1045

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>)


630
631
632
633
634
635
636
637
638
639
640
641
# File 'lib/cocoapods/target/build_settings.rb', line 630

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>)


770
771
772
773
774
775
776
777
778
779
780
781
782
# File 'lib/cocoapods/target/build_settings.rb', line 770

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>)


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

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?
  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>)


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

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>)


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

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>)


718
719
720
# File 'lib/cocoapods/target/build_settings.rb', line 718

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>)


819
820
821
# File 'lib/cocoapods/target/build_settings.rb', line 819

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>)


833
834
835
836
837
838
839
# File 'lib/cocoapods/target/build_settings.rb', line 833

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>)


690
691
692
693
694
695
696
697
698
699
700
701
# File 'lib/cocoapods/target/build_settings.rb', line 690

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>)


713
714
715
# File 'lib/cocoapods/target/build_settings.rb', line 713

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>)


814
815
816
# File 'lib/cocoapods/target/build_settings.rb', line 814

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>)


824
825
826
827
828
829
830
# File 'lib/cocoapods/target/build_settings.rb', line 824

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:



723
724
725
# File 'lib/cocoapods/target/build_settings.rb', line 723

define_build_settings_method :vendored_xcframeworks, :memoized => true do
  file_accessors.flat_map(&:vendored_xcframeworks).map { |path| load_xcframework(path) }
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>)


656
657
658
659
660
661
662
# File 'lib/cocoapods/target/build_settings.rb', line 656

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>)


670
671
672
# File 'lib/cocoapods/target/build_settings.rb', line 670

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)


576
577
578
579
# File 'lib/cocoapods/target/build_settings.rb', line 576

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