cocoapods 0.33.1 → 0.34.0.rc1

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +171 -46
  3. data/README.md +9 -9
  4. data/bin/pod +5 -5
  5. data/bin/sandbox-pod +2 -6
  6. data/lib/cocoapods.rb +4 -4
  7. data/lib/cocoapods/command.rb +12 -10
  8. data/lib/cocoapods/command/init.rb +12 -13
  9. data/lib/cocoapods/command/inter_process_communication.rb +6 -17
  10. data/lib/cocoapods/command/lib.rb +27 -24
  11. data/lib/cocoapods/command/list.rb +9 -9
  12. data/lib/cocoapods/command/outdated.rb +4 -9
  13. data/lib/cocoapods/command/project.rb +57 -19
  14. data/lib/cocoapods/command/push.rb +0 -1
  15. data/lib/cocoapods/command/repo.rb +14 -15
  16. data/lib/cocoapods/command/repo/push.rb +24 -19
  17. data/lib/cocoapods/command/search.rb +12 -13
  18. data/lib/cocoapods/command/setup.rb +10 -9
  19. data/lib/cocoapods/command/spec.rb +67 -63
  20. data/lib/cocoapods/config.rb +21 -54
  21. data/lib/cocoapods/downloader.rb +0 -1
  22. data/lib/cocoapods/executable.rb +3 -8
  23. data/lib/cocoapods/external_sources.rb +2 -4
  24. data/lib/cocoapods/external_sources/abstract_external_source.rb +15 -10
  25. data/lib/cocoapods/external_sources/downloader_source.rb +0 -2
  26. data/lib/cocoapods/external_sources/path_source.rb +1 -4
  27. data/lib/cocoapods/external_sources/podspec_source.rb +1 -3
  28. data/lib/cocoapods/gem_version.rb +1 -2
  29. data/lib/cocoapods/generator/acknowledgements.rb +5 -8
  30. data/lib/cocoapods/generator/acknowledgements/markdown.rb +5 -7
  31. data/lib/cocoapods/generator/acknowledgements/plist.rb +9 -10
  32. data/lib/cocoapods/generator/bridge_support.rb +1 -1
  33. data/lib/cocoapods/generator/copy_resources_script.rb +10 -14
  34. data/lib/cocoapods/generator/dummy_source.rb +3 -3
  35. data/lib/cocoapods/generator/prefix_header.rb +15 -16
  36. data/lib/cocoapods/generator/target_environment_header.rb +122 -36
  37. data/lib/cocoapods/generator/xcconfig.rb +0 -4
  38. data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +74 -65
  39. data/lib/cocoapods/generator/xcconfig/private_pod_xcconfig.rb +92 -95
  40. data/lib/cocoapods/generator/xcconfig/public_pod_xcconfig.rb +48 -51
  41. data/lib/cocoapods/generator/xcconfig/xcconfig_helper.rb +10 -10
  42. data/lib/cocoapods/hooks/installer_representation.rb +15 -18
  43. data/lib/cocoapods/hooks/library_representation.rb +4 -8
  44. data/lib/cocoapods/hooks/pod_representation.rb +1 -5
  45. data/lib/cocoapods/hooks_manager.rb +63 -0
  46. data/lib/cocoapods/installer.rb +60 -47
  47. data/lib/cocoapods/installer/analyzer.rb +60 -62
  48. data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +5 -8
  49. data/lib/cocoapods/installer/file_references_installer.rb +7 -10
  50. data/lib/cocoapods/installer/hooks_context.rb +74 -0
  51. data/lib/cocoapods/installer/migrator.rb +99 -0
  52. data/lib/cocoapods/installer/pod_source_installer.rb +9 -29
  53. data/lib/cocoapods/installer/target_installer.rb +7 -17
  54. data/lib/cocoapods/installer/target_installer/aggregate_target_installer.rb +40 -41
  55. data/lib/cocoapods/installer/target_installer/pod_target_installer.rb +43 -54
  56. data/lib/cocoapods/installer/user_project_integrator.rb +54 -10
  57. data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +66 -117
  58. data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +116 -0
  59. data/lib/cocoapods/open_uri.rb +1 -2
  60. data/lib/cocoapods/project.rb +34 -8
  61. data/lib/cocoapods/resolver.rb +43 -21
  62. data/lib/cocoapods/sandbox.rb +80 -75
  63. data/lib/cocoapods/sandbox/file_accessor.rb +3 -8
  64. data/lib/cocoapods/sandbox/headers_store.rb +6 -7
  65. data/lib/cocoapods/sandbox/path_list.rb +7 -10
  66. data/lib/cocoapods/sources_manager.rb +81 -49
  67. data/lib/cocoapods/target.rb +18 -12
  68. data/lib/cocoapods/target/aggregate_target.rb +43 -18
  69. data/lib/cocoapods/target/pod_target.rb +37 -4
  70. data/lib/cocoapods/user_interface.rb +19 -18
  71. data/lib/cocoapods/user_interface/error_report.rb +23 -4
  72. data/lib/cocoapods/validator.rb +30 -33
  73. metadata +100 -73
  74. data/lib/cocoapods/command/help.rb +0 -25
