cocoapods-xcremotecache 0.0.1 → 0.0.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9c8ea806c777060721ce8e440f64f46f99e14012aea29e4b5f096839e11d81ea
4
- data.tar.gz: 0a6ede5267ecdd314ac879a7bca8840f2d94b79a245f8b6002c9279c7a004862
3
+ metadata.gz: 073bb6eb42ef3ca4b2911ecf1a22f57d3fee56b4ca151446b542c1e2a8ea95bd
4
+ data.tar.gz: 3baa31150bb89f06635781eaae290b9b998776f0e0d5f099fa93197a84034de9
5
5
  SHA512:
6
- metadata.gz: c0949ce7b8617db61a2859cd787f3ab196a5f3048eed68b666ea69995ad491ea39e12fdf4b06b1c1a85a3c81eaec573c25ea996273203ae6691d5d24d6257e9c
7
- data.tar.gz: 162f1467dfcc90185b6a97509ccf09f250ff2f758d86832a538e1415c03a0a9654d3e1037dca29c5ddf734203d6f81e8d9cab23966e80af710550ba424caf3e8
6
+ metadata.gz: 3a1a857abfdd8231b6eeaaeb626bd0b446bd58176b03143e0d1c292c78b2bd56c8f1e567293708f71518c91f6869326f726b20582286172b68de6f657198bebc
7
+ data.tar.gz: 987ecea74817a95bf1b1bda403e17d2494d65cc6e5c8c24666f239ae3fd83721474405e5fe3daa87112bb725346432019f6892f0a0ce327741890d449554aa58
data/README.md CHANGED
@@ -4,6 +4,14 @@ The CocoaPods plugin that integrates XCRemoteCache with the project.
4
4
 
5
5
  ## Installation
6
6
 
7
+ ### Using RubyGems
8
+
9
+ ```bash
10
+ gem install cocoapods-xcremotecache
11
+ ```
12
+
13
+ ### From sources
14
+
7
15
  Build & install the plugin
8
16
 
9
17
  ```bash
@@ -44,6 +52,8 @@ An object that is passed to the `xcremotecache` can contain all properties suppo
44
52
  | `modify_lldb_init` | Controls if the pod integration should modify `~/.lldbinit` | `true` | ⬜️ |
45
53
  | `xccc_file` | The path where should be placed the `xccc` binary (in the pod installation phase) | `{podfile_dir}/.rc/xccc` | ⬜️ |
46
54
  | `remote_commit_file` | The path of the file with the remote commit sha (in the pod installation phase) | `{podfile_dir}/.rc/arc.rc`| ⬜️ |
55
+ | `prettify_meta_files` | A Boolean value that opts-in pretty JSON formatting for meta files | `false` | ⬜️ |
56
+ | `disable_certificate_verification` | A Boolean value that opts-in SSL certificate validation is disabled | `false` | ⬜️ |
47
57
 
48
58
  ## Uninstalling
49
59
 
@@ -52,3 +62,7 @@ To fully uninstall the plugin, call:
52
62
  ```bash
53
63
  gem uninstall cocoapods-xcremotecache
