xcoed 0.0.4 → 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: 82a2f0dbe9c4bce9cf5f5be560b0da2f4ca986d64ea8953a2a50a3f83588ab8c
4
- data.tar.gz: '0916221f57884e23ddf1813b4b3fffb93ebf92a0d9a5e2a9b5009410962a028f'
3
+ metadata.gz: d94890cd2678b91ab943c55e57af2cfa8ad70d40f39551978be0d5ca1207ec92
4
+ data.tar.gz: 2ac29928257a0b809702d5f69907e115422a9afc9c37669ae6b8f03387735612
5
5
  SHA512:
6
- metadata.gz: a5c28b654a7640d371a2c70040a07817ea9dd7e8c8241fceb6ecd559ebe754c11274546f02b157dc9e9b4a4b2077d591a475aa2386fa9d6be2cdba20d730b878
7
- data.tar.gz: bcd2a9a24cda75cadc55103164d48ff440b28bb5fdd5be6f4ab145574cd0c6a2400c663b39dbb85c77e39a297a7a9e5354804f92558decfcc8165b4c25c482d6
6
+ metadata.gz: 3187585fa60727e8d700e5c40b81efd4caaf97fbc3bfae64dc68268587e43a02cac719dcd507a40d35f6d88311b87f33ad9b4cf54af36851692c4273f0f91240
7
+ data.tar.gz: 89e9c493afcd6831afedcba10f19da2cf3104d053c9531891242917bae78df2ecc01acbe9ce85908a8820bf270d056d1158609193d37156decbdf7f02cf816b6
data/lib/xcoed.rb CHANGED
@@ -1,15 +1,29 @@
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|
12
- package_ref = add_swift_package_reference(project, dependency)
20
+ if dependency.key?('local')
21
+ package_ref = add_local_swift_package_reference(project, dependency['local'].first)
22
+ else
23
+ dependency = dependency['scm'].first if dependency.key?('scm')
24
+ package_ref = add_remote_swift_package_reference(project, dependency)
25
+ end
26
+
13
27
  packages[dependency['name']] = package_ref
14
28
  end
15
29
 
@@ -32,26 +46,28 @@ module Xcoed
32
46
  end
33
47
  end
34
48
 
35
- def self.add_swift_package_reference(project, dependency)
49
+ def self.add_remote_swift_package_reference(project, dependency)
36
50
  STDERR.puts dependency
37
- requirement_type = dependency['requirement'].keys.first
51
+ requirement_type = dependency['requirement']&.keys&.first
38
52
  case requirement_type
39
53
  when 'range'
40
- add_remote_swift_package_reference(project, dependency)
41
- when 'localPackage'
42
- add_local_swift_package_reference(project, dependency)
54
+ add_remote_swift_package_range_reference(project, dependency)
55
+ when 'branch'
56
+ add_remote_swift_package_branch_reference(project, dependency)
57
+ when 'revision'
58
+ add_remote_swift_package_revision_reference(project, dependency)
43
59
  else
44
- raise "Unsupported package requirement `#{requirement_type}`"
60
+ raise "Unsupported package requirement for dependency: `#{dependency}`"
45
61
  end
46
62
  end
47
63
 
48
- def self.add_remote_swift_package_reference(project, dependency)
64
+ def self.add_remote_swift_package_range_reference(project, dependency)
49
65
  project.root_object.package_references
50
- .select { |r| r.repositoryURL.downcase == dependency['url'].downcase }
66
+ .select { |r| r.repositoryURL.downcase == dependency['location'].downcase }
51
67
  .each(&:remove_from_project)
52
68
 
53
69
  package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
54
- package_ref.repositoryURL = dependency['url']
70
+ package_ref.repositoryURL = dependency['location']
55
71
  package_ref.requirement = {
56
72
  'kind' => 'versionRange',
57
73
  'minimumVersion' => dependency['requirement']['range'][0]['lowerBound'],
@@ -61,12 +77,42 @@ module Xcoed
61
77
  package_ref
62
78
  end
63
79
 
80
+ def self.add_remote_swift_package_branch_reference(project, dependency)
81
+ project.root_object.package_references
82
+ .select { |r| r.repositoryURL.downcase == dependency['location'].downcase }
83
+ .each(&:remove_from_project)
84
+
85
+ package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
86
+ package_ref.repositoryURL = dependency['location']
87
+ package_ref.requirement = {
88
+ 'kind' => 'branch',
89
+ 'branch' => dependency['requirement']['branch'].first
90
+ }
91
+ project.root_object.package_references << package_ref
92
+ package_ref
93
+ end
94
+
95
+ def self.add_remote_swift_package_revision_reference(project, dependency)
96
+ project.root_object.package_references
97
+ .select { |r| r.repositoryURL.downcase == dependency['location'].downcase }
98
+ .each(&:remove_from_project)
99
+
100
+ package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
101
+ package_ref.repositoryURL = dependency['location']
102
+ package_ref.requirement = {
103
+ 'kind' => 'revision',
104
+ 'revision' => dependency['requirement']['revision'].first
105
+ }
106
+ project.root_object.package_references << package_ref
107
+ package_ref
108
+ end
109
+
64
110
  def self.add_local_swift_package_reference(project, dependency)
65
111
  local_packages_group = local_packages_group(project)
66
112
  local_packages_group.children
67
- .select { |c| File.expand_path(c.path).downcase == dependency['url'].downcase }
113
+ .select { |c| File.expand_path(c.path).downcase == dependency['path'].downcase }
68
114
  .each(&:remove_from_project)
69
- package_ref = Xcodeproj::Project::Object::FileReferencesFactory.new_reference(local_packages_group, dependency['url'], :group)
115
+ package_ref = Xcodeproj::Project::Object::FileReferencesFactory.new_reference(local_packages_group, dependency['path'], :group)
70
116
  package_ref.last_known_file_type = 'folder'
71
117
  package_ref
72
118
  end
data/lib/xcoed/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Xcoed
2
- VERSION = '0.0.4'.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,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xcoed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Makarov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-07 00:00:00.000000000 Z
11
+ date: 2021-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hooks
@@ -50,14 +50,14 @@ dependencies:
50
50
  requirements:
51
51
  - - "<"
52
52
  - !ruby/object:Gem::Version
53
- version: '5'
53
+ version: '6'
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "<"
59
59
  - !ruby/object:Gem::Version
60
- version: '5'
60
+ version: '6'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: bundler
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -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
@@ -258,7 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
258
259
  - !ruby/object:Gem::Version
259
260
  version: '0'
260
261
  requirements: []
261
- rubygems_version: 3.1.2
262
+ rubygems_version: 3.1.4
262
263
  signing_key:
263
264
  specification_version: 4
264
265
  summary: Add Swift Packages to an Xcode Project