cocoapods 0.34.4 → 0.35.0.rc1

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 +108 -1
  3. data/bin/pod +20 -2
  4. data/lib/cocoapods.rb +1 -0
  5. data/lib/cocoapods/command.rb +17 -11
  6. data/lib/cocoapods/command/repo/push.rb +1 -1
  7. data/lib/cocoapods/command/search.rb +1 -0
  8. data/lib/cocoapods/gem_version.rb +1 -1
  9. data/lib/cocoapods/generator/acknowledgements/plist.rb +4 -10
  10. data/lib/cocoapods/generator/header.rb +75 -0
  11. data/lib/cocoapods/generator/prefix_header.rb +15 -34
  12. data/lib/cocoapods/generator/xcconfig/aggregate_xcconfig.rb +2 -2
  13. data/lib/cocoapods/generator/xcconfig/private_pod_xcconfig.rb +4 -1
  14. data/lib/cocoapods/hooks/library_representation.rb +1 -1
  15. data/lib/cocoapods/installer.rb +3 -3
  16. data/lib/cocoapods/installer/analyzer.rb +35 -37
  17. data/lib/cocoapods/installer/analyzer/locking_dependency_analyzer.rb +72 -0
  18. data/lib/cocoapods/installer/file_references_installer.rb +10 -9
  19. data/lib/cocoapods/installer/target_installer.rb +21 -21
  20. data/lib/cocoapods/installer/target_installer/aggregate_target_installer.rb +17 -17
  21. data/lib/cocoapods/installer/target_installer/pod_target_installer.rb +19 -19
  22. data/lib/cocoapods/installer/user_project_integrator/target_integrator/xcconfig_integrator.rb +7 -3
  23. data/lib/cocoapods/project.rb +1 -1
  24. data/lib/cocoapods/resolver.rb +235 -98
  25. data/lib/cocoapods/resolver/lazy_specification.rb +60 -0
  26. data/lib/cocoapods/sandbox.rb +2 -1
  27. data/lib/cocoapods/sandbox/file_accessor.rb +26 -19
  28. data/lib/cocoapods/sandbox/headers_store.rb +12 -7
  29. data/lib/cocoapods/sources_manager.rb +6 -6
  30. data/lib/cocoapods/target.rb +1 -1
  31. data/lib/cocoapods/target/pod_target.rb +2 -2
  32. data/lib/cocoapods/user_interface.rb +1 -1
  33. data/lib/cocoapods/user_interface/error_report.rb +3 -0
  34. data/lib/cocoapods/validator.rb +2 -2
  35. metadata +21 -26
  36. data/lib/cocoapods/command/push.rb +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3f3abb2d3de142a65e9ee1f6f6aa56f207b049ff
4
- data.tar.gz: 3c0e8b8c8051aaf81e528ed63b6e2677a4d0ccb9
3
+ metadata.gz: 0f722fd7a025af675271c7e2e190028e95dfe302
4
+ data.tar.gz: 147981dc0fd9fd643e8de728c51a046e40e8f3e8
5
5
  SHA512:
6
- metadata.gz: 12b256248b4daee4938865e5f94fa85df245592b712d4877c8cb4385a81dd22511fcc6789477ad2d0eb760c58c037256f5b87d2b1e16fe8da466e31a483cd889
7
- data.tar.gz: fb256b64d4ad70edbefcff2a4c8f37e746c13dfcaf43b75ae95854f05dc4af7e71b13f9b8066dd1a32528a35f69a56aa3f04dac518b0cf6c8a347276509e2658
6
+ metadata.gz: f669a688c5aecf46ffc90979c34ef0d1fbd52be0c0b474d950955b8d3aa47180d930e208ca316e30d2bde568fe68dbf470f54c6de939c4c1deac5c4be00d113c
7
+ data.tar.gz: eea96ff3d30d6e05006d5fd31e7e705875b6914a541663b201b3094c333dd297f2a157f8ab853cba61b808570041e35c0ec07a3f3fac4b209559c61d0f32cd10
@@ -2,6 +2,113 @@
2
2
 
3
3
  To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides/installing_cocoapods.html).
4
4
 
