xcoed 0.0.3 → 1.0.0

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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/bin/xcoed +28 -0
  3. data/lib/xcoed.rb +59 -10
  4. data/lib/xcoed/version.rb +1 -2
  5. metadata +8 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5575b8dacfa25d57fe1143a288653ad09ac8eb34d8690223259c021788253a6f
4
- data.tar.gz: aeeeb1953d378a1e74d29a16e3f720d21f253b128647829545bf79886b5fda89
3
+ metadata.gz: 2a870ba98ff7dfc9c6483e146a15d56f6466c8324439b2c2eb6d400575fff546
4
+ data.tar.gz: fa06c5be8c1437eb2104bad594260d6126ad0ded6e6b11b05decd0e9c20e3759
5
5
  SHA512:
6
- metadata.gz: fa23771a18d4885e6f0fe89f95b7b9112f76f78b6edfba18787eec5696e3167a03a9ae57c163ab792eb08048b531ce011965a5d64ed84ef08fe541129ddba35c
7
- data.tar.gz: 71927fe47719762ed6a5723d7f26ffed02f726cddd26afc4f8db69db656ec3673064ed8013bb0ad945f1a6896906276750392bc68f8c51a3f86d471c6322e37b
6
+ metadata.gz: 2e9af4c568068cf0737be18ce32b7f3769c3868847ac1b850dd9dc23798bc008d47170f9b34707c9d37134a6d2083734648dfd46b336dabafd34ed0ebea66095
7
+ data.tar.gz: b8a790a0ccfebc9535a0bc8571df614f600297daa7cd59f42dfc57d176ecdb51ccbc71c9c653b30c306fb28850f4d30ddad012fda4d842b3dda897d5d8d47b0c
data/bin/xcoed ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'xcodeproj'
4
+ require 'xcoed'
5
+
6
+ def exit_with_message(message)
7
+ STDERR.puts message
8
+ STDERR.puts 'Usage: xcake [project.xcodeproj]'
9
+ STDERR.puts 'If there\'s only one project in the directory, the parameter can be omitted.'
10
+ exit 1
11
+ end
12
+
13
+ if ARGV[1].nil?
14
+ potential_names = Dir['*.xcodeproj']
15
+ if potential_names.empty?
16
+ exit_with_message 'Could not find a project in current directory!'
17
+ elsif potential_names.count > 1
18
+ exit_with_message "Multiple project found in current directory!\nPotential projects: `#{potential_names}`"
19
+ else
20
+ project_name = potential_names.first
21
+ end
22
+ else
23
+ project_name = ARGV[1]
24
+ end
25
+
26
+ project = Xcodeproj::Project.open(project_name)
27
+ Xcoed.integrate_package_swift!(project)
28
+ project.save
data/lib/xcoed.rb CHANGED
@@ -9,7 +9,13 @@ module Xcoed
9
9
 
10
10
  packages = {}
11
11
  package_json['dependencies'].each do |dependency|
12
- package_ref = add_swift_package_reference(project, dependency)
12
+ if dependency.key?('local')
13
+ package_ref = add_local_swift_package_reference(project, dependency['local'].first)
14
+ else
15
+ dependency = dependency['scm'].first if dependency.key?('scm')
16
+ package_ref = add_remote_swift_package_reference(project, dependency)
17
+ end
18
+
13
19
  packages[dependency['name']] = package_ref
14
20
  end
15
21
 
@@ -20,6 +26,10 @@ module Xcoed
20
26
  target['dependencies'].each do |dependency|
21
27
  by_name = dependency['byName'].first
22
28
 
29
+ target_ref.package_product_dependencies
30
+ .select { |p| p.product_name == by_name }
31
+ .each(&:remove_from_project)
32
+
23
33
  package_dep = Xcodeproj::Project::Object::XCSwiftPackageProductDependency.new(project, project.generate_uuid)
24
34
  package_dep.product_name = by_name
25
35
 
@@ -28,22 +38,28 @@ module Xcoed
28
38
  end
29
39
  end
30
40
 
31
- def self.add_swift_package_reference(project, dependency)
41
+ def self.add_remote_swift_package_reference(project, dependency)
32
42
  STDERR.puts dependency
33
- requirement_type = dependency['requirement'].keys.first
43
+ requirement_type = dependency['requirement']&.keys&.first
34
44
  case requirement_type
