cocoapods 1.7.5 → 1.8.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +175 -11
  3. data/LICENSE +13 -8
  4. data/README.md +2 -1
  5. data/lib/cocoapods/command/init.rb +18 -16
  6. data/lib/cocoapods/command/install.rb +2 -1
  7. data/lib/cocoapods/command/lib/create.rb +1 -2
  8. data/lib/cocoapods/command/lib/lint.rb +12 -11
  9. data/lib/cocoapods/command/repo/add.rb +2 -2
  10. data/lib/cocoapods/command/repo/list.rb +7 -5
  11. data/lib/cocoapods/command/repo/push.rb +15 -12
  12. data/lib/cocoapods/command/setup.rb +2 -88
  13. data/lib/cocoapods/command/spec/lint.rb +10 -9
  14. data/lib/cocoapods/command/update.rb +5 -4
  15. data/lib/cocoapods/config.rb +9 -8
  16. data/lib/cocoapods/external_sources/path_source.rb +1 -1
  17. data/lib/cocoapods/gem_version.rb +1 -1
  18. data/lib/cocoapods/generator/embed_frameworks_script.rb +1 -1
  19. data/lib/cocoapods/generator/info_plist_file.rb +2 -2
  20. data/lib/cocoapods/installer.rb +32 -12
  21. data/lib/cocoapods/installer/analyzer.rb +132 -97
  22. data/lib/cocoapods/installer/analyzer/target_inspector.rb +6 -8
  23. data/lib/cocoapods/installer/installation_options.rb +4 -0
  24. data/lib/cocoapods/installer/pod_source_installer.rb +17 -1
  25. data/lib/cocoapods/installer/podfile_validator.rb +26 -6
  26. data/lib/cocoapods/installer/project_cache/project_cache_analyzer.rb +37 -27
  27. data/lib/cocoapods/installer/project_cache/project_cache_version.rb +1 -1
  28. data/lib/cocoapods/installer/project_cache/project_installation_cache.rb +3 -3
  29. data/lib/cocoapods/installer/project_cache/project_metadata_cache.rb +12 -6
  30. data/lib/cocoapods/installer/project_cache/target_cache_key.rb +32 -8
  31. data/lib/cocoapods/installer/project_cache/target_metadata.rb +6 -2
  32. data/lib/cocoapods/installer/sandbox_dir_cleaner.rb +12 -0
  33. data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +1 -1
  34. data/lib/cocoapods/installer/xcode/multi_pods_project_generator.rb +3 -1
  35. data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_dependency_installer.rb +2 -2
  36. data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +18 -3
  37. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_dependency_installer.rb +53 -11
  38. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +92 -60
  39. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +66 -50
  40. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +12 -0
  41. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +6 -2
  42. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +2 -2
  43. data/lib/cocoapods/installer/xcode/target_validator.rb +30 -14
  44. data/lib/cocoapods/native_target_extension.rb +11 -5
  45. data/lib/cocoapods/open-uri.rb +1 -1
  46. data/lib/cocoapods/project.rb +13 -7
  47. data/lib/cocoapods/resolver.rb +63 -53
  48. data/lib/cocoapods/resolver/lazy_specification.rb +14 -5
  49. data/lib/cocoapods/sandbox.rb +35 -2
  50. data/lib/cocoapods/sandbox/pod_dir_cleaner.rb +3 -4
  51. data/lib/cocoapods/sources_manager.rb +72 -43
  52. data/lib/cocoapods/target.rb +7 -1
  53. data/lib/cocoapods/target/aggregate_target.rb +13 -8
  54. data/lib/cocoapods/target/build_settings.rb +33 -10
  55. data/lib/cocoapods/target/pod_target.rb +114 -30
  56. data/lib/cocoapods/user_interface/error_report.rb +9 -5
  57. data/lib/cocoapods/validator.rb +55 -11
  58. data/lib/cocoapods/version_metadata.rb +14 -1
  59. metadata +6 -7
  60. data/lib/cocoapods/command/spec/env_spec.rb +0 -53
@@ -34,9 +34,9 @@ module Pod
34
34
  unless @name && @url
35
35
  help! 'Adding a repo needs a `NAME` and a `URL`.'
36
36
  end
37
- if @name == 'master' || @url =~ %r{github.com[:/]+cocoapods/specs}i
37
+ if @name == 'trunk'
38
38
  raise Informative,
