cocoapods 1.6.0.beta.1 → 1.6.0.beta.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +94 -4
  3. data/lib/cocoapods/command/cache/clean.rb +1 -1
  4. data/lib/cocoapods/command/init.rb +3 -1
  5. data/lib/cocoapods/command/outdated.rb +2 -2
  6. data/lib/cocoapods/executable.rb +1 -1
  7. data/lib/cocoapods/gem_version.rb +1 -1
  8. data/lib/cocoapods/generator/acknowledgements/plist.rb +3 -3
  9. data/lib/cocoapods/generator/app_target_helper.rb +2 -4
  10. data/lib/cocoapods/generator/copy_resources_script.rb +8 -3
  11. data/lib/cocoapods/generator/embed_frameworks_script.rb +24 -18
  12. data/lib/cocoapods/installer.rb +37 -21
  13. data/lib/cocoapods/installer/analyzer.rb +19 -13
  14. data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +5 -0
  15. data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +5 -0
  16. data/lib/cocoapods/installer/installation_options.rb +2 -0
  17. data/lib/cocoapods/installer/pod_source_installer.rb +1 -1
  18. data/lib/cocoapods/installer/post_install_hooks_context.rb +1 -1
  19. data/lib/cocoapods/installer/user_project_integrator.rb +6 -2
  20. data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +42 -12
  21. data/lib/cocoapods/installer/xcode/pods_project_generator.rb +2 -4
  22. data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +14 -5
  23. data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +12 -6
  24. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +22 -11
  25. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +29 -18
  26. data/lib/cocoapods/installer/xcode/target_validator.rb +1 -1
  27. data/lib/cocoapods/project.rb +2 -0
  28. data/lib/cocoapods/resolver.rb +42 -49
  29. data/lib/cocoapods/resolver/resolver_specification.rb +41 -0
  30. data/lib/cocoapods/sandbox.rb +21 -17
  31. data/lib/cocoapods/target/aggregate_target.rb +3 -1
  32. data/lib/cocoapods/target/build_settings.rb +35 -12
  33. data/lib/cocoapods/target/framework_paths.rb +36 -0
  34. data/lib/cocoapods/target/pod_target.rb +16 -17
  35. data/lib/cocoapods/validator.rb +18 -5
  36. metadata +18 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eea82a7d50fbc9129a369914b81e1a7722de54530e1486cc14735c4984694c6a
4
- data.tar.gz: 1c5e1381e2d5f513c380a817ba52401eb1480e5a42bf747c57d9042c651d1b0f
3
+ metadata.gz: 78fc10cd8ecb6e143b881badf52a7688a75a4027494be697848432c15e4ef2ea
4
+ data.tar.gz: 1193a91131a6f03a5ac7b7b52eecca0ca82d74167e7b465f08342255ba4b14d8
5
5
  SHA512:
6
- metadata.gz: e5bb218d53e23686ffae0612f20778d6050e52a135b49a1b35c4a3922d497c5852e442a6e2df71182bb844853b3df5215c8bf9c1acc9ebf24c2078398f0037ca
7
- data.tar.gz: 70d05ff41270cec4e2ac020c1f8c0918ae5467694fe0bcb13b230f88170fc74239e0fa89d8067277fb80b49512135b79239556de2f0f20e427cde6feb1b315a9
6
+ metadata.gz: f24e4f502e4251a6cebfb9020037af737c52094121aea6d0f26f6392f14d993ba95597249266e74c5113b0062dfc8de277a60ce6eba7e9b2213f19f907ca51cc
7
+ data.tar.gz: 949700b4fd4b5fec511390a75ad55b12d86128650833b3caf72da2c4bb3d15ecd90429d6e70177b3f67134e4cf8d7848b8c3d06504cf9dbe350b9750f7bbd164
@@ -4,18 +4,109 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides
4
4
 
5
5
  To install release candidates run `[sudo] gem install cocoapods --pre`
6
6
 
