cocoapods 0.18.1 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6e0881feaf291a34b53110b92c56d327e0b956a1
4
- data.tar.gz: a65960c704edd79a75f03dbc2a574c3da7799057
3
+ metadata.gz: 9e460bfedda8d6e9df7398183867f5c605b1bbe2
4
+ data.tar.gz: 771269534428bde0e97b8f167f709a4013ad9e0f
5
5
  SHA512:
6
- metadata.gz: 681f330ef6eba8a347504cec27bfdc43653797d3f6d2c9ed4937e5d14580f67a3735d7e99927b80d5a3ed12c8649c5f9e30e58a462a4c52cc0b70f42426acda6
7
- data.tar.gz: e95439f57785df354f3b4be232813ea8fc94d2504781dfad64b4ad72dd2cf0c70fa35e2218eec68423c7e87733eec426e6c9f40c671051f1b25833282176960c
6
+ metadata.gz: b5495d6f6d3e041470e7d8a09483faa989a97c8f2292f28bb237c5bd7c7a64aa176a995f2f7ad30774d5e12cca94c368e8bc53efc85cee2b095f947584fc2049
7
+ data.tar.gz: f34a4f956ed9bc12305259bc457f148de99b0bf4ba40d41252f98ebe6e75024ad9089ed152f86645c8469d3f6e82a33c3b3fceebcfc67fa11d6bc33911206bc1
@@ -1,3 +1,43 @@
1
+ ## 0.19.0
2
+ [CocoaPods](https://github.com/CocoaPods/CocoaPods/compare/0.18.1...0.19.0)
3
+ • [cocoapods-core](https://github.com/CocoaPods/Core/compare/0.18.1...0.19.0)
4
+
5
+ ###### Enhancements
6
+
7
+ * Added `pod podfile-info` command. Shows list of used Pods and their info
8
+ in a project or supplied Podfile.
9
+ Options: `--all` - with dependancies. `--md` - in Markdown.
10
+ [#855](https://github.com/CocoaPods/CocoaPods/issues/855)
11
+ * CocoaPods now defines the `COCOAPODS=1` macro in the Pod and the Client
12
+ targets. This is useful for libraries which conditionally expose interfaces.
13
+ [#903](https://github.com/CocoaPods/CocoaPods/issues/903)
14
+ * Compile time introspection. Macro definitions which allow to inspect the
15
+ installed Pods and their version have been introduced in the build
16
+ environment of the Pod libraries
17
+ ([example](https://gist.github.com/irrationalfab/5348551)).
18
+ * CocoaPods now defines the deployment target of the Pods project computed as
19
+ the minimum deployment target of the Pods libraries.
20
+ [#556](https://github.com/CocoaPods/CocoaPods/issues/556)
21
+ * Added `pod help` command. You can still use the old format
22
+ with --help flag.
23
+ [#957](https://github.com/CocoaPods/CocoaPods/pull/957)
24
+ * Restored support for Podfiles named `CocoaPods.podfile`. Moreover, the
25
+ experimental YAML format of the Podfile now is associated with files named
26
+ `CocoaPods.podfile.yaml`.
27
+ [#1004](https://github.com/CocoaPods/CocoaPods/pull/1004)
28
+
29
+ ###### Deprecations
30
+
31
+ * `:local` flag in Podfile is deprecated. Please use `:path` when
32
+ specifying a pod source.
33
+ [#971](https://github.com/CocoaPods/CocoaPods/issues/971)
34
+ ###### Bug fixes
35
+
36
+ * Fix issue related to `pod outdated` and external sources.
37
+ [#954](https://github.com/CocoaPods/CocoaPods/issues/954)
38
+ * Fix issue with .svn folders in copy resources script.
39
+ [#972](https://github.com/CocoaPods/CocoaPods/issues/972)
40
+
1
41
  ## 0.18.1
2
42
  [CocoaPods](https://github.com/CocoaPods/CocoaPods/compare/0.18.0...0.18.1)
3
43
  • [cocoapods-core](https://github.com/CocoaPods/Core/compare/0.18.0...0.18.)
@@ -39,29 +39,29 @@ module Pod
39
39
  #
40
40
  STATISTICS_CACHE_FILE = CACHE_ROOT + 'statistics.yml'
41
41
 
42
- autoload :Command, 'cocoapods/command'
43
- autoload :Executable, 'cocoapods/executable'
44
- autoload :ExternalSources, 'cocoapods/external_sources'
45
- autoload :Installer, 'cocoapods/installer'
46
- autoload :SourcesManager, 'cocoapods/sources_manager'
47
- autoload :Library, 'cocoapods/library'
48
- autoload :Project, 'cocoapods/project'
49
- autoload :Resolver, 'cocoapods/resolver'
50
- autoload :Sandbox, 'cocoapods/sandbox'
51
- autoload :UI, 'cocoapods/user_interface'
52
- autoload :Validator, 'cocoapods/validator'
42
+ autoload :Command, 'cocoapods/command'
43
+ autoload :Executable, 'cocoapods/executable'
44
+ autoload :ExternalSources, 'cocoapods/external_sources'
45
+ autoload :Installer, 'cocoapods/installer'
46
+ autoload :SourcesManager, 'cocoapods/sources_manager'
47
+ autoload :Library, 'cocoapods/library'
48
+ autoload :Project, 'cocoapods/project'
49
+ autoload :Resolver, 'cocoapods/resolver'
50
+ autoload :Sandbox, 'cocoapods/sandbox'
51
+ autoload :UI, 'cocoapods/user_interface'
52
+ autoload :Validator, 'cocoapods/validator'
53
53
 
54
54
  module Generator
55
- autoload :Acknowledgements, 'cocoapods/generator/acknowledgements'
56
- autoload :BridgeSupport, 'cocoapods/generator/bridge_support'
57
- autoload :CopyResourcesScript, 'cocoapods/generator/copy_resources_script'
58
- autoload :Documentation, 'cocoapods/generator/documentation'
59
- autoload :DummySource, 'cocoapods/generator/dummy_source'
60
- autoload :Markdown, 'cocoapods/generator/acknowledgements/markdown'
61
- autoload :Plist, 'cocoapods/generator/acknowledgements/plist'
62
- autoload :PrefixHeader, 'cocoapods/generator/prefix_header'
63
- autoload :TargetHeader, 'cocoapods/generator/target_header'
64
- autoload :XCConfig, 'cocoapods/generator/xcconfig'
55
+ autoload :Acknowledgements, 'cocoapods/generator/acknowledgements'
56
+ autoload :BridgeSupport, 'cocoapods/generator/bridge_support'
57
+ autoload :CopyResourcesScript, 'cocoapods/generator/copy_resources_script'
58
+ autoload :Documentation, 'cocoapods/generator/documentation'
59
+ autoload :DummySource, 'cocoapods/generator/dummy_source'
60
+ autoload :Markdown, 'cocoapods/generator/acknowledgements/markdown'
61
+ autoload :Plist, 'cocoapods/generator/acknowledgements/plist'
62
+ autoload :PrefixHeader, 'cocoapods/generator/prefix_header'
63
+ autoload :TargetEnvironmentHeader, 'cocoapods/generator/target_environment_header'
64
+ autoload :XCConfig, 'cocoapods/generator/xcconfig'
65
65
  end
66
66
 
67
67
  module Hooks
@@ -16,7 +16,9 @@ module Pod
16
16
  require 'cocoapods/command/search'
17
17
  require 'cocoapods/command/setup'
18
18
  require 'cocoapods/command/spec'
19
+ require 'cocoapods/command/help'
19
20
  require 'cocoapods/command/inter_process_communication'
21
+ require 'cocoapods/command/podfile_info'
20
22
 
21
23
  self.abstract_command = true
22
24
  self.command = 'pod'
@@ -0,0 +1,23 @@
1
+ module Pod
2
+ class Command
3
+ class Help < Command
4
+ self.summary = 'Show help for the given command.'
5
+ self.arguments = '[COMMAND]'
6
+
7
+ def initialize(argv)
8
+ @help_command = Pod::Command.parse(argv) unless argv.empty?
9
+ super
10
+ end
11
+
12
+ def run
13
+ help_command.help!
14
+ end
15
+
16
+ private
17
+
18
+ def help_command
19
+ @help_command || self
20
+ end
21
+ end
22
+ end
23
+ end
@@ -19,6 +19,7 @@ module Pod
19
19
 
20
20
  # @todo the command report new dependencies added to the Podfile as
21
21
  # updates.
22
+ #
22
23
  # @todo fix.
23
24
  #
24
25
  def run
@@ -30,6 +31,7 @@ module Pod
30
31
  updates = []
31
32
  pods.each do |pod_name|
32
33
  set = SourcesManager.search(Dependency.new(pod_name))
34
+ next unless set
33
35
  source_version = set.versions.first
34
36
  lockfile_version = lockfile.version(pod_name)
35
37
  if source_version > lockfile_version
@@ -42,7 +44,7 @@ module Pod
42
44
  else
43
45
  UI.section "The following updates are available:" do
44
46
  updates.each do |(name, from_version, to_version)|
45
- UI.message "- #{name} #{from_version} -> #{to_version}"
47
+ UI.puts "- #{name} #{from_version} -> #{to_version}"
46
48
  end
47
49
  end
48
50
  end
@@ -0,0 +1,91 @@
1
+ module Pod
2
+ class Command
3
+
4
+ class PodfileInfo < Command
5
+
6
+ self.summary = 'Shows information on installed Pods.'
7
+ self.description = <<-DESC
8
+ Shows information on installed Pods in current Project.
9
+ If optional `PODFILE_PATH` provided, the info will be shown for
10
+ that specific Podfile
11
+ DESC
12
+ self.arguments = '[PODFILE_PATH]'
13
+
14
+ def self.options
15
+ [
16
+ ["--all", "Show information about all Pods with dependencies that are used in a project"],
17
+ ["--md", "Output information in Markdown format"]
18
+ ].concat(super)
19
+ end
20
+
21
+ def initialize(argv)
22
+ @info_all = argv.flag?('all')
23
+ @info_in_md = argv.flag?('md')
24
+ @podfile_path = argv.shift_argument
25
+ super
26
+ end
27
+
28
+ def run
29
+ use_podfile = (@podfile_path || !config.lockfile)
30
+
31
+ if !use_podfile
32
+ UI.puts "Using lockfile" if config.verbose?
33
+ verify_lockfile_exists!
34
+ lockfile = config.lockfile
35
+ pods = lockfile.pod_names
36
+ if @info_all
37
+ deps = lockfile.dependencies.map{|d| d.name}
38
+ pods = (deps + pods).uniq
39
+ end
40
+ elsif @podfile_path
41
+ podfile = Pod::Podfile.from_file(@podfile_path)
42
+ pods = pods_from_podfile(podfile)
43
+ else
44
+ verify_podfile_exists!
45
+ podfile = config.podfile
46
+ pods = pods_from_podfile(podfile)
47
+ end
48
+
49
+ UI.puts "\nPods used:\n".yellow unless @info_in_md
50
+ pods_info(pods, @info_in_md)
51
+ end
52
+
53
+ def pods_from_podfile(podfile)
54
+ pods = []
55
+ podfile.root_target_definitions.each {|e| h = e.to_hash; pods << h['dependencies'] if h['dependencies']}
56
+ pods.flatten!
57
+ pods.collect! {|pod| (pod.is_a?(Hash)) ? pod.keys.first : pod}
58
+ end
59
+
60
+ def pods_info_hash(pods, keys=[:name, :homepage, :summary])
61
+ pods_info = []
62
+ pods.each do |pod|
63
+ spec = (Pod::SourcesManager.search_by_name(pod).first rescue nil)
64
+ if spec
65
+ info = {}
66
+ keys.each { |k| info[k] = spec.specification.send(k) }
67
+ pods_info << info
68
+ else
69
+
70
+ end
71
+
72
+ end
73
+ pods_info
74
+ end
75
+
76
+ def pods_info(pods, in_md=false)
77
+ pods = pods_info_hash(pods, [:name, :homepage, :summary])
78
+
79
+ pods.each do |pod|
80
+ if in_md
81
+ UI.puts "* [#{pod[:name]}](#{pod[:homepage]}) - #{pod[:summary]}"
82
+ else
83
+ UI.puts "- #{pod[:name]} - #{pod[:summary]}"
84
+ end
85
+ end
86
+ end
87
+
88
+ end
89
+
90
+ end
91
+ end
@@ -188,7 +188,8 @@ module Pod
188
188
  #
189
189
  def podfile_path
190
190
  unless @podfile_path
191
- path = installation_root + 'Podfile.yaml'
191
+ path = installation_root + 'CocoaPods.podfile.yaml'
192
+ path = installation_root + 'CocoaPods.podfile' unless path.exist?
192
193
  path = installation_root + 'Podfile' unless path.exist?
193
194
  @podfile_path = path
194
195
  end
@@ -13,11 +13,16 @@ module Pod
13
13
  name = dependency.root_name
14
14
  params = dependency.external_source
15
15
 
16
- klass = if params.key?(:git) then GitSource
17
- elsif params.key?(:svn) then SvnSource
18
- elsif params.key?(:hg) then MercurialSource
19
- elsif params.key?(:podspec) then PodspecSource
20
- elsif params.key?(:local) then LocalSource
16
+ klass = if params.key?(:git) then GitSource
17
+ elsif params.key?(:svn) then SvnSource
18
+ elsif params.key?(:hg) then MercurialSource
19
+ elsif params.key?(:podspec) then PodspecSource
20
+ elsif params.key?(:path) then PathSource
21
+ end
22
+
23
+ if params.key?(:local)
24
+ klass = PathSource
25
+ UI.warn "The `:local` option of the Podfile has been renamed to `:path` and is deprecated." \
21
26
  end
22
27
 
23
28
  if klass
@@ -286,7 +291,7 @@ module Pod
286
291
 
287
292
  # @!group Helpers
288
293
 
289
- # @return [String] The uri of the podspec appending the name of the file
294
+ # @return [String] The uri of the podspec appending the name of the file
290
295
  # and expanding it if necessary.
291
296
  #
292
297
  # @note If the declared path is expanded only if the represents a path
@@ -312,7 +317,7 @@ module Pod
312
317
  #
313
318
  # Works with the {LocalPod::LocalSourcedPod} class.
314
319
  #
315
- class LocalSource < AbstractExternalSource
320
+ class PathSource < AbstractExternalSource
316
321
 
317
322
  # @see AbstractExternalSource#fetch
318
323
  #
@@ -327,7 +332,7 @@ module Pod
327
332
  # @see AbstractExternalSource#description
328
333
  #
329
334
  def description
330
- "from `#{params[:local]}`"
335
+ "from `#{params[:path] || params[:local]}`"
331
336
  end
332
337
 
333
338
  #--------------------------------------#
@@ -339,7 +344,7 @@ module Pod
339
344
  # @return [Pathname] the path of the podspec.
340
345
  #
341
346
  def podspec_path
342
- declared_path = params[:local].to_s
347
+ declared_path = (params[:path] || params[:local]).to_s
343
348
  path_with_ext = File.extname(declared_path) == '.podspec' ? declared_path : "#{declared_path}/#{name}.podspec"
344
349
  podfile_dir = File.dirname(podfile_path || '')
345
350
  absolute_path = File.expand_path(path_with_ext, podfile_dir)
@@ -2,6 +2,6 @@ module Pod
2
2
 
3
3
  # The version of the cocoapods command line tool.
4
4
  #
5
- VERSION = '0.18.1' unless defined? Pod::VERSION
5
+ VERSION = '0.19.0' unless defined? Pod::VERSION
6
6
  end
7
7
 
@@ -24,8 +24,8 @@ install_resource()
24
24
  xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xcdatamodeld`.momd"
25
25
  ;;
26
26
  *)
27
- echo "cp -R ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
28
- cp -R "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
27
+ echo "rsync -av --exclude '*/.svn/*' ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
28
+ rsync -av --exclude '*/.svn/*' "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
29
29
  ;;
30
30
  esac
31
31
  }
@@ -10,6 +10,7 @@ module Pod
10
10
 
11
11
  def save_as(pathname)
12
12
  pathname.open('w') do |source|
13
+ source.puts "#import <Foundation/Foundation.h>"
13
14
  source.puts "@interface #{class_name} : NSObject"
14
15
  source.puts "@end"
15
16
  source.puts "@implementation #{class_name}"
@@ -0,0 +1,86 @@
1
+ module Pod
2
+ module Generator
3
+
4
+ # Generates a header which allows to inspect at compile time the installed
5
+ # pods and the installed specifications of a pod.
6
+ #
7
+ # Example output:
8
+ #
9
+ # #define COCOAPODS_POD_AVAILABLE_ObjectiveSugar 1
10
+ # #define COCOAPODS_VERSION_MAJOR_ObjectiveSugar 0
11
+ # #define COCOAPODS_VERSION_MINOR_ObjectiveSugar 6
12
+ # #define COCOAPODS_VERSION_PATCH_ObjectiveSugar 2
13
+ #
14
+ # Example usage:
15
+ #
16
+ # #ifdef COCOAPODS
17
+ # #ifdef COCOAPODS_POD_AVAILABLE_ObjectiveSugar
18
+ # #import "ObjectiveSugar.h"
19
+ # #endif
20
+ # #else
21
+ # // Non CocoaPods code
22
+ # #endif
23
+ #
24
+ class TargetEnvironmentHeader
25
+
26
+ # @return [Array<LocalPod>] the specifications installed for the target.
27
+ #
28
+ attr_reader :specs
29
+
30
+ # @param [Array<LocalPod>] pods @see pods
31
+ #
32
+ def initialize(specs)
33
+ @specs = specs
34
+ end
35
+
36
+ # Generates and saves the file.
37
+ #
38
+ # @param [Pathname] pathname
39
+ # The path where to save the generated file.
40
+ #
41
+ # @return [void]
42
+ #
43
+ def save_as(pathname)
44
+ pathname.open('w') do |source|
45
+ source.puts
46
+ source.puts "// To check if a library is compiled with CocoaPods you"
47
+ source.puts "// can use the `COCOAPODS` macro definition which is"
48
+ source.puts "// defined in the xcconfigs so it is available in"
49
+ source.puts "// headers also when they are imported in the client"
50
+ source.puts "// project."
51
+ source.puts
52
+ source.puts
53
+ specs.each do |spec|
54
+ spec_name = safe_spec_name(spec.name)
55
+ source.puts "// #{spec.name}"
56
+ source.puts "#define COCOAPODS_POD_AVAILABLE_#{spec_name}"
57
+ if spec.version.semantic?
58
+ source.puts "#define COCOAPODS_VERSION_MAJOR_#{spec_name} #{spec.version.major}"
59
+ source.puts "#define COCOAPODS_VERSION_MINOR_#{spec_name} #{spec.version.minor}"
60
+ source.puts "#define COCOAPODS_VERSION_PATCH_#{spec_name} #{spec.version.patch}"
61
+ else
62
+ source.puts "// This library does not follow semantic-versioning,"
63
+ source.puts "// so we were not able to define version macros."
64
+ source.puts "// Please contact the author."
65
+ source.puts "// Version: #{spec.version}."
66
+ end
67
+ source.puts
68
+ end
69
+ end
70
+ end
71
+
72
+ #-----------------------------------------------------------------------#
73
+
74
+ private
75
+
76
+ # !@group Private Helpers
77
+
78
+ def safe_spec_name(spec_name)
79
+ spec_name.gsub(/[^\w]/,'_')
80
+ end
81
+
82
+ #-----------------------------------------------------------------------#
83
+
84
+ end
85
+ end
86
+ end
@@ -58,6 +58,7 @@ module Pod
58
58
  'PODS_HEADERS_SEARCH_PATHS' => '${PODS_PUBLIC_HEADERS_SEARCH_PATHS}',
59
59
  'PODS_BUILD_HEADERS_SEARCH_PATHS' => quote(sandbox.build_headers.search_paths),
60
60
  'PODS_PUBLIC_HEADERS_SEARCH_PATHS' => quote(sandbox.public_headers.search_paths),
61
+ 'GCC_PREPROCESSOR_DEFINITIONS' => 'COCOAPODS=1'
61
62
  })
62
63
 
63
64
  spec_consumers.each do |consumer|
@@ -2,7 +2,7 @@ module Pod
2
2
 
3
3
  class Specification
4
4
  def config
5
- UI.warn "Specification#config is deprecated. The config is accessible from " \
5
+ UI.warn "[#{name}] Specification#config is deprecated. The config is accessible from " \
6
6
  "the parameter passed to the hooks"
7
7
  Config.instance
8
8
  end
@@ -55,9 +55,9 @@ module Pod
55
55
  # @param [Lockfile] lockfile @see lockfile
56
56
  #
57
57
  def initialize(sandbox, podfile, lockfile = nil)
58
- @sandbox = sandbox
59
- @podfile = podfile
60
- @lockfile = lockfile
58
+ @sandbox = sandbox
59
+ @podfile = podfile
60
+ @lockfile = lockfile
61
61
  end
62
62
 
63
63
  # @return [Bool] Whether the installer is in update mode. In update mode
@@ -151,7 +151,17 @@ module Pod
151
151
 
152
152
  # @return [void]
153
153
  #
154
+ # @note The warning about the version of the Lockfile doesn't uses the
155
+ # `UI.warn` method because it prints the output only at the end
156
+ # of the installation. At that time CocoaPods could have crashed.
157
+ #
154
158
  def analyze
159
+ if lockfile && lockfile.cocoapods_version > Version.new(VERSION)
160
+ STDERR.puts '[!] The version of CocoaPods used to generate the lockfile is '\
161
+ 'higher that the one of the current executable. Incompatibility' \
162
+ 'issues might arise.'.yellow
163
+ end
164
+
155
165
  analyzer = Analyzer.new(sandbox, podfile, lockfile)
156
166
  analyzer.update_mode = update_mode
157
167
  @analysis_result = analyzer.analyze
@@ -276,6 +286,13 @@ module Pod
276
286
  @pods_project.add_podfile(config.podfile_path)
277
287
  end
278
288
  sandbox.project = @pods_project
289
+ platforms = libraries.map(&:platform)
290
+ osx_deployment_target = platforms.select { |p| p.name == :osx }.map(&:deployment_target).min
291
+ ios_deployment_target = platforms.select { |p| p.name == :ios }.map(&:deployment_target).min
292
+ @pods_project.build_configurations.each do |build_configuration|
293
+ build_configuration.build_settings['MACOSX_DEPLOYMENT_TARGET'] = osx_deployment_target.to_s if osx_deployment_target
294
+ build_configuration.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = ios_deployment_target.to_s if ios_deployment_target
295
+ end
279
296
  end
280
297
  end
281
298
 
@@ -372,7 +389,7 @@ module Pod
372
389
  executed = false
373
390
  libraries_using_spec(spec).each do |lib|
374
391
  lib_representation = library_rep(lib)
375
- executed ||= run_spec_pre_install_hook(spec, lib_representation)
392
+ executed |= run_spec_pre_install_hook(spec, lib_representation)
376
393
  end
377
394
  UI.message "- #{spec.name}" if executed
378
395
  end
@@ -431,7 +448,7 @@ module Pod
431
448
  executed = false
432
449
  libraries_using_spec(spec).each do |lib|
433
450
  lib_representation = library_rep(lib)
434
- executed ||= run_spec_post_install_hook(spec, lib_representation)
451
+ executed |= run_spec_post_install_hook(spec, lib_representation)
435
452
  end
436
453
  UI.message "- #{spec.name}" if executed
437
454
  end
@@ -170,9 +170,9 @@ module Pod
170
170
  #
171
171
  def generated_libraries
172
172
  libraries = []
173
- podfile.target_definitions.values.each do |target_definition|
174
- lib = Library.new(target_definition)
175
- lib.support_files_root = sandbox.library_support_files_dir(lib.name)
173
+ podfile.target_definition_list.each do |target_definition|
174
+ lib = Library.new(target_definition)
175
+ lib.support_files_root = sandbox.library_support_files_dir(lib.name)
176
176
 
177
177
  if config.integrate_targets?
178
178
  project_path = compute_user_project_path(target_definition)
@@ -248,7 +248,7 @@ module Pod
248
248
  pods_to_fetch = result.podfile_state.added + result.podfile_state.changed
249
249
  deps_to_fetch = deps_with_external_source.select { |dep| pods_to_fetch.include?(dep.root_name) }
250
250
  deps_to_fetch_if_needed = deps_with_external_source.select { |dep| result.podfile_state.unchanged.include?(dep.root_name) }
251
- deps_to_fetch += deps_to_fetch_if_needed.select { |dep| sandbox.specification(dep.root_name).nil? || !dep.external_source[:local].nil? }
251
+ deps_to_fetch += deps_to_fetch_if_needed.select { |dep| sandbox.specification(dep.root_name).nil? || !dep.external_source[:local].nil? || !dep.external_source[:path].nil? }
252
252
  end
253
253
 
254
254
  unless deps_to_fetch.empty?
@@ -446,8 +446,7 @@ module Pod
446
446
  end
447
447
 
448
448
  target_definition.set_platform(name, deployment_target)
449
- platform = Platform.new(name, deployment_target)
450
- platform
449
+ Platform.new(name, deployment_target)
451
450
  end
452
451
 
453
452
  #-----------------------------------------------------------------------#
@@ -35,7 +35,7 @@ module Pod
35
35
  create_suport_files_group
36
36
 
37
37
  create_xcconfig_file
38
- create_target_header
38
+ create_target_environment_header
39
39
  create_prefix_header
40
40
  create_bridge_support_file
41
41
  create_copy_resources_script
@@ -158,10 +158,10 @@ module Pod
158
158
  # Generates a header which allows to inspect at compile time the installed
159
159
  # pods and the installed specifications of a pod.
160
160
  #
161
- def create_target_header
162
- path = library.target_header_path
163
- UI.message "- Generating target header at #{UI.path(path)}" do
164
- generator = Generator::TargetHeader.new(library.specs)
161
+ def create_target_environment_header
162
+ path = library.target_environment_header_path
163
+ UI.message "- Generating target environment header at #{UI.path(path)}" do
164
+ generator = Generator::TargetEnvironmentHeader.new(library.specs)
165
165
  generator.save_as(path)
166
166
  add_file_to_support_group(path)
167
167
  end
@@ -177,7 +177,7 @@ module Pod
177
177
  path = library.prefix_header_path
178
178
  UI.message "- Generating prefix header at #{UI.path(path)}" do
179
179
  generator = Generator::PrefixHeader.new(library.file_accessors, library.platform)
180
- generator.imports << library.target_header_path.basename
180
+ generator.imports << library.target_environment_header_path.basename
181
181
  generator.save_as(path)
182
182
  add_file_to_support_group(path)
183
183
 
@@ -152,7 +152,7 @@ module Pod
152
152
  diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null
153
153
  if [[ $? != 0 ]] ; then
154
154
  cat << EOM
155
- error: The sanbox is not in sync with the Podfile.lock. Run 'pod install'.
155
+ error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
156
156
  EOM
157
157
  exit 1
158
158
  fi
@@ -127,8 +127,8 @@ module Pod
127
127
  # @return [Pathname] the absolute path of the header file which contains
128
128
  # the information about the installed pods.
129
129
  #
130
- def target_header_path
131
- support_files_root + "#{label}-header.h"
130
+ def target_environment_header_path
131
+ support_files_root + "#{label}-environment.h"
132
132
  end
133
133
 
134
134
  # @return [Pathname] the absolute path of the prefix header file.
@@ -320,6 +320,8 @@ module Pod
320
320
  # @return [Hash{String=>String}] The path of the Pods with a local source
321
321
  # grouped by their name.
322
322
  #
323
+ # @todo Rename (e.g. `pods_with_local_path`)
324
+ #
323
325
  attr_reader :local_pods
324
326
 
325
327
  # Checks if a Pod is locally sourced?
@@ -80,11 +80,13 @@ module Pod
80
80
  #
81
81
  def public_headers
82
82
  public_headers = paths_for_attribute(:public_header_files)
83
+ private_headers = paths_for_attribute(:private_header_files)
83
84
  if public_headers.nil? || public_headers.empty?
84
- headers
85
+ header_files = headers
85
86
  else
86
- public_headers
87
+ header_files = public_headers
87
88
  end
89
+ header_files - private_headers
88
90
  end
89
91
 
90
92
  # @return [Hash{ Symbol => Array<Pathname> }] the resources of the
@@ -38,11 +38,7 @@ module Pod
38
38
  # @raise If no source including the set can be found.
39
39
  #
40
40
  def search(dependency)
41
- set = aggregate.search(dependency)
42
- unless set
43
- raise Informative, "Unable to find a pod named `#{dependency.name}`"
44
- end
45
- set
41
+ aggregate.search(dependency)
46
42
  end
47
43
 
48
44
  # Search all the sources with the given search term.
@@ -63,18 +59,21 @@ module Pod
63
59
  # @return [Array<Set>] The sets that contain the search term.
64
60
  #
65
61
  def search_by_name(query, full_text_search = false)
66
- set_names = []
67
- updated_search_index.each do |name, set_data|
68
- text = name.dup
69
- if full_text_search
70
- text << set_data['authors'].to_s if set_data['authors']
71
- text << set_data['summary'] if set_data['summary']
72
- text << set_data['description'] if set_data['description']
62
+ if full_text_search
63
+ set_names = []
64
+ updated_search_index.each do |name, set_data|
65
+ text = name.dup
66
+ if full_text_search
67
+ text << set_data['authors'].to_s if set_data['authors']
68
+ text << set_data['summary'] if set_data['summary']
69
+ text << set_data['description'] if set_data['description']
70
+ end
71
+ set_names << name if text.downcase.include?(query.downcase)
73
72
  end
74
- set_names << name if text.downcase.include?(query.downcase)
73
+ sets = set_names.sort.map { |name| aggregate.represenative_set(name) }
74
+ else
75
+ sets = aggregate.search_by_name(query, false)
75
76
  end
76
-
77
- sets = set_names.sort.map { |name| aggregate.represenative_set(name) }
78
77
  if sets.empty?
79
78
  extra = ", author, summary, or description" if full_text_search
80
79
  raise Informative, "Unable to find a pod with name#{extra} matching `#{query}`"
@@ -90,24 +89,34 @@ module Pod
90
89
  # - description
91
90
  # - authors
92
91
  #
92
+ # @note This operation is fairly expensive, because of the YAML
93
+ # conversion.
94
+ #
93
95
  # @return [Hash{String => String}] The up to date search data.
94
96
  #
95
97
  def updated_search_index
96
- if search_index_path.exist?
97
- stored_index = YAML.load(search_index_path.read)
98
- if stored_index && stored_index.is_a?(Hash)
99
- search_index = aggregate.update_search_index(stored_index)
98
+ unless @updated_search_index
99
+ if search_index_path.exist?
100
+ stored_index = YAML.load(search_index_path.read)
101
+ if stored_index && stored_index.is_a?(Hash)
102
+ search_index = aggregate.update_search_index(stored_index)
103
+ else
104
+ search_index = aggregate.generate_search_index
105
+ end
100
106
  else
101
107
  search_index = aggregate.generate_search_index
102
108
  end
103
- else
104
- search_index = aggregate.generate_search_index
105
- end
106
109
 
107
- File.open(search_index_path, 'w') {|f| f.write(search_index.to_yaml) }
108
- search_index
110
+ File.open(search_index_path, 'w') {|f| f.write(search_index.to_yaml) }
111
+ @updated_search_index = search_index
112
+ end
113
+ @updated_search_index
109
114
  end
110
115
 
116
+ # Allows to clear the search index.
117
+ #
118
+ attr_writer :updated_search_index
119
+
111
120
  # @return [Pathname] The path where the search index should be stored.
112
121
  #
113
122
  def search_index_path
@@ -106,7 +106,7 @@ module Pod
106
106
  # @return [Bool] whether the validation should be performed against the root of
107
107
  # the podspec instead to its original source.
108
108
  #
109
- # @note Uses the `:local` option of the Podfile.
109
+ # @note Uses the `:path` option of the Podfile.
110
110
  #
111
111
  attr_writer :local
112
112
  def local?; @local; end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.1
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eloy Duran
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-10 00:00:00.000000000 Z
12
+ date: 2013-04-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cocoapods-core
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 0.18.1
20
+ version: 0.19.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 0.18.1
27
+ version: 0.19.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: claide
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -207,9 +207,11 @@ executables:
207
207
  extensions: []
208
208
  extra_rdoc_files: []
209
209
  files:
210
+ - lib/cocoapods/command/help.rb
210
211
  - lib/cocoapods/command/inter_process_communication.rb
211
212
  - lib/cocoapods/command/list.rb
212
213
  - lib/cocoapods/command/outdated.rb
214
+ - lib/cocoapods/command/podfile_info.rb
213
215
  - lib/cocoapods/command/project.rb
214
216
  - lib/cocoapods/command/push.rb
215
217
  - lib/cocoapods/command/repo.rb
@@ -231,7 +233,7 @@ files:
231
233
  - lib/cocoapods/generator/documentation.rb
232
234
  - lib/cocoapods/generator/dummy_source.rb
233
235
  - lib/cocoapods/generator/prefix_header.rb
234
- - lib/cocoapods/generator/target_header.rb
236
+ - lib/cocoapods/generator/target_environment_header.rb
235
237
  - lib/cocoapods/generator/xcconfig.rb
236
238
  - lib/cocoapods/hooks/installer_representation.rb
237
239
  - lib/cocoapods/hooks/library_representation.rb
@@ -273,7 +275,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
273
275
  requirements:
274
276
  - - '>='
275
277
  - !ruby/object:Gem::Version
276
- version: '0'
278
+ version: 1.8.7
277
279
  required_rubygems_version: !ruby/object:Gem::Requirement
278
280
  requirements:
279
281
  - - '>='
@@ -281,7 +283,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
281
283
  version: '0'
282
284
  requirements: []
283
285
  rubyforge_project:
284
- rubygems_version: 2.0.0
286
+ rubygems_version: 2.0.3
285
287
  signing_key:
286
288
  specification_version: 3
287
289
  summary: An Objective-C library package manager.
@@ -1,58 +0,0 @@
1
- module Pod
2
- module Generator
3
-
4
- # Generates a header which allows to inspect at compile time the installed
5
- # pods and the installed specifications of a pod.
6
- #
7
- # Example output:
8
- #
9
- # #define __COCOA_PODS
10
- #
11
- # #define __POD_AFIncrementaStore
12
- # #define __POD_AFNetworking
13
- # #define __POD_libextobjc_EXTConcreteProtocol
14
- # #define __POD_libextobjc_EXTKeyPathCoding
15
- # #define __POD_libextobjc_EXTScope
16
- #
17
- # Example usage:
18
- #
19
- # #ifdef __COCOA_PODS
20
- # #ifdef __POD__AFNetworking
21
- # #import "MYLib+AFNetworking.h"
22
- # #endif
23
- # #else
24
- # // Non CocoaPods code
25
- # #endif
26
- #
27
- class TargetHeader
28
-
29
- # @return [Array<LocalPod>] the specifications installed for the target.
30
- #
31
- attr_reader :specs
32
-
33
- # @param [Array<LocalPod>] pods @see pods
34
- #
35
- def initialize(specs)
36
- @specs = specs
37
- end
38
-
39
- # Generates and saves the file.
40
- #
41
- # @param [Pathname] pathname
42
- # The path where to save the generated file.
43
- #
44
- # @return [void]
45
- #
46
- def save_as(pathname)
47
- pathname.open('w') do |source|
48
- source.puts "// WARNING: This feature of CocoaPods is present for discussion purposes and might be discontinued or changed in future"
49
- source.puts "#define __COCOA_PODS"
50
- source.puts
51
- specs.each do |specs|
52
- source.puts "#define __POD_#{specs.name.gsub(/[^\w]/,'_')}"
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end