Class: Pod::Target::BuildSettings::AggregateTargetSettings

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

Target Properties collapse

EMBED_STANDARD_LIBRARIES_MINIMUM_VERSION =

Since:

  • 1.5.0

Version.new('2.3')

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

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_ldflags, #other_swift_flags, #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, configuration_name, configuration: nil) ⇒ AggregateTargetSettings

Initializes a new instance

Parameters:

Since:

  • 1.5.0


1084
1085
1086
1087
1088
# File 'lib/cocoapods/target/build_settings.rb', line 1084

def initialize(target, configuration_name, configuration: nil)
  super(target)
  @configuration_name = configuration_name
  (@configuration = configuration) || raise("No configuration for #{self}.")
end

Instance Attribute Details

#configuration_nameSymbol (readonly)

Returns The build configuration these settings will be used for.

Returns:

  • (Symbol)

    The build configuration these settings will be used for

Since:

  • 1.5.0


1074
1075
1076
# File 'lib/cocoapods/target/build_settings.rb', line 1074

def configuration_name
  @configuration_name
end

Class Method Details

.build_settings_namesObject


1068
1069
1070
# File 'lib/cocoapods/target/build_settings.rb', line 1068

def self.build_settings_names
  @build_settings_names | BuildSettings.build_settings_names
end

Instance Method Details

#always_embed_swift_standard_librariesString

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

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

Returns:

  • (String)

1216
1217
1218
1219
1220
1221
# File 'lib/cocoapods/target/build_settings.rb', line 1216

define_build_settings_method :always_embed_swift_standard_libraries, :build_setting => true, :memoized => true do
  return unless must_embed_swift?
  return if target_swift_version < EMBED_STANDARD_LIBRARIES_MINIMUM_VERSION

  'YES'
end

#any_vendored_dynamic_artifacts?Boolean

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

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

Returns:

  • (Boolean)

1249
1250
1251
1252
1253
1254
1255
# File 'lib/cocoapods/target/build_settings.rb', line 1249

define_build_settings_method :any_vendored_dynamic_artifacts?, :memoized => true do
  pod_targets.any? do |pt|
    pt.file_accessors.any? do |fa|
      !fa.vendored_dynamic_artifacts.empty?
    end
  end
end

#any_vendored_static_artifacts?Boolean

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

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

Returns:

  • (Boolean)

1258
1259
1260
1261
1262
1263
1264
# File 'lib/cocoapods/target/build_settings.rb', line 1258

define_build_settings_method :any_vendored_static_artifacts?, :memoized => true do
  pod_targets.any? do |pt|
    pt.file_accessors.any? do |fa|
      !fa.vendored_static_artifacts.empty?
    end
  end
end

#embedded_content_contains_swiftString

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

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

Returns:

  • (String)

1224
1225
1226
1227
1228
1229
# File 'lib/cocoapods/target/build_settings.rb', line 1224

define_build_settings_method :embedded_content_contains_swift, :build_setting => true, :memoized => true do
  return unless must_embed_swift?
  return if target_swift_version >= EMBED_STANDARD_LIBRARIES_MINIMUM_VERSION

  'YES'
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, from_pod_targets_to_link, from_search_paths_aggregate_targets.

Returns:

  • (Array<String>)

1125
1126
1127
# File 'lib/cocoapods/target/build_settings.rb', line 1125

define_build_settings_method :framework_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets_to_link => true, :from_search_paths_aggregate_targets => :framework_search_paths_to_import do
  []
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, from_pod_targets_to_link, from_search_paths_aggregate_targets.

Returns:

  • (Array<String>)

1115
1116
1117
# File 'lib/cocoapods/target/build_settings.rb', line 1115

define_build_settings_method :frameworks, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets_to_link => true, :from_search_paths_aggregate_targets => :dynamic_frameworks_to_import do
  []
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, uniqued.

Returns:

  • (Array<String>)

1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
# File 'lib/cocoapods/target/build_settings.rb', line 1148

define_build_settings_method :header_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true do
  paths = []

  if !target.build_as_framework? || !pod_targets.all?(&:should_build?)
    paths.concat target.sandbox.public_headers.search_paths(target.platform)
  end

  # Make frameworks headers discoverable with any syntax (quotes,
  # brackets, @import, etc.)
  paths.concat pod_targets.
    select { |pt| pt.build_as_framework? && pt.should_build? }.
    map { |pt| pt.build_settings[@configuration].framework_header_search_path }

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

  paths.concat xcframework_library_headers

  paths.concat target.search_paths_aggregate_targets.flat_map { |at| at.build_settings(configuration_name).header_search_paths }

  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, uniqued.

