xcoed 0.0.3 → 1.0.0

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