xcoed 0.0.1 → 0.0.6

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 +84 -12
  4. data/lib/xcoed/version.rb +1 -2
  5. metadata +10 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca2a14ee26b4f0cc547b5035c1af7ac2d10b8ce005e45d73d996b3e981047d83
4
- data.tar.gz: 97a00b24719c18140e30d4a4db8bfb7b4f8639be76a47fa06287283798b06337
3
+ metadata.gz: ec01f4bb9c3beae88d48857747bae4e5d23adb97c0e069bcba80c725b3137eb6
4
+ data.tar.gz: c24ddac5f8e43d6a04a010f16dee07a74af4207a26fa0a08142b6b5978497b2e
5
5
  SHA512:
6
- metadata.gz: b8e8a6aafcdc1ab7eafc217da6942c0170ce65903a9b916b75ec56ecdfff55bd68919cf82a6d95593cf3eb3e72bf57e9adb31fcdc14d3d1c541edfe4426479fd
7
- data.tar.gz: 79a7ca8c776c91984ff80b65a5b741faf65f9423a2195c559789256582938bfcff00b54e80333544dd575ba9faddf6adee649dbe8aac350bb3752bd169dcfe5d
6
+ metadata.gz: f04b8e12fc2c6f299da83a0a62ee2f761afe361caa2bc35477cec5de4b693c3aff3efcb5d10b2f6585800c50356ef7ecfc6e0fe2554519de7301e7e98886055e
7
+ data.tar.gz: b3c8840ca193eda9e3ec18767ce039aef2ffdd88d69253b194a01a7de5c7fc50050d9b7dfeaf769bd5d84c864055d9977b00de6c14a1e6d5e845faca2c101dd8
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,15 +9,7 @@ module Xcoed
9
9
 
10
10
  packages = {}
11
11
  package_json['dependencies'].each do |dependency|
12
- STDERR.puts dependency
13
- package_ref = Xcodeproj::Project::Object::XCRemoteSwiftPackageReference.new(project, project.generate_uuid)
14
- package_ref.repositoryURL = dependency['url']
15
- package_ref.requirement = {
16
- 'kind' => 'versionRange',
17
- 'minimumVersion' => dependency['requirement']['range'][0]['lowerBound'],
18
- 'maximumVersion' => dependency['requirement']['range'][0]['upperBound']
19
- }
20
- project.root_object.package_references << package_ref
12
+ package_ref = add_swift_package_reference(project, dependency)
21
13
  packages[dependency['name']] = package_ref
22
14
  end
23
15
 
@@ -27,15 +19,95 @@ module Xcoed
27
19
 
28
20
  target['dependencies'].each do |dependency|
29
21
  by_name = dependency['byName'].first
30
- package_ref = packages[by_name]
31
- raise "Product `#{by_name}` not found in package references" if package_ref.nil?
22
+
23
+ target_ref.package_product_dependencies
24
+ .select { |p| p.product_name == by_name }
25
+ .each(&:remove_from_project)
32
26
 
33
27
  package_dep = Xcodeproj::Project::Object::XCSwiftPackageProductDependency.new(project, project.generate_uuid)
34
- package_dep.package = package_ref
35
28
  package_dep.product_name = by_name
36
29
 
37
30
  target_ref.package_product_dependencies << package_dep
38
31
  end
39
32
  end
40
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
41
113
  end
data/lib/xcoed/version.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  module Xcoed
2
- VERSION = '0.0.1'.freeze
2
+ VERSION = '0.0.6'.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.1
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Makarov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-05 00:00:00.000000000 Z
11
+ date: 2021-02-04 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
@@ -241,7 +243,7 @@ homepage: https://github.com/igor-makarov/xcoed/
241
243
  licenses:
242
244
  - MIT
243
245
  metadata: {}
244
- post_install_message:
246
+ post_install_message:
245
247
  rdoc_options: []
246
248
  require_paths:
247
249
  - lib
@@ -257,7 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
257
259
  version: '0'
258
260
  requirements: []
259
261
  rubygems_version: 3.1.2
260
- signing_key:
262
+ signing_key:
261
263
  specification_version: 4
262
264
  summary: Add Swift Packages to an Xcode Project
263
265
  test_files: []