54
64
  ```
65
+
66
+ ## Limitations
67
+
68
+ * When `generate_multiple_pod_projects` mode is enabled, only first-party targets are cached by XCRemoteCache (all dependencies are compiled locally).
@@ -17,6 +17,7 @@ require 'cocoapods/resolver'
17
17
  require 'open-uri'
18
18
  require 'yaml'
19
19
  require 'json'
20
+ require 'pathname'
20
21
 
21
22
 
22
23
  module CocoapodsXCRemoteCacheModifier
@@ -26,7 +27,9 @@ module CocoapodsXCRemoteCacheModifier
26
27
  FAKE_SRCROOT = "/#{'x' * 10 }"
27
28
  LLDB_INIT_COMMENT="#RemoteCacheCustomSourceMap"
28
29
  LLDB_INIT_PATH = "#{ENV['HOME']}/.lldbinit"
30
+ FAT_ARCHIVE_NAME_INFIX = 'arm64-x86_64'
29
31
 
32
+ # List of plugins' user properties that should be copied to .rcinfo
30
33
  CUSTOM_CONFIGURATION_KEYS = [
31
34
  'enabled',
32
35
  'xcrc_location',
@@ -35,7 +38,9 @@ module CocoapodsXCRemoteCacheModifier
35
38
  'final_target',
36
39
  'check_build_configuration',
37
40
  'check_platform',
38
- 'modify_lldb_init'
41
+ 'modify_lldb_init',
42
+ 'prettify_meta_files',
43
+ 'disable_certificate_verification'
39
44
  ]
40
45
 
41
46
  class XCRemoteCache
@@ -45,18 +50,20 @@ module CocoapodsXCRemoteCacheModifier
45
50
  @@configuration = c
46
51
  end
47
52
 
48
- def self.set_configuration_default_values(user_proj_directory)
53
+ def self.set_configuration_default_values
49
54
  default_values = {
50
55
  'mode' => 'consumer',
51
56
  'enabled' => true,
52
- 'xcrc_location' => "#{user_proj_directory}/XCRC",
57
+ 'xcrc_location' => "XCRC",
53
58
  'exclude_build_configurations' => [],
54
59
  'check_build_configuration' => 'Debug',
55
60
  'check_platform' => 'iphonesimulator',
56
61
  'modify_lldb_init' => true,
57
- 'xccc_file' => "#{user_proj_directory}/#{BIN_DIR}/xccc",
58
- 'remote_commit_file' => "#{user_proj_directory}/#{BIN_DIR}/arc.rc",
62
+ 'xccc_file' => "#{BIN_DIR}/xccc",
63
+ 'remote_commit_file' => "#{BIN_DIR}/arc.rc",
59
64
  'exclude_targets' => [],
65
+ 'prettify_meta_files' => false,
66
+ 'disable_certificate_verification' => false
60
67
  }
61
68
  @@configuration.merge! default_values.select { |k, v| !@@configuration.key?(k) }
62
69
  end
@@ -88,61 +95,96 @@ module CocoapodsXCRemoteCacheModifier
88
95
  @@configuration.select { |key, value| !CUSTOM_CONFIGURATION_KEYS.include?(key) }
89
96
  end
90
97
 
91
- def self.enable_xcremotecache(target, user_proj_directory, xc_location, xc_cc_path, mode, exclude_build_configurations, check_build_configuration, check_platform, final_target)
92
- target.build_configurations.each do |config|
93
- # apply only for relevant Configurations
94
- next if exclude_build_configurations.include?(config.name)
95
- if mode == 'consumer'
96
- config.build_settings['CC'] = [xc_cc_path]
97
- end
98
- config.build_settings['SWIFT_EXEC'] = ["#{xc_location}/xcswiftc"]
99
- config.build_settings['LIBTOOL'] = ["#{xc_location}/xclibtool"]
100
- config.build_settings['LD'] = ["#{xc_location}/xcld"]
98
+ def self.parent_dir(path, parent_count)
99
+ "../" * parent_count + path
100
+ end
101
101
 
102
- config.build_settings['XCREMOTE_CACHE_FAKE_SRCROOT'] = FAKE_SRCROOT
103
- add_cflags!(config.build_settings, '-fdebug-prefix-map', "#{user_proj_directory}=$(XCREMOTE_CACHE_FAKE_SRCROOT)")
104
- add_swiftflags!(config.build_settings, '-debug-prefix-map', "#{user_proj_directory}=$(XCREMOTE_CACHE_FAKE_SRCROOT)")
105
- end
106
-
102
+ # @param target [Target] target to apply XCRemoteCache
103
+ # @param repo_distance [Integer] distance from the git repo root to the target's $SRCROOT
104
+ # @param xc_location [String] path to the dir with all XCRemoteCache binaries, relative to the repo root
105
+ # @param xc_cc_path [String] path to the XCRemoteCache clang wrapper, relative to the repo root
106
+ # @param mode [String] mode name ('consumer', 'producer' etc.)
107
+ # @param exclude_build_configurations [String[]] list of targets that should have disabled remote cache
108
+ # @param final_target [String] name of target that should trigger marking
109
+ def self.enable_xcremotecache(target, repo_distance, xc_location, xc_cc_path, mode, exclude_build_configurations, final_target)
110
+ srcroot_relative_xc_location = parent_dir(xc_location, repo_distance)
107
111
 
108
- # User project is not generated from scratch (contrary to `Pods`), delete all previous XCRemoteCache phases
109
- target.build_phases.delete_if {|phase|
110
- # Some phases (e.g. PBXSourcesBuildPhase) don't have strict name check respond_to?
111
- if phase.respond_to?(:name)
112
- phase.name != nil && phase.name.start_with?("[XCRC]")
112
+ target.build_configurations.each do |config|
113
+ # apply only for relevant Configurations
114
+ next if exclude_build_configurations.include?(config.name)
115
+ if mode == 'consumer'
116
+ config.build_settings['CC'] = ["$SRCROOT/#{parent_dir(xc_cc_path, repo_distance)}"]
113
117
  end
114
- }
118
+ config.build_settings['SWIFT_EXEC'] = ["$SRCROOT/#{srcroot_relative_xc_location}/xcswiftc"]
119
+ config.build_settings['LIBTOOL'] = ["$SRCROOT/#{srcroot_relative_xc_location}/xclibtool"]
120
+ config.build_settings['LD'] = ["$SRCROOT/#{srcroot_relative_xc_location}/xcld"]
121
+
122
+ config.build_settings['XCREMOTE_CACHE_FAKE_SRCROOT'] = FAKE_SRCROOT
123
+ config.build_settings['XCRC_PLATFORM_PREFERRED_ARCH'] = ["$(LINK_FILE_LIST_$(CURRENT_VARIANT)_$(PLATFORM_PREFERRED_ARCH):dir:standardizepath:file:default=arm64)"]
124
+ debug_prefix_map_replacement = '$(SRCROOT' + ':dir:standardizepath' * repo_distance + ')'
125
+ add_cflags!(config.build_settings, '-fdebug-prefix-map', "#{debug_prefix_map_replacement}=$(XCREMOTE_CACHE_FAKE_SRCROOT)")
126
+ add_swiftflags!(config.build_settings, '-debug-prefix-map', "#{debug_prefix_map_replacement}=$(XCREMOTE_CACHE_FAKE_SRCROOT)")
127
+ end
115
128
 
116
129
  # Prebuild
117
130
  if mode == 'consumer'
118
- prebuild_script = target.new_shell_script_build_phase("[XCRC] Prebuild")
131
+ existing_prebuild_script = target.build_phases.detect do |phase|
132
+ if phase.respond_to?(:name)
133
+ phase.name != nil && phase.name.start_with?("[XCRC] Prebuild")
134
+ end
135
+ end
136
+ prebuild_script = existing_prebuild_script || target.new_shell_script_build_phase("[XCRC] Prebuild")
119
137
  prebuild_script.shell_script = "\"$SCRIPT_INPUT_FILE_0\""
120
- prebuild_script.input_paths = ["#{xc_location}/xcprebuild"]
138
+ prebuild_script.input_paths = ["$SRCROOT/#{srcroot_relative_xc_location}/xcprebuild"]
121
139
  prebuild_script.output_paths = [
122
- "$(TARGET_TEMP_DIR)/rc.enabled",
140
+ "$(TARGET_TEMP_DIR)/rc.enabled",
123
141
  "$(DWARF_DSYM_FOLDER_PATH)/$(DWARF_DSYM_FILE_NAME)"
124
142
  ]
125
143
  prebuild_script.dependency_file = "$(TARGET_TEMP_DIR)/prebuild.d"
126
144
 
127
145
  # Move prebuild (last element) to the first position (to make it real 'prebuild')
128
- target.build_phases.rotate!(-1)
146
+ target.build_phases.rotate!(-1) if existing_prebuild_script.nil?
147
+ elsif mode == 'producer'
148
+ # Delete existing prebuild build phase (to support switching between modes)
149
+ target.build_phases.delete_if do |phase|
150
+ if phase.respond_to?(:name)
151
+ phase.name != nil && phase.name.start_with?("[XCRC] Prebuild")
152
+ end
153
+ end
129
154
  end
130
155
 
131
156
  # Postbuild
132
- postbuild_script = target.new_shell_script_build_phase("[XCRC] Postbuild")
157
+ existing_postbuild_script = target.build_phases.detect do |phase|
158
+ if phase.respond_to?(:name)
159
+ phase.name != nil && phase.name.start_with?("[XCRC] Postbuild")
160
+ end
161
+ end
162
+ postbuild_script = existing_postbuild_script || target.new_shell_script_build_phase("[XCRC] Postbuild")
133
163
  postbuild_script.shell_script = "\"$SCRIPT_INPUT_FILE_0\""
134
- postbuild_script.input_paths = ["#{xc_location}/xcpostbuild"]
164
+ postbuild_script.input_paths = ["$SRCROOT/#{srcroot_relative_xc_location}/xcpostbuild"]
135
165
  postbuild_script.output_paths = [
136
- "$(TARGET_BUILD_DIR)/$(MODULES_FOLDER_PATH)/$(PRODUCT_MODULE_NAME).swiftmodule/$(PLATFORM_PREFERRED_ARCH).swiftmodule.md5",
137
- "$(TARGET_BUILD_DIR)/$(MODULES_FOLDER_PATH)/$(PRODUCT_MODULE_NAME).swiftmodule/$(PLATFORM_PREFERRED_ARCH)-$(LLVM_TARGET_TRIPLE_VENDOR)-$(SWIFT_PLATFORM_TARGET_PREFIX)$(LLVM_TARGET_TRIPLE_SUFFIX).swiftmodule.md5"
166
+ "$(TARGET_BUILD_DIR)/$(MODULES_FOLDER_PATH)/$(PRODUCT_MODULE_NAME).swiftmodule/$(XCRC_PLATFORM_PREFERRED_ARCH).swiftmodule.md5",
167
+ "$(TARGET_BUILD_DIR)/$(MODULES_FOLDER_PATH)/$(PRODUCT_MODULE_NAME).swiftmodule/$(XCRC_PLATFORM_PREFERRED_ARCH)-$(LLVM_TARGET_TRIPLE_VENDOR)-$(SWIFT_PLATFORM_TARGET_PREFIX)$(LLVM_TARGET_TRIPLE_SUFFIX).swiftmodule.md5"
138
168
  ]
139
169
  postbuild_script.dependency_file = "$(TARGET_TEMP_DIR)/postbuild.d"
140
170
 
141
171
  # Mark a sha as ready for a given platform and configuration when building the final_target
142
172
  if mode == 'producer' && target.name == final_target
143
- mark_script = target.new_shell_script_build_phase("[XCRC] Mark")
173
+ existing_mark_script = target.build_phases.detect do |phase|
174
+ if phase.respond_to?(:name)
175
+ phase.name != nil && phase.name.start_with?("[XCRC] Mark")
176
+ end
177
+ end
178
+ mark_script = existing_mark_script || target.new_shell_script_build_phase("[XCRC] Mark")
144
179
  mark_script.shell_script = "\"$SCRIPT_INPUT_FILE_0\" mark --configuration $CONFIGURATION --platform $PLATFORM_NAME"
145
- mark_script.input_paths = ["#{xc_location}/xcprepare"]
180
+ mark_script.input_paths = ["$SRCROOT/#{srcroot_relative_xc_location}/xcprepare"]
181
+ else
182
+ # Delete existing mark build phase (to support switching between modes or changing the final target)
183
+ target.build_phases.delete_if do |phase|
184
+ if phase.respond_to?(:name)
185
+ phase.name != nil && phase.name.start_with?("[XCRC] Mark")
186
+ end
187
+ end
146
188
  end
147
189
  end
148
190
 
@@ -196,15 +238,18 @@ module CocoapodsXCRemoteCacheModifier
196
238
  release_url = 'https://api.github.com/repos/spotify/XCRemoteCache/releases/latest'
197
239
  asset_url = nil
198
240
 
199
- open(release_url, :http_basic_authentication => credentials) do |f|
200
- asset_url = JSON.parse(f.read)['assets'][0]['url']
241
+ URI.open(release_url) do |f|
242
+ assets_array = JSON.parse(f.read)['assets']
243
+ # Pick fat archive
244
+ asset_array = assets_array.detect{|arr| arr['name'].include?(FAT_ARCHIVE_NAME_INFIX)}
245
+ asset_url = asset_array['url']
201
246
  end
202
247
 
203
248
  if asset_url.nil?
204
249
  throw "Downloading XCRemoteCache failed"
205
250
  end
206
251
 
207
- open(asset_url, :http_basic_authentication => credentials, "accept" => 'application/octet-stream') do |f|
252
+ URI.open(asset_url, "accept" => 'application/octet-stream') do |f|
208
253
  File.open(local_package_location, "wb") do |file|
209
254
  file.puts f.read
210
255
  end
@@ -247,6 +292,7 @@ module CocoapodsXCRemoteCacheModifier
247
292
  # Returns the content (array of lines) of the lldbinit with stripped XCRemoteCache rewrite
248
293
  def self.clean_lldbinit_content(lldbinit_path)
249
294
  all_lines = []
295
+ return all_lines unless File.exist?(lldbinit_path)
250
296
  File.open(lldbinit_path) { |file|
251
297
  while(line = file.gets) != nil
252
298
  line = line.strip
@@ -286,7 +332,7 @@ module CocoapodsXCRemoteCacheModifier
286
332
 
287
333
  begin
288
334
  user_proj_directory = File.dirname(user_project.path)
289
- set_configuration_default_values(user_proj_directory)
335
+ set_configuration_default_values
290
336
 
291
337
  unless @@configuration['enabled']
292
338
  Pod::UI.puts "[XCRC] XCRemoteCache disabled"
@@ -295,7 +341,6 @@ module CocoapodsXCRemoteCacheModifier
295
341
  end
296
342
 
297
343
  validate_configuration()
298
-
299
344
  mode = @@configuration['mode']
300
345
  xccc_location = @@configuration['xccc_file']
301
346
  remote_commit_file = @@configuration['remote_commit_file']
@@ -306,22 +351,59 @@ module CocoapodsXCRemoteCacheModifier
306
351
  check_build_configuration = @@configuration['check_build_configuration']
307
352
  check_platform = @@configuration['check_platform']
308
353
 
354
+ xccc_location_absolute = "#{user_proj_directory}/#{xccc_location}"
355
+ xcrc_location_absolute = "#{user_proj_directory}/#{xcrc_location}"
356
+ remote_commit_file_absolute = "#{user_proj_directory}/#{remote_commit_file}"
357
+
309
358
  # Download XCRC
310
- download_xcrc_if_needed(xcrc_location)
359
+ download_xcrc_if_needed(xcrc_location_absolute)
311
360
 
312
361
  # Save .rcinfo
313
- save_rcinfo(generate_rcinfo(), user_proj_directory)
362
+ root_rcinfo = generate_rcinfo()
363
+ save_rcinfo(root_rcinfo, user_proj_directory)
314
364
 
315
365
  # Create directory for xccc & arc.rc location
316
366
  Dir.mkdir(BIN_DIR) unless File.exist?(BIN_DIR)
317
367
 
318
368
  # Remove previous xccc & arc.rc
319
- File.delete(remote_commit_file) if File.exist?(remote_commit_file)
320
- File.delete(xccc_location) if File.exist?(xccc_location)
369
+ File.delete(remote_commit_file_absolute) if File.exist?(remote_commit_file_absolute)
370
+ File.delete(xccc_location_absolute) if File.exist?(xccc_location_absolute)
321
371
 
322
372
  # Prepare XCRC
373
+
374
+ # Pods projects can be generated only once (if incremental_installation is enabled)
375
+ # Always integrate XCRemoteCache to all Pods, in case it will be needed later
376
+ unless installer_context.pods_project.nil?
377
+ # Attach XCRemoteCache to Pods targets
378
+ installer_context.pods_project.targets.each do |target|
379
+ next if target.name.start_with?("Pods-")
380
+ next if target.name.end_with?("Tests")
381
+ next if exclude_targets.include?(target.name)
382
+ enable_xcremotecache(target, 1, xcrc_location, xccc_location, mode, exclude_build_configurations, final_target)
383
+ end
384
+
385
+ # Create .rcinfo into `Pods` directory as that .xcodeproj reads configuration from .xcodeproj location
386
+ pods_proj_directory = installer_context.sandbox_root
387
+
388
+ # Manual Pods/.rcinfo generation
389
+
390
+ # all paths in .rcinfo are relative to the root so paths used in Pods.xcodeproj need to be aligned
391
+ pods_path = Pathname.new(pods_proj_directory)
392
+ root_path = Pathname.new(user_proj_directory)
393
+ root_path_to_pods = root_path.relative_path_from(pods_path)
394
+
395
+ pods_rcinfo = root_rcinfo.merge({
396
+ 'remote_commit_file' => "#{root_path_to_pods}/#{remote_commit_file}",
397
+ 'xccc_file' => "#{root_path_to_pods}/#{xccc_location}"
398
+ })
399
+ save_rcinfo(pods_rcinfo, pods_proj_directory)
400
+
401
+ installer_context.pods_project.save()
402
+ end
403
+
404
+ # Enabled/disable XCRemoteCache for the main (user) project
323
405
  begin
324
- prepare_result = YAML.load`#{xcrc_location}/xcprepare --configuration #{check_build_configuration} --platform #{check_platform}`
406
+ prepare_result = YAML.load`#{xcrc_location_absolute}/xcprepare --configuration #{check_build_configuration} --platform #{check_platform}`
325
407
  unless prepare_result['result'] || mode != 'consumer'
