xcocoapods 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +6303 -0
  3. data/LICENSE +28 -0
  4. data/README.md +80 -0
  5. data/bin/pod +56 -0
  6. data/bin/sandbox-pod +168 -0
  7. data/lib/cocoapods.rb +73 -0
  8. data/lib/cocoapods/command.rb +175 -0
  9. data/lib/cocoapods/command/cache.rb +28 -0
  10. data/lib/cocoapods/command/cache/clean.rb +90 -0
  11. data/lib/cocoapods/command/cache/list.rb +69 -0
  12. data/lib/cocoapods/command/env.rb +66 -0
  13. data/lib/cocoapods/command/init.rb +128 -0
  14. data/lib/cocoapods/command/install.rb +45 -0
  15. data/lib/cocoapods/command/ipc.rb +19 -0
  16. data/lib/cocoapods/command/ipc/list.rb +40 -0
  17. data/lib/cocoapods/command/ipc/podfile.rb +31 -0
  18. data/lib/cocoapods/command/ipc/podfile_json.rb +30 -0
  19. data/lib/cocoapods/command/ipc/repl.rb +51 -0
  20. data/lib/cocoapods/command/ipc/spec.rb +29 -0
  21. data/lib/cocoapods/command/ipc/update_search_index.rb +24 -0
  22. data/lib/cocoapods/command/lib.rb +11 -0
  23. data/lib/cocoapods/command/lib/create.rb +105 -0
  24. data/lib/cocoapods/command/lib/lint.rb +121 -0
  25. data/lib/cocoapods/command/list.rb +39 -0
  26. data/lib/cocoapods/command/options/project_directory.rb +36 -0
  27. data/lib/cocoapods/command/options/repo_update.rb +34 -0
  28. data/lib/cocoapods/command/outdated.rb +140 -0
  29. data/lib/cocoapods/command/repo.rb +29 -0
  30. data/lib/cocoapods/command/repo/add.rb +103 -0
  31. data/lib/cocoapods/command/repo/lint.rb +82 -0
  32. data/lib/cocoapods/command/repo/list.rb +93 -0
  33. data/lib/cocoapods/command/repo/push.rb +281 -0
  34. data/lib/cocoapods/command/repo/remove.rb +36 -0
  35. data/lib/cocoapods/command/repo/update.rb +28 -0
  36. data/lib/cocoapods/command/setup.rb +103 -0
  37. data/lib/cocoapods/command/spec.rb +112 -0
  38. data/lib/cocoapods/command/spec/cat.rb +51 -0
  39. data/lib/cocoapods/command/spec/create.rb +283 -0
  40. data/lib/cocoapods/command/spec/edit.rb +87 -0
  41. data/lib/cocoapods/command/spec/env_spec.rb +53 -0
  42. data/lib/cocoapods/command/spec/lint.rb +137 -0
  43. data/lib/cocoapods/command/spec/which.rb +43 -0
  44. data/lib/cocoapods/command/update.rb +101 -0
  45. data/lib/cocoapods/config.rb +347 -0
  46. data/lib/cocoapods/core_overrides.rb +1 -0
  47. data/lib/cocoapods/downloader.rb +190 -0
  48. data/lib/cocoapods/downloader/cache.rb +233 -0
  49. data/lib/cocoapods/downloader/request.rb +86 -0
  50. data/lib/cocoapods/downloader/response.rb +16 -0
  51. data/lib/cocoapods/executable.rb +222 -0
  52. data/lib/cocoapods/external_sources.rb +57 -0
  53. data/lib/cocoapods/external_sources/abstract_external_source.rb +205 -0
  54. data/lib/cocoapods/external_sources/downloader_source.rb +30 -0
  55. data/lib/cocoapods/external_sources/path_source.rb +55 -0
  56. data/lib/cocoapods/external_sources/podspec_source.rb +54 -0
  57. data/lib/cocoapods/gem_version.rb +5 -0
  58. data/lib/cocoapods/generator/acknowledgements.rb +107 -0
  59. data/lib/cocoapods/generator/acknowledgements/markdown.rb +44 -0
  60. data/lib/cocoapods/generator/acknowledgements/plist.rb +94 -0
  61. data/lib/cocoapods/generator/app_target_helper.rb +244 -0
  62. data/lib/cocoapods/generator/bridge_support.rb +22 -0
  63. data/lib/cocoapods/generator/constant.rb +19 -0
  64. data/lib/cocoapods/generator/copy_resources_script.rb +230 -0
  65. data/lib/cocoapods/generator/dummy_source.rb +31 -0
  66. data/lib/cocoapods/generator/embed_frameworks_script.rb +215 -0
  67. data/lib/cocoapods/generator/header.rb +103 -0
  68. data/lib/cocoapods/generator/info_plist_file.rb +116 -0
  69. data/lib/cocoapods/generator/module_map.rb +99 -0
  70. data/lib/cocoapods/generator/prefix_header.rb +60 -0
  71. data/lib/cocoapods/generator/umbrella_header.rb +46 -0
  72. data/lib/cocoapods/hooks_manager.rb +132 -0
  73. data/lib/cocoapods/installer.rb +703 -0
  74. data/lib/cocoapods/installer/analyzer.rb +972 -0
  75. data/lib/cocoapods/installer/analyzer/analysis_result.rb +87 -0
  76. data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +98 -0
  77. data/lib/cocoapods/installer/analyzer/pod_variant.rb +67 -0
  78. data/lib/cocoapods/installer/analyzer/pod_variant_set.rb +157 -0
  79. data/lib/cocoapods/installer/analyzer/podfile_dependency_cache.rb +54 -0
  80. data/lib/cocoapods/installer/analyzer/sandbox_analyzer.rb +240 -0
  81. data/lib/cocoapods/installer/analyzer/specs_state.rb +84 -0
  82. data/lib/cocoapods/installer/analyzer/target_inspection_result.rb +53 -0
  83. data/lib/cocoapods/installer/analyzer/target_inspector.rb +260 -0
  84. data/lib/cocoapods/installer/installation_options.rb +158 -0
  85. data/lib/cocoapods/installer/pod_source_installer.rb +202 -0
  86. data/lib/cocoapods/installer/pod_source_preparer.rb +77 -0
  87. data/lib/cocoapods/installer/podfile_validator.rb +139 -0
  88. data/lib/cocoapods/installer/post_install_hooks_context.rb +132 -0
  89. data/lib/cocoapods/installer/pre_install_hooks_context.rb +51 -0
  90. data/lib/cocoapods/installer/source_provider_hooks_context.rb +34 -0
  91. data/lib/cocoapods/installer/user_project_integrator.rb +250 -0
  92. data/lib/cocoapods/installer/user_project_integrator/target_integrator.rb +463 -0
  93. data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +146 -0
  94. data/lib/cocoapods/installer/xcode.rb +8 -0
  95. data/lib/cocoapods/installer/xcode/pods_project_generator.rb +416 -0
  96. data/lib/cocoapods/installer/xcode/pods_project_generator/aggregate_target_installer.rb +181 -0
  97. data/lib/cocoapods/installer/xcode/pods_project_generator/app_host_installer.rb +84 -0
  98. data/lib/cocoapods/installer/xcode/pods_project_generator/file_references_installer.rb +334 -0
  99. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_installer.rb +777 -0
  100. data/lib/cocoapods/installer/xcode/pods_project_generator/pod_target_integrator.rb +116 -0
  101. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installation_result.rb +86 -0
  102. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer.rb +256 -0
  103. data/lib/cocoapods/installer/xcode/pods_project_generator/target_installer_helper.rb +68 -0
  104. data/lib/cocoapods/installer/xcode/target_validator.rb +147 -0
  105. data/lib/cocoapods/open-uri.rb +33 -0
  106. data/lib/cocoapods/project.rb +414 -0
  107. data/lib/cocoapods/resolver.rb +585 -0
  108. data/lib/cocoapods/resolver/lazy_specification.rb +79 -0
  109. data/lib/cocoapods/sandbox.rb +404 -0
  110. data/lib/cocoapods/sandbox/file_accessor.rb +444 -0
  111. data/lib/cocoapods/sandbox/headers_store.rb +146 -0
  112. data/lib/cocoapods/sandbox/path_list.rb +220 -0
  113. data/lib/cocoapods/sandbox/pod_dir_cleaner.rb +85 -0
  114. data/lib/cocoapods/sandbox/podspec_finder.rb +23 -0
  115. data/lib/cocoapods/sources_manager.rb +157 -0
  116. data/lib/cocoapods/target.rb +261 -0
  117. data/lib/cocoapods/target/aggregate_target.rb +338 -0
  118. data/lib/cocoapods/target/build_settings.rb +1075 -0
  119. data/lib/cocoapods/target/pod_target.rb +559 -0
  120. data/lib/cocoapods/user_interface.rb +459 -0
  121. data/lib/cocoapods/user_interface/error_report.rb +187 -0
  122. data/lib/cocoapods/user_interface/inspector_reporter.rb +109 -0
  123. data/lib/cocoapods/validator.rb +981 -0
  124. metadata +533 -0
