xcoed 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2a870ba98ff7dfc9c6483e146a15d56f6466c8324439b2c2eb6d400575fff546
4
- data.tar.gz: fa06c5be8c1437eb2104bad594260d6126ad0ded6e6b11b05decd0e9c20e3759
3
+ metadata.gz: d94890cd2678b91ab943c55e57af2cfa8ad70d40f39551978be0d5ca1207ec92
4
+ data.tar.gz: 2ac29928257a0b809702d5f69907e115422a9afc9c37669ae6b8f03387735612
5
5
  SHA512:
6
- metadata.gz: 2e9af4c568068cf0737be18ce32b7f3769c3868847ac1b850dd9dc23798bc008d47170f9b34707c9d37134a6d2083734648dfd46b336dabafd34ed0ebea66095
7
- data.tar.gz: b8a790a0ccfebc9535a0bc8571df614f600297daa7cd59f42dfc57d176ecdb51ccbc71c9c653b30c306fb28850f4d30ddad012fda4d842b3dda897d5d8d47b0c
6
+ metadata.gz: 3187585fa60727e8d700e5c40b81efd4caaf97fbc3bfae64dc68268587e43a02cac719dcd507a40d35f6d88311b87f33ad9b4cf54af36851692c4273f0f91240
7
+ data.tar.gz: 89e9c493afcd6831afedcba10f19da2cf3104d053c9531891242917bae78df2ecc01acbe9ce85908a8820bf270d056d1158609193d37156decbdf7f02cf816b6
data/lib/xcoed.rb CHANGED
@@ -1,11 +1,19 @@
1
- require 'xcoed/version'
2
- require 'xcoed/constants'
3
- require 'xcodeproj'
4
1
  require 'json'
2
+ require 'xcodeproj'
3
+ require 'xcoed/constants'
4
+ require 'xcoed/version'
5
+ require 'xcoed/xcoed-swiftpm-pre-5.5'
5
6
 
6
7
  module Xcoed
7
8
  def self.integrate_package_swift!(project)
8
- package_json = JSON.parse(`swift package dump-package`)
9
+ swiftpm_version = Gem::Version.new(`xcrun swift package --version`.split.last)
10
+
11
+ if swiftpm_version < Gem::Version.new('5.5.0')
12
+ XcoedSwiftPMPre5_5::integrate_package_swift!(project)
13
+ return
14
+ end
15
+
16
+ package_json = JSON.parse(`xcrun swift package dump-package`)
9
17
 
10
18
  packages = {}
11
19
  package_json['dependencies'].each do |dependency|
data/lib/xcoed/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Xcoed
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '1.0.1'.freeze
3
3
  end
@@ -0,0 +1,113 @@
1
+ require 'xcoed/version'
2
+ require 'xcoed/constants'
3
+ require 'xcodeproj'
4
+ require 'json'
5
+
6
+ module XcoedSwiftPMPre5_5
7
+ def self.integrate_package_swift!(project)
8
+ package_json = JSON.parse(`swift package dump-package`)
9
+
10
+ packages = {}
11
+ package_json['dependencies'].each do |dependency|
12
+ package_ref = add_swift_package_reference(project, dependency)
13
+ packages[dependency['name']] = package_ref
14
+ end
15
+
16
+ package_json['targets'].each do |target|
17
+ target_ref = project.targets.select { |t| t.name == target['name'] }.first
18
+ raise "Target `#{target['name']}` not found in project" if target_ref.nil?
19
+
20
+ target['dependencies'].each do |dependency|
21
+ by_name = dependency['byName'].first
22
+
23
+ target_ref.package_product_dependencies
24
+ .select { |p| p.product_name == by_name }
25
+ .each(&:remove_from_project)
26
+
27
+ package_dep = Xcodeproj::Project::Object::XCSwiftPackageProductDependency.new(project, project.generate_uuid)
28
+ package_dep.product_name = by_name
29
+
30
+ target_ref.package_product_dependencies << package_dep
31
+ end
32
+ end
33
+ end
34
+
35
+ def self.add_swift_package_reference(project, dependency)
36
+ STDERR.puts dependency
37
+ requirement_type = dependency['requirement'].keys.first
38
+ case requirement_type
39
+ when 'range'
40
+ add_remote_swift_package_range_reference(project, dependency)
41
+ when 'branch'
42
+ add_remote_swift_package_branch_reference(project, dependency)
43
+ when 'revision'
44
+ add_remote_swift_package_revision_reference(project, dependency)
45
+ when 'localPackage'
46
+ add_local_swift_package_reference(project, dependency)
47
+ else
48
+ raise "Unsupported package requirement `#{requirement_type}`"
49
+ end
50
+ end
51
+
52
+ def self.add_remote_swift_package_range_reference(project, dependency)
53
+ project.root_object.package_references
54
+ .select { |r| r.repositoryURL.downcase == dependency['url'].downcase }
55
+ .each(&:remove_from_project)
56
+
57
+ package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
58
+ package_ref.repositoryURL = dependency['url']
59
+ package_ref.requirement = {
60
+ 'kind' => 'versionRange',
61
+ 'minimumVersion' => dependency['requirement']['range'][0]['lowerBound'],
62
+ 'maximumVersion' => dependency['requirement']['range'][0]['upperBound']
63
+ }
64
+ project.root_object.package_references << package_ref
65
+ package_ref
66
+ end
67
+
68
+ def self.add_remote_swift_package_branch_reference(project, dependency)
69
+ project.root_object.package_references
70
+ .select { |r| r.repositoryURL.downcase == dependency['url'].downcase }
71
+ .each(&:remove_from_project)
72
+
73
+ package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
74
+ package_ref.repositoryURL = dependency['url']
75
+ package_ref.requirement = {
76
+ 'kind' => 'branch',
77
+ 'branch' => dependency['requirement']['branch'].first
78
+ }
79
+ project.root_object.package_references << package_ref
80
+ package_ref
81
+ end
82
+
83
+ def self.add_remote_swift_package_revision_reference(project, dependency)
84
+ project.root_object.package_references
85
+ .select { |r| r.repositoryURL.downcase == dependency['url'].downcase }
86
+ .each(&:remove_from_project)
87
+
88
+ package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
89
+ package_ref.repositoryURL = dependency['url']
90
+ package_ref.requirement = {
91
+ 'kind' => 'revision',
92
+ 'revision' => dependency['requirement']['revision'].first
93
+ }
94
+ project.root_object.package_references << package_ref
95
+ package_ref
96
+ end
97
+
98
+ def self.add_local_swift_package_reference(project, dependency)
99
+ local_packages_group = local_packages_group(project)
100
+ local_packages_group.children
101
+ .select { |c| File.expand_path(c.path).downcase == dependency['url'].downcase }
102
+ .each(&:remove_from_project)
103
+ package_ref = Xcodeproj::Project::Object::FileReferencesFactory.new_reference(local_packages_group, dependency['url'], :group)
104
+ package_ref.last_known_file_type = 'folder'
105
+ package_ref
106
+ end
107
+
108
+ def self.local_packages_group(project)
109
+ name = 'Local Packages'
110
+ project.main_group.groups.select { |g| g.name == name }.first ||
111
+ project.main_group.new_group(name)
112
+ end
113
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcoed
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Makarov
@@ -239,6 +239,7 @@ files:
239
239
  - lib/xcoed.rb
240
240
  - lib/xcoed/constants.rb
241
241
  - lib/xcoed/version.rb
242
+ - lib/xcoed/xcoed-swiftpm-pre-5.5.rb
242
243
  homepage: https://github.com/igor-makarov/xcoed/
243
244
  licenses:
244
245
  - MIT