35
45
  when 'range'
36
- add_remote_swift_package_reference(project, dependency)
37
- when 'localPackage'
38
- add_local_swift_package_reference(project, dependency)
46
+ add_remote_swift_package_range_reference(project, dependency)
47
+ when 'branch'
48
+ add_remote_swift_package_branch_reference(project, dependency)
49
+ when 'revision'
50
+ add_remote_swift_package_revision_reference(project, dependency)
39
51
  else
40
- raise "Unsupported package requirement `#{requirement_type}`"
52
+ raise "Unsupported package requirement for dependency: `#{dependency}`"
41
53
  end
42
54
  end
43
55
 
44
- def self.add_remote_swift_package_reference(project, dependency)
56
+ def self.add_remote_swift_package_range_reference(project, dependency)
57
+ project.root_object.package_references
58
+ .select { |r| r.repositoryURL.downcase == dependency['location'].downcase }
59
+ .each(&:remove_from_project)
60
+
45
61
  package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
46
- package_ref.repositoryURL = dependency['url']
62
+ package_ref.repositoryURL = dependency['location']
47
63
  package_ref.requirement = {
48
64
  'kind' => 'versionRange',
49
65
  'minimumVersion' => dependency['requirement']['range'][0]['lowerBound'],
@@ -53,9 +69,42 @@ module Xcoed
53
69
  package_ref
54
70
  end
55
71
 
72
+ def self.add_remote_swift_package_branch_reference(project, dependency)
73
+ project.root_object.package_references
74
+ .select { |r| r.repositoryURL.downcase == dependency['location'].downcase }
75
+ .each(&:remove_from_project)
76
+
77
+ package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
78
+ package_ref.repositoryURL = dependency['location']
79
+ package_ref.requirement = {
80
+ 'kind' => 'branch',
81
+ 'branch' => dependency['requirement']['branch'].first
82
+ }
83
+ project.root_object.package_references << package_ref
84
+ package_ref
85
+ end
86
+
87
+ def self.add_remote_swift_package_revision_reference(project, dependency)
88
+ project.root_object.package_references
89
+ .select { |r| r.repositoryURL.downcase == dependency['location'].downcase }
90
+ .each(&:remove_from_project)
91
+
92
+ package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
93
+ package_ref.repositoryURL = dependency['location']
94
+ package_ref.requirement = {
95
+ 'kind' => 'revision',
96
+ 'revision' => dependency['requirement']['revision'].first
97
+ }
98
+ project.root_object.package_references << package_ref
99
+ package_ref
100
+ end
101
+
56
102
  def self.add_local_swift_package_reference(project, dependency)
57
103
  local_packages_group = local_packages_group(project)
58
- package_ref = Xcodeproj::Project::Object::FileReferencesFactory.new_reference(local_packages_group, dependency['url'], :group)
104
+ local_packages_group.children
105
+ .select { |c| File.expand_path(c.path).downcase == dependency['path'].downcase }
106
+ .each(&:remove_from_project)
107
+ package_ref = Xcodeproj::Project::Object::FileReferencesFactory.new_reference(local_packages_group, dependency['path'], :group)
59
108
  package_ref.last_known_file_type = 'folder'
60
109
  package_ref
61
110
  end
data/lib/xcoed/version.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  module Xcoed
2
- VERSION = '0.0.3'.freeze
2
+ VERSION = '1.0.0'.freeze
3
3
  end
4
-
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.3
4
+ version: 1.0.0
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-06 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
@@ -230,10 +230,12 @@ description: Automate adding Swift PM packages to an Xcode project using a regul
230
230
  `Package.swift` file.
231
231
  email:
232
232
  - igormaka@gmail.com
233
- executables: []
233
+ executables:
234
+ - xcoed
234
235
  extensions: []
235
236
  extra_rdoc_files: []
236
237
  files:
238
+ - bin/xcoed
237
239
  - lib/xcoed.rb
238
240
  - lib/xcoed/constants.rb
239
241
  - lib/xcoed/version.rb
@@ -256,7 +258,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
256
258
  - !ruby/object:Gem::Version
257
259
  version: '0'
258
260
  requirements: []
259
- rubygems_version: 3.1.2
261
+ rubygems_version: 3.1.4
260
262
  signing_key:
261
263
  specification_version: 4
262
264
  summary: Add Swift Packages to an Xcode Project