@@ -1,7 +1,6 @@
1
1
  module Pod
2
2
  module Hooks
3
3
  class LibraryRepresentation
4
-
5
4
  # Stores the information of the target installer
6
5
 
7
6
  #-----------------------------------------------------------------------#
@@ -27,11 +26,11 @@ module Pod
27
26
  # @return [Pathname] The path of the prefix_header
28
27
  #
29
28
  def prefix_header_path
30
- UI.warn "LibraryRepresentation#prefix_header_path is deprecated. " \
31
- "Use the specification `prefix_header_contents` attribute."
29
+ UI.warn 'LibraryRepresentation#prefix_header_path is deprecated. ' \
30
+ 'Use the specification `prefix_header_contents` attribute.'
32
31
  library.prefix_header_path
33
32
  end
34
- alias :prefix_header_filename :prefix_header_path
33
+ alias_method :prefix_header_filename, :prefix_header_path
35
34
 
36
35
  # @return [Pathname] The path of the script used to copy the resources.
37
36
  #
@@ -83,13 +82,10 @@ module Pod
83
82
  def initialize(sandbox, library)
84
83
  @sandbox = sandbox
85
84
  @library = library
86
- raise "[BUG]" unless library.is_a?(AggregateTarget)
85
+ raise '[BUG]' unless library.is_a?(AggregateTarget)
87
86
  end
88
87
 
89
88
  #-----------------------------------------------------------------------#
90
-
91
89
  end
92
90
  end
93
91
  end
94
-
95
-
@@ -1,19 +1,16 @@
1
1
  module Pod
2
-
3
2
  class Specification
4
3
  def config
5
4
  UI.warn "[#{name}] Specification#config is deprecated. The config is accessible from " \
6
- "the parameter passed to the hooks"
5
+ 'the parameter passed to the hooks'
7
6
  Config.instance
8
7
  end
9
8
  end
10
9
 
11
10
  module Hooks
12
-
13
11
  # Stores the information of the Installer for the hooks
14
12
  #
15
13
  class PodRepresentation
16
-
17
14
  # @return [String]
18
15
  #
19
16
  attr_accessor :name
@@ -68,7 +65,6 @@ module Pod
68
65
  attr_reader :file_accessors
69
66
 
70
67
  #-----------------------------------------------------------------------#
71
-
72
68
  end
73
69
  end
74
70
  end
@@ -0,0 +1,63 @@
1
+ module Pod
2
+ # Provides support for the hook system of CocoaPods. The system is designed
3
+ # especially for plugins. Interested clients can register to notifications by
4
+ # name.
5
+ #
6
+ # The blocks, to prevent compatibility issues, will receive
7
+ # one and only one argument: a context object. This object should be simple
8
+ # storage of information (a typed hash). Notifications senders are
9
+ # responsible to indicate the class of the object associated with their
10
+ # notification name.
11
+ #
12
+ # Context object should not remove attribute accessors to not break
13
+ # compatibility with the plugins (this promise will be honoured strictly
14
+ # from CocoaPods 1.0).
15
+ #
16
+ module HooksManager
17
+ class << self
18
+ # @return [Hash{Symbol => Proc}] The list of the blocks that are
19
+ # registered for each notification name.
20
+ #
21
+ attr_reader :registrations
22
+
23
+ # Registers a block for the hook with the given name.
24
+ #
25
+ # @param [Symbol] name
26
+ # The name of the notification.
27
+ #
28
+ # @param [Proc] block
29
+ # The block.
30
+ #
31
+ def register(name, &block)
32
+ raise ArgumentError, 'Missing name' unless name
33
+ raise ArgumentError, 'Missing block' unless block
34
+
35
+ @registrations ||= {}
36
+ @registrations[name] ||= []
37
+ @registrations[name] << block
38
+ end
39
+
40
+ # Runs all the registered blocks for the hook with the given name.
41
+ #
42
+ # @param [Symbol] name
43
+ # The name of the hook.
44
+ #
45
+ # @param [Object] context
46
+ # The context object which should be passed to the blocks.
47
+ #
48
+ def run(name, context)
49
+ raise ArgumentError, 'Missing name' unless name
50
+ raise ArgumentError, 'Missing options' unless context
51
+
52
+ if @registrations
53
+ blocks = @registrations[name]
54
+ if blocks
55
+ blocks.each do |block|
56
+ block.call(context)
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -1,7 +1,6 @@
1
1
  require 'active_support/core_ext/string/inflections'
