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.5'.freeze
Class Method Summary collapse
- .add_local_swift_package_reference(project, dependency) ⇒ Object
- .add_remote_swift_package_branch_reference(project, dependency) ⇒ Object
- .add_remote_swift_package_range_reference(project, dependency) ⇒ Object
- .add_remote_swift_package_revision_reference(project, dependency) ⇒ Object
- .add_swift_package_reference(project, dependency) ⇒ Object
- .integrate_package_swift!(project) ⇒ Object
- .local_packages_group(project) ⇒ Object
Class Method Details
.add_local_swift_package_reference(project, dependency) ⇒ Object
98 99 100 101 102 103 104 105 106 |
# File 'lib/xcoed.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.(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) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/xcoed.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) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/xcoed.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) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/xcoed.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) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/xcoed.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) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# 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 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) ⇒ Object
108 109 110 111 112 |
# File 'lib/xcoed.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 |