class XcodeArchiveCache::Injection::HeadersMover

Attributes

build_settings_interpolator[R]

@return [XcodeArchiveCache::BuildSettings::StringInterpolator]

modulemap_header_path_extractor[R]

@return [XcodeArchiveCache::Modulemap::HeaderPathExtractor]

storage[R]

@return [Storage]

Public Class Methods

new(storage) click to toggle source

@param [Storage] storage

# File lib/injection/headers_mover.rb, line 9
def initialize(storage)
  @storage = storage
  @build_settings_interpolator = XcodeArchiveCache::BuildSettings::StringInterpolator.new
  @modulemap_header_path_extractor = XcodeArchiveCache::Modulemap::HeaderPathExtractor.new
end

Public Instance Methods

prepare_headers_for_injection(node) click to toggle source

@param [XcodeArchiveCache::BuildGraph::Node] node

# File lib/injection/headers_mover.rb, line 17
def prepare_headers_for_injection(node)
  debug("checking #{node.name} headers")
  header_count = 0

  node.native_target.copy_files_build_phases.each do |build_phase|
    file_paths = build_phase.files
                     .map { |build_file| get_real_path(build_file) }
                     .compact
                     .uniq
                     .select { |path| File.extname(path) == ".h" }
    destination_path = get_destination_dir_path(node, build_phase)
    storage.store_headers(node, destination_path, file_paths)

    header_count += file_paths.length
  end

  if node.has_static_library_product?
    headers_file_paths = node.native_target
                             .headers_build_phase
                             .files
                             .select { |file| file.settings && file.settings["ATTRIBUTES"].include?("Public") }
                             .map { |header| get_real_path(header) }
                             .uniq
    storage.store_default_headers(node, headers_file_paths)

    header_count += headers_file_paths.length
  end

  modulemap_file_path = node.original_modulemap_file_path
  if modulemap_file_path && File.exist?(modulemap_file_path)
    header_file_paths = modulemap_header_path_extractor.extract_all_paths(modulemap_file_path)
    storage.store_modulemap_headers(node, header_file_paths)
    header_count += header_file_paths.length
  end

  debug("found #{header_count} header(s)")
end

Private Instance Methods

get_destination_dir_path(node, build_phase) click to toggle source

@param [XcodeArchiveCache::BuildGraph::Node] node @param [Xcodeproj::Project::Object::PBXCopyFilesBuildPhase] build_phase

@return [String]

# File lib/injection/headers_mover.rb, line 84
def get_destination_dir_path(node, build_phase)
  build_settings_interpolator.interpolate(build_phase.dst_path, node.build_settings)
end
get_real_path(build_file) click to toggle source

@param [Xcodeproj::Project::Object::PBXBuildFile] build_file

@return [String]

# File lib/injection/headers_mover.rb, line 73
def get_real_path(build_file)
  if build_file.file_ref.is_a?(Xcodeproj::Project::Object::PBXFileReference)
    build_file.file_ref.real_path.to_s
  end
end