2
2
 
3
3
  module Pod
4
-
5
4
  # The Installer is responsible of taking a Podfile and transform it in the
6
5
  # Pods libraries. It also integrates the user project so the Pods
7
6
  # libraries can be used out of the box.
@@ -29,13 +28,14 @@ module Pod
29
28
  # source control.
30
29
  #
31
30
  class Installer
32
-
31
+ autoload :AggregateTargetInstaller, 'cocoapods/installer/target_installer/aggregate_target_installer'
33
32
  autoload :Analyzer, 'cocoapods/installer/analyzer'
34
33
  autoload :FileReferencesInstaller, 'cocoapods/installer/file_references_installer'
34
+ autoload :HooksContext, 'cocoapods/installer/hooks_context'
35
+ autoload :Migrator, 'cocoapods/installer/migrator'
35
36
  autoload :PodSourceInstaller, 'cocoapods/installer/pod_source_installer'
36
- autoload :TargetInstaller, 'cocoapods/installer/target_installer'
37
- autoload :AggregateTargetInstaller, 'cocoapods/installer/target_installer/aggregate_target_installer'
38
37
  autoload :PodTargetInstaller, 'cocoapods/installer/target_installer/pod_target_installer'
38
+ autoload :TargetInstaller, 'cocoapods/installer/target_installer'
39
39
  autoload :UserProjectIntegrator, 'cocoapods/installer/user_project_integrator'
40
40
 
41
41
  include Config::Mixin
@@ -73,7 +73,7 @@ module Pod
73
73
 
74
74
  # Installs the Pods.
75
75
  #
76
- # The installation process of is mostly linear with few minor complications
76
+ # The installation process is mostly linear with a few minor complications
77
77
  # to keep in mind:
78
78
  #
79
79
  # - The stored podspecs need to be cleaned before the resolution step
@@ -86,6 +86,7 @@ module Pod
86
86
  # @return [void]
87
87
  #
88
88
  def install!
89
+ prepare
89
90
  resolve_dependencies
90
91
  download_dependencies
91
92
  generate_pods_project
@@ -93,16 +94,24 @@ module Pod
93
94
  perform_post_install_actions
94
95
  end
95
96
 
97
+ def prepare
98
+ UI.section 'Preparing' do
99
+ sandbox.prepare
100
+ Migrator.migrate(sandbox)
101
+ end
102
+ end
103
+
96
104
  def resolve_dependencies
97
- UI.section "Analyzing dependencies" do
105
+ UI.section 'Analyzing dependencies' do
98
106
  analyze
107
+ validate_build_configurations
99
108
  prepare_for_legacy_compatibility
100
109
  clean_sandbox
101
110
  end
102
111
  end
103
112
 
104
113
  def download_dependencies
105
- UI.section "Downloading dependencies" do
114
+ UI.section 'Downloading dependencies' do
106
115
  create_file_accessors
107
116
  install_pod_sources
108
117
  run_pre_install_hooks
@@ -111,13 +120,12 @@ module Pod
111
120
  end
112
121
 
113
122
  def generate_pods_project
114
- UI.section "Generating Pods project" do
123
+ UI.section 'Generating Pods project' do
115
124
  prepare_pods_project
116
125
  install_file_references
117
126
  install_libraries
118
127
  set_target_dependencies
119
- link_aggregate_target
120
- run_post_install_hooks
128
+ run_podfile_post_install_hooks
121
129
  write_pod_project
122
130
  write_lockfiles
123
131
  end
@@ -177,6 +185,23 @@ module Pod
177
185
  @aggregate_targets = analyzer.result.targets
178
186
  end
179
187
 
188
+ # Ensures that the white-listed build configurations are known to prevent
189
+ # silent typos.
190
+ #
191
+ # @raise If a unknown user configuration is found.
192
+ #
193
+ def validate_build_configurations
194
+ whitelisted_configs = pod_targets.map do |target|
195
+ target.target_definition.all_whitelisted_configurations.map(&:downcase)
196
+ end.flatten.uniq
197
+ all_user_configurations = analysis_result.all_user_build_configurations.keys.map(&:downcase)
198
+
199
+ remainder = whitelisted_configs - all_user_configurations
200
+ unless remainder.empty?
201
+ raise Informative, "Unknown #{'configuration'.pluralize(remainder.size)} whitelisted: #{remainder.sort.to_sentence}."
202
+ end
203
+ end
204
+
180
205
  # Prepares the Pods folder in order to be compatible with the most recent