Returns:

  • (Array<String>)

1241
1242
1243
1244
1245
1246
# File 'lib/cocoapods/target/build_settings.rb', line 1241

define_build_settings_method :ld_runpath_search_paths, :build_setting => true, :memoized => true, :uniqued => true do
  return unless pod_targets.any?(&:build_as_dynamic?) || any_vendored_dynamic_artifacts?
  symbol_type = target.user_targets.map(&:symbol_type).uniq.first
  test_bundle = symbol_type == :octest_bundle || symbol_type == :unit_test_bundle || symbol_type == :ui_test_bundle
  _ld_runpath_search_paths(:requires_host_target => target.requires_host_target?, :test_bundle => test_bundle)
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, from_pod_targets_to_link, from_search_paths_aggregate_targets.

Returns:

  • (Array<String>)

1134
1135
1136
# File 'lib/cocoapods/target/build_settings.rb', line 1134

define_build_settings_method :libraries, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets_to_link => true, :from_search_paths_aggregate_targets => :dynamic_libraries_to_import do
  []
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, from_pod_targets_to_link, from_search_paths_aggregate_targets.

Returns:

  • (Array<String>)

1139
1140
1141
# File 'lib/cocoapods/target/build_settings.rb', line 1139

define_build_settings_method :library_search_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets_to_link => true, :from_search_paths_aggregate_targets => :vendored_dynamic_library_search_paths do
  []
end

#merged_user_target_xcconfigsHash{String, String}

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

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

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

Returns:

  • (Hash{String, String})

1341
1342
1343
# File 'lib/cocoapods/target/build_settings.rb', line 1341

define_build_settings_method :merged_user_target_xcconfigs, :memoized => true do
  merged_xcconfigs(user_target_xcconfig_values_by_consumer_by_key, :user_target_xcconfig)
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, sorted, uniqued, compacted, from_search_paths_aggregate_targets.

Returns:

  • (Array<String>)

1197
1198
1199
# File 'lib/cocoapods/target/build_settings.rb', line 1197

define_build_settings_method :module_map_files, :memoized => true, :sorted => true, :uniqued => true, :compacted => true, :from_search_paths_aggregate_targets => :module_map_file_to_import do
  pod_targets.map { |pt| pt.build_settings[@configuration].module_map_file_to_import }
end

#must_embed_swift?Boolean

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

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

Returns:

  • (Boolean)

1232
1233
1234
# File 'lib/cocoapods/target/build_settings.rb', line 1232

define_build_settings_method :must_embed_swift?, :memoized => true do
  !target.requires_host_target? && pod_targets.any?(&:uses_swift?)
end

#other_cflagsArray<String>

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

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

Returns:

  • (Array<String>)

1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
# File 'lib/cocoapods/target/build_settings.rb', line 1174

define_build_settings_method :other_cflags, :build_setting => true, :memoized => true do
  flags = super()

  pod_targets_inhibiting_warnings = pod_targets.select(&:inhibit_warnings?)

  silenced_headers = []
  silenced_frameworks = []
  pod_targets_inhibiting_warnings.each do |pt|
    if pt.build_as_framework? && pt.should_build?
      silenced_headers.append pt.build_settings[@configuration].framework_header_search_path
    else
      silenced_headers.concat pt.build_settings[@configuration].public_header_search_paths
    end
    silenced_frameworks.concat pt.build_settings[@configuration].framework_search_paths_to_import
  end

  flags += silenced_headers.uniq.flat_map { |p| ['-isystem', p] }
  flags += silenced_frameworks.uniq.flat_map { |p| ['-iframework', p] }

  flags
end

#other_swift_flags_without_swift?Boolean

Returns:

  • (Boolean)

See Also:

Since:

  • 1.5.0


1206
1207
1208
# File 'lib/cocoapods/target/build_settings.rb', line 1206

def other_swift_flags_without_swift?
  module_map_files.any?
end

#pod_targetsArray<PodTarget>

Returns the PodTargets which are active for the current configuration name.

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

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

Returns:


1298
1299
1300
# File 'lib/cocoapods/target/build_settings.rb', line 1298

define_build_settings_method :pod_targets, :memoized => true do
  target.pod_targets_for_build_configuration(configuration_name)
