class Pod::Installer::UserProjectIntegrator::TargetIntegrator
{TargetDefinition} with its destination project.
This class is responsible for integrating the library generated by a
def add_check_manifest_lock_script_phase
-
(void)-
Other tags:
- Note: - The build phase is appended to the front because to fail
def add_check_manifest_lock_script_phase phase_name = 'Check Pods Manifest.lock' native_targets.each do |native_target| next if native_target.shell_script_build_phases.any? { |phase| phase.name == phase_name } phase = native_target.project.new(Xcodeproj::Project::Object::PBXShellScriptBuildPhase) native_target.build_phases.unshift(phase) phase.name = phase_name phase.shell_script = <<-EOS.strip_heredoc diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null if [[ $? != 0 ]] ; then cat << EOM error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation. EOM exit 1 fi EOS phase.show_env_vars_in_log = '0' end end
def add_copy_resources_script_phase
-
(void)-
def add_copy_resources_script_phase phase_name = "Copy Pods Resources" native_targets.each do |native_target| phase = native_target.shell_script_build_phases.select { |bp| bp.name == phase_name }.first || native_target.new_shell_script_build_phase(phase_name) path = target.copy_resources_script_relative_path phase.shell_script = %{"#{path}"\n} phase.show_env_vars_in_log = '0' end end
def add_pods_library
-
(void)-
def add_pods_library frameworks = user_project.frameworks_group native_targets.each do |native_target| library = frameworks.files.select { |f| f.path == target.product_name }.first || frameworks.new_product_ref_for_target(target.name, :static_library) unless native_target.frameworks_build_phase.files_references.include?(library) native_target.frameworks_build_phase.add_file_reference(library) end end end
def add_xcconfig_base_configuration
-
(void)-
Other tags:
- Todo: - If the xcconfig is already set don't override it and inform
Other tags:
- Note: - It also checks if any build setting of the build
def add_xcconfig_base_configuration xcconfig = user_project.files.select { |f| f.path == target.xcconfig_relative_path }.first || user_project.new_file(target.xcconfig_relative_path) native_targets.each do |native_target| check_overridden_build_settings(target.xcconfig, native_target) native_target.build_configurations.each do |config| config.base_configuration_reference = xcconfig end end end
def check_overridden_build_settings(xcconfig, native_target)
-
(void)-
def check_overridden_build_settings(xcconfig, native_target) return unless xcconfig configs_by_overridden_key = {} native_target.build_configurations.each do |config| xcconfig.attributes.keys.each do |key| target_value = config.build_settings[key] if target_value && !target_value.include?('$(inherited)') configs_by_overridden_key[key] ||= [] configs_by_overridden_key[key] << config.name end end configs_by_overridden_key.each do |key, config_names| name = "#{native_target.name} [#{config_names.join(' - ')}]" actions = [ "Use the `$(inherited)` flag, or", "Remove the build settings from the target." ] UI.warn("The target `#{name}` overrides the `#{key}` build " \ "setting defined in `#{target.xcconfig_relative_path}'.", actions) end end end
def initialize(target)
-
target(Target) -- @see #target_definition
def initialize(target) @target = target end
def inspect
-
(String)- a string representation suitable for debugging.
def inspect "#<#{self.class} for target `#{target.label}'>" end
def integrate!
-
(void)-
def integrate! return if native_targets.empty? UI.section(integration_message) do add_xcconfig_base_configuration add_pods_library add_copy_resources_script_phase add_check_manifest_lock_script_phase user_project.save end end
def integration_message
-
(String)- the message that should be displayed for the target
def integration_message "Integrating Pod #{'target'.pluralize(target.pod_targets.size)} " \ "`#{target.pod_targets.map(&:name).to_sentence}` " \ "into aggregate target #{target.name} " \ "of project #{UI.path target.user_project_path}." end
def native_targets
-
(Array- the user targets for integration.)
def native_targets unless @native_targets target_uuids = target.user_target_uuids native_targets = target_uuids.map do |uuid| native_target = user_project.objects_by_uuid[uuid] unless native_target raise Informative, "[Bug] Unable to find the target with " \ "the `#{uuid}` UUID for the `#{target}` integration library" end native_target end non_integrated = native_targets.reject do |native_target| native_target.frameworks_build_phase.files.any? do |build_file| file_ref = build_file.file_ref file_ref && file_ref.isa == 'PBXFileReference' && file_ref.display_name == target.product_name end end @native_targets = non_integrated end @native_targets end
def pods_project
other TargetIntegrators might have modified it.
Read the pods project from the disk to ensure that it is up to date as
def pods_project @pods_project ||= Xcodeproj::Project.open(target.sandbox.project_path) end
def spec_consumers
-
(Specification::Consumer)- the consumer for the specifications.
def spec_consumers @spec_consumers ||= target.pod_targets.map(&:file_accessors).flatten.map(&:spec_consumer) end
def user_project
other TargetIntegrators might have modified it.
Read the project from the disk to ensure that it is up to date as
def user_project @user_project ||= Xcodeproj::Project.open(target.user_project_path) end