7
+ ## 1.6.0.beta.2 (2018-10-17)
8
+
9
+ ##### Enhancements
10
+
11
+ * Remove contraction from docs to fix rendering on the website.
12
+ [stevemoser](https://github.com/stevemoser)
13
+ [#8131](https://github.com/CocoaPods/CocoaPods/pull/8131)
14
+
15
+ * Provide an installation option to preserve folder structure
16
+ [dacaiguoguogmail](https://github.com/dacaiguoguogmail)
17
+ [#8097](https://github.com/CocoaPods/CocoaPods/pull/8097)
18
+
19
+ * Nests test specs host apps inside that Pod's directory for cleaner project
20
+ navigators.
21
+ [Derek Ostrander](https://github.com/dostrander)
22
+
23
+ * mark_ruby_file_ref add indent width and tab width config
24
+ [dacaiguoguogmail](https://github.com/dacaiguoguogmail)
25
+
26
+ * Print an error that will show up in Xcode's issue navigator upon unexpected
27
+ failures in the copy resources and embed frameworks script phases.
28
+ [Samuel Giddins](https://github.com/segiddins)
29
+
30
+ * Validate that all generated `PBXNativeTarget`s contain source files to build,
31
+ so specs (including test specs) with no source files won't fail at runtime
32
+ due to the lack of a generated executable.
33
+ [Samuel Giddins](https://github.com/segiddins)
34
+
35
+ * Print better promote message when unable to find a specification.
36
+ [Xinyu Zhao](https://github.com/X140Yu)
37
+ [#8064](https://github.com/CocoaPods/CocoaPods/issues/8064)
38
+
39
+ * Silence warnings in headers for Pods with `inhibit_warnings => true`
40
+ [Guillaume Algis](https://github.com/guillaumealgis)
41
+ [#6401](https://github.com/CocoaPods/CocoaPods/pull/6401)
42
+
43
+ * When resolving a locked dependency, source the spec from the locked
44
+ specs repository.
45
+ [Samuel Giddins](https://github.com/segiddins)
46
+
47
+ * Slightly improve resolution speed for Podfiles that contain multiple targets
48
+ with the same dependencies.
49
+ [Samuel Giddins]
50
+
51
+ ##### Bug Fixes
52
+
53
+ * Don't generate unencrypted source warnings for localhost.
54
+ [Paul Beusterien](https://github.com/paulb777)
55
+ [#8156](https://github.com/CocoaPods/CocoaPods/issues/8156)
56
+
57
+ * Fix linting when armv7 is included but i386 isn't.
58
+ [Paul Beusterien](https://github.com/paulb777)
59
+ [#8129](https://github.com/CocoaPods/CocoaPods/issues/8129)
60
+
61
+ * Provide an installation option to disable usage of input/output paths.
62
+ [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
63
+ [#8073](https://github.com/CocoaPods/CocoaPods/issues/8073)
64
+
65
+ * Scope prefix header setting to each test spec.
66
+ [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
67
+ [#8046](https://github.com/CocoaPods/CocoaPods/pull/8046)
68
+
69
+ * Don't add incomplete subspec subset targets for extensions.
70
+ [Paul Beusterien](https://github.com/paulb777)
71
+ [#7850](https://github.com/CocoaPods/CocoaPods/issues/7850)
72
+
73
+ * Clear out `MACH_O_TYPE` for unit test bundles that use static frameworks.
74
+ [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
75
+ [#8031](https://github.com/CocoaPods/CocoaPods/issues/8031)
76
+
77
+ * Fix `weak_frameworks` missing regression.
78
+ [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
79
+ [#7872](https://github.com/CocoaPods/CocoaPods/issues/7872)
80
+
81
+ * Fix line spacing for Swift error message.
82
+ [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
83
+ [#8024](https://github.com/CocoaPods/CocoaPods/pull/8024)
84
+
85
+ * Improve validation for test_specs on specific platforms
86
+ [icecrystal23](https://github.com/icecrystal23)
87
+ [#7009](https://github.com/CocoaPods/CocoaPods/issues/7009)
88
+
89
+ * Fix running `pod outdated` with externally-sourced pods.
90
+ [Samuel Giddins](https://github.com/segiddins)
91
+ [#8025](https://github.com/CocoaPods/CocoaPods/issues/8025)
92
+
93
+ * Remove codesign suppression
94
+ [Jaehong Kang](https://github.com/sinoru)
95
+ [#7606](https://github.com/CocoaPods/CocoaPods/issues/7606)
96
+
97
+
7
98
  ## 1.6.0.beta.1 (2018-08-16)
8
99
 
9
100
  ##### Enhancements
10
101
 
11
102
  * Every test spec will have its own xctest bundle.
12
- [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
103
+ [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
13
104
  [Jenn Kaplan](https://github.com/jkap)
14
105
  [#7908](https://github.com/CocoaPods/CocoaPods/pull/7908)
15
106
 
16
107
  * Generate a separate app host per pod.
17
108
  [Samuel Giddins](https://github.com/segiddins)
18
- [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
109
+ [Dimitris Koutsogiorgas](https://github.com/dnkoutso)
19
110
  [#8005](https://github.com/CocoaPods/CocoaPods/pull/8005)
20
111
 
21
112
  * Add default launch screen storyboard to test app hosts.
@@ -29,7 +120,7 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
29
120
  * Warn instead of error when linting if `public_header_files` or
30
121
  `private_header_files` do not match any files.
31
122
  [Eric Amorde](https://github.com/amorde)
32
- [#7427](https://github.com/CocoaPods/CocoaPods/issues/7427)
123
+ [#7427](https://github.com/CocoaPods/CocoaPods/issues/7427)
33
124
 
34
125
  * Add `--platforms` parameter to `pod spec lint` and `pod lib lint` to specify
35
126
  which platforms to lint.
@@ -279,7 +370,6 @@ To install release candidates run `[sudo] gem install cocoapods --pre`
279
370
  [Maxime Le Moine](https://github.com/MaximeLM)
280
371
  [#7590](https://github.com/CocoaPods/CocoaPods/issues/7590)
281
372
 
282
-
283
373
  ## 1.5.0 (2018-04-04)
284
374
 
285
375
  ##### Enhancements
@@ -10,7 +10,7 @@ module Pod
10
10
  If there is multiple cache for various versions of the requested pod,
11
11
  you will be asked which one to clean. Use `--all` to clean them all.
12
12
 
13
- If you don't give a pod `NAME`, you need to specify the `--all`
13
+ If you do not give a pod `NAME`, you need to specify the `--all`
14
14
  flag (this is to avoid cleaning all the cache by mistake).
15
15
  DESC
16
16
 
@@ -84,7 +84,9 @@ module Pod
84
84
  def target_module(app, tests)
85
85
  target_module = "\ntarget '#{app.name.gsub(/'/, "\\\\\'")}' do\n"
86
86
 
87
- target_module << if app.resolved_build_setting('SWIFT_OPTIMIZATION_LEVEL').values.any?
87
+ app_uses_swift = app.source_build_phase.files_references.any? { |fr| File.extname(fr.path) == '.swift' }
88
+
89
+ target_module << if app_uses_swift
88
90
  <<-RUBY
89
91
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
90
92
  use_frameworks!
@@ -22,7 +22,7 @@ module Pod
22
22
  UI.puts "#{'<blue>'.blue}\t - Will be updated, but not to the newest version because of specified version in Podfile"
23
23
  UI.puts "#{'<red>'.red}\t - Will not be updated because of specified version in Podfile"
24
24
  UI.puts ''
25
- end
25
+ end if ansi_output?
26
26
  UI.section 'The following pod updates are available:' do
27
27
  updates.each do |(name, from_version, matching_version, to_version)|
28
28
  color = :blue
@@ -85,7 +85,7 @@ module Pod
85
85
  pods = []
86
86
  UI.titled_section('Analyzing dependencies') do
87
87
  pods = Installer::Analyzer.new(config.sandbox, config.podfile).
88
- analyze(false).
88
+ analyze(:outdated).
89
89
  specs_by_target.values.flatten.uniq
90
90
  end
91
91
  pods
@@ -177,7 +177,7 @@ module Pod
177
177
  output << (string << separator)
178
178
  end
179
179
  end
180
- rescue EOFError
180
+ rescue EOFError, IOError
181
181
  output << (buf << $/) unless buf.empty?
182
182
  end
183
183
  end
@@ -1,5 +1,5 @@
1
1
  module Pod
2
2
  # The version of the CocoaPods command line tool.
3
3
  #
4
- VERSION = '1.6.0.beta.1'.freeze unless defined? Pod::VERSION
4
+ VERSION = '1.6.0.beta.2'.freeze unless defined? Pod::VERSION
5
5
  end
@@ -8,19 +8,19 @@ module Pod
8
8
  end
9
9
 
10
10
  def save_as(path)
11
- Xcodeproj::Plist.write_to_path(plist, path)
11
+ Xcodeproj::Plist.write_to_path(plist_hash, path)
12
12
  end
13
13
 
14
14
  # @return [String] The contents of the plist
15
15
  #
16
16
  def generate
17
- plist = Nanaimo::Plist.new(plist, :xml)
17
+ plist = Nanaimo::Plist.new(plist_hash, :xml)
18
18
  contents = StringIO.new
19
19
  Nanaimo::Writer::XMLWriter.new(plist, :pretty => true, :output => contents, :strict => false).write
20
20
  contents.string
21
21
  end
22
22
 
23
- def plist
23
+ def plist_hash
24
24
  {
25
25
  :Title => plist_title,
26
26
  :StringsTable => plist_title,
@@ -88,9 +88,8 @@ module Pod
88
88
  #
89
89
  # @return [Array<PBXBuildFile>] the created build file references.
90
90
  #
91
- def self.add_app_host_main_file(project, target, platform, name = 'App')
91
+ def self.add_app_host_main_file(project, target, platform, group, name = 'App')
92
92
  source_file = AppTargetHelper.create_app_host_main_file(project, platform, name)
93
- group = project[name] || project.new_group(name, name)
94
93
  source_file_ref = group.new_file(source_file)
95
94
  target.add_file_references([source_file_ref])
96
95
  end
@@ -111,9 +110,8 @@ module Pod
111
110
  #
112
111
  # @return [PBXFileReference] the created file reference of the launchscreen storyboard.
113
112
  #
114
- def self.add_launchscreen_storyboard(project, target, name = 'App')
113
+ def self.add_launchscreen_storyboard(project, target, group, name = 'App')
115
114
  launch_storyboard_file = AppTargetHelper.create_launchscreen_storyboard_file(project, name)
116
- group = project[name] || project.new_group(name, name)
117
115
  launch_storyboard_ref = group.new_file(launch_storyboard_file)
118
116
  target.resources_build_phase.add_file_reference(launch_storyboard_ref)
119
117
  end
@@ -105,10 +105,15 @@ set -e
105
105
  set -u
106
106
  set -o pipefail
107
107
 
108
+ function on_error {
109
+ echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
110
+ }
111
+ trap 'on_error $LINENO' ERR
112
+
108
113
  if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then
109
- # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy
110
- # resources to, so exit 0 (signalling the script phase was successful).
111
- exit 0
114
+ # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy
115
+ # resources to, so exit 0 (signalling the script phase was successful).
116
+ exit 0
112
117
  fi
113
118
 
114
119
  mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
@@ -1,12 +1,14 @@
1
+ require 'cocoapods/target/framework_paths'
2
+
1
3
  module Pod
2
4
  module Generator
3
5
  class EmbedFrameworksScript
4
- # @return [Hash{String => Array<String>}] Multiple lists of frameworks per
6
+ # @return [Hash{String => Array<FrameworkPaths>}] Multiple lists of frameworks per
5
7
  # configuration.
6
8
  #
7
9
  attr_reader :frameworks_by_config
8
10
 
9
- # @param [Hash{String => Array<String>] frameworks_by_config
11
+ # @param [Hash{String => Array<FrameworkPaths>] frameworks_by_config
10
12
  # @see #frameworks_by_config
11
13
  #
12
14
  def initialize(frameworks_by_config)
@@ -46,10 +48,15 @@ module Pod
46
48
  set -u
47
49
  set -o pipefail
48
50
 
51
+ function on_error {
52
+ echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
53
+ }
54
+ trap 'on_error $LINENO' ERR
55
+
49
56
  if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then
50
- # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy
51
- # frameworks to, so exit 0 (signalling the script phase was successful).
52
- exit 0
57
+ # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy
58
+ # frameworks to, so exit 0 (signalling the script phase was successful).
59
+ exit 0
53
60
  fi
54
61
 
55
62
  echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
@@ -79,8 +86,8 @@ module Pod
79
86
  local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
80
87
 
81
88
  if [ -L "${source}" ]; then
82
- echo "Symlinked..."
83
- source="$(readlink "${source}")"
89
+ echo "Symlinked..."
90
+ source="$(readlink "${source}")"
84
91
  fi
85
92
 
86
93
  # Use filter instead of exclude so missing patterns don't throw errors.
@@ -110,7 +117,7 @@ module Pod
110
117
  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
111
118
  if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
112
119
  local swift_runtime_libs
113
- swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u && exit ${PIPESTATUS[0]})
120
+ swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\\\/\\(.+dylib\\).*/\\\\1/g | uniq -u)
114
121
  for lib in $swift_runtime_libs; do
115
122
  echo "rsync -auv \\"${SWIFT_STDLIB_PATH}/${lib}\\" \\"${destination}\\""
116
123
  rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
@@ -179,7 +186,7 @@ module Pod
179
186
  for arch in $binary_archs; do
180
187
  if ! [[ "${ARCHS}" == *"$arch"* ]]; then
181
188
  # Strip non-valid architectures in-place
182
- lipo -remove "$arch" -output "$binary" "$binary" || exit 1
189
+ lipo -remove "$arch" -output "$binary" "$binary"
183
190
  stripped="$stripped $arch"
184
191
  fi
185
192
  done
@@ -192,16 +199,15 @@ module Pod
192
199
  SH
193
200
  script << "\n" unless frameworks_by_config.values.all?(&:empty?)
194
201
  frameworks_by_config.each do |config, frameworks_with_dsyms|
195
- unless frameworks_with_dsyms.empty?
196
- script << %(if [[ "$CONFIGURATION" == "#{config}" ]]; then\n)
197
- frameworks_with_dsyms.each do |framework_with_dsym|
198
- script << %( install_framework "#{framework_with_dsym[:input_path]}"\n)
199
- # Vendored frameworks might have a dSYM file next to them so ensure its copied. Frameworks built from
200
- # sources will have their dSYM generated and copied by Xcode.
201
- script << %( install_dsym "#{framework_with_dsym[:dsym_input_path]}"\n) unless framework_with_dsym[:dsym_input_path].nil?
202
- end
203
- script << "fi\n"
202
+ next if frameworks_with_dsyms.empty?
203
+ script << %(if [[ "$CONFIGURATION" == "#{config}" ]]; then\n)
204
+ frameworks_with_dsyms.each do |framework_with_dsym|
205
+ script << %( install_framework "#{framework_with_dsym.source_path}"\n)
206
+ # Vendored frameworks might have a dSYM file next to them so ensure its copied. Frameworks built from
207
+ # sources will have their dSYM generated and copied by Xcode.
208
+ script << %( install_dsym "#{framework_with_dsym.dsym_path}"\n) unless framework_with_dsym.dsym_path.nil?
204
209
  end
210
+ script << "fi\n"
205
211
  end
206
212
  script << <<-SH.strip_heredoc
207
213
  if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
@@ -72,6 +72,7 @@ module Pod
72
72
 
73
73
  @use_default_plugins = true
74
74
  @has_dependencies = true
75
+ @pod_installers = []
75
76
  end
76
77
 
77
78
  # @return [Hash, Boolean, nil] Pods that have been requested to be
@@ -103,6 +104,19 @@ module Pod
103
104
  attr_accessor :deployment
104
105
  alias_method :deployment?, :deployment
105
106
 
107
+ #-------------------------------------------------------------------------#
108
+
109
+ private
110
+
111
+ # @return [Array<PodSourceInstaller>] the pod installers created
112
+ # while installing pod targets
113
+ #
114
+ attr_reader :pod_installers
115
+
116
+ #-------------------------------------------------------------------------#
117
+
118
+ public
119
+
106
120
  # Installs the Pods.
107
121
  #
108
122
  # The installation process is mostly linear with a few minor complications
@@ -244,6 +258,8 @@ module Pod
244
258
 
245
259
  # Performs the analysis.
246
260
  #
261
+ # @param [Analyzer] analyzer the analyzer to use for analysis
262
+ #
247
263
  # @return [void]
248
264
  #
249
265
  def analyze(analyzer = create_analyzer)
@@ -369,13 +385,7 @@ module Pod
369
385
  end
370
386
 
371
387
  def create_pod_installer(pod_name)
372
- specs_by_platform = {}
373
- pod_targets.each do |pod_target|
374
- if pod_target.root_spec.name == pod_name
375
- specs_by_platform[pod_target.platform] ||= []
376
- specs_by_platform[pod_target.platform].concat(pod_target.specs)
377
- end
378
- end
388
+ specs_by_platform = specs_for_pod(pod_name)
379
389
 
380
390
  if specs_by_platform.empty?
381
391
  requiring_targets = pod_targets.select { |pt| pt.recursive_dependent_targets.any? { |dt| dt.pod_name == pod_name } }
@@ -385,12 +395,26 @@ module Pod
385
395
  raise StandardError, message
386
396
  end
387
397
 
388
- @pod_installers ||= []
389
398
  pod_installer = PodSourceInstaller.new(sandbox, specs_by_platform, :can_cache => installation_options.clean?)
390
- @pod_installers << pod_installer
399
+ pod_installers << pod_installer
391
400
  pod_installer
392
401
  end
393
402
 
403
+ # The specifications matching the specified pod name
404
+ #
405
+ # @param [String] pod_name the name of the pod
406
+ #
407
+ # @return [Hash{Platform => Array<Specification>}] the specifications grouped by platform
408
+ #
409
+ def specs_for_pod(pod_name)
410
+ pod_targets.each_with_object({}) do |pod_target, hash|
411
+ if pod_target.root_spec.name == pod_name
412
+ hash[pod_target.platform] ||= []
413
+ hash[pod_target.platform].concat(pod_target.specs)
414
+ end
415
+ end
416
+ end
417
+
394
418
  # Install the Pods. If the resolver indicated that a Pod should be
395
419
  # installed and it exits, it is removed and then reinstalled. In any case if
396
420
  # the Pod doesn't exits it is installed.
@@ -405,21 +429,16 @@ module Pod
405
429
 
406
430
  # Cleans the sources of the Pods if the config instructs to do so.
407
431
  #
408
- # @todo Why the @pod_installers might be empty?
409
432
  #
410
433
  def clean_pod_sources
411
434
  return unless installation_options.clean?
412
- return unless @pod_installers
413
- @pod_installers.each(&:clean!)
435
+ pod_installers.each(&:clean!)
414
436
  end
415
437
 
416
438
  # Unlocks the sources of the Pods.
417
439
  #
418
- # @todo Why the @pod_installers might be empty?
419
- #
420
440
  def unlock_pod_sources
421
- return unless @pod_installers
422
- @pod_installers.each do |installer|
441
+ pod_installers.each do |installer|
423
442
  pod_target = pod_targets.find { |target| target.pod_name == installer.name }
424
443
  installer.unlock_files!(pod_target.file_accessors)
425
444
  end
@@ -427,12 +446,9 @@ module Pod
427
446
 
428
447
  # Locks the sources of the Pods if the config instructs to do so.
429
448
  #
430
- # @todo Why the @pod_installers might be empty?
431
- #
432
449
  def lock_pod_sources
433
450
  return unless installation_options.lock_pod_sources?
434
- return unless @pod_installers
435
- @pod_installers.each do |installer|
451
+ pod_installers.each do |installer|
436
452
  pod_target = pod_targets.find { |target| target.pod_name == installer.name }
437
453
  installer.lock_files!(pod_target.file_accessors)
438
454
  end
@@ -496,7 +512,7 @@ module Pod
496
512
 
497
513
  # Runs the registered callbacks for the source provider plugin hooks.
498
514
  #
499
- # @return [void]
515
+ # @return [Array<Pod::Source>] the plugin sources
500
516
  #
501
517
  def run_source_provider_hooks
502
518
  context = SourceProviderHooksContext.generate