end

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

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

Returns:


1303
1304
1305
1306
# File 'lib/cocoapods/target/build_settings.rb', line 1303

define_build_settings_method :pod_targets_to_link, :memoized => true do
  pod_targets -
    target.search_paths_aggregate_targets.flat_map { |at| at.build_settings(configuration_name).pod_targets_to_link }
end

#pods_podfile_dir_pathString

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

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

Returns:

  • (String)

1101
1102
1103
# File 'lib/cocoapods/target/build_settings.rb', line 1101

define_build_settings_method :pods_podfile_dir_path, :build_setting => true, :memoized => true do
  target.podfile_dir_relative_path
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, memoized.

Returns:

  • (String)

1106
1107
1108
# File 'lib/cocoapods/target/build_settings.rb', line 1106

define_build_settings_method :pods_root, :build_setting => true, :memoized => true do
  target.relative_pods_root
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)

1273
1274
1275
1276
# File 'lib/cocoapods/target/build_settings.rb', line 1273

define_build_settings_method :requires_fobjc_arc?, :memoized => true do
  target.podfile.set_arc_compatibility_flag? &&
  target.spec_consumers.any?(&:requires_arc?)
end

#requires_objc_linker_flag?Boolean

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

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

Returns:

  • (Boolean)

1267
1268
1269
1270
# File 'lib/cocoapods/target/build_settings.rb', line 1267

define_build_settings_method :requires_objc_linker_flag?, :memoized => true do
  pod_targets.any?(&:build_as_static?) ||
    any_vendored_static_artifacts?
end

#search_paths_aggregate_target_pod_target_build_settingsArray<PodTarget>

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

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

Returns:


1309
1310
1311
1312
1313
# File 'lib/cocoapods/target/build_settings.rb', line 1309

define_build_settings_method :search_paths_aggregate_target_pod_target_build_settings, :memoized => true, :uniqued => true do
  pod_targets = target.search_paths_aggregate_targets.flat_map { |at| at.build_settings(configuration_name).pod_targets }
  pod_targets = select_maximal_pod_targets(pod_targets)
  pod_targets.map { |pt| pt.build_settings[@configuration] }
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, from_pod_targets_to_link, from_search_paths_aggregate_targets.

Returns:

  • (Array<String>)

1211
1212
1213
# File 'lib/cocoapods/target/build_settings.rb', line 1211

define_build_settings_method :swift_include_paths, :build_setting => true, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets_to_link => true, :from_search_paths_aggregate_targets => :swift_include_paths_to_import do
  []
end

#target_swift_versionVersion

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

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

Returns:

  • (Version)

    the SWIFT_VERSION of the target being integrated


1284
1285
1286
1287
1288
# File 'lib/cocoapods/target/build_settings.rb', line 1284

define_build_settings_method :target_swift_version, :memoized => true, :frozen => false do
  swift_version = target.target_definition.swift_version
  swift_version = nil if swift_version.blank?
  Version.new(swift_version)
end

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

Returns the +user_target_xcconfig+ for all pod targets and their spec consumers grouped by keys

Returns:

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

    HashString,Hash{Target,String]

Since:

  • 1.5.0


1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
# File 'lib/cocoapods/target/build_settings.rb', line 1320

def user_target_xcconfig_values_by_consumer_by_key
  targets = (pod_targets + target.search_paths_aggregate_targets.flat_map(&:pod_targets)).uniq
  targets.each_with_object({}) do |target, hash|
    target.spec_consumers.each do |spec_consumer|
      spec_consumer.user_target_xcconfig.each do |k, v|
        # TODO: Need to decide how we are going to ensure settings like these
        # are always excluded from the user's project.
        #
        # See https://github.com/CocoaPods/CocoaPods/issues/1216
        next if k == 'USE_HEADERMAP'
        (hash[k] ||= {})[spec_consumer] = v
      end
    end
  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, sorted, uniqued, from_pod_targets_to_link, from_search_paths_aggregate_targets.

Returns:

  • (Array<String>)

1120
1121
1122
# File 'lib/cocoapods/target/build_settings.rb', line 1120

define_build_settings_method :weak_frameworks, :memoized => true, :sorted => true, :uniqued => true, :from_pod_targets_to_link => true, :from_search_paths_aggregate_targets => :weak_frameworks do
  []
end

#xcconfigXcodeproj::Config

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

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

Returns:

  • (Xcodeproj::Config)

    xcconfig


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

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