181
206
  # version of CocoaPods.
182
207
  #
@@ -201,7 +226,7 @@ module Pod
201
226
  end
202
227
 
203
228
  unless sandbox_state.deleted.empty?
204
- title_options = { :verbose_prefix => "-> ".red }
229
+ title_options = { :verbose_prefix => '-> '.red }
205
230
  sandbox_state.deleted.each do |pod_name|
206
231
  UI.titled_section("Removing #{pod_name}".red, title_options) do
207
232
  sandbox.clean_pod(pod_name)
@@ -235,7 +260,7 @@ module Pod
235
260
  def install_pod_sources
236
261
  @installed_specs = []
237
262
  pods_to_install = sandbox_state.added | sandbox_state.changed
238
- title_options = { :verbose_prefix => "-> ".green }
263
+ title_options = { :verbose_prefix => '-> '.green }
239
264
  root_specs.sort_by(&:name).each do |spec|
240
265
  if pods_to_install.include?(spec.name)
241
266
  if sandbox_state.changed.include?(spec.name) && sandbox.manifest
@@ -270,7 +295,6 @@ module Pod
270
295
 
271
296
  @pod_installers ||= []
272
297
  pod_installer = PodSourceInstaller.new(sandbox, specs_by_platform)
273
- pod_installer.aggressive_cache = config.aggressive_cache?
274
298
  pod_installer.install!
275
299
  @pod_installers << pod_installer
276
300
  @installed_specs.concat(specs_by_platform.values.flatten.uniq)
@@ -283,9 +307,7 @@ module Pod
283
307
  def clean_pod_sources
284
308
  return unless config.clean?
285
309
  return unless @pod_installers
286
- @pod_installers.each do |pod_installer|
287
- pod_installer.clean!
288
- end
310
+ @pod_installers.each(&:clean!)
289
311
  end
290
312
 
291
313
  # Performs any post-installation actions
@@ -293,9 +315,17 @@ module Pod
293
315
  # @return [void]
294
316
  #
295
317
  def perform_post_install_actions
318
+ run_plugins_post_install_hooks
296
319
  warn_for_deprecations
297
320
  end
298
321
 
322
+ # Runs the registered callbacks for the plugins post install hooks.
323
+ #
324
+ def run_plugins_post_install_hooks
325
+ context = HooksContext.generate(sandbox, aggregate_targets)
326
+ HooksManager.run(:post_install, context)
327
+ end
328
+
299
329
  # Prints a warning for any pods that are deprecated
300
330
  #
301
331
  # @return [void]
@@ -321,7 +351,7 @@ module Pod
321
351
  # @todo Clean and modify the project if it exists.
322
352
  #
323
353
  def prepare_pods_project
324
- UI.message "- Creating Pods project" do
354
+ UI.message '- Creating Pods project' do
325
355
  @pods_project = Pod::Project.new(sandbox.project_path)
326
356
 
327
357
  analysis_result.all_user_build_configurations.each do |name, type|
@@ -353,7 +383,6 @@ module Pod
353
383
  end
354
384
  end
355
385
 
356
-
357
386
  # Installs the file references in the Pods project. This is done once per
358
387
  # Pod as the same file reference might be shared by multiple aggregate
359
388
  # targets.
@@ -371,7 +400,7 @@ module Pod
371
400
  # @return [void]
372
401
  #
373
402
  def install_libraries
374
- UI.message"- Installing libraries" do
403
+ UI.message '- Installing targets' do
375
404
  pod_targets.sort_by(&:name).each do |pod_target|
376
405
  next if pod_target.target_definition.empty?
377
406
  target_installer = PodTargetInstaller.new(sandbox, pod_target)
@@ -415,21 +444,6 @@ module Pod
415
444
  end
416
445
  end
417
446
 
418
- # Links the aggregate targets with all the dependent libraries.
419
- #
420
- # @note This is run in the integration step to ensure that targets
421
- # have been created for all per spec libraries.
422
- #
423
- def link_aggregate_target
424
- aggregate_targets.each do |aggregate_target|
425
- native_target = aggregate_target.target
426
- aggregate_target.pod_targets.each do |pod_target|
427
- product = pod_target.target.product_reference
428
- native_target.frameworks_build_phase.add_file_reference(product)
429
- end
430
- end
431
- end
432
-
433
447
  # Writes the Pods project to the disk.