39
- 'To setup the master specs repo, please run `pod setup`.'
39
+ "Repo name `trunk` is reserved for CocoaPods' main spec repo accessed via CDN."
40
40
  end
41
41
  end
42
42
 
@@ -19,10 +19,10 @@ module Pod
19
19
 
20
20
  # @output Examples:
21
21
  #
22
- # master
23
- # - type: git (master)
24
- # - URL: https://github.com/CocoaPods/Specs.git
25
- # - path: /Users/lascorbe/.cocoapods/repos/master
22
+ # trunk
23
+ # - type: CDN
24
+ # - URL: https://cdn.cocoapods.org/
25
+ # - path: /Users/lascorbe/.cocoapods/repos/trunk
26
26
  #
27
27
  # test
28
28
  # - type: local copy
@@ -45,7 +45,9 @@ module Pod
45
45
  # @return [void]
46
46
  #
47
47
  def print_source(source)
48
- if source.git?
48
+ if source.is_a?(Pod::CDNSource)
49
+ UI.puts '- Type: CDN'
50
+ elsif source.git?
49
51
  branch_name, = Executable.capture_command('git', %w(name-rev --name-only HEAD), :capture => :out, :chdir => source.repo)
50
52
  branch_name.strip!
51
53
  branch_name = 'unknown' if branch_name.empty?
@@ -25,19 +25,18 @@ module Pod
25
25
  ['--allow-warnings', 'Allows pushing even if there are warnings'],
26
26
  ['--use-libraries', 'Linter uses static libraries to install the spec'],
27
27
  ['--use-modular-headers', 'Lint uses modular headers during installation'],
28
- ['--sources=https://github.com/artsy/Specs,master', 'The sources from which to pull dependent pods ' \
29
- '(defaults to all available repos). ' \
30
- 'Multiple sources must be comma-delimited.'],
28
+ ["--sources=#{Pod::TrunkSource::TRUNK_REPO_URL}", 'The sources from which to pull dependent pods ' \
29
+ '(defaults to all available repos). Multiple sources must be comma-delimited'],
31
30
  ['--local-only', 'Does not perform the step of pushing REPO to its remote'],
32
31
  ['--no-private', 'Lint includes checks that apply only to public repos'],
33
32
  ['--skip-import-validation', 'Lint skips validating that the pod can be imported'],
34
33
  ['--skip-tests', 'Lint skips building and running tests during validation'],
35
- ['--commit-message="Fix bug in pod"', 'Add custom commit message. ' \
36
- 'Opens default editor if no commit message is specified.'],
37
- ['--use-json', 'Push JSON spec to repo'],
38
- ['--swift-version=VERSION', 'The SWIFT_VERSION that should be used when linting the spec. ' \
39
- 'This takes precedence over the Swift versions specified by the spec or a `.swift-version` file.'],
40
- ['--no-overwrite', 'Disallow pushing that would overwrite an existing spec.'],
34
+ ['--commit-message="Fix bug in pod"', 'Add custom commit message. Opens default editor if no commit ' \
35
+ 'message is specified'],
36
+ ['--use-json', 'Convert the podspec to JSON before pushing it to the repo'],
37
+ ['--swift-version=VERSION', 'The `SWIFT_VERSION` that should be used when linting the spec. ' \
38
+ 'This takes precedence over the Swift versions specified by the spec or a `.swift-version` file'],
39
+ ['--no-overwrite', 'Disallow pushing that would overwrite an existing spec'],
41
40
  ].concat(super)
42
41
  end
43
42
 
@@ -73,7 +72,7 @@ module Pod
73
72
 
74
73
  def run
75
74
  open_editor if @commit_message && @message.nil?
76
- check_if_master_repo
75
+ check_if_push_allowed
77
76
  validate_podspec_files
78
77
  check_repo_status
79
78
  update_repo
@@ -106,7 +105,11 @@ module Pod
106
105
  # Temporary check to ensure that users do not push accidentally private
107
106
  # specs to the master repo.
108
107
  #
109
- def check_if_master_repo
108
+ def check_if_push_allowed
109
+ if @source.is_a?(CDNSource)
110
+ raise Informative, 'Cannot push to a CDN source, as it is read-only.'
111
+ end
112
+
110
113
  remotes, = Executable.capture_command('git', %w(remote --verbose), :capture => :merge, :chdir => repo_dir)
