module XcoedSwiftPMPre5_5

Public Class Methods

add_local_swift_package_reference(project, dependency) click to toggle source
# File lib/xcoed/xcoed-swiftpm-pre-5.5.rb, line 98
def self.add_local_swift_package_reference(project, dependency)
  local_packages_group = local_packages_group(project)
  local_packages_group.children
                      .select { |c| File.expand_path(c.path).downcase == dependency['url'].downcase }
                      .each(&:remove_from_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_branch_reference(project, dependency) click to toggle source
# File lib/xcoed/xcoed-swiftpm-pre-5.5.rb, line 68
def self.add_remote_swift_package_branch_reference(project, dependency)
  project.root_object.package_references
         .select { |r| r.repositoryURL.downcase == dependency['url'].downcase }
         .each(&:remove_from_project)

  package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
  package_ref.repositoryURL = dependency['url']
  package_ref.requirement = {
    'kind' => 'branch',
    'branch' => dependency['requirement']['branch'].first
  }
  project.root_object.package_references << package_ref
  package_ref
end
add_remote_swift_package_range_reference(project, dependency) click to toggle source
# File lib/xcoed/xcoed-swiftpm-pre-5.5.rb, line 52
def self.add_remote_swift_package_range_reference(project, dependency)
  project.root_object.package_references
         .select { |r| r.repositoryURL.downcase == dependency['url'].downcase }
         .each(&:remove_from_project)

  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_remote_swift_package_revision_reference(project, dependency) click to toggle source
# File lib/xcoed/xcoed-swiftpm-pre-5.5.rb, line 83
def self.add_remote_swift_package_revision_reference(project, dependency)
  project.root_object.package_references
         .select { |r| r.repositoryURL.downcase == dependency['url'].downcase }
         .each(&:remove_from_project)

  package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
  package_ref.repositoryURL = dependency['url']
  package_ref.requirement = {
    'kind' => 'revision',
    'revision' => dependency['requirement']['revision'].first
  }
  project.root_object.package_references << package_ref
  package_ref
end
add_swift_package_reference(project, dependency) click to toggle source
# File lib/xcoed/xcoed-swiftpm-pre-5.5.rb, line 35
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_range_reference(project, dependency)
  when 'branch'
    add_remote_swift_package_branch_reference(project, dependency)
  when 'revision'
    add_remote_swift_package_revision_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) click to toggle source
# File lib/xcoed/xcoed-swiftpm-pre-5.5.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

      target_ref.package_product_dependencies
                .select { |p| p.product_name == by_name }
                .each(&:remove_from_project)

      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) click to toggle source
# File lib/xcoed/xcoed-swiftpm-pre-5.5.rb, line 108
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