434
448
  #
435
449
  # @return [void]
@@ -438,7 +452,7 @@ module Pod
438
452
  UI.message "- Writing Xcode project file to #{UI.path sandbox.project_path}" do
439
453
  pods_project.pods.remove_from_project if pods_project.pods.empty?
440
454
  pods_project.development_pods.remove_from_project if pods_project.development_pods.empty?
441
- pods_project.sort({:groups_position => :below})
455
+ pods_project.sort(:groups_position => :below)
442
456
  pods_project.recreate_user_schemes(false)
443
457
  pods_project.save
444
458
  end
@@ -494,9 +508,9 @@ module Pod
494
508
  # @return [void]
495
509
  #
496
510
  def run_pre_install_hooks
497
- UI.message "- Running pre install hooks" do
511
+ UI.message '- Running pre install hooks' do
498
512
  executed = run_podfile_pre_install_hook
499
- UI.message "- Podfile" if executed
513
+ UI.message '- Podfile' if executed
500
514
  end
501
515
  end
502
516
 
@@ -509,8 +523,8 @@ module Pod
509
523
  def run_podfile_pre_install_hook
510
524
  podfile.pre_install!(installer_rep)
511
525
  rescue => e
512
- raise Informative, "An error occurred while processing the pre-install " \
513
- "hook of the Podfile." \
526
+ raise Informative, 'An error occurred while processing the pre-install ' \
527
+ 'hook of the Podfile.' \
514
528
  "\n\n#{e.message}\n\n#{e.backtrace * "\n"}"
515
529
  end
516
530
 
@@ -521,10 +535,10 @@ module Pod
521
535
  #
522
536
  # @return [void]
523
537
  #
524
- def run_post_install_hooks
525
- UI.message "- Running post install hooks" do
538
+ def run_podfile_post_install_hooks
539
+ UI.message '- Running post install hooks' do
526
540
  executed = run_podfile_post_install_hook
527
- UI.message "- Podfile" if executed
541
+ UI.message '- Podfile' if executed
528
542
  end
529
543
  end
530
544
 
@@ -537,8 +551,8 @@ module Pod
537
551
  def run_podfile_post_install_hook
538
552
  podfile.post_install!(installer_rep)
539
553
  rescue => e
540
- raise Informative, "An error occurred while processing the post-install " \
541
- "hook of the Podfile." \
554
+ raise Informative, 'An error occurred while processing the post-install ' \
555
+ 'hook of the Podfile.' \
542
556
  "\n\n#{e.message}\n\n#{e.backtrace * "\n"}"
543
557
  end
544
558
 
@@ -582,7 +596,7 @@ module Pod
582
596
  # @return [Array<PodRepresentation>]
583
597
  #
584
598
  def pod_reps
585
- root_specs.sort_by { |spec| spec.name }.map { |spec| pod_rep(spec.name) }
599
+ root_specs.sort_by(&:name).map { |spec| pod_rep(spec.name) }
586
600
  end
587
601
 
588
602
  # Returns the libraries which use the given specification.
@@ -615,7 +629,7 @@ module Pod
615
629
  # installation.
616
630
  #
617
631
  def root_specs
618
- analysis_result.specifications.map { |spec| spec.root }.uniq
632
+ analysis_result.specifications.map(&:root).uniq
619
633
  end
620
634
 
621
635
  # @return [SpecsState] The state of the sandbox returned by the analyzer.
@@ -625,6 +639,5 @@ module Pod
625
639
  end
626
640
 
627
641
  #-------------------------------------------------------------------------#
628
-
629
642
  end
630
643
  end
@@ -1,11 +1,9 @@
1
1
  module Pod
2
2
  class Installer
3
-
4
3
  # Analyzes the Podfile, the Lockfile, and the sandbox manifest to generate
5
4
  # the information relative to a CocoaPods installation.
6
5
  #
7
6
  class Analyzer
8
-
9
7
  include Config::Mixin
10
8
 
11
9
  autoload :SandboxAnalyzer, 'cocoapods/installer/analyzer/sandbox_analyzer'
@@ -49,10 +47,10 @@ module Pod
49
47
  def analyze(allow_fetches = true)
50
48
  update_repositories_if_needed if allow_fetches
51
49
  @result = AnalysisResult.new
50
+ compute_target_platforms
52
51
  @result.podfile_state = generate_podfile_state
53
52
  @locked_dependencies = generate_version_locking_dependencies
54
53
 
55
- compute_target_platforms
56
54
  fetch_external_sources if allow_fetches