111
114
  master_repo_urls = [
112
115
  'git@github.com:CocoaPods/Specs.git',
@@ -227,7 +230,7 @@ module Pod
227
230
  #
228
231
  def push_repo
229
232
  UI.puts "\nPushing the `#{@repo}' repo\n".yellow
230
- repo_git('push', 'origin', 'master')
233
+ repo_git('push', 'origin', 'HEAD')
231
234
  end
232
235
 
233
236
  #---------------------------------------------------------------------#
@@ -6,97 +6,11 @@ module Pod
6
6
  self.summary = 'Setup the CocoaPods environment'
7
7
 
8
8
  self.description = <<-DESC
9
- Creates a directory at `#{Config.instance.repos_dir}` which will hold your spec-repos.
10
- This is where it will create a clone of the public `master` spec-repo from:
11
-
12
- https://github.com/CocoaPods/Specs
13
-
14
- If the clone already exists, it will ensure that it is up-to-date.
9
+ Setup the CocoaPods environment
15
10
  DESC
16
11
 
17
- extend Executable
18
- executable :git
19
-
20
12
  def run
21
- UI.section 'Setting up CocoaPods master repo' do
22
- if master_repo_dir.exist?
23
- set_master_repo_url
24
- set_master_repo_branch
25
- update_master_repo
26
- else
27
- add_master_repo
28
- end
29
- end
30
-
31
- UI.puts 'Setup completed'.green
32
- end
33
-
34
- #--------------------------------------#
35
-
36
- # @!group Setup steps
37
-
38
- # Sets the url of the master repo according to whether it is push.
39
- #
40
- # @return [void]
41
- #
42
- def set_master_repo_url
43
- Dir.chdir(master_repo_dir) do
44
- git('remote', 'set-url', 'origin', url)
45
- end
46
- end
47
-
48
- # Adds the master repo from the remote.
49
- #
50
- # @return [void]
51
- #
52
- def add_master_repo
53
- cmd = ['master', url, 'master', '--progress']
54
- Repo::Add.parse(cmd).run
55
- end
56
-
57
- # Updates the master repo against the remote.
58
- #
59
- # @return [void]
60
- #
61
- def update_master_repo
62
- show_output = !config.silent?
63
- config.sources_manager.update('master', show_output)
64
- end
65
-
66
- # Sets the repo to the master branch.
67
- #
68
- # @note This is not needed anymore as it was used for CocoaPods 0.6
69
- # release candidates.
70
- #
71
- # @return [void]
72
- #
73
- def set_master_repo_branch
74
- Dir.chdir(master_repo_dir) do
75
- git %w(checkout master)
76
- end
77
- end
78
-
79
- #--------------------------------------#
80
-
81
- # @!group Private helpers
82
-
83
- # @return [String] the url to use according to whether push mode should
84
- # be enabled.
85
- #
86
- def url
87
- self.class.read_only_url
88
- end
89
-
90
- # @return [String] the read only url of the master repo.
91
- #
92
- def self.read_only_url
93
- 'https://github.com/CocoaPods/Specs.git'
94
- end
95
-
96
- # @return [Pathname] the directory of the master repo.
97
- #
98
- def master_repo_dir
99
- config.sources_manager.master_repo_dir
13
+ # Right now, no setup is needed
100
14
  end
101
15
  end
102
16
  end
@@ -24,17 +24,16 @@ module Pod
24
24
  ['--fail-fast', 'Lint stops on the first failing platform or subspec'],
25
25
  ['--use-libraries', 'Lint uses static libraries to install the spec'],
26
26
  ['--use-modular-headers', 'Lint uses modular headers during installation'],
27
- ['--sources=https://github.com/artsy/Specs,master', 'The sources from which to pull dependent pods ' \
28
- '(defaults to https://github.com/CocoaPods/Specs.git). ' \
29
- 'Multiple sources must be comma-delimited.'],
30
- ['--platforms=ios,macos', 'Lint against specific platforms' \
31
- '(defaults to all platforms supported by the podspec).' \
32
- 'Multiple platforms must be comma-delimited'],
27
+ ["--sources=#{Pod::TrunkSource::TRUNK_REPO_URL}", 'The sources from which to pull dependent pods ' \
28
+ "(defaults to #{Pod::TrunkSource::TRUNK_REPO_URL}). Multiple sources must be comma-delimited"],
29
+ ['--platforms=ios,macos', 'Lint against specific platforms (defaults to all platforms supported by the ' \
30
+ 'podspec). Multiple platforms must be comma-delimited'],
33
31
  ['--private', 'Lint skips checks that apply only to public specs'],
34
- ['--swift-version=VERSION', 'The SWIFT_VERSION that should be used to lint the spec. ' \
35
- 'This takes precedence over the Swift versions specified by the spec or a `.swift-version` file.'],
32
+ ['--swift-version=VERSION', 'The `SWIFT_VERSION` that should be used to lint the spec. ' \
33
+ 'This takes precedence over the Swift versions specified by the spec or a `.swift-version` file'],
36
34
  ['--skip-import-validation', 'Lint skips validating that the pod can be imported'],
37
35
  ['--skip-tests', 'Lint skips building and running tests during validation'],
36
+ ['--analyze', 'Validate with the Xcode Static Analysis tool'],
38
37
  ].concat(super)
