module Xcoed
Constants
- VERSION
Public Class Methods
add_local_swift_package_reference(project, dependency)
click to toggle source
# File lib/xcoed.rb, line 110 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['path'].downcase } .each(&:remove_from_project) package_ref = Xcodeproj::Project::Object::FileReferencesFactory.new_reference(local_packages_group, dependency['path'], :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.rb, line 80 def self.add_remote_swift_package_branch_reference(project, dependency) project.root_object.package_references .select { |r| r.repositoryURL.downcase == dependency['location'].downcase } .each(&:remove_from_project) package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid) package_ref.repositoryURL = dependency['location'] 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.rb, line 64 def self.add_remote_swift_package_range_reference(project, dependency) project.root_object.package_references .select { |r| r.repositoryURL.downcase == dependency['location'].downcase } .each(&:remove_from_project) package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid) package_ref.repositoryURL = dependency['location'] 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_reference(project, dependency)
click to toggle source
# File lib/xcoed.rb, line 49 def self.add_remote_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) else raise "Unsupported package requirement for dependency: `#{dependency}`" end end
add_remote_swift_package_revision_reference(project, dependency)
click to toggle source
# File lib/xcoed.rb, line 95 def self.add_remote_swift_package_revision_reference(project, dependency) project.root_object.package_references .select { |r| r.repositoryURL.downcase == dependency['location'].downcase } .each(&:remove_from_project) package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid) package_ref.repositoryURL = dependency['location'] package_ref.requirement = { 'kind' => 'revision', 'revision' => dependency['requirement']['revision'].first } project.root_object.package_references << package_ref package_ref end
integrate_package_swift!(project)
click to toggle source
# File lib/xcoed.rb, line 8 def self.integrate_package_swift!(project) swiftpm_version = Gem::Version.new(`xcrun swift package --version`.split.last) if swiftpm_version < Gem::Version.new('5.5.0') XcoedSwiftPMPre5_5::integrate_package_swift!(project) return end package_json = JSON.parse(`xcrun swift package dump-package`) packages = {} package_json['dependencies'].each do |dependency| if dependency.key?('local') package_ref = add_local_swift_package_reference(project, dependency['local'].first) else dependency = dependency['scm'].first if dependency.key?('scm') package_ref = add_remote_swift_package_reference(project, dependency) end 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.rb, line 120 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