57
55
  @result.specs_by_target = resolve_dependencies
58
56
  @result.specifications = generate_specifications
@@ -111,7 +109,7 @@ module Pod
111
109
  :none
112
110
  elsif update == true
113
111
  :all
114
- elsif update[:pods] != nil
112
+ elsif !update[:pods].nil?
115
113
  :selected
116
114
  end
117
115
  end
@@ -125,7 +123,7 @@ module Pod
125
123
  # modification of the sandbox in the resolution process.
126
124
  #
127
125
  attr_accessor :allow_pre_downloads
128
- alias_method :allow_pre_downloads?, :allow_pre_downloads
126
+ alias_method :allow_pre_downloads?, :allow_pre_downloads
129
127
 
130
128
  #-----------------------------------------------------------------------#
131
129
 
@@ -149,10 +147,11 @@ module Pod
149
147
  def generate_podfile_state
150
148
  if lockfile
151
149
  pods_state = nil
152
- UI.section "Finding Podfile changes" do
150
+ UI.section 'Finding Podfile changes' do
153
151
  pods_by_state = lockfile.detect_changes_with_podfile(podfile)
154
152
  pods_by_state.dup.each do |state, full_names|
155
- pods_by_state[state] = full_names.map { |fn| Specification.root_name(fn) }
153
+ pods = full_names.map { |fn| Specification.root_name(fn) }.uniq
154
+ pods_by_state[state] = pods
156
155
  end
157
156
  pods_state = SpecsState.new(pods_by_state)
158
157
  pods_state.print
@@ -167,8 +166,6 @@ module Pod
167
166
 
168
167
  # Updates the source repositories unless the config indicates to skip it.
169
168
  #
170
- # @return [void]
171
- #
172
169
  def update_repositories_if_needed
173
170
  unless config.skip_repo_update?
174
171
  UI.section 'Updating spec repositories' do
@@ -200,7 +197,7 @@ module Pod
200
197
  else
201
198
  target.client_root = config.installation_root
202
199
  target.user_target_uuids = []
203
- target.user_build_configurations = {}
200
+ target.user_build_configurations = target_definition.build_configurations || {}
204
201
  if target_definition.platform.name == :osx
205
202
  target.archs = '$(ARCHS_STANDARD_64_BIT)'
206
203
  end
@@ -212,15 +209,15 @@ module Pod
212
209
 
213
210
  grouped_specs.each do |pod_specs|
214
211
  pod_target = PodTarget.new(pod_specs, target_definition, sandbox)
215
- if config.integrate_targets?
216
- pod_target.user_build_configurations = target.user_build_configurations
217
- pod_target.archs = @archs_by_target_def[target_definition]
218
- else
219
- pod_target.user_build_configurations = {}
220
- if target_definition.platform.name == :osx
221
- pod_target.archs = '$(ARCHS_STANDARD_64_BIT)'
212
+ if config.integrate_targets?
213
+ pod_target.user_build_configurations = target.user_build_configurations
214
+ pod_target.archs = @archs_by_target_def[target_definition]
215
+ else
216
+ pod_target.user_build_configurations = {}
217
+ if target_definition.platform.name == :osx
218
+ pod_target.archs = '$(ARCHS_STANDARD_64_BIT)'
219
+ end
222
220
  end
223
- end
224
221
  target.pod_targets << pod_target
225
222
  end
226
223
  end
@@ -247,8 +244,8 @@ module Pod
247
244
  locking_pods = locking_pods.select { |pod| !update[:pods].include?(pod) }
248
245
  end
249
246
  locking_pods.map do |pod|
250
- lockfile.dependency_to_lock_pod_named(pod)
251
- end
247
+ lockfile.dependencies_to_lock_pod_named(pod)
248
+ end.flatten
252
249
  end
253
250
  end
254
251
 
@@ -275,7 +272,7 @@ module Pod
275
272
  return unless allow_pre_downloads?
276
273
  deps_to_fetch = []
277
274
  deps_to_fetch_if_needed = []
278
- deps_with_external_source = podfile.dependencies.select { |dep| dep.external_source }
275
+ deps_with_external_source = podfile.dependencies.select(&:external_source)
279
276
 
280
277
  if update_mode == :all
281
278
  deps_to_fetch = deps_with_external_source
@@ -290,7 +287,7 @@ module Pod
290
287
  end
291
288
 
292
289
  unless deps_to_fetch.empty?
293
- UI.section "Fetching external sources" do
290
+ UI.section 'Fetching external sources' do
294
291
  deps_to_fetch.uniq.sort.each do |dependency|