326
408
  # Uninstall the XCRemoteCache for the consumer mode
327
409
  disable_xcremotecache(user_project)
@@ -334,26 +416,11 @@ module CocoapodsXCRemoteCacheModifier
334
416
  next
335
417
  end
336
418
 
337
- # Attach XCRemoteCache to Pods targets
338
- installer_context.pods_project.targets.each do |target|
339
- next if target.name.start_with?("Pods-")
340
- next if target.name.end_with?("Tests")
341
- next if exclude_targets.include?(target.name)
342
- enable_xcremotecache(target, user_proj_directory, xcrc_location, xccc_location, mode, exclude_build_configurations, check_build_configuration, check_platform, final_target)
343
- end
344
-
345
- # Create .rcinfo into `Pods` directory as that .xcodeproj reads configuration from .xcodeproj location
346
- pods_proj_directory = installer_context.sandbox_root
347
-
348
- # Manual .rcinfo generation (in YAML format)
349
- save_rcinfo({'extra_configuration_file' => "#{user_proj_directory}/.rcinfo"}, pods_proj_directory)
350
-
351
- installer_context.pods_project.save()
352
419
 
353
420
  # Attach XCRC to the app targets
354
421
  user_project.targets.each do |target|
355
422
  next if exclude_targets.include?(target.name)