39
38
  end
40
39
 
@@ -47,12 +46,13 @@ module Pod
47
46
  @only_subspec = argv.option('subspec')
48
47
  @use_frameworks = !argv.flag?('use-libraries')
49
48
  @use_modular_headers = argv.flag?('use-modular-headers')
50
- @source_urls = argv.option('sources', 'https://github.com/CocoaPods/Specs.git').split(',')
49
+ @source_urls = argv.option('sources', Pod::TrunkSource::TRUNK_REPO_URL).split(',')
51
50
  @platforms = argv.option('platforms', '').split(',')
52
51
  @private = argv.flag?('private', false)
53
52
  @swift_version = argv.option('swift-version', nil)
54
53
  @skip_import_validation = argv.flag?('skip-import-validation', false)
55
54
  @skip_tests = argv.flag?('skip-tests', false)
55
+ @analyze = argv.flag?('analyze', false)
56
56
  @podspecs_paths = argv.arguments!
57
57
  super
58
58
  end
@@ -74,6 +74,7 @@ module Pod
74
74
  validator.swift_version = @swift_version
75
75
  validator.skip_import_validation = @skip_import_validation
76
76
  validator.skip_tests = @skip_tests
77
+ validator.analyze = @analyze
77
78
  validator.validate
78
79
  failure_reasons << validator.failure_reason
79
80
 
@@ -21,10 +21,11 @@ module Pod
21
21
 
22
22
  def self.options
23
23
  [
24
- ['--sources=https://github.com/artsy/Specs,master', 'The sources from which to update dependent pods. ' \
25
- 'Multiple sources must be comma-delimited. The master repo will not be included by default with this option.'],
26
- ['--exclude-pods=podName', 'Pods to exclude during update. Multiple pods must be comma-delimited.'],
27
- ['--clean-install', 'Ignore the contents of the project cache and force a full pod installation. This only applies to projects that have enabled incremental installation.'],
24
+ ["--sources=#{Pod::TrunkSource::TRUNK_REPO_URL}", 'The sources from which to update dependent pods. ' \
25
+ 'Multiple sources must be comma-delimited'],
26
+ ['--exclude-pods=podName', 'Pods to exclude during update. Multiple pods must be comma-delimited'],
27
+ ['--clean-install', 'Ignore the contents of the project cache and force a full pod installation. This only ' \
28
+ 'applies to projects that have enabled incremental installation'],
28
29
  ].concat(super)
29
30
  end
30
31
 
@@ -140,6 +140,8 @@ module Pod
140
140
 
141
141
  attr_writer :repos_dir
142
142
 
143
+ # @return [Source::Manager] the source manager for the spec repos in `repos_dir`
144
+ #
143
145
  def sources_manager
144
146
  return @sources_manager if @sources_manager && @sources_manager.repos_dir == repos_dir
145
147
  @sources_manager = Source::Manager.new(repos_dir)
@@ -155,13 +157,13 @@ module Pod
155
157
  # Podfile is located.
156
158
  #
157
159
  def installation_root