@@ -0,0 +1,459 @@
1
+ require 'cocoapods/user_interface/error_report'
2
+ require 'cocoapods/user_interface/inspector_reporter'
3
+
4
+ module Pod
5
+ # Provides support for UI output. It provides support for nested sections of
6
+ # information and for a verbose mode.
7
+ #
8
+ module UserInterface
9
+ require 'colored2'
10
+
11
+ @title_colors = %w( yellow green )
12
+ @title_level = 0
13
+ @indentation_level = 2
14
+ @treat_titles_as_messages = false
15
+ @warnings = []
16
+
17
+ class << self
18
+ include Config::Mixin
19
+
20
+ attr_accessor :indentation_level
21
+ attr_accessor :title_level
22
+ attr_accessor :warnings
23
+
24
+ # @return [IO] IO object to which UI output will be directed.
25
+ #
26
+ attr_accessor :output_io
27
+
28
+ # @return [Bool] Whether the wrapping of the strings to the width of the
29
+ # terminal should be disabled.
30
+ #
31
+ attr_accessor :disable_wrap
32
+ alias_method :disable_wrap?, :disable_wrap
33
+
34
+ # Prints a title taking an optional verbose prefix and
35
+ # a relative indentation valid for the UI action in the passed
36
+ # block.
37
+ #
38
+ # In verbose mode titles are printed with a color according
39
+ # to their level. In normal mode titles are printed only if
40
+ # they have nesting level smaller than 2.
41
+ #
42
+ # @todo Refactor to title (for always visible titles like search)
43
+ # and sections (titles that represent collapsible sections).
44
+ #
45
+ # @param [String] title
46
+ # The title to print
47
+ #
48
+ # @param [String] verbose_prefix
49
+ # See #message
50
+ #
51
+ # @param [FixNum] relative_indentation
52
+ # The indentation level relative to the current,
53
+ # when the message is printed.
54
+ #
55
+ def section(title, verbose_prefix = '', relative_indentation = 0)
56
+ if config.verbose?
57
+ title(title, verbose_prefix, relative_indentation)
58
+ elsif title_level < 1
59
+ puts title
60
+ end
61
+
62
+ self.indentation_level += relative_indentation
63
+ self.title_level += 1
64
+ yield if block_given?
65
+ ensure
66
+ self.indentation_level -= relative_indentation
67
+ self.title_level -= 1
68
+ end
69
+
70
+ # In verbose mode it shows the sections and the contents.
71
+ # In normal mode it just prints the title.
72
+ #
73
+ # @return [void]
74
+ #
75
+ def titled_section(title, options = {})
76
+ relative_indentation = options[:relative_indentation] || 0
77
+ verbose_prefix = options[:verbose_prefix] || ''
78
+ if config.verbose?
79
+ title(title, verbose_prefix, relative_indentation)
80
+ else
81
+ puts title
82
+ end
83
+
84
+ self.indentation_level += relative_indentation
85
+ self.title_level += 1
86
+ yield if block_given?
87
+ ensure
88
+ self.indentation_level -= relative_indentation
89
+ self.title_level -= 1
90
+ end
91
+
92
+ # A title opposed to a section is always visible
93
+ #
94
+ # @param [String] title
95
+ # The title to print
96
+ #
97
+ # @param [String] verbose_prefix
98
+ # See #message
99
+ #
100
+ # @param [FixNum] relative_indentation
101
+ # The indentation level relative to the current,
102
+ # when the message is printed.
103
+ #
104
+ def title(title, verbose_prefix = '', relative_indentation = 2)
105
+ if @treat_titles_as_messages
106
+ message(title, verbose_prefix)
107
+ else
108
+ title = verbose_prefix + title if config.verbose?
109
+ title = "\n#{title}" if @title_level < 2
110
+ if (color = @title_colors[@title_level])
111
+ title = title.send(color)
112
+ end
113
+ puts "#{title}"
114
+ end
115
+
116
+ self.indentation_level += relative_indentation
117
+ self.title_level += 1
118
+ yield if block_given?
119
+ ensure
120
+ self.indentation_level -= relative_indentation
121
+ self.title_level -= 1
122
+ end
123
+
124
+ # Prints a verbose message taking an optional verbose prefix and
125
+ # a relative indentation valid for the UI action in the passed
126
+ # block.
127
+ #
128
+ # @todo Clean interface.
129
+ #
130
+ # @param [String] message
131
+ # The message to print.
132
+ #
133
+ # @param [String] verbose_prefix
134
+ # See #message
135
+ #
136
+ # @param [FixNum] relative_indentation
137
+ # The indentation level relative to the current,
138
+ # when the message is printed.
139
+ #
140
+ def message(message, verbose_prefix = '', relative_indentation = 2)
141
+ message = verbose_prefix + message if config.verbose?
142
+ puts_indented message if config.verbose?
143
+
144
+ self.indentation_level += relative_indentation
145
+ yield if block_given?
146
+ ensure
147
+ self.indentation_level -= relative_indentation
148
+ end
149
+
150
+ # Prints an info to the user. The info is always displayed.
151
+ # It respects the current indentation level only in verbose
152
+ # mode.
153
+ #
154
+ # Any title printed in the optional block is treated as a message.
155
+ #
156
+ # @param [String] message
157
+ # The message to print.
158
+ #
159
+ def info(message)
160
+ indentation = config.verbose? ? self.indentation_level : 0
161
+ indented = wrap_string(message, indentation)
162
+ puts(indented)
163
+
164
+ self.indentation_level += 2
165
+ @treat_titles_as_messages = true
166
+ yield if block_given?
167
+ ensure
168
+ @treat_titles_as_messages = false
169
+ self.indentation_level -= 2
170
+ end
171
+
172
+ # Prints an important message to the user.
173
+ #
174
+ # @param [String] message The message to print.
175
+ #
176
+ # return [void]
177
+ #
178
+ def notice(message)
179
+ puts("\n[!] #{message}".green)
180
+ end
181
+
182
+ # Returns a string containing relative location of a path from the Podfile.
183
+ # The returned path is quoted. If the argument is nil it returns the
184
+ # empty string.
185
+ #
186
+ # @param [#to_str] pathname
187
+ # The path to print.
188
+ #
189
+ def path(pathname)
190
+ if pathname
191
+ from_path = config.podfile_path.dirname if config.podfile_path
192
+ from_path ||= Pathname.pwd
193
+ path = begin
194
+ Pathname(pathname).relative_path_from(from_path)
195
+ rescue
196
+ pathname
197
+ end
198
+ "`#{path}`"
199
+ else
200
+ ''
201
+ end
202
+ end
203
+
204
+ # Prints the textual representation of a given set.
205
+ #
206
+ # @param [Set] set
207
+ # the set that should be presented.
208
+ #
209
+ # @param [Symbol] mode
210
+ # the presentation mode, either `:normal` or `:name_and_version`.
211
+ #
212
+ def pod(set, mode = :normal)
213
+ if mode == :name_and_version
214
+ puts_indented "#{set.name} #{set.versions.first.version}"
215
+ else
216
+ pod = Specification::Set::Presenter.new(set)
217
+ title = "-> #{pod.name} (#{pod.version})"
218
+ if pod.spec.deprecated?
219
+ title += " #{pod.deprecation_description}"
220
+ colored_title = title.red
221
+ else
222
+ colored_title = title.green
223
+ end
224
+
225
+ title(colored_title, '', 1) do
226
+ puts_indented pod.summary if pod.summary
227
+ puts_indented "pod '#{pod.name}', '~> #{pod.version}'"
228
+ labeled('Homepage', pod.homepage)
229
+ labeled('Source', pod.source_url)
230
+ labeled('Versions', pod.versions_by_source)
231
+ if mode == :stats
232
+ labeled('Authors', pod.authors) if pod.authors =~ /,/
233
+ labeled('Author', pod.authors) if pod.authors !~ /,/
234
+ labeled('License', pod.license)
235
+ labeled('Platform', pod.platform)
236
+ labeled('Stars', pod.github_stargazers)
237
+ labeled('Forks', pod.github_forks)
238
+ end
239
+ labeled('Subspecs', pod.subspecs)
240
+ end
241
+ end
242
+ end
243
+
244
+ # Prints a message with a label.
245
+ #
246
+ # @param [String] label
247
+ # The label to print.
248
+ #
249
+ # @param [#to_s] value
250
+ # The value to print.
251
+ #
252
+ # @param [FixNum] justification
253
+ # The justification of the label.
254
+ #
255
+ def labeled(label, value, justification = 12)
256
+ if value
257
+ title = "- #{label}:"
258
+ if value.is_a?(Array)
259
+ lines = [wrap_string(title, self.indentation_level)]
260
+ value.each do |v|
261
+ lines << wrap_string("- #{v}", self.indentation_level + 2)
262
+ end
263
+ puts lines.join("\n")
264
+ else
265
+ puts wrap_string(title.ljust(justification) + "#{value}", self.indentation_level)
266
+ end
267
+ end
268
+ end
269
+
270
+ # Prints a message respecting the current indentation level and
271
+ # wrapping it to the terminal width if necessary.
272
+ #
273
+ # @param [String] message
274
+ # The message to print.
275
+ #
276
+ def puts_indented(message = '')
277
+ indented = wrap_string(message, self.indentation_level)
278
+ puts(indented)
279
+ end
280
+
281
+ # Prints the stored warnings. This method is intended to be called at the
282
+ # end of the execution of the binary.
283
+ #
284
+ # @return [void]
285
+ #
286
+ def print_warnings
287
+ STDOUT.flush
288
+ warnings.each do |warning|
289
+ next if warning[:verbose_only] && !config.verbose?
290
+ STDERR.puts("\n[!] #{warning[:message]}".yellow)
291
+ warning[:actions].each do |action|
292
+ string = "- #{action}"
293
+ string = wrap_string(string, 4)
294
+ puts(string)
295
+ end
296
+ end
297
+ end
298
+
299
+ # Presents a choice among the elements of an array to the user.
300
+ #
301
+ # @param [Array<#to_s>] array
302
+ # The list of the elements among which the user should make his
303
+ # choice.
304
+ #
305
+ # @param [String] message
306
+ # The message to display to the user.
307
+ #
308
+ # @return [Fixnum] The index of the chosen array item.
309
+ #
310
+ def choose_from_array(array, message)
311
+ array.each_with_index do |item, index|
312
+ UI.puts "#{index + 1}: #{item}"
313
+ end
314
+
315
+ UI.puts message
316
+
317
+ index = UI.gets.chomp.to_i - 1
318
+ if index < 0 || index > array.count - 1
319
+ raise Informative, "#{index + 1} is invalid [1-#{array.count}]"
320
+ else
321
+ index
322
+ end
323
+ end
324
+
325
+ public
326
+
327
+ # @!group Basic methods
328
+ #-----------------------------------------------------------------------#
329
+
330
+ # prints a message followed by a new line unless config is silent.
331
+ #
332
+ # @param [String] message
333
+ # The message to print.
334
+ #
335
+ def puts(message = '')
336
+ return if config.silent?
337
+ begin
338
+ (output_io || STDOUT).puts(message)
339
+ rescue Errno::EPIPE
340
+ exit 0
341
+ end
342
+ end
343
+
344
+ # prints a message followed by a new line unless config is silent.
345
+ #
346
+ # @param [String] message
347
+ # The message to print.
348
+ #
349
+ def print(message)
350
+ return if config.silent?
351
+ begin
352
+ (output_io || STDOUT).print(message)
353
+ rescue Errno::EPIPE
354
+ exit 0
355
+ end
356
+ end
357
+
358
+ # gets input from $stdin
359
+ #
360
+ def gets
361
+ $stdin.gets
362
+ end
363
+
364
+ # Stores important warning to the user optionally followed by actions
365
+ # that the user should take. To print them use {#print_warnings}.
366
+ #
367
+ # @param [String] message The message to print.
368
+ # @param [Array] actions The actions that the user should take.
369
+ # @param [Bool] verbose_only
370
+ # Restrict the appearance of the warning to verbose mode only
371
+ #
372
+ # return [void]
373
+ #
374
+ def warn(message, actions = [], verbose_only = false)
375
+ warnings << { :message => message, :actions => actions, :verbose_only => verbose_only }
376
+ end
377
+
378
+ # Pipes all output inside given block to a pager.
379
+ #
380
+ # @yield Code block in which inputs to {#puts} and {#print} methods will be printed to the piper.
381
+ #
382
+ def with_pager
383
+ prev_handler = Signal.trap('INT', 'IGNORE')
384
+ IO.popen((ENV['PAGER'] || 'less -R'), 'w') do |io|
385
+ UI.output_io = io
386
+ yield
387
+ end
388
+ ensure
389
+ Signal.trap('INT', prev_handler)
390
+ UI.output_io = nil
391
+ end
392
+
393
+ private
394
+
395
+ # @!group Helpers
396
+ #-----------------------------------------------------------------------#
397
+
398
+ # @return [String] Wraps a string taking into account the width of the
399
+ # terminal and an option indent. Adapted from
400
+ # http://blog.macromates.com/2006/wrapping-text-with-regular-expressions/
401
+ #
402
+ # @param [String] txt The string to wrap
403
+ #
404
+ # @param [String] indent The string to use to indent the result.
405
+ #
406
+ # @return [String] The formatted string.
407
+ #
408
+ # @note If CocoaPods is not being run in a terminal or the width of the
409
+ # terminal is too small a width of 80 is assumed.
410
+ #
411
+ def wrap_string(string, indent = 0)
412
+ if disable_wrap
413
+ (' ' * indent) + string
414
+ else
415
+ first_space = ' ' * indent
416
+ indented = CLAide::Command::Banner::TextWrapper.wrap_with_indent(string, indent, 9999)
417
+ first_space + indented
418
+ end
419
+ end
420
+ end
421
+ end
422
+ UI = UserInterface
423
+
424
+ #---------------------------------------------------------------------------#
425
+
426
+ # Redirects cocoapods-core UI.
427
+ #
428
+ module CoreUI
429
+ class << self
430
+ def puts(message)
431
+ UI.puts message
432
+ end
433
+
434
+ def print(message)
435
+ UI.print(message)
436
+ end
437
+
438
+ def warn(message)
439
+ UI.warn message
440
+ end
441
+ end
442
+ end
443
+ end
444
+
445
+ #---------------------------------------------------------------------------#
446
+
447
+ module Xcodeproj
448
+ # Redirects xcodeproj UI.
449
+ #
450
+ module UserInterface
451
+ def self.puts(message)
452
+ ::Pod::UI.puts message
453
+ end
454
+
455
+ def self.warn(message)
456
+ ::Pod::UI.warn message
457
+ end
458
+ end
459
+ end