356
- enable_xcremotecache(target, user_proj_directory, xcrc_location, xccc_location, mode, exclude_build_configurations, check_build_configuration, check_platform, final_target)
423
+ enable_xcremotecache(target, 0, xcrc_location, xccc_location, mode, exclude_build_configurations, final_target)
357
424
  end
358
425
 
359
426
  # Set Target sourcemap
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module CocoapodsXcremotecache
16
- VERSION = "0.0.1"
16
+ VERSION = "0.0.5"
17
17
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-xcremotecache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bartosz Polaczyk
8
8
  - Mark Vasiv
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-11-16 00:00:00.000000000 Z
12
+ date: 2022-01-19 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: CocoaPods plugin that enables XCRemoteCache with the project.
15
15
  email:
@@ -34,7 +34,7 @@ homepage: https://github.com/spotify/XCRemoteCache
34
34
  licenses:
35
35
  - Apache-2.0
36
36
  metadata: {}
37
- post_install_message:
37
+ post_install_message:
38
38
  rdoc_options: []
39
39
  require_paths:
40
40
  - lib
@@ -49,8 +49,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0'
51
51
  requirements: []
52
- rubygems_version: 3.2.3
53
- signing_key:
52
+ rubygems_version: 3.2.32
53
+ signing_key:
54
54
  specification_version: 4
55
55
  summary: A simple plugin that attaches to the post_install hook and modifies the generated
56
56
  project to use XCRemoteCache. Supports both producing anc consuming parts.