158
- current_dir = ActiveSupport::Multibyte::Unicode.normalize(Dir.pwd)
159
- current_path = Pathname.new(current_dir)
160
- unless @installation_root
160
+ @installation_root ||= begin
161
+ current_dir = Pathname.new(ActiveSupport::Multibyte::Unicode.normalize(Dir.pwd))
162
+ current_path = current_dir
161
163
  until current_path.root?
162
164
  if podfile_path_in_dir(current_path)
163
- @installation_root = current_path
164
- unless current_path == Pathname.pwd
165
+ installation_root = current_path
166
+ unless current_path == current_dir
165
167
  UI.puts("[in #{current_path}]")
166
168
  end
167
169
  break
@@ -169,9 +171,8 @@ module Pod
169
171
  current_path = current_path.parent
170
172
  end
171
173
  end
172
- @installation_root ||= Pathname.pwd
174
+ installation_root || current_dir
173
175
  end
174
- @installation_root
175
176
  end
176
177
 
177
178
  attr_writer :installation_root
@@ -276,7 +277,7 @@ module Pod
276
277
  def configure_with(values_by_key)
277
278
  return unless values_by_key
278
279
  values_by_key.each do |key, value|
279
- if key == :cache_root
280
+ if key.to_sym == :cache_root
280
281
  value = Pathname.new(value).expand_path
281
282
  end
282
283
  instance_variable_set("@#{key}", value)
@@ -8,7 +8,7 @@ module Pod
8
8
  #
9
9
  def fetch(sandbox)
10
10
  title = "Fetching podspec for `#{name}` #{description}"
11
- UI.titled_section(title, :verbose_prefix => '-> ') do
11
+ UI.section(title, '-> ') do
12
12
  podspec = podspec_path
13
13
  unless podspec.exist?
14
14
  raise Informative, "No podspec found for `#{name}` in " \
@@ -1,5 +1,5 @@
1
1
  module Pod
2
2
  # The version of the CocoaPods command line tool.
3
3
  #
4
- VERSION = '1.7.5'.freeze unless defined? Pod::VERSION
4
+ VERSION = '1.8.0.beta.1'.freeze unless defined? Pod::VERSION
5
5
  end
@@ -205,7 +205,7 @@ module Pod
205
205
  }
206
206
 
207
207
  SH
208
- script << "\n" unless frameworks_by_config.values.all?(&:empty?)
208
+ script << "\n" unless frameworks_by_config.each_value.all?(&:empty?)
209
209
  frameworks_by_config.each do |config, frameworks_with_dsyms|
210
210
  next if frameworks_with_dsyms.empty?
211
211
  script << %(if [[ "$CONFIGURATION" == "#{config}" ]]; then\n)
@@ -5,7 +5,7 @@ module Pod
5
5
  # framework. It states public attributes.
6
6
  #
7
7
  class InfoPlistFile
8
- # @return [Version] version The version to use for when generating this Info.plist file.
8
+ # @return [String] version The version to use for when generating this Info.plist file.
9
9
  #
10
10
  attr_reader :version
11
11
 
@@ -24,7 +24,7 @@ module Pod
24
24
 
25
25
  # Initialize a new instance
26
26
  #
27
- # @param [Version] version @see #version
27
+ # @param [String] version @see #version
28
28
  # @param [Platform] platform @see #platform
29
29
  # @param [Symbol] bundle_package_type @see #bundle_package_type
30
30
  # @param [Hash] additional_entries @see #additional_entries
@@ -156,17 +156,30 @@ module Pod
156
156
  resolve_dependencies
157
157
  download_dependencies
158
158
  validate_targets
159
+ if installation_options.skip_pods_project_generation?
160
+ show_skip_pods_project_generation_message
161
+ else
162
+ integrate
163
+ end
164
+ perform_post_install_actions
165
+ end
166
+
167
+ def show_skip_pods_project_generation_message
168
+ UI.section 'Skipping Pods Project Creation'
169
+ UI.section 'Skipping User Project Integration'
170
+ end
171
+
172
+ def integrate
159
173
  generate_pods_project
160
174
  if installation_options.integrate_targets?
161
175
  integrate_user_project
162
176
  else
163
177
  UI.section 'Skipping User Project Integration'
164
178
  end
165
- perform_post_install_actions
166
179
  end
167
180
 
168
181
  def analyze_project_cache