5
+ ## 0.35.0.rc1
6
+
7
+ ##### Highlighted Enhancements That Need Testing
8
+
9
+ * The `Resolver` has been completely rewritten to use
10
+ [Molinillo](https://github.com/CocoaPods/Molinillo), an iterative dependency
11
+ resolution algorithm that automatically resolves version conflicts.
12
+ The order in which dependencies are declared in the `Podfile` no longer has
13
+ any effect on the resolution process.
14
+
15
+ You should ensure that `pod install`, `pod update` and `pod update [NAME]`
16
+ work as expected and install the correct versions of your pods during
17
+ this RC1 release.
18
+ [Samuel Giddins](https://github.com/segiddins)
19
+ [#978](https://github.com/CocoaPods/CocoaPods/issues/978)
20
+ [#2002](https://github.com/CocoaPods/CocoaPods/issues/2002)
21
+
22
+ ##### Breaking
23
+
24
+ * Support for older versions of Ruby has been dropped and CocoaPods now depends
25
+ on Ruby 2.0.0 or greater. This is due to the release of Xcode 6.0 which has
26
+ dropped support for OS X 10.8, which results in the minimum version of
27
+ Ruby pre-installed on OS X now being 2.0.0.
28
+
29
+ If you are using a custom installation of Ruby older than 2.0.0, you
30
+ will need to update. Or even better, migrate to system Ruby.
31
+ [Kyle Fuller](https://github.com/kylef)
32
+
33
+ * Attempts to resolve circular dependencies will now raise an exception.
34
+ [Samuel Giddins](https://github.com/segiddins)
35
+ [Molinillo#6](https://github.com/CocoaPods/Molinillo/issues/6)
36
+
37
+ ##### Enhancements
38
+
39
+ * The use of implicit sources has been un-deprecated. By default, all available
40
+ spec-repos will be used. There should only be a need to specify explicit
41
+ sources if you want to specifically _exclude_ certain spec-repos, such as the
42
+ `master` spec-repo, if you want to declare the order of spec look-up
43
+ precedence, or if you want other users of a Podfile to automatically have a
44
+ spec-repo cloned on `pod install`.
45
+ [Eloy Durán](https://github.com/alloy)
46
+
47
+ * The `pod push` command has been removed as it has been deprecated in favour of
48
+ `pod repo push` in CocoaPods 0.33.
49
+ [Fabio Pelosin](https://github.com/fabiopelosin)
50
+
51
+ * Refactorings in preparation to framework support, which could break usage
52
+ of the Hooks API.
53
+ [Marius Rackwitz](https://github.com/mrackwitz)
54
+ [#2461](https://github.com/CocoaPods/CocoaPods/issues/2461)
55
+
56
+ * Implicit dependencies are now locked, so simply running `pod install` will not
57
+ cause them to be updated when they shouldn't be.
58
+ [Samuel Giddins](https://github.com/segiddins)
59
+ [#2318](https://github.com/CocoaPods/CocoaPods/issues/2318)
60
+ [#2506](https://github.com/CocoaPods/CocoaPods/issues/2506)
61
+
62
+ * Pre-release versions are only considered in the resolution process when there
63
+ are dependencies that explicitly reference pre-release requirements.
64
+ [Samuel Giddins](https://github.com/segiddins)
65
+ [#1489](https://github.com/CocoaPods/CocoaPods/issues/1489)
66
+
67
+ * Only setup the master specs repo if required.
68
+ [Daniel Tomlinson](https://github.com/DanielTomlinson)
69
+ [#2562](https://github.com/CocoaPods/CocoaPods/issues/2562)
70
+
71
+ * `Sandbox::FileAccessor` now optionally includes expanded paths of headers of
72
+ vendored frameworks in `public_headers`.
73
+ [Eloy Durán](https://github.com/alloy)
74
+ [#2722](https://github.com/CocoaPods/CocoaPods/pull/2722)
75
+
76
+ * Analysis is now halted and the user informed when there are multiple different
77
+ external sources for dependencies with the same root name.
78
+ The user is also now warned when there are duplicate dependencies in the
79
+ Podfile.
80
+ [Samuel Giddins](https://github.com/segiddins)
81
+ [#2738](https://github.com/CocoaPods/CocoaPods/issues/2738)
82
+
83
+ * Multiple subspecs that point to the same external dependency will now only
84
+ cause that external source to be fetched once.
85
+ [Samuel Giddins](https://github.com/segiddins)
86
+ [#2743](https://github.com/CocoaPods/CocoaPods/issues/2743)
87
+
88
+ ##### Bug Fixes
89
+
90
+ * Fixes an issue in the `XCConfigIntegrator` where not all targets that need
91
+ integration were being integrated, but were getting incorrect warnings about
92
+ the user having specified a custom base configuration.
93
+ [Eloy Durán](https://github.com/alloy)
94
+ [2752](https://github.com/CocoaPods/CocoaPods/issues/2752)
95
+
96
+ * Do not try to clone spec-repos in `/`.
97
+ [Eloy Durán](https://github.com/alloy)
98
+ [#2723](https://github.com/CocoaPods/CocoaPods/issues/2723)
99
+
100
+ * Improved sanitizing of configuration names which have a numeric prefix.
101
+ [Steffen Matthischke](https://github.com/HeEAaD)
102
+ [#2700](https://github.com/CocoaPods/CocoaPods/pull/2700)
103
+
104
+ * Fixes an issues where headers from a podspec with one platform are exposed to
105
+ targets with a different platform. The headers are now only exposed to the
106
+ targets with the same platform.
107
+ [Michael Melanson](https://github.com/michaelmelanson)
108
+ [Kyle Fuller](https://github.com/kylef)
109
+ [#1249](https://github.com/CocoaPods/CocoaPods/issues/1249)
110
+
111
+
5
112
  ## 0.34.4
6
113
 
7
114
  ##### Bug Fixes
@@ -80,7 +187,7 @@ To install or update CocoaPods see this [guide](http://docs.cocoapods.org/guides
80
187
 
81
188
  * Allow the `Validator` to only use specific sources.
82
189
  Allows customizable source for `pod spec lint` and `pod lib lint`,
83
- with both defaulting to `master`.
190
+ with both defaulting to `master`.
84
191
  [Samuel Giddins](https://github.com/segiddins)
85
192
  [#2543](https://github.com/CocoaPods/CocoaPods/issues/2543)
86
193
  [cocoapods-trunk#28](https://github.com/CocoaPods/cocoapods-trunk/issues/28)
data/bin/pod CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- if RUBY_VERSION > '1.8.7' && Encoding.default_external != Encoding::UTF_8
3
+ if Encoding.default_external != Encoding::UTF_8
4
4
  puts "\e[33mWARNING: CocoaPods requires your terminal to be using UTF-8 encoding."
5
5
  if ENV['TRAVIS']
6
6
  puts <<-DOC
@@ -30,4 +30,22 @@ end
30
30
  STDOUT.sync = true if ENV['CP_STDOUT_SYNC'] == 'TRUE'
31
31
 
32
32
  require 'cocoapods'
33
- Pod::Command.run(ARGV)
33
+
34
+ if profile_filename = ENV['PROFILE']
35
+ require 'ruby-prof'
36
+ reporter = case (profile_extname = File.extname(profile_filename))
37
+ when '.txt'
38
+ RubyProf::FlatPrinterWithLineNumbers
39
+ when '.html'
40
+ RubyProf::GraphHtmlPrinter
41
+ when '.callgrind'
42
+ RubyProf::CallTreePrinter
43
+ else
44
+ raise "Unknown profiler format indicated by extension: #{profile_extname}"
45
+ end
46
+ File.open(profile_filename, 'w') do |io|
47
+ reporter.new(RubyProf.profile { Pod::Command.run(ARGV) }).print(io)
48
+ end
49
+ else
50
+ Pod::Command.run(ARGV)
51
+ end
@@ -56,6 +56,7 @@ module Pod
56
56
  autoload :BridgeSupport, 'cocoapods/generator/bridge_support'
57
57
  autoload :CopyResourcesScript, 'cocoapods/generator/copy_resources_script'
58
58
  autoload :DummySource, 'cocoapods/generator/dummy_source'
59
+ autoload :Header, 'cocoapods/generator/header'
59
60
  autoload :PrefixHeader, 'cocoapods/generator/prefix_header'
60
61
  autoload :TargetEnvironmentHeader, 'cocoapods/generator/target_environment_header'
61
62
  autoload :XCConfig, 'cocoapods/generator/xcconfig'
@@ -1,5 +1,12 @@
1
1
  require 'colored'
2
2
  require 'claide'
3
+ require 'molinillo/errors'
4
+
5
+ module Molinillo
6
+ class ResolverError
7
+ include CLAide::InformativeError
8
+ end
9
+ end
3
10
 
4
11
  module Pod
5
12
  class PlainInformative
@@ -18,9 +25,6 @@ module Pod
18
25
  require 'cocoapods/command/spec'
19
26
  require 'cocoapods/command/init'
20
27
 
21
- # TODO: remove
22
- require 'cocoapods/command/push'
23
-
24
28
  self.abstract_command = true
25
29
  self.command = 'pod'
26
30
  self.version = VERSION
@@ -35,14 +39,6 @@ module Pod
35
39
  ].concat(super)
36
40
  end
37
41
 
38
- def self.parse(argv)
39
- command = super
40
- unless SourcesManager.master_repo_functional? || command.is_a?(Setup) || command.is_a?(Repo::Add) || ENV['SKIP_SETUP']
41
- Setup.new(CLAide::ARGV.new([])).run
42
- end
43
- command
44
- end
45
-
46
42
  def self.run(argv)
47
43
  help! 'You cannot run CocoaPods as root.' if Process.uid == 0
48
44
  verify_git_version!
@@ -87,6 +83,16 @@ module Pod
87
83
  end
88
84
  end
89
85
 
86
+ # Ensure that the master spec repo exists
87
+ #
88
+ # @return [void]
89
+ #
90
+ def ensure_master_spec_repo_exists!
91
+ unless SourcesManager.master_repo_functional?
92
+ Setup.new(CLAide::ARGV.new([])).run
93
+ end
94
+ end
95
+
90
96
  #-------------------------------------------------------------------------#
91
97
 
92
98
  include Config::Mixin
@@ -106,7 +106,7 @@ module Pod
106
106
  #
107
107
  def check_repo_status
108
108
  clean = Dir.chdir(repo_dir) { `git status --porcelain 2>&1` } == ''
109
- raise Informative, "The repo `#{@repo}` is not clean" unless clean
109
+ raise Informative, "The repo `#{@repo}` at #{UI.path repo_dir} is not clean" unless clean
110
110
  end
111
111
 
112
112
  # Updates the git repo against the remote.
@@ -48,6 +48,7 @@ module Pod
48
48
  end
49
49
 
50
50
  def run
51
+ ensure_master_spec_repo_exists!
51
52
  if @web
52
53
  web_search
53
54
  else
@@ -1,5 +1,5 @@
1
1
  module Pod
2
2
  # The version of the cocoapods command line tool.
3
3
  #
4
- VERSION = '0.34.4' unless defined? Pod::VERSION
4
+ VERSION = '0.35.0.rc1' unless defined? Pod::VERSION
5
5
  end
@@ -6,8 +6,7 @@ module Pod
6
6
  end
7
7
 
8
8
  def save_as(path)
9
- require 'xcodeproj/ext'
10
- Xcodeproj.write_plist(plist, path)
9
+ Xcodeproj::PlistHelper.write(plist, path)
11
10
  end
12
11
 
13
12
  def plist
@@ -64,20 +63,15 @@ module Pod
64
63
 
65
64
  # !@group Private methods
66
65
 
67
- # Returns the sanitized text with UTF-8 eliminating invalid characters if
68
- # Ruby version >=1.9 else will return the text.
66
+ # Returns the sanitized text with UTF-8 invalid characters eliminated.
69
67
  #
70
68
  # @param [String] text
71
69
  # the text we want to sanitize.
72
70
  #
73
- # @return [String] The sanitized text if Ruby >=1.9 else text.
71
+ # @return [String] The sanitized UTF-8 text.
74
72
  #
75
73
  def sanitize_encoding(text)
76
- if RUBY_VERSION >= '1.9'
77
- text.encode('UTF-8', :invalid => :replace, :undef => :replace, :replace => '')
78
- else
79
- text
80
- end
74
+ text.encode('UTF-8', :invalid => :replace, :undef => :replace, :replace => '')
81
75
  end
82
76
 
83
77
  #-----------------------------------------------------------------------#
@@ -0,0 +1,75 @@
1
+ module Pod
2
+ module Generator
3
+ # Generates a header file.
4
+ #
5
+ # According to the platform the header imports `UIKit/UIKit.h` or
6
+ # `Cocoa/Cocoa.h`.
7
+ #
8
+ class Header
9
+ # @return [Symbol] the platform for which the prefix header will be
10
+ # generated.
11
+ #
12
+ attr_reader :platform
13
+
14
+ # @return [Array<String>] The list of the headers to import.
15
+ #
16
+ attr_reader :imports
17
+
18
+ # @param [Symbol] platform
19
+ # @see platform
20
+ #
21
+ def initialize(platform)
22
+ @platform = platform
23
+ @imports = []
24
+ end
25
+
26
+ # Generates the contents of the header according to the platform.
27
+ #
28
+ # @note If the platform is iOS an import call to `UIKit/UIKit.h` is
29
+ # added to the top of the prefix header. For OS X `Cocoa/Cocoa.h`
30
+ # is imported.
31
+ #
32
+ # @return [String]
33
+ #
34
+ def generate
35
+ result = ""
36
+ result << generate_platform_import_header
37
+
38
+ result << "\n"
39
+
40
+ imports.each do |import|
41
+ result << %|#import "#{import}"\n|
42
+ end
43
+
44
+ result
45
+ end
46
+
47
+ # Generates and saves the header to the given path.
48
+ #
49
+ # @param [Pathname] path
50
+ # The path where the header should be stored.
51
+ #
52
+ # @return [void]
53
+ #
54
+ def save_as(path)
55
+ path.open('w') { |header| header.write(generate) }
56
+ end
57
+
58
+ #-----------------------------------------------------------------------#
59
+
60
+ protected
61
+
62
+ # Generates the contents of the header according to the platform.
63
+ #
64
+ # @note If the platform is iOS an import call to `UIKit/UIKit.h` is
65
+ # added to the top of the header. For OS X `Cocoa/Cocoa.h` is
66
+ # imported.
67
+ #
68
+ # @return [String]
69
+ #
70
+ def generate_platform_import_header
71
+ "#import #{platform == :ios ? '<UIKit/UIKit.h>' : '<Cocoa/Cocoa.h>'}\n"
72
+ end
73
+ end
74
+ end
75
+ end
@@ -6,38 +6,26 @@ module Pod
6
6
  # According to the platform the prefix header imports `UIKit/UIKit.h` or
7
7
  # `Cocoa/Cocoa.h`.
8
8
  #
9
- class PrefixHeader
9
+ class PrefixHeader < Header
10
10
  # @return [Array<FileAccessor>] The file accessors for which to generate
11
11
  # the prefix header.
12
12
  #
13
13
  attr_reader :file_accessors
14
14
 
15
- # @return [Platform] the platform for which the prefix header will be
16
- # generated.
15
+ # @param [Array<FileAccessor>] file_accessors
16
+ # @see file_accessors
17
17
  #
18
- attr_reader :platform
19
-
20
- # @return [Array<String>] The list of the headers to import (with
21
- # quotes).
22
- #
23
- attr_reader :imports
24
-
25
- # @param [Platform] platform @see platform
26
- # @param [Array<LocalPod>] consumers @see consumers
18
+ # @param [Platform] platform
19
+ # @see platform
27
20
  #
28
21
  def initialize(file_accessors, platform)
29
22
  @file_accessors = file_accessors
30
- @platform = platform
31
- @imports = []
23
+ super platform
32
24
  end
33
25
 
34
26
  # Generates the contents of the prefix header according to the platform
35
27
  # and the pods.
36
28
  #
37
- # @note If the platform is iOS an import call to `UIKit/UIKit.h` is
38
- # added to the top of the prefix header. For OS X `Cocoa/Cocoa.h`
39
- # is imported.
40
- #
41
29
  # @note Only unique prefix_header_contents are added to the prefix
42
30
  # header.
43
31
  #
@@ -48,20 +36,12 @@ module Pod
48
36
  # file_accessor.prefix_header.
49
37
  #
50
38
  def generate
51
- result = "#ifdef __OBJC__\n"
52
- result << "#import #{platform == :ios ? '<UIKit/UIKit.h>' : '<Cocoa/Cocoa.h>'}\n"
53
- result << "#endif\n"
54
-
55
- imports.each do |import|
56
- result << %(\n#import "#{import}")
57
- end
39
+ result = super
58
40
 
59
41
  unique_prefix_header_contents = file_accessors.map do |file_accessor|
60
42
  file_accessor.spec_consumer.prefix_header_contents
61
43
  end.compact.uniq
62
44
 
63
- result << "\n"
64
-
65
45
  unique_prefix_header_contents.each do |prefix_header_contents|
66
46
  result << prefix_header_contents
67
47
  result << "\n"
@@ -75,15 +55,16 @@ module Pod
75
55
  result
76
56
  end
77
57
 
78
- # Generates and saves the prefix header to the given path.
79
- #
80
- # @param [Pathname] path
81
- # the path where the prefix header should be stored.
58
+ protected
59
+
60
+ # Generates the contents of the header according to the platform.
82
61
  #
83
- # @return [void]
62
+ # @return [String]
84
63
  #
85
- def save_as(path)
86
- path.open('w') { |header| header.write(generate) }
64
+ def generate_platform_import_header
65
+ result = "#ifdef __OBJC__\n"
66
+ result << super
67
+ result << "#endif\n"
87
68
  end
88
69
  end
89
70
  end