Class: XcodeArchiveCache::Injection::Injector

Inherits:
Object
  • Object
show all
Includes:
Logs
Defined in:
lib/injection/injector.rb

Instance Method Summary collapse

Methods included from Logs

#debug, #error, #info, #set_log_level

Constructor Details

#initialize(configuration_name, storage) ⇒ Injector

Returns a new instance of Injector.

Parameters:



10
11
12
13
14
15
16
17
18
19
# File 'lib/injection/injector.rb', line 10

def initialize(configuration_name, storage)
  @configuration_name = configuration_name
  @storage = storage
  @headers_mover = HeadersMover.new(storage)
  @dependency_remover = DependencyRemover.new
  @build_flags_changer = BuildFlagsChanger.new
  @pods_fixer = PodsScriptFixer.new
  @modulemap_fixer = XcodeArchiveCache::Modulemap::HeaderPathFixer.new(storage)
  @framework_embedder = FrameworkEmbedder.new
end

Instance Method Details

#perform_internal_injection(graph) ⇒ Object



23
24
25
26
27
# File 'lib/injection/injector.rb', line 23

def perform_internal_injection(graph)
  inject_unpacked_and_rebuilt(graph.nodes)
  add_header_paths(graph.nodes)
  save_graph_projects(graph)
end

#perform_outgoing_injection(graph, target) ⇒ Object

Parameters:



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/injection/injector.rb', line 32

def perform_outgoing_injection(graph, target)
  root_node = graph.root_node
  if root_node.native_target.project == target.project && root_node.native_target.uuid == target.uuid
    return
  end

  no_rebuild_performed = root_node.state == :unpacked

  graph.nodes.each do |node|
    if no_rebuild_performed || node.state == :rebuilt_and_cached
      headers_mover.prepare_headers_for_injection(node)
      modulemap_fixer.fix_modulemap(node)
    end

    add_as_prebuilt_dependency(node, target)
    remove_native_target_from_project(node)
  end

  add_header_paths_to_target(target, storage.get_all_headers_storage_paths)

  # pretty dummy but should work in most cases;
  # here we assume that if graph has a pods target
  # then all graph nodes are built as pods and therefore
  # are covered by "Embed Pods Frameworks" script
  #
  if graph.node_by_name(get_pods_target_name(target))
    pods_fixer.fix_embed_frameworks_script(target, graph, storage.container_dir_path)
    pods_fixer.fix_copy_resources_script(target, graph, storage.container_dir_path)
  else
    framework_nodes = graph.nodes.select { |node| node.has_framework_product? }
    framework_file_paths = framework_nodes.map { |node| File.join(storage.get_storage_path(node), node.product_file_name) }
    framework_embedder.embed(framework_file_paths, target)
  end

  save_graph_projects(graph)
  target.project.save
end