295
292
  source = ExternalSources.from_dependency(dependency, podfile.defined_in_file)
296
293
  source.fetch(sandbox)
@@ -321,7 +318,13 @@ module Pod
321
318
  def resolve_dependencies
322
319
  specs_by_target = nil
323
320
  UI.section "Resolving dependencies of #{UI.path podfile.defined_in_file}" do
324
- resolver = Resolver.new(sandbox, podfile, locked_dependencies)
321
+ if podfile.sources.empty?
322
+ sources = SourcesManager.master
323
+ else
324
+ sources = SourcesManager.sources(podfile.sources)
325
+ end
326
+
327
+ resolver = Resolver.new(sandbox, podfile, locked_dependencies, sources)
325
328
  specs_by_target = resolver.resolve
326
329
  end
327
330
  specs_by_target
@@ -343,7 +346,7 @@ module Pod
343
346
  #
344
347
  def generate_sandbox_state
345
348
  sandbox_state = nil
346
- UI.section "Comparing resolved specification to the sandbox manifest" do
349
+ UI.section 'Comparing resolved specification to the sandbox manifest' do
347
350
  sandbox_analyzer = SandboxAnalyzer.new(sandbox, result.specifications, update_mode?, lockfile)
348
351
  sandbox_state = sandbox_analyzer.analyze
349
352
  sandbox_state.print
@@ -381,7 +384,7 @@ module Pod
381
384
  path = "#{path}.xcodeproj" unless File.extname(path) == '.xcodeproj'
382
385
  path = Pathname.new(path)
383
386
  unless path.exist?
384
- raise Informative, "Unable to find the Xcode project " \
387
+ raise Informative, 'Unable to find the Xcode project ' \
385
388
  "`#{path}` for the target `#{target_definition.label}`."
386
389
  end
387
390
 
@@ -390,7 +393,7 @@ module Pod
390
393
  if xcodeprojs.size == 1
391
394
  path = xcodeprojs.first
392
395
  else
393
- raise Informative, "Could not automatically select an Xcode project. " \
396
+ raise Informative, 'Could not automatically select an Xcode project. ' \
394
397
  "Specify one in your Podfile like so:\n\n" \
395
398
  " xcodeproj 'path/to/Project.xcodeproj'\n"
396
399
  end
@@ -417,12 +420,12 @@ module Pod
417
420
  targets = native_targets(user_project).select { |t| link_with.include?(t.name) }
418
421
  raise Informative, "Unable to find the targets named `#{link_with.to_sentence}` to link with target definition `#{target_definition.name}`" if targets.empty?
419
422
  elsif target_definition.link_with_first_target?
420
- targets = [ native_targets(user_project).first ].compact
421
- raise Informative, "Unable to find a target" if targets.empty?
423
+ targets = [native_targets(user_project).first].compact
424
+ raise Informative, 'Unable to find a target' if targets.empty?
422
425
  else
423
426
  target = native_targets(user_project).find { |t| t.name == target_definition.name.to_s }
424
- targets = [ target ].compact
425
- raise Informative, "Unable to find a target named `#{target_definition.name.to_s}`" if targets.empty?
427
+ targets = [target].compact
428
+ raise Informative, "Unable to find a target named `#{target_definition.name}`" if targets.empty?
426
429
  end
427
430
  targets
428
431
  end
@@ -442,10 +445,8 @@ module Pod
442
445
  #
443
446
  def compute_user_build_configurations(target_definition, user_targets)
444
447
  if user_targets
445
- user_targets.map { |t| t.build_configurations.map(&:name) }.flatten.inject({}) do |hash, name|
446
- unless name == 'Debug' || name == 'Release'
447
- hash[name] = :release
448
- end
448
+ user_targets.map { |t| t.build_configurations.map(&:name) }.flatten.reduce({}) do |hash, name|
449
+ hash[name] = name == 'Debug' ? :debug : :release
449
450
  hash
450
451
  end.merge(target_definition.build_configurations || {})
451
452
  else
@@ -468,7 +469,7 @@ module Pod
468
469
 
469
470
  user_targets.each do |target|
470
471
  name ||= target.platform_name
471
- raise Informative, "Targets with different platforms" unless name == target.platform_name
472
+ raise Informative, 'Targets with different platforms' unless name == target.platform_name
472
473
  if !deployment_target || deployment_target > Version.new(target.deployment_target)
473
474
  deployment_target = Version.new(target.deployment_target)
474
475
  end
@@ -494,12 +495,10 @@ module Pod
494
495
  end
495
496
 
496
497
  archs = archs.compact.uniq.sort
