Class: Pod::SPM::Resolver::Result

Inherits:
Object
  • Object
show all
Includes:
Config::Mixin
Defined in:
lib/cocoapods-spm/resolver/result.rb

Direct Known Subclasses

WritableResult

Defined Under Namespace

Classes: WritableResult

Constant Summary collapse

ATTRS =
{
  :spm_pkgs => [],
  :spm_dependencies_by_target => {},
  :project_pkgs => nil,
}.freeze

Instance Method Summary collapse

Methods included from Config::SPMConfigMixin

#local_macro_pod?, #local_macro_pod_dir, #macro_pods, #spm_config

Methods included from Config::PodConfigMixin

#pod_config

Methods included from Config::ProjectConfigMixin

#project_config

Constructor Details

#initialize(options = {}) ⇒ Result

Returns a new instance of Result.



23
24
25
26
27
# File 'lib/cocoapods-spm/resolver/result.rb', line 23

def initialize(options = {})
  ATTRS.each do |k, v|
    instance_variable_set("@#{k}", options[k] || v)
  end
end

Instance Method Details

#linker_flags_for(target) ⇒ Object



51
52
53
54
55
56
# File 'lib/cocoapods-spm/resolver/result.rb', line 51

def linker_flags_for(target)
  (
    spm_targets_for(target).flat_map(&:linker_flags) +
    spm_pkgs_for(target).flat_map(&:linker_flags)
  ).uniq
end

#spm_dependencies_for(target) ⇒ Object



33
34
35
36
37
38
# File 'lib/cocoapods-spm/resolver/result.rb', line 33

def spm_dependencies_for(target)
  filtered_dependencies = @spm_dependencies_by_target[spec_name_of(target)]&.reject do |dep|
    dep.pkg&.should_exclude_from_target?(target.name)
  end
  filtered_dependencies.to_a
end

#spm_pkgs_for(target) ⇒ Object



29
30
31
# File 'lib/cocoapods-spm/resolver/result.rb', line 29

def spm_pkgs_for(target)
  spm_dependencies_for(target).map(&:pkg).uniq(&:name)
end

#spm_targets_for(target, exclude_default_xcode_linking: true) ⇒ Object



40
41
42
43
44
45
46
47
48
49
# File 'lib/cocoapods-spm/resolver/result.rb', line 40

def spm_targets_for(target, exclude_default_xcode_linking: true)
    
  targets = spm_dependencies_for(target).flat_map do |d|
    next unless d.pkg&.name && target.platform&.name
    project_pkgs&.resolve_recursive_targets_of(d.pkg&.name, d.product, platform: target.platform&.name)
  end.select { |t| t.respond_to?(:name) }.uniq(&:name)
  return targets.reject(&:use_default_xcode_linking?) if exclude_default_xcode_linking

  targets
end