xcoed 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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