xcoed 0.0.1 → 0.0.6

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 +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: []