169
- user_projects = aggregate_targets.map(&:user_project).compact
182
+ user_projects = aggregate_targets.map(&:user_project).compact.uniq
170
183
  object_version = user_projects.min_by { |p| p.object_version.to_i }.object_version.to_i unless user_projects.empty?
171
184
 
172
185
  if !installation_options.incremental_installation
@@ -175,8 +188,8 @@ module Pod
175
188
  analysis_result.all_user_build_configurations, object_version)
176
189
  else
177
190
  UI.message 'Analyzing Project Cache' do
178
- @installation_cache = ProjectCache::ProjectInstallationCache.from_file(sandbox.project_installation_cache_path)
179
- @metadata_cache = ProjectCache::ProjectMetadataCache.from_file(sandbox.project_metadata_cache_path)
191
+ @installation_cache = ProjectCache::ProjectInstallationCache.from_file(sandbox, sandbox.project_installation_cache_path)
192
+ @metadata_cache = ProjectCache::ProjectMetadataCache.from_file(sandbox, sandbox.project_metadata_cache_path)
180
193
  @project_cache_version = ProjectCache::ProjectCacheVersion.from_file(sandbox.project_version_cache_path)
181
194
 
182
195
  force_clean_install = clean_install || project_cache_version.version != Version.create(VersionMetadata.project_cache_version)
@@ -337,8 +350,7 @@ module Pod
337
350
 
338
351
  # @!group Installation results
339
352
 
340
- # @return [Analyzer] the analyzer which provides the information about what
341
- # needs to be installed.
353
+ # @return [Analyzer::AnalysisResult] the result of the analysis performed during installation
342
354
  #
343
355
  attr_reader :analysis_result
344
356
 
@@ -496,7 +508,7 @@ module Pod
496
508
  install_source_of_pod(spec.name)
497
509
  end
498
510
  else
499
- UI.titled_section("Using #{spec}", title_options) do
511
+ UI.section("Using #{spec}", title_options[:verbose_prefix]) do
500
512
  create_pod_installer(spec.name)
501
513
  end
502
514
  end
@@ -514,7 +526,7 @@ module Pod
514
526
  raise StandardError, message
515
527
  end
516
528
 
517
- pod_installer = PodSourceInstaller.new(sandbox, specs_by_platform, :can_cache => installation_options.clean?)
529
+ pod_installer = PodSourceInstaller.new(sandbox, podfile, specs_by_platform, :can_cache => installation_options.clean?)
518
530
  pod_installers << pod_installer
519
531
  pod_installer
520
532
  end
@@ -574,7 +586,7 @@ module Pod
574
586
  end
575
587
 
576
588
  def validate_targets
577
- validator = Xcode::TargetValidator.new(aggregate_targets, pod_targets)
589
+ validator = Xcode::TargetValidator.new(aggregate_targets, pod_targets, installation_options)
578
590
  validator.validate!
579
591
  end
580
592
 
@@ -740,16 +752,24 @@ module Pod
740
752
  @lockfile = generate_lockfile
741
753
 
742
754
  UI.message "- Writing Lockfile in #{UI.path config.lockfile_path}" do
755
+ # No need to invoke Sandbox#update_changed_file here since this logic already handles checking if the
756
+ # contents of the file are the same.
743
757
  @lockfile.write_to_disk(config.lockfile_path)
744
758
  end
745
759
 
746
760
  UI.message "- Writing Manifest in #{UI.path sandbox.manifest_path}" do
747
- sandbox.manifest_path.open('w') do |f|
748
- f.write config.lockfile_path.read
749
- end
761
+ # No need to invoke Sandbox#update_changed_file here since this logic already handles checking if the
762
+ # contents of the file are the same.
763
+ @lockfile.write_to_disk(sandbox.manifest_path)
750
764
  end
751
765
  end
752
766
 
767
+ # @param [ProjectCacheAnalysisResult] cache_analysis_result
768
+ # The cache analysis result for the current installation.
769
+ #
770
+ # @param [Hash{String => TargetInstallationResult}] target_installation_results
771
+ # The installation results for pod targets installed.
772
+ #
753
773
  def update_project_cache(cache_analysis_result, target_installation_results)
754
774
  return unless installation_cache || metadata_cache
755
775
  installation_cache.update_cache_key_by_target_label!(cache_analysis_result.cache_key_by_target_label)