cocoapods 1.7.5 → 1.8.0.beta.1

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 (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)