Class: XcodeArchiveCache::BuildGraph::NativeTargetFinder

Inherits:
Object
  • Object
show all
Defined in:
lib/build_graph/native_target_finder.rb

Instance Method Summary collapse

Constructor Details

#initialize(projects) ⇒ NativeTargetFinder

Returns a new instance of NativeTargetFinder.

Parameters:

  • projects (Array<Xcodeproj::Project>)


7
8
9
10
11
12
13
14
15
# File 'lib/build_graph/native_target_finder.rb', line 7

def initialize(projects)
  @all_targets = projects
                     .map {|project| unnest(project)}
                     .flatten
                     .uniq
                     .map(&:native_targets)
                     .flatten
                     .select {|target| !target.test_target_type? }
end

Instance Method Details

#find_for_dependency(dependency) ⇒ Xcodeproj::Project::Object::PBXNativeTarget

Parameters:

  • dependency (Xcodeproj::Project::Object::PBXTargetDependency)

Returns:

  • (Xcodeproj::Project::Object::PBXNativeTarget)


27
28
29
30
31
# File 'lib/build_graph/native_target_finder.rb', line 27

def find_for_dependency(dependency)
  # targets from embedded projects are proxied
  target = dependency.target ? dependency.target : dependency.target_proxy.proxied_object
  target.is_a?(Xcodeproj::Project::Object::PBXNativeTarget) ? target : nil
end

#find_for_file(file) ⇒ Xcodeproj::Project::Object::PBXNativeTarget

Parameters:

  • file (Xcodeproj::Project::Object::PBXBuildFile)

Returns:

  • (Xcodeproj::Project::Object::PBXNativeTarget)


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/build_graph/native_target_finder.rb', line 37

def find_for_file(file)
  if file.file_ref.is_a?(Xcodeproj::Project::Object::PBXReferenceProxy)
    project = file.file_ref.remote_ref.container_portal_object
    product_reference_uuid = file.file_ref.remote_ref.remote_global_id_string
    find_with_product_ref_uuid(project, product_reference_uuid)
  elsif file.file_ref.is_a?(Xcodeproj::Project::Object::PBXFileReference)
    # products of sibling project targets are added as PBXFileReferences
    targets = find_with_product_path(file.file_ref.path)
    if targets.length > 1
      raise Informative, "Found more than one target with product #{File.basename(file.file_ref.path)} in:\n#{targets.map(&:project)}"
    end

    targets.first
  end
end

#find_for_product_name(product_name) ⇒ Object

Parameters:

  • product_name (String)


55
56
57
58
# File 'lib/build_graph/native_target_finder.rb', line 55

def find_for_product_name(product_name)
  all_targets.select {|native_target| native_target.name == product_name || native_target.product_reference.display_name == product_name}
              .first
end

#set_platform_name_filter(platform_name) ⇒ Object

Parameters:

  • platform_name (String)


19
20
21
# File 'lib/build_graph/native_target_finder.rb', line 19

def set_platform_name_filter(platform_name)
  @platform_name = platform_name
end