Module: Xcoed

Defined in:
lib/xcoed.rb,
lib/xcoed/version.rb,
lib/xcoed/constants.rb

Defined Under Namespace

Modules: Constants

Constant Summary collapse

VERSION =
'0.0.3'.freeze

Class Method Summary collapse

Class Method Details

.add_local_swift_package_reference(project, dependency) ⇒ Object



56
57
58
59
60
61
# File 'lib/xcoed.rb', line 56

def self.add_local_swift_package_reference(project, dependency)
  local_packages_group = local_packages_group(project)
  package_ref = Xcodeproj::Project::Object::FileReferencesFactory.new_reference(local_packages_group, dependency['url'], :group)
  package_ref.last_known_file_type = 'folder'
  package_ref
end

.add_remote_swift_package_reference(project, dependency) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/xcoed.rb', line 44

def self.add_remote_swift_package_reference(project, dependency)
  package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
  package_ref.repositoryURL = dependency['url']
  package_ref.requirement = {
    'kind' => 'versionRange',
    'minimumVersion' => dependency['requirement']['range'][0]['lowerBound'],
    'maximumVersion' => dependency['requirement']['range'][0]['upperBound']
  }
  project.root_object.package_references << package_ref
  package_ref
end

.add_swift_package_reference(project, dependency) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/xcoed.rb', line 31

def self.add_swift_package_reference(project, dependency)
  STDERR.puts dependency
  requirement_type = dependency['requirement'].keys.first
  case requirement_type
  when 'range'
    add_remote_swift_package_reference(project, dependency)
  when 'localPackage'
    add_local_swift_package_reference(project, dependency)
  else
    raise "Unsupported package requirement `#{requirement_type}`"
  end
end

.integrate_package_swift!(project) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/xcoed.rb', line 7

def self.integrate_package_swift!(project)
  package_json = JSON.parse(`swift package dump-package`)

  packages = {}
  package_json['dependencies'].each do |dependency|
    package_ref = add_swift_package_reference(project, dependency)
    packages[dependency['name']] = package_ref
  end

  package_json['targets'].each do |target|
    target_ref = project.targets.select { |t| t.name == target['name'] }.first
    raise "Target `#{target['name']}` not found in project" if target_ref.nil?

    target['dependencies'].each do |dependency|
      by_name = dependency['byName'].first

      package_dep = Xcodeproj::Project::Object::XCSwiftPackageProductDependency.new(project, project.generate_uuid)
      package_dep.product_name = by_name

      target_ref.package_product_dependencies << package_dep
    end
  end
end

.local_packages_group(project) ⇒ Object



63
64
65
66
67
# File 'lib/xcoed.rb', line 63

def self.local_packages_group(project)
  name = 'Local Packages'
  project.main_group.groups.select { |g| g.name == name }.first ||
    project.main_group.new_group(name)
end