497
- if archs.count > 1
498
- UI.warn "Found multiple values (`#{archs.join('`, `')}`) for the " \
499
- "architectures (`ARCHS`) build setting for the " \
500
- "`#{target_definition}` target definition. Using the first."
501
- end
502
- archs.first
498
+ UI.message("Using `ARCHS` setting to build architectures of " \
499
+ "target `#{target_definition.label}`: " \
500
+ "(`#{archs.join('`, `')}`)")
501
+ archs.length > 1 ? archs : archs.first
503
502
  end
504
503
 
505
504
  # Precompute the platforms for each target_definition in the Podfile
@@ -511,17 +510,19 @@ module Pod
511
510
  # @return [void]
512
511
  #
513
512
  def compute_target_platforms
514
- podfile.target_definition_list.each do |target_definition|
515
- if config.integrate_targets?
516
- project_path = compute_user_project_path(target_definition)
517
- user_project = Xcodeproj::Project.open(project_path)
518
- targets = compute_user_project_targets(target_definition, user_project)
519
- platform = compute_platform_for_target_definition(target_definition, targets)
520
- archs = compute_archs_for_target_definition(target_definition, targets)
521
- @archs_by_target_def[target_definition] = archs
522
- else
523
- unless target_definition.platform
524
- raise Informative, "It is necessary to specify the platform in the Podfile if not integrating."
513
+ UI.section 'Inspecting targets to integrate' do
514
+ podfile.target_definition_list.each do |target_definition|
515
+ if config.integrate_targets?
516
+ project_path = compute_user_project_path(target_definition)
517
+ user_project = Xcodeproj::Project.open(project_path)
518
+ targets = compute_user_project_targets(target_definition, user_project)
519
+ platform = compute_platform_for_target_definition(target_definition, targets)
520
+ archs = compute_archs_for_target_definition(target_definition, targets)
521
+ @archs_by_target_def[target_definition] = archs
522
+ else
523
+ unless target_definition.platform
524
+ raise Informative, 'It is necessary to specify the platform in the Podfile if not integrating.'
525
+ end
525
526
  end
526
527
  end
527
528
  end
@@ -530,7 +531,6 @@ module Pod
530
531
  #-----------------------------------------------------------------------#
531
532
 
532
533
  class AnalysisResult
533
-
534
534
  # @return [SpecsState] the states of the Podfile specs.
535
535
  #
536
536
  attr_accessor :podfile_state
@@ -561,7 +561,7 @@ module Pod
561
561
  # its type (`:debug` or `:release`).
562
562
  #
563
563
  def all_user_build_configurations
564
- targets.inject({}) do |result, target|
564
+ targets.reduce({}) do |result, target|
565
565
  result.merge(target.user_build_configurations)
566
566
  end
567
567
  end
@@ -578,7 +578,6 @@ module Pod
578
578
  # subspecs are added instead of the name of the Pods.
579
579
  #
580
580
  class SpecsState
581
-
582
581
  # @param [Hash{Symbol=>String}] pods_by_state
583
582
  # The **root** name of the pods grouped by their state
584
583
  # (`:added`, `:removed`, `:changed` or `:unchanged`).
@@ -618,10 +617,10 @@ module Pod
618
617
  # @return [void]
619
618
  #
620
619
  def print
621
- added .sort.each { |pod| UI.message("A".green + " #{pod}", '', 2) }
622
- deleted .sort.each { |pod| UI.message("R".red + " #{pod}", '', 2) }
623
- changed .sort.each { |pod| UI.message("M".yellow + " #{pod}", '', 2) }
624
- unchanged.sort.each { |pod| UI.message("-" + " #{pod}", '', 2) }
620
+ added .sort.each { |pod| UI.message('A'.green + " #{pod}", '', 2) }
621
+ deleted .sort.each { |pod| UI.message('R'.red + " #{pod}", '', 2) }
622
+ changed .sort.each { |pod| UI.message('M'.yellow + " #{pod}", '', 2) }
623
+ unchanged.sort.each { |pod| UI.message('-' + " #{pod}", '', 2) }
625
624
  end
626
625
 
627
626
  # Adds the name of a Pod to the give state.
@@ -637,10 +636,9 @@ module Pod
637
636
  # @return [void]
638
637
  #
639
638
  def add_name(name, state)
640
- raise "[Bug] Attempt to add subspec to the pods state" if name.include?('/')
641
- self.send(state) << name
639
+ raise '[Bug] Attempt to add subspec to the pods state' if name.include?('/')
640
+ send(state) << name
642
641
  end
643
-
644
642
  end
645
643
  end
646
644
  end