cocoapods-core 0.30.0 → 1.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +7 -10
- data/lib/cocoapods-core/build_type.rb +121 -0
- data/lib/cocoapods-core/cdn_source.rb +501 -0
- data/lib/cocoapods-core/core_ui.rb +4 -3
- data/lib/cocoapods-core/dependency.rb +100 -73
- data/lib/cocoapods-core/gem_version.rb +1 -2
- data/lib/cocoapods-core/github.rb +32 -5
- data/lib/cocoapods-core/http.rb +86 -0
- data/lib/cocoapods-core/lockfile.rb +161 -56
- data/lib/cocoapods-core/metrics.rb +47 -0
- data/lib/cocoapods-core/platform.rb +99 -11
- data/lib/cocoapods-core/podfile/dsl.rb +623 -124
- data/lib/cocoapods-core/podfile/target_definition.rb +662 -109
- data/lib/cocoapods-core/podfile.rb +138 -65
- data/lib/cocoapods-core/requirement.rb +37 -8
- data/lib/cocoapods-core/source/acceptor.rb +16 -13
- data/lib/cocoapods-core/source/aggregate.rb +79 -103
- data/lib/cocoapods-core/source/health_reporter.rb +9 -18
- data/lib/cocoapods-core/source/manager.rb +488 -0
- data/lib/cocoapods-core/source/metadata.rb +79 -0
- data/lib/cocoapods-core/source.rb +241 -70
- data/lib/cocoapods-core/specification/consumer.rb +187 -47
- data/lib/cocoapods-core/specification/dsl/attribute.rb +49 -85
- data/lib/cocoapods-core/specification/dsl/attribute_support.rb +6 -8
- data/lib/cocoapods-core/specification/dsl/deprecations.rb +9 -126
- data/lib/cocoapods-core/specification/dsl/platform_proxy.rb +30 -20
- data/lib/cocoapods-core/specification/dsl.rb +943 -296
- data/lib/cocoapods-core/specification/json.rb +64 -23
- data/lib/cocoapods-core/specification/linter/analyzer.rb +218 -0
- data/lib/cocoapods-core/specification/linter/result.rb +128 -0
- data/lib/cocoapods-core/specification/linter.rb +310 -309
- data/lib/cocoapods-core/specification/root_attribute_accessors.rb +90 -39
- data/lib/cocoapods-core/specification/set/presenter.rb +35 -71
- data/lib/cocoapods-core/specification/set.rb +42 -96
- data/lib/cocoapods-core/specification.rb +368 -130
- data/lib/cocoapods-core/standard_error.rb +45 -24
- data/lib/cocoapods-core/trunk_source.rb +14 -0
- data/lib/cocoapods-core/vendor/requirement.rb +133 -53
- data/lib/cocoapods-core/vendor/version.rb +197 -156
- data/lib/cocoapods-core/vendor.rb +1 -5
- data/lib/cocoapods-core/version.rb +137 -42
- data/lib/cocoapods-core/yaml_helper.rb +334 -0
- data/lib/cocoapods-core.rb +10 -4
- metadata +100 -27
- data/lib/cocoapods-core/source/abstract_data_provider.rb +0 -71
- data/lib/cocoapods-core/source/file_system_data_provider.rb +0 -150
- data/lib/cocoapods-core/source/github_data_provider.rb +0 -143
- data/lib/cocoapods-core/specification/set/statistics.rb +0 -266
- data/lib/cocoapods-core/yaml_converter.rb +0 -192
| @@ -1,46 +1,113 @@ | |
| 1 1 | 
             
            module Pod
         | 
| 2 2 | 
             
              class Podfile
         | 
| 3 | 
            -
             | 
| 4 | 
            -
                # The of the methods defined in this file and the order of the methods is
         | 
| 3 | 
            +
                # The methods defined in this file and the order of the methods is
         | 
| 5 4 | 
             
                # relevant for the documentation generated on
         | 
| 6 | 
            -
                # CocoaPods/cocoapods. | 
| 5 | 
            +
                # https://github.com/CocoaPods/guides.cocoapods.org.
         | 
| 7 6 |  | 
| 8 7 | 
             
                # The Podfile is a specification that describes the dependencies of the
         | 
| 9 | 
            -
                # targets of one or more Xcode projects. | 
| 10 | 
            -
                # implicit target, named `default`, which links to the first target of the
         | 
| 11 | 
            -
                # user project.
         | 
| 8 | 
            +
                # targets of one or more Xcode projects.
         | 
| 12 9 | 
             
                #
         | 
| 13 | 
            -
                # A  | 
| 10 | 
            +
                # A Podfile can be very simple:
         | 
| 14 11 | 
             
                #
         | 
| 12 | 
            +
                #     target 'MyApp'
         | 
| 15 13 | 
             
                #     pod 'AFNetworking', '~> 1.0'
         | 
| 16 14 | 
             
                #
         | 
| 17 | 
            -
                # An example of a more complex  | 
| 15 | 
            +
                # An example of a more complex Podfile can be:
         | 
| 18 16 | 
             
                #
         | 
| 19 | 
            -
                #     platform :ios, ' | 
| 17 | 
            +
                #     platform :ios, '9.0'
         | 
| 20 18 | 
             
                #     inhibit_all_warnings!
         | 
| 21 19 | 
             
                #
         | 
| 22 | 
            -
                #      | 
| 23 | 
            -
                #
         | 
| 24 | 
            -
                #     pod 'ObjectiveSugar', '~> 0.5'
         | 
| 20 | 
            +
                #     target 'MyApp' do
         | 
| 21 | 
            +
                #       pod 'ObjectiveSugar', '~> 0.5'
         | 
| 25 22 | 
             
                #
         | 
| 26 | 
            -
                # | 
| 27 | 
            -
                # | 
| 23 | 
            +
                #       target 'MyAppTests' do
         | 
| 24 | 
            +
                #         inherit! :search_paths
         | 
| 25 | 
            +
                #         pod 'OCMock', '~> 2.0.1'
         | 
| 26 | 
            +
                #       end
         | 
| 28 27 | 
             
                #     end
         | 
| 29 28 | 
             
                #
         | 
| 30 29 | 
             
                #     post_install do |installer|
         | 
| 31 | 
            -
                #       installer. | 
| 30 | 
            +
                #       installer.pods_project.targets.each do |target|
         | 
| 32 31 | 
             
                #         puts "#{target.name}"
         | 
| 33 32 | 
             
                #       end
         | 
| 34 33 | 
             
                #     end
         | 
| 35 34 | 
             
                #
         | 
| 36 35 | 
             
                module DSL
         | 
| 36 | 
            +
                  # @!group Root Options
         | 
| 37 | 
            +
                  #   Configuration that applies to the Podfile as a whole.
         | 
| 38 | 
            +
                  #
         | 
| 39 | 
            +
                  #   * `install!` declares the installation method and options to be used
         | 
| 40 | 
            +
                  #     during installation.
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  # Specifies the installation method and options to be used when
         | 
| 43 | 
            +
                  # CocoaPods installs this Podfile.
         | 
| 44 | 
            +
                  #
         | 
| 45 | 
            +
                  # The first parameter indicates the installation method to use;
         | 
| 46 | 
            +
                  # next parameters indicate installation options.
         | 
| 47 | 
            +
                  #
         | 
| 48 | 
            +
                  # For now the only accepted installation method is `'cocoapods'`, so
         | 
| 49 | 
            +
                  # you'll always use this value for the first parameter; but more
         | 
| 50 | 
            +
                  # installation methods might be available in future versions.
         | 
| 51 | 
            +
                  #
         | 
| 52 | 
            +
                  # @param   [String] installation_method
         | 
| 53 | 
            +
                  #          the name of the installation strategy.
         | 
| 54 | 
            +
                  #
         | 
| 55 | 
            +
                  # @param   [Hash] options
         | 
| 56 | 
            +
                  #          the installation options.
         | 
| 57 | 
            +
                  #
         | 
| 58 | 
            +
                  # @example Specifying custom CocoaPods installation options
         | 
| 59 | 
            +
                  #
         | 
| 60 | 
            +
                  #          install! 'cocoapods',
         | 
| 61 | 
            +
                  #                   :deterministic_uuids => false,
         | 
| 62 | 
            +
                  #                   :integrate_targets => false
         | 
| 63 | 
            +
                  #
         | 
| 64 | 
            +
                  # @return  [void]
         | 
| 65 | 
            +
                  #
         | 
| 66 | 
            +
                  def install!(installation_method, options = {})
         | 
| 67 | 
            +
                    unless current_target_definition.root?
         | 
| 68 | 
            +
                      raise Informative, 'The installation method can only be set at the root level of the Podfile.'
         | 
| 69 | 
            +
                    end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                    set_hash_value('installation_method', 'name' => installation_method, 'options' => options)
         | 
| 72 | 
            +
                  end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                  # Raises a warning when CocoaPods is run using the Global Gemset.
         | 
| 75 | 
            +
                  # A Semantic version can be supplied to warn if the bundler version
         | 
| 76 | 
            +
                  # does not match the required version.
         | 
| 77 | 
            +
                  #
         | 
| 78 | 
            +
                  # @param   [String] version
         | 
| 79 | 
            +
                  #          The required bundler version, in semantic version format.
         | 
| 80 | 
            +
                  #
         | 
| 81 | 
            +
                  # @example
         | 
| 82 | 
            +
                  #
         | 
| 83 | 
            +
                  #   ensure_bundler!
         | 
| 84 | 
            +
                  #
         | 
| 85 | 
            +
                  # @example
         | 
| 86 | 
            +
                  #
         | 
| 87 | 
            +
                  #   ensure_bundler! '~> 2.0.0'
         | 
| 88 | 
            +
                  #
         | 
| 89 | 
            +
                  # @return  [void]
         | 
| 90 | 
            +
                  #
         | 
| 91 | 
            +
                  def ensure_bundler!(version = nil)
         | 
| 92 | 
            +
                    unless current_target_definition.root?
         | 
| 93 | 
            +
                      raise Informative, 'The Ensure Bundler check can only be set at the root level of the Podfile.'
         | 
| 94 | 
            +
                    end
         | 
| 95 | 
            +
                    unless %w(BUNDLE_BIN_PATH BUNDLE_GEMFILE).all? { |key| ENV.key?(key) }
         | 
| 96 | 
            +
                      raise Informative, "CocoaPods was invoked from Global Gemset.\nPlease re-run using: `bundle exec pod #{ARGV.join(' ')}`"
         | 
| 97 | 
            +
                    end
         | 
| 98 | 
            +
                    unless ENV['BUNDLER_VERSION'].nil? || Requirement.create(version).satisfied_by?(Version.new(ENV['BUNDLER_VERSION']))
         | 
| 99 | 
            +
                      raise Informative, "The installed Bundler version: #{ENV['BUNDLER_VERSION']} does not match the required version: #{version}"
         | 
| 100 | 
            +
                    end
         | 
| 101 | 
            +
                  end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                  #-----------------------------------------------------------------------#
         | 
| 37 104 |  | 
| 38 105 | 
             
                  # @!group Dependencies
         | 
| 39 106 | 
             
                  #   The Podfile specifies the dependencies of each user target.
         | 
| 40 107 | 
             
                  #
         | 
| 41 108 | 
             
                  #   * `pod` is the way to declare a specific dependency.
         | 
| 42 | 
            -
                  #   * `podspec` provides an easy  | 
| 43 | 
            -
                  #   * `target`  | 
| 109 | 
            +
                  #   * `podspec` provides an easy API for the creation of podspecs.
         | 
| 110 | 
            +
                  #   * `target` is how you scope your dependencies to specific
         | 
| 44 111 | 
             
                  #   targets in your Xcode projects.
         | 
| 45 112 |  | 
| 46 113 | 
             
                  #-----------------------------------------------------------------------#
         | 
| @@ -64,6 +131,7 @@ module Pod | |
| 64 131 | 
             
                  # Besides no version, or a specific one, it is also possible to use
         | 
| 65 132 | 
             
                  # operators:
         | 
| 66 133 | 
             
                  #
         | 
| 134 | 
            +
                  # * `= 0.1`    Version 0.1.
         | 
| 67 135 | 
             
                  # * `> 0.1`    Any version higher than 0.1.
         | 
| 68 136 | 
             
                  # * `>= 0.1`   Version 0.1 and any higher version.
         | 
| 69 137 | 
             
                  # * `< 0.1`    Any version lower than 0.1.
         | 
| @@ -73,6 +141,10 @@ module Pod | |
| 73 141 | 
             
                  #              specify in your version requirement. The example is equal to
         | 
| 74 142 | 
             
                  #              `>= 0.1.2` combined with `< 0.2.0` and will always match the
         | 
| 75 143 | 
             
                  #              latest known version matching your requirements.
         | 
| 144 | 
            +
                  # * `~> 0`     Version 0 and the versions up to 1, not including 1.
         | 
| 145 | 
            +
                  # * `~> 0.1.3-beta.0` Beta and release versions for 0.1.3, release versions
         | 
| 146 | 
            +
                  #              up to 0.2 excluding 0.2. Components separated by a dash (-)
         | 
| 147 | 
            +
                  #              will not be considered for the version requirement.
         | 
| 76 148 | 
             
                  #
         | 
| 77 149 | 
             
                  # A list of version requirements can be specified for even more fine
         | 
| 78 150 | 
             
                  # grained control.
         | 
| @@ -80,14 +152,80 @@ module Pod | |
| 80 152 | 
             
                  # For more information, regarding versioning policy, see:
         | 
| 81 153 | 
             
                  #
         | 
| 82 154 | 
             
                  # * [Semantic Versioning](http://semver.org)
         | 
| 83 | 
            -
                  # * [RubyGems Versioning Policies](http:// | 
| 155 | 
            +
                  # * [RubyGems Versioning Policies](http://guides.rubygems.org/patterns/#semantic-versioning)
         | 
| 156 | 
            +
                  #
         | 
| 157 | 
            +
                  # ------
         | 
| 158 | 
            +
                  #
         | 
| 159 | 
            +
                  # ### Build configurations
         | 
| 160 | 
            +
                  #
         | 
| 161 | 
            +
                  # By default dependencies are installed in all the build configurations
         | 
| 162 | 
            +
                  # of the target. For debug purposes or for other reasons, they can be
         | 
| 163 | 
            +
                  # only enabled on a list of build configurations.
         | 
| 164 | 
            +
                  #
         | 
| 165 | 
            +
                  #     pod 'PonyDebugger', :configurations => ['Debug', 'Beta']
         | 
| 166 | 
            +
                  #
         | 
| 167 | 
            +
                  # Alternatively, you can specify to have it included on a single build
         | 
| 168 | 
            +
                  # configuration.
         | 
| 169 | 
            +
                  #
         | 
| 170 | 
            +
                  #     pod 'PonyDebugger', :configuration => 'Debug'
         | 
| 171 | 
            +
                  #
         | 
| 172 | 
            +
                  # Note that transitive dependencies are included in all configurations
         | 
| 173 | 
            +
                  # and you have to manually specify build configurations for them as well in
         | 
| 174 | 
            +
                  # case this is not desired.
         | 
| 175 | 
            +
                  #
         | 
| 176 | 
            +
                  # ------
         | 
| 177 | 
            +
                  #
         | 
| 178 | 
            +
                  # ### Modular Headers
         | 
| 179 | 
            +
                  #
         | 
| 180 | 
            +
                  # If you would like to use modular headers per Pod you can use the
         | 
| 181 | 
            +
                  # following syntax:
         | 
| 182 | 
            +
                  #
         | 
| 183 | 
            +
                  #     pod 'SSZipArchive', :modular_headers => true
         | 
| 184 | 
            +
                  #
         | 
| 185 | 
            +
                  # Additionally, when you use the `use_modular_headers!` attribute,
         | 
| 186 | 
            +
                  # you can exclude a particular Pod from modular headers using the following:
         | 
| 187 | 
            +
                  #
         | 
| 188 | 
            +
                  #     pod 'SSZipArchive', :modular_headers => false
         | 
| 189 | 
            +
                  #
         | 
| 190 | 
            +
                  # ------
         | 
| 191 | 
            +
                  #
         | 
| 192 | 
            +
                  # ### Source
         | 
| 193 | 
            +
                  #
         | 
| 194 | 
            +
                  # By default the sources specified at the global level are searched in the order
         | 
| 195 | 
            +
                  # they are specified for a dependency match. This behaviour can be altered
         | 
| 196 | 
            +
                  # for a specific dependency by specifying the source with the dependency:
         | 
| 197 | 
            +
                  #
         | 
| 198 | 
            +
                  #     pod 'PonyDebugger', :source => 'https://cdn.cocoapods.org/'
         | 
| 199 | 
            +
                  #
         | 
| 200 | 
            +
                  # In this case only the specified source will be searched for the dependency
         | 
| 201 | 
            +
                  # and any global sources ignored.
         | 
| 202 | 
            +
                  #
         | 
| 203 | 
            +
                  # ------
         | 
| 204 | 
            +
                  #
         | 
| 205 | 
            +
                  # ### Subspecs
         | 
| 206 | 
            +
                  #
         | 
| 207 | 
            +
                  # When installing a Pod via its name, it will install all of the
         | 
| 208 | 
            +
                  # default subspecs defined in the podspec.
         | 
| 209 | 
            +
                  #
         | 
| 210 | 
            +
                  # You may install a specific subspec using the following:
         | 
| 211 | 
            +
                  #
         | 
| 212 | 
            +
                  #     pod 'QueryKit/Attribute'
         | 
| 213 | 
            +
                  #
         | 
| 214 | 
            +
                  # You may specify a collection of subspecs to be installed as follows:
         | 
| 215 | 
            +
                  #
         | 
| 216 | 
            +
                  #     pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
         | 
| 217 | 
            +
                  #
         | 
| 218 | 
            +
                  # ### Test Specs
         | 
| 219 | 
            +
                  #
         | 
| 220 | 
            +
                  # Test specs can be optionally included via the `:testspecs` option. By default,
         | 
| 221 | 
            +
                  # none of a Pod's test specs are included.
         | 
| 84 222 | 
             
                  #
         | 
| 85 | 
            -
                  #  | 
| 86 | 
            -
                  # will use the spec of the newest available version in your spec repo(s),
         | 
| 87 | 
            -
                  # but force the download of the ‘bleeding edge’ version (HEAD). Use this
         | 
| 88 | 
            -
                  # with caution, as the spec _might_ not be compatible anymore.
         | 
| 223 | 
            +
                  # You may specify a list of test spec names to install using the following:
         | 
| 89 224 | 
             
                  #
         | 
| 90 | 
            -
                  #     pod ' | 
| 225 | 
            +
                  #     pod 'AFNetworking', :testspecs => ['UnitTests', 'SomeOtherTests']
         | 
| 226 | 
            +
                  #
         | 
| 227 | 
            +
                  # The values provided to `:testspecs` correspond to the name provided to the
         | 
| 228 | 
            +
                  # `test_spec` DSL attribute in a Podspec.
         | 
| 91 229 | 
             
                  #
         | 
| 92 230 | 
             
                  # ------
         | 
| 93 231 | 
             
                  #
         | 
| @@ -96,7 +234,7 @@ module Pod | |
| 96 234 | 
             
                  #
         | 
| 97 235 | 
             
                  # ### Using the files from a local path.
         | 
| 98 236 | 
             
                  #
         | 
| 99 | 
            -
                  #  If you  | 
| 237 | 
            +
                  #  If you would like to use develop a Pod in tandem with its client
         | 
| 100 238 | 
             
                  #  project you can use the `path` option.
         | 
| 101 239 | 
             
                  #
         | 
| 102 240 | 
             
                  #     pod 'AFNetworking', :path => '~/Documents/AFNetworking'
         | 
| @@ -106,24 +244,34 @@ module Pod | |
| 106 244 | 
             
                  #  Pods project. This means that your edits will persist to CocoaPods
         | 
| 107 245 | 
             
                  #  installations.
         | 
| 108 246 | 
             
                  #
         | 
| 109 | 
            -
                  #  The referenced folder can be a checkout of your your  | 
| 110 | 
            -
                  #  even a git submodule of the current  | 
| 247 | 
            +
                  #  The referenced folder can be a checkout of your your favourite SCM or
         | 
| 248 | 
            +
                  #  even a git submodule of the current repository.
         | 
| 111 249 | 
             
                  #
         | 
| 112 250 | 
             
                  #  Note that the `podspec` of the Pod file is expected to be in the
         | 
| 113 251 | 
             
                  #  folder.
         | 
| 114 252 | 
             
                  #
         | 
| 115 253 | 
             
                  #
         | 
| 116 | 
            -
                  # ### From a podspec in the root of a library  | 
| 254 | 
            +
                  # ### From a podspec in the root of a library repository.
         | 
| 117 255 | 
             
                  #
         | 
| 118 256 | 
             
                  # Sometimes you may want to use the bleeding edge version of a Pod. Or a
         | 
| 119 257 | 
             
                  # specific revision. If this is the case, you can specify that with your
         | 
| 120 258 | 
             
                  # pod declaration.
         | 
| 121 259 | 
             
                  #
         | 
| 122 | 
            -
                  # To use the `master` branch of the  | 
| 260 | 
            +
                  # To use the `master` branch of the repository:
         | 
| 123 261 | 
             
                  #
         | 
| 124 262 | 
             
                  #     pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
         | 
| 125 263 | 
             
                  #
         | 
| 126 264 | 
             
                  #
         | 
| 265 | 
            +
                  # To use a different branch of the repository:
         | 
| 266 | 
            +
                  #
         | 
| 267 | 
            +
                  #     pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
         | 
| 268 | 
            +
                  #
         | 
| 269 | 
            +
                  #
         | 
| 270 | 
            +
                  # To use a tag of the repository:
         | 
| 271 | 
            +
                  #
         | 
| 272 | 
            +
                  #     pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
         | 
| 273 | 
            +
                  #
         | 
| 274 | 
            +
                  #
         | 
| 127 275 | 
             
                  # Or specify a commit:
         | 
| 128 276 | 
             
                  #
         | 
| 129 277 | 
             
                  #     pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af'
         | 
| @@ -131,42 +279,38 @@ module Pod | |
| 131 279 | 
             
                  # It is important to note, though, that this means that the version will
         | 
| 132 280 | 
             
                  # have to satisfy any other dependencies on the Pod by other Pods.
         | 
| 133 281 | 
             
                  #
         | 
| 134 | 
            -
                  # The `podspec` file is expected to be in the root of the  | 
| 135 | 
            -
                  # library does not have a `podspec` file in its  | 
| 136 | 
            -
                  # to use one of the approaches outlined in the | 
| 282 | 
            +
                  # The `podspec` file is expected to be in the root of the repository,
         | 
| 283 | 
            +
                  # if this library does not have a `podspec` file in its repository
         | 
| 284 | 
            +
                  # yet, you will have to use one of the approaches outlined in the
         | 
| 285 | 
            +
                  # sections below.
         | 
| 137 286 | 
             
                  #
         | 
| 138 287 | 
             
                  #
         | 
| 139 | 
            -
                  # ### From a podspec outside a spec  | 
| 288 | 
            +
                  # ### From a podspec outside a spec repository, for a library without podspec.
         | 
| 140 289 | 
             
                  #
         | 
| 141 290 | 
             
                  # If a podspec is available from another source outside of the library’s
         | 
| 142 | 
            -
                  #  | 
| 291 | 
            +
                  # repository. Consider, for instance, a podspec available via HTTP:
         | 
| 143 292 | 
             
                  #
         | 
| 144 | 
            -
                  #     pod 'JSONKit', :podspec => 'https:// | 
| 293 | 
            +
                  #     pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'
         | 
| 145 294 | 
             
                  #
         | 
| 146 295 | 
             
                  #
         | 
| 147 296 | 
             
                  # @note       This method allow a nil name and the raises to be more
         | 
| 148 297 | 
             
                  #             informative.
         | 
| 149 298 | 
             
                  #
         | 
| 150 | 
            -
                  # @note       Support for inline podspecs has been deprecated.
         | 
| 151 | 
            -
                  #
         | 
| 152 299 | 
             
                  # @return     [void]
         | 
| 153 300 | 
             
                  #
         | 
| 154 | 
            -
                  def pod(name = nil, *requirements | 
| 155 | 
            -
                    if block
         | 
| 156 | 
            -
                      raise StandardError, "Inline specifications are deprecated. " \
         | 
| 157 | 
            -
                        "Please store the specification in a `podspec` file."
         | 
| 158 | 
            -
                    end
         | 
| 159 | 
            -
             | 
| 301 | 
            +
                  def pod(name = nil, *requirements)
         | 
| 160 302 | 
             
                    unless name
         | 
| 161 | 
            -
                      raise StandardError,  | 
| 303 | 
            +
                      raise StandardError, 'A dependency requires a name.'
         | 
| 162 304 | 
             
                    end
         | 
| 163 305 |  | 
| 164 306 | 
             
                    current_target_definition.store_pod(name, *requirements)
         | 
| 165 307 | 
             
                  end
         | 
| 166 308 |  | 
| 167 | 
            -
                  # Use the dependencies of a Pod defined in the given podspec file. | 
| 168 | 
            -
                  # arguments are passed the first podspec in the root of the Podfile | 
| 169 | 
            -
                  # used. It is intended to be used by the project of a library.
         | 
| 309 | 
            +
                  # Use just the dependencies of a Pod defined in the given podspec file.
         | 
| 310 | 
            +
                  # If no arguments are passed the first podspec in the root of the Podfile
         | 
| 311 | 
            +
                  # is used. It is intended to be used by the project of a library. Note:
         | 
| 312 | 
            +
                  # this does not include the sources derived from the podspec just the
         | 
| 313 | 
            +
                  # CocoaPods infrastructure.
         | 
| 170 314 | 
             
                  #
         | 
| 171 315 | 
             
                  # @example
         | 
| 172 316 | 
             
                  #   podspec
         | 
| @@ -179,7 +323,7 @@ module Pod | |
| 179 323 | 
             
                  #
         | 
| 180 324 | 
             
                  # @param    [Hash {Symbol=>String}] options
         | 
| 181 325 | 
             
                  #           the path where to load the {Specification}. If not provided
         | 
| 182 | 
            -
                  #           the first podspec in the directory of the  | 
| 326 | 
            +
                  #           the first podspec in the directory of the Podfile is used.
         | 
| 183 327 | 
             
                  #
         | 
| 184 328 | 
             
                  # @option   options [String] :path
         | 
| 185 329 | 
             
                  #           the path of the podspec file
         | 
| @@ -187,7 +331,7 @@ module Pod | |
| 187 331 | 
             
                  # @option   options [String] :name
         | 
| 188 332 | 
             
                  #           the name of the podspec
         | 
| 189 333 | 
             
                  #
         | 
| 190 | 
            -
                  # @note     This method uses the dependencies declared  | 
| 334 | 
            +
                  # @note     This method uses the dependencies declared for the
         | 
| 191 335 | 
             
                  #           platform of the target definition.
         | 
| 192 336 | 
             
                  #
         | 
| 193 337 | 
             
                  #
         | 
| @@ -200,61 +344,222 @@ module Pod | |
| 200 344 | 
             
                    current_target_definition.store_podspec(options)
         | 
| 201 345 | 
             
                  end
         | 
| 202 346 |  | 
| 203 | 
            -
                  # Defines a  | 
| 204 | 
            -
                  #  | 
| 205 | 
            -
                  #  | 
| 206 | 
            -
                  #  | 
| 207 | 
            -
                  # given.
         | 
| 208 | 
            -
                  #
         | 
| 209 | 
            -
                  # ---
         | 
| 210 | 
            -
                  #
         | 
| 211 | 
            -
                  # The Podfile creates a global target named `:default` which produces the
         | 
| 212 | 
            -
                  # `libPods.a` file. This target is linked with the first target of user
         | 
| 213 | 
            -
                  # project if not value is specified for the `link_with` attribute.
         | 
| 347 | 
            +
                  # Defines a CocoaPods target and scopes dependencies defined
         | 
| 348 | 
            +
                  # within the given block. A target should correspond to an Xcode target.
         | 
| 349 | 
            +
                  # By default the target includes the dependencies defined outside of
         | 
| 350 | 
            +
                  # the block, unless instructed not to `inherit!` them.
         | 
| 214 351 | 
             
                  #
         | 
| 215 352 | 
             
                  # @param    [Symbol, String] name
         | 
| 216 | 
            -
                  #           the name of the target | 
| 217 | 
            -
                  #
         | 
| 218 | 
            -
                  # @option   options [Bool] :exclusive
         | 
| 219 | 
            -
                  #           whether the target should inherit the dependencies of its
         | 
| 220 | 
            -
                  #           parent. by default targets are inclusive.
         | 
| 353 | 
            +
                  #           the name of the target.
         | 
| 221 354 | 
             
                  #
         | 
| 222 355 | 
             
                  # @example  Defining a target
         | 
| 223 356 | 
             
                  #
         | 
| 224 | 
            -
                  #           target  | 
| 357 | 
            +
                  #           target 'ZipApp' do
         | 
| 225 358 | 
             
                  #             pod 'SSZipArchive'
         | 
| 226 359 | 
             
                  #           end
         | 
| 227 360 | 
             
                  #
         | 
| 228 | 
            -
                  # @example  Defining  | 
| 361 | 
            +
                  # @example  Defining a test target accessing SSZipArchive pod from its parent
         | 
| 229 362 | 
             
                  #
         | 
| 230 | 
            -
                  #           target  | 
| 363 | 
            +
                  #           target 'ZipApp' do
         | 
| 231 364 | 
             
                  #             pod 'SSZipArchive'
         | 
| 232 | 
            -
                  # | 
| 233 | 
            -
                  # | 
| 365 | 
            +
                  #
         | 
| 366 | 
            +
                  #             target 'ZipAppTests' do
         | 
| 367 | 
            +
                  #               inherit! :search_paths
         | 
| 368 | 
            +
                  #               pod 'Nimble'
         | 
| 369 | 
            +
                  #             end
         | 
| 370 | 
            +
                  #           end
         | 
| 371 | 
            +
                  #
         | 
| 372 | 
            +
                  # @example  Defining a target applies Pods to multiple targets via its parent target
         | 
| 373 | 
            +
                  #
         | 
| 374 | 
            +
                  #           target 'ShowsApp' do
         | 
| 375 | 
            +
                  #             pod 'ShowsKit'
         | 
| 376 | 
            +
                  #
         | 
| 377 | 
            +
                  #             # Has its own copy of ShowsKit + ShowTVAuth
         | 
| 378 | 
            +
                  #             target 'ShowsTV' do
         | 
| 379 | 
            +
                  #               pod 'ShowTVAuth'
         | 
| 380 | 
            +
                  #             end
         | 
| 381 | 
            +
                  #
         | 
| 382 | 
            +
                  #             # Has its own copy of Specta + Expecta
         | 
| 383 | 
            +
                  #             # and has access to ShowsKit via the app
         | 
| 384 | 
            +
                  #             # that the test target is bundled into
         | 
| 385 | 
            +
                  #
         | 
| 386 | 
            +
                  #             target 'ShowsTests' do
         | 
| 387 | 
            +
                  #               inherit! :search_paths
         | 
| 388 | 
            +
                  #               pod 'Specta'
         | 
| 389 | 
            +
                  #               pod 'Expecta'
         | 
| 234 390 | 
             
                  #             end
         | 
| 235 391 | 
             
                  #           end
         | 
| 236 392 | 
             
                  #
         | 
| 237 393 | 
             
                  # @return   [void]
         | 
| 238 394 | 
             
                  #
         | 
| 239 | 
            -
                  def target(name, options =  | 
| 240 | 
            -
                    if options | 
| 395 | 
            +
                  def target(name, options = nil)
         | 
| 396 | 
            +
                    if options
         | 
| 241 397 | 
             
                      raise Informative, "Unsupported options `#{options}` for " \
         | 
| 242 | 
            -
                        "target `#{name} | 
| 398 | 
            +
                        "target `#{name}`."
         | 
| 243 399 | 
             
                    end
         | 
| 244 400 |  | 
| 245 401 | 
             
                    parent = current_target_definition
         | 
| 246 402 | 
             
                    definition = TargetDefinition.new(name, parent)
         | 
| 247 | 
            -
                    definition.exclusive = true if options[:exclusive]
         | 
| 248 403 | 
             
                    self.current_target_definition = definition
         | 
| 249 | 
            -
                    yield
         | 
| 404 | 
            +
                    yield if block_given?
         | 
| 250 405 | 
             
                  ensure
         | 
| 251 406 | 
             
                    self.current_target_definition = parent
         | 
| 252 407 | 
             
                  end
         | 
| 253 408 |  | 
| 409 | 
            +
                  # Adds a script phase to be integrated with this target. A script phase can be used to execute an arbitrary
         | 
| 410 | 
            +
                  # script that can use all Xcode environment variables during execution. A target may include multiple script
         | 
| 411 | 
            +
                  # phases which they will be added in the order they were declared. Deleting a script phase will effectively remove
         | 
| 412 | 
            +
                  # it from the target if it has been added previously.
         | 
| 413 | 
            +
                  #
         | 
| 414 | 
            +
                  # @example
         | 
| 415 | 
            +
                  #   script_phase :name => 'HelloWorldScript', :script => 'echo "Hello World"'
         | 
| 416 | 
            +
                  #
         | 
| 417 | 
            +
                  # @example
         | 
| 418 | 
            +
                  #   script_phase :name => 'HelloWorldScript', :script => 'puts "Hello World"', :shell_path => '/usr/bin/ruby'
         | 
| 419 | 
            +
                  #
         | 
| 420 | 
            +
                  # @param    [Hash] options
         | 
| 421 | 
            +
                  #           the options for this script phase.
         | 
| 422 | 
            +
                  #
         | 
| 423 | 
            +
                  # @option   options [String] :name
         | 
| 424 | 
            +
                  #           the name of the script phase. This option is required.
         | 
| 425 | 
            +
                  #
         | 
| 426 | 
            +
                  # @option   options [String] :script
         | 
| 427 | 
            +
                  #           the body of the script to execute. This option is required.
         | 
| 428 | 
            +
                  #
         | 
| 429 | 
            +
                  # @option   options [String] :shell_path
         | 
| 430 | 
            +
                  #           the shell path to use for this script phase, for example `/usr/bin/ruby` to use Ruby for this phase.
         | 
| 431 | 
            +
                  #
         | 
| 432 | 
            +
                  # @option   options [Array<String>] :input_files
         | 
| 433 | 
            +
                  #           the input paths to use for this script phase. This is used by Xcode to determine whether to re-execute
         | 
| 434 | 
            +
                  #           this script phase if the input paths have changed or not.
         | 
| 435 | 
            +
                  #
         | 
| 436 | 
            +
                  # @option   options [Array<String>] :output_files
         | 
| 437 | 
            +
                  #           the output paths to use for this script phase. This is used by Xcode to avoid re-executing this script
         | 
| 438 | 
            +
                  #           phase if none of the output paths have changed.
         | 
| 439 | 
            +
                  #
         | 
| 440 | 
            +
                  # @option   options [Array<String>] :input_file_lists
         | 
| 441 | 
            +
                  #           the input file lists to use for this script phase. This is used by Xcode to determine whether to
         | 
| 442 | 
            +
                  #           re-execute this script phase if the input paths have changed or not.
         | 
| 443 | 
            +
                  #
         | 
| 444 | 
            +
                  # @option   options [Array<String>] :output_file_lists
         | 
| 445 | 
            +
                  #           the output file lists to use for this script phase. This is used by Xcode to avoid re-executing this
         | 
| 446 | 
            +
                  #           script phase if none of the output paths have changed.
         | 
| 447 | 
            +
                  #
         | 
| 448 | 
            +
                  # @option   options [Boolean] :show_env_vars_in_log
         | 
| 449 | 
            +
                  #           whether this script phase should output the environment variables during execution.
         | 
| 450 | 
            +
                  #
         | 
| 451 | 
            +
                  # @option   options [Symbol] :execution_position
         | 
| 452 | 
            +
                  #           specifies the position of which this script phase should be executed. The currently supported values are:
         | 
| 453 | 
            +
                  #           `:before_compile`, `:after_compile` and `:any` which is the default.
         | 
| 454 | 
            +
                  #
         | 
| 455 | 
            +
                  # @option   options [String] :dependency_file
         | 
| 456 | 
            +
                  #           specifies the dependency file to use for this script phase.
         | 
| 457 | 
            +
                  #
         | 
| 458 | 
            +
                  # @option   options [String] :always_out_of_date
         | 
| 459 | 
            +
                  #           specifies whether or not this run script will be forced to
         | 
| 460 | 
            +
                  #           run even on incremental builds
         | 
| 461 | 
            +
                  #
         | 
| 462 | 
            +
                  # @return   [void]
         | 
| 463 | 
            +
                  #
         | 
| 464 | 
            +
                  def script_phase(options)
         | 
| 465 | 
            +
                    raise Informative, 'Script phases can only be added within target definitions.' if current_target_definition.root?
         | 
| 466 | 
            +
                    raise Informative, 'Script phases cannot be added to abstract targets.' if current_target_definition.abstract?
         | 
| 467 | 
            +
                    current_target_definition.store_script_phase(options)
         | 
| 468 | 
            +
                  end
         | 
| 469 | 
            +
             | 
| 470 | 
            +
                  # Defines a new abstract target that can be used for convenient
         | 
| 471 | 
            +
                  # target dependency inheritance.
         | 
| 472 | 
            +
                  #
         | 
| 473 | 
            +
                  # @param    [Symbol, String] name
         | 
| 474 | 
            +
                  #           the name of the target.
         | 
| 475 | 
            +
                  #
         | 
| 476 | 
            +
                  # @example  Defining an abstract target
         | 
| 477 | 
            +
                  #
         | 
| 478 | 
            +
                  #           abstract_target 'Networking' do
         | 
| 479 | 
            +
                  #             pod 'AlamoFire'
         | 
| 480 | 
            +
                  #
         | 
| 481 | 
            +
                  #             target 'Networking App 1'
         | 
| 482 | 
            +
                  #             target 'Networking App 2'
         | 
| 483 | 
            +
                  #           end
         | 
| 484 | 
            +
                  #
         | 
| 485 | 
            +
                  # @example  Defining an abstract_target wrapping Pods to multiple targets
         | 
| 486 | 
            +
                  #
         | 
| 487 | 
            +
                  #           # Note: There are no targets called "Shows" in any of this workspace's Xcode projects
         | 
| 488 | 
            +
                  #           abstract_target 'Shows' do
         | 
| 489 | 
            +
                  #             pod 'ShowsKit'
         | 
| 490 | 
            +
                  #
         | 
| 491 | 
            +
                  #             # The target ShowsiOS has its own copy of ShowsKit (inherited) + ShowWebAuth (added here)
         | 
| 492 | 
            +
                  #             target 'ShowsiOS' do
         | 
| 493 | 
            +
                  #               pod 'ShowWebAuth'
         | 
| 494 | 
            +
                  #             end
         | 
| 495 | 
            +
                  #
         | 
| 496 | 
            +
                  #             # The target ShowsTV has its own copy of ShowsKit (inherited) + ShowTVAuth (added here)
         | 
| 497 | 
            +
                  #             target 'ShowsTV' do
         | 
| 498 | 
            +
                  #               pod 'ShowTVAuth'
         | 
| 499 | 
            +
                  #             end
         | 
| 500 | 
            +
                  #
         | 
| 501 | 
            +
                  #             # Our tests target has its own copy of
         | 
| 502 | 
            +
                  #             # our testing frameworks, and has access
         | 
| 503 | 
            +
                  #             # to ShowsKit as well because it is
         | 
| 504 | 
            +
                  #             # a child of the abstract target 'Shows'
         | 
| 505 | 
            +
                  #
         | 
| 506 | 
            +
                  #             target 'ShowsTests' do
         | 
| 507 | 
            +
                  #               inherit! :search_paths
         | 
| 508 | 
            +
                  #               pod 'Specta'
         | 
| 509 | 
            +
                  #               pod 'Expecta'
         | 
| 510 | 
            +
                  #             end
         | 
| 511 | 
            +
                  #           end
         | 
| 512 | 
            +
                  #
         | 
| 513 | 
            +
                  # @return   [void]
         | 
| 514 | 
            +
                  #
         | 
| 515 | 
            +
                  def abstract_target(name)
         | 
| 516 | 
            +
                    target(name) do
         | 
| 517 | 
            +
                      abstract!
         | 
| 518 | 
            +
                      yield if block_given?
         | 
| 519 | 
            +
                    end
         | 
| 520 | 
            +
                  end
         | 
| 521 | 
            +
             | 
| 522 | 
            +
                  # Denotes that the current target is abstract, and thus will not directly
         | 
| 523 | 
            +
                  # link against an Xcode target.
         | 
| 524 | 
            +
                  #
         | 
| 525 | 
            +
                  # @return [void]
         | 
| 526 | 
            +
                  #
         | 
| 527 | 
            +
                  def abstract!(abstract = true)
         | 
| 528 | 
            +
                    current_target_definition.abstract = abstract
         | 
| 529 | 
            +
                  end
         | 
| 530 | 
            +
             | 
| 531 | 
            +
                  # Sets the inheritance mode for the current target.
         | 
| 532 | 
            +
                  #
         | 
| 533 | 
            +
                  # @param   [Symbol] inheritance
         | 
| 534 | 
            +
                  #          the inheritance mode to set.
         | 
| 535 | 
            +
                  #
         | 
| 536 | 
            +
                  #          **Available Modes:**
         | 
| 537 | 
            +
                  #          + `:complete` The target inherits all
         | 
| 538 | 
            +
                  #          behaviour from the parent.
         | 
| 539 | 
            +
                  #          + `:none` The target inherits none of
         | 
| 540 | 
            +
                  #          the behaviour from the parent.
         | 
| 541 | 
            +
                  #          + `:search_paths` The target inherits
         | 
| 542 | 
            +
                  #          the search paths of the parent only.
         | 
| 543 | 
            +
                  #
         | 
| 544 | 
            +
                  #
         | 
| 545 | 
            +
                  # @example Inheriting only search paths
         | 
| 546 | 
            +
                  #
         | 
| 547 | 
            +
                  #          target 'App' do
         | 
| 548 | 
            +
                  #            target 'AppTests' do
         | 
| 549 | 
            +
                  #              inherit! :search_paths
         | 
| 550 | 
            +
                  #            end
         | 
| 551 | 
            +
                  #          end
         | 
| 552 | 
            +
                  #
         | 
| 553 | 
            +
                  # @return  [void]
         | 
| 554 | 
            +
                  #
         | 
| 555 | 
            +
                  def inherit!(inheritance)
         | 
| 556 | 
            +
                    current_target_definition.inheritance = inheritance
         | 
| 557 | 
            +
                  end
         | 
| 558 | 
            +
             | 
| 254 559 | 
             
                  #-----------------------------------------------------------------------#
         | 
| 255 560 |  | 
| 256 561 | 
             
                  # @!group Target configuration
         | 
| 257 | 
            -
                  #   These settings are used to control the | 
| 562 | 
            +
                  #   These settings are used to control the CocoaPods generated project.
         | 
| 258 563 | 
             
                  #
         | 
| 259 564 | 
             
                  #   This starts out simply with stating what `platform` you are working
         | 
| 260 565 | 
             
                  #   on. `xcodeproj` allows you to state specifically which project to
         | 
| @@ -262,17 +567,18 @@ module Pod | |
| 262 567 |  | 
| 263 568 | 
             
                  #-----------------------------------------------------------------------#
         | 
| 264 569 |  | 
| 265 | 
            -
                  # Specifies the platform for which a static library should be  | 
| 570 | 
            +
                  # Specifies the platform for which a static library should be built.
         | 
| 266 571 | 
             
                  #
         | 
| 267 572 | 
             
                  # CocoaPods provides a default deployment target if one is not specified.
         | 
| 268 | 
            -
                  # The current default values are `4.3` for iOS  | 
| 573 | 
            +
                  # The current default values are `4.3` for iOS, `10.6` for OS X, `9.0` for tvOS,
         | 
| 574 | 
            +
                  # `1.0` for visionOS and `2.0` for watchOS.
         | 
| 269 575 | 
             
                  #
         | 
| 270 576 | 
             
                  # If the deployment target requires it (iOS < `4.3`), `armv6`
         | 
| 271 577 | 
             
                  # architecture will be added to `ARCHS`.
         | 
| 272 578 | 
             
                  #
         | 
| 273 579 | 
             
                  # @param    [Symbol] name
         | 
| 274 | 
            -
                  #           the name of platform, can be either `:osx` for OS X  | 
| 275 | 
            -
                  #           for iOS.
         | 
| 580 | 
            +
                  #           the name of platform, can be either `:osx` for OS X, `:ios`
         | 
| 581 | 
            +
                  #           for iOS, `:tvos` for tvOS, `:visionos` for visionOS, or `:watchos` for watchOS.
         | 
| 276 582 | 
             
                  #
         | 
| 277 583 | 
             
                  # @param    [String, Version] target
         | 
| 278 584 | 
             
                  #           The optional deployment.  If not provided a default value
         | 
| @@ -280,7 +586,7 @@ module Pod | |
| 280 586 | 
             
                  #
         | 
| 281 587 | 
             
                  # @example  Specifying the platform
         | 
| 282 588 | 
             
                  #
         | 
| 283 | 
            -
                  #           platform :ios,  | 
| 589 | 
            +
                  #           platform :ios, '4.0'
         | 
| 284 590 | 
             
                  #           platform :ios
         | 
| 285 591 | 
             
                  #
         | 
| 286 592 | 
             
                  # @return   [void]
         | 
| @@ -288,7 +594,7 @@ module Pod | |
| 288 594 | 
             
                  def platform(name, target = nil)
         | 
| 289 595 | 
             
                    # Support for deprecated options parameter
         | 
| 290 596 | 
             
                    target = target[:deployment_target] if target.is_a?(Hash)
         | 
| 291 | 
            -
                    current_target_definition.set_platform(name, target)
         | 
| 597 | 
            +
                    current_target_definition.set_platform!(name, target)
         | 
| 292 598 | 
             
                  end
         | 
| 293 599 |  | 
| 294 600 | 
             
                  # Specifies the Xcode project that contains the target that the Pods
         | 
| @@ -296,13 +602,12 @@ module Pod | |
| 296 602 | 
             
                  #
         | 
| 297 603 | 
             
                  # -----
         | 
| 298 604 | 
             
                  #
         | 
| 299 | 
            -
                  # If  | 
| 300 | 
            -
                  #  | 
| 301 | 
            -
                  #  | 
| 302 | 
            -
                  # directory as the Podfile then that project will be used.
         | 
| 605 | 
            +
                  # If none of the target definitions specify an explicit project
         | 
| 606 | 
            +
                  # and there is only **one** project in the same directory as the Podfile
         | 
| 607 | 
            +
                  # then that project will be used.
         | 
| 303 608 | 
             
                  #
         | 
| 304 609 | 
             
                  # It is possible also to specify whether the build settings of your
         | 
| 305 | 
            -
                  # custom build configurations should be  | 
| 610 | 
            +
                  # custom build configurations should be modelled after the release or
         | 
| 306 611 | 
             
                  # the debug presets. To do so you need to specify a hash where the name
         | 
| 307 612 | 
             
                  # of each build configuration is associated to either `:release` or
         | 
| 308 613 | 
             
                  # `:debug`.
         | 
| @@ -320,51 +625,53 @@ module Pod | |
| 320 625 | 
             
                  #
         | 
| 321 626 | 
             
                  # @example  Specifying the user project
         | 
| 322 627 | 
             
                  #
         | 
| 323 | 
            -
                  #           #  | 
| 324 | 
            -
                  #            | 
| 325 | 
            -
                  # | 
| 628 | 
            +
                  #           # This Target can be found in a Xcode project called `FastGPS`
         | 
| 629 | 
            +
                  #           target 'MyGPSApp' do
         | 
| 630 | 
            +
                  #             project 'FastGPS'
         | 
| 631 | 
            +
                  #             ...
         | 
| 632 | 
            +
                  #           end
         | 
| 326 633 | 
             
                  #
         | 
| 327 | 
            -
                  #            | 
| 328 | 
            -
                  # | 
| 329 | 
            -
                  #              | 
| 634 | 
            +
                  #           # Same Podfile, multiple Xcodeprojects
         | 
| 635 | 
            +
                  #           target 'MyNotesApp' do
         | 
| 636 | 
            +
                  #             project 'FastNotes'
         | 
| 637 | 
            +
                  #             ...
         | 
| 330 638 | 
             
                  #           end
         | 
| 331 639 | 
             
                  #
         | 
| 332 640 | 
             
                  # @example  Using custom build configurations
         | 
| 333 641 | 
             
                  #
         | 
| 334 | 
            -
                  #            | 
| 335 | 
            -
                  #
         | 
| 642 | 
            +
                  #           project 'TestProject', 'Mac App Store' => :release, 'Test' => :debug
         | 
| 336 643 | 
             
                  #
         | 
| 337 644 | 
             
                  # @return   [void]
         | 
| 338 645 | 
             
                  #
         | 
| 339 | 
            -
                  def  | 
| 646 | 
            +
                  def project(path, build_configurations = {})
         | 
| 340 647 | 
             
                    current_target_definition.user_project_path = path
         | 
| 341 648 | 
             
                    current_target_definition.build_configurations = build_configurations
         | 
| 342 649 | 
             
                  end
         | 
| 343 650 |  | 
| 344 | 
            -
                  #  | 
| 345 | 
            -
                  # should be linked in.
         | 
| 346 | 
            -
                  #
         | 
| 347 | 
            -
                  # -----
         | 
| 348 | 
            -
                  #
         | 
| 349 | 
            -
                  # If no explicit target is specified, then the Pods target will be linked
         | 
| 350 | 
            -
                  # with the first target in your project. So if you only have one target
         | 
| 351 | 
            -
                  # you do not need to specify the target to link with.
         | 
| 651 | 
            +
                  # @!visibility private
         | 
| 352 652 | 
             
                  #
         | 
| 353 | 
            -
                  # @ | 
| 354 | 
            -
                  #           the target or the targets to link with.
         | 
| 653 | 
            +
                  # @deprecated #{xcodeproj} was renamed to #{project}.
         | 
| 355 654 | 
             
                  #
         | 
| 356 | 
            -
                  #  | 
| 655 | 
            +
                  # `xcodeproj` is deprecated in [1.0](http://blog.cocoapods.org/CocoaPods-1.0/) and has been renamed to `project`.
         | 
| 656 | 
            +
                  # For pre-1.0 versions use `xcodeproj`.
         | 
| 357 657 | 
             
                  #
         | 
| 358 | 
            -
                   | 
| 359 | 
            -
             | 
| 360 | 
            -
             | 
| 658 | 
            +
                  def xcodeproj(*args)
         | 
| 659 | 
            +
                    CoreUI.warn '`xcodeproj` was renamed to `project`. Please update your Podfile accordingly.'
         | 
| 660 | 
            +
                    project(*args)
         | 
| 661 | 
            +
                  end
         | 
| 662 | 
            +
             | 
| 663 | 
            +
                  # @!visibility private
         | 
| 361 664 | 
             
                  #
         | 
| 362 | 
            -
                  # | 
| 665 | 
            +
                  # @deprecated linking a single target with multiple Xcode targets is no
         | 
| 666 | 
            +
                  #             longer supported. Use an {#abstract_target} and target
         | 
| 667 | 
            +
                  #             inheritance instead.
         | 
| 363 668 | 
             
                  #
         | 
| 364 | 
            -
                  #  | 
| 669 | 
            +
                  # `link_with` is deprecated in [1.0](http://blog.cocoapods.org/CocoaPods-1.0/) in
         | 
| 670 | 
            +
                  # favour of `abstract_target` and target inheritance instead.
         | 
| 365 671 | 
             
                  #
         | 
| 366 | 
            -
                  def link_with(* | 
| 367 | 
            -
                     | 
| 672 | 
            +
                  def link_with(*)
         | 
| 673 | 
            +
                    raise Informative, 'The specification of `link_with` in the Podfile ' \
         | 
| 674 | 
            +
                      'is now unsupported, please use target blocks instead.'
         | 
| 368 675 | 
             
                  end
         | 
| 369 676 |  | 
| 370 677 | 
             
                  # Inhibits **all** the warnings from the CocoaPods libraries.
         | 
| @@ -378,10 +685,103 @@ module Pod | |
| 378 685 | 
             
                  #
         | 
| 379 686 | 
             
                  #     pod 'SSZipArchive', :inhibit_warnings => true
         | 
| 380 687 | 
             
                  #
         | 
| 688 | 
            +
                  # Additionally, when you use `inhibit_all_warnings!` attribute,
         | 
| 689 | 
            +
                  # you can exclude a particular Pod from being inhibited using the following:
         | 
| 690 | 
            +
                  #
         | 
| 691 | 
            +
                  #     pod 'SSZipArchive', :inhibit_warnings => false
         | 
| 692 | 
            +
                  #
         | 
| 381 693 | 
             
                  def inhibit_all_warnings!
         | 
| 382 694 | 
             
                    current_target_definition.inhibit_all_warnings = true
         | 
| 383 695 | 
             
                  end
         | 
| 384 696 |  | 
| 697 | 
            +
                  # Use modular headers for all CocoaPods static libraries.
         | 
| 698 | 
            +
                  #
         | 
| 699 | 
            +
                  # ------
         | 
| 700 | 
            +
                  #
         | 
| 701 | 
            +
                  # This attribute is inherited by child target definitions.
         | 
| 702 | 
            +
                  #
         | 
| 703 | 
            +
                  # If you would like to use modular headers per Pod you can use the
         | 
| 704 | 
            +
                  # following syntax:
         | 
| 705 | 
            +
                  #
         | 
| 706 | 
            +
                  #     pod 'SSZipArchive', :modular_headers => true
         | 
| 707 | 
            +
                  #
         | 
| 708 | 
            +
                  # Additionally, when you use the `use_modular_headers!` attribute,
         | 
| 709 | 
            +
                  # you can exclude a particular Pod from modular headers using the following:
         | 
| 710 | 
            +
                  #
         | 
| 711 | 
            +
                  #     pod 'SSZipArchive', :modular_headers => false
         | 
| 712 | 
            +
                  #
         | 
| 713 | 
            +
                  def use_modular_headers!
         | 
| 714 | 
            +
                    current_target_definition.use_modular_headers_for_all_pods = true
         | 
| 715 | 
            +
                  end
         | 
| 716 | 
            +
             | 
| 717 | 
            +
                  # Use frameworks instead of static libraries for Pods. When using frameworks, you may also specify the `:linkage`
         | 
| 718 | 
            +
                  # style to use, either `:static` or `:dynamic`.
         | 
| 719 | 
            +
                  #
         | 
| 720 | 
            +
                  # ------
         | 
| 721 | 
            +
                  #
         | 
| 722 | 
            +
                  # This attribute is inherited by child target definitions.
         | 
| 723 | 
            +
                  #
         | 
| 724 | 
            +
                  # @param [Boolean, Hash] option
         | 
| 725 | 
            +
                  #        The option to use for configuring packaging and linkage style.
         | 
| 726 | 
            +
                  #
         | 
| 727 | 
            +
                  # @example
         | 
| 728 | 
            +
                  #
         | 
| 729 | 
            +
                  #   target 'MyApp' do
         | 
| 730 | 
            +
                  #     use_frameworks!
         | 
| 731 | 
            +
                  #     pod 'AFNetworking', '~> 1.0'
         | 
| 732 | 
            +
                  #   end
         | 
| 733 | 
            +
                  #
         | 
| 734 | 
            +
                  # @example
         | 
| 735 | 
            +
                  #
         | 
| 736 | 
            +
                  #   target 'MyApp' do
         | 
| 737 | 
            +
                  #     use_frameworks! :linkage => :dynamic
         | 
| 738 | 
            +
                  #     pod 'AFNetworking', '~> 1.0'
         | 
| 739 | 
            +
                  #   end
         | 
| 740 | 
            +
                  #
         | 
| 741 | 
            +
                  #   target 'ZipApp' do
         | 
| 742 | 
            +
                  #     use_frameworks! :linkage => :static
         | 
| 743 | 
            +
                  #     pod 'SSZipArchive'
         | 
| 744 | 
            +
                  #   end
         | 
| 745 | 
            +
                  #
         | 
| 746 | 
            +
                  # @return   [void]
         | 
| 747 | 
            +
                  #
         | 
| 748 | 
            +
                  def use_frameworks!(option = true)
         | 
| 749 | 
            +
                    current_target_definition.use_frameworks!(option)
         | 
| 750 | 
            +
                  end
         | 
| 751 | 
            +
             | 
| 752 | 
            +
                  # Specifies the Swift version requirements this target definition supports.
         | 
| 753 | 
            +
                  #
         | 
| 754 | 
            +
                  # **Note** These requirements are inherited from the parent, if specified and if none
         | 
| 755 | 
            +
                  # are specified at the root level then all versions are considered to be supported.
         | 
| 756 | 
            +
                  #
         | 
| 757 | 
            +
                  # @param   [String, Version, Array<String>, Array<Version>] requirements
         | 
| 758 | 
            +
                  #          The set of requirements this target supports.
         | 
| 759 | 
            +
                  #
         | 
| 760 | 
            +
                  # @example
         | 
| 761 | 
            +
                  #
         | 
| 762 | 
            +
                  #   target 'MyApp' do
         | 
| 763 | 
            +
                  #     supports_swift_versions '>= 3.0', '< 4.0'
         | 
| 764 | 
            +
                  #     pod 'AFNetworking', '~> 1.0'
         | 
| 765 | 
            +
                  #   end
         | 
| 766 | 
            +
                  #
         | 
| 767 | 
            +
                  # @example
         | 
| 768 | 
            +
                  #
         | 
| 769 | 
            +
                  #   supports_swift_versions '>= 3.0', '< 4.0'
         | 
| 770 | 
            +
                  #
         | 
| 771 | 
            +
                  #   target 'MyApp' do
         | 
| 772 | 
            +
                  #     pod 'AFNetworking', '~> 1.0'
         | 
| 773 | 
            +
                  #   end
         | 
| 774 | 
            +
                  #
         | 
| 775 | 
            +
                  #   target 'ZipApp' do
         | 
| 776 | 
            +
                  #     pod 'SSZipArchive'
         | 
| 777 | 
            +
                  #   end
         | 
| 778 | 
            +
                  #
         | 
| 779 | 
            +
                  # @return   [void]
         | 
| 780 | 
            +
                  #
         | 
| 781 | 
            +
                  def supports_swift_versions(*requirements)
         | 
| 782 | 
            +
                    current_target_definition.store_swift_version_requirements(*requirements)
         | 
| 783 | 
            +
                  end
         | 
| 784 | 
            +
             | 
| 385 785 | 
             
                  #-----------------------------------------------------------------------#
         | 
| 386 786 |  | 
| 387 787 | 
             
                  # @!group Workspace
         | 
| @@ -448,6 +848,44 @@ module Pod | |
| 448 848 |  | 
| 449 849 | 
             
                  #-----------------------------------------------------------------------#
         | 
| 450 850 |  | 
| 851 | 
            +
                  # @!group Sources
         | 
| 852 | 
            +
                  #
         | 
| 853 | 
            +
                  #   The Podfile retrieves specs from a given list of sources (repositories).
         | 
| 854 | 
            +
                  #
         | 
| 855 | 
            +
                  #   Sources are __global__ and they are not stored per target definition.
         | 
| 856 | 
            +
             | 
| 857 | 
            +
                  #-----------------------------------------------------------------------#
         | 
| 858 | 
            +
             | 
| 859 | 
            +
                  # Specifies the location of specs
         | 
| 860 | 
            +
                  #
         | 
| 861 | 
            +
                  # -----
         | 
| 862 | 
            +
                  #
         | 
| 863 | 
            +
                  # Use this method to specify sources. The order of the sources is
         | 
| 864 | 
            +
                  # relevant. CocoaPods will use the highest version of a Pod of the first
         | 
| 865 | 
            +
                  # source which includes the Pod (regardless whether other sources have a
         | 
| 866 | 
            +
                  # higher version).
         | 
| 867 | 
            +
                  #
         | 
| 868 | 
            +
                  # The official CocoaPods source is implicit.
         | 
| 869 | 
            +
                  # Once you specify another source, then it will need to be included.
         | 
| 870 | 
            +
                  #
         | 
| 871 | 
            +
                  # @param    [String] source
         | 
| 872 | 
            +
                  #           The URL of a specs repository.
         | 
| 873 | 
            +
                  #
         | 
| 874 | 
            +
                  # @example  Specifying to first use the Artsy repository and then the CocoaPods Master Repository
         | 
| 875 | 
            +
                  #
         | 
| 876 | 
            +
                  #           source 'https://github.com/artsy/Specs.git'
         | 
| 877 | 
            +
                  #           source 'https://cdn.cocoapods.org/'
         | 
| 878 | 
            +
                  #
         | 
| 879 | 
            +
                  # @return   [void]
         | 
| 880 | 
            +
                  #
         | 
| 881 | 
            +
                  def source(source)
         | 
| 882 | 
            +
                    hash_sources = get_hash_value('sources') || []
         | 
| 883 | 
            +
                    hash_sources << source
         | 
| 884 | 
            +
                    set_hash_value('sources', hash_sources.uniq)
         | 
| 885 | 
            +
                  end
         | 
| 886 | 
            +
             | 
| 887 | 
            +
                  #-----------------------------------------------------------------------#
         | 
| 888 | 
            +
             | 
| 451 889 | 
             
                  # @!group Hooks
         | 
| 452 890 | 
             
                  #   The Podfile provides hooks that will be called during the
         | 
| 453 891 | 
             
                  #   installation process.
         | 
| @@ -456,16 +894,42 @@ module Pod | |
| 456 894 |  | 
| 457 895 | 
             
                  #-----------------------------------------------------------------------#
         | 
| 458 896 |  | 
| 897 | 
            +
                  # Specifies the plugins that should be used during installation.
         | 
| 898 | 
            +
                  #
         | 
| 899 | 
            +
                  # -----
         | 
| 900 | 
            +
                  #
         | 
| 901 | 
            +
                  # Use this method to specify a plugin that should be used during
         | 
| 902 | 
            +
                  # installation, along with the options that should be passed to the plugin
         | 
| 903 | 
            +
                  # when it is invoked.
         | 
| 904 | 
            +
                  #
         | 
| 905 | 
            +
                  # @param    [String] name
         | 
| 906 | 
            +
                  #           The name of the plugin.
         | 
| 907 | 
            +
                  #
         | 
| 908 | 
            +
                  # @param    [Hash] options
         | 
| 909 | 
            +
                  #           The optional options that should be passed to the plugin when
         | 
| 910 | 
            +
                  #           its hooks are invoked.
         | 
| 911 | 
            +
                  #
         | 
| 912 | 
            +
                  # @example  Specifying to use the `slather` and `cocoapods-keys` plugins.
         | 
| 913 | 
            +
                  #
         | 
| 914 | 
            +
                  #           plugin 'cocoapods-keys', :keyring => 'Eidolon'
         | 
| 915 | 
            +
                  #           plugin 'slather'
         | 
| 916 | 
            +
                  #
         | 
| 917 | 
            +
                  # @return   [void]
         | 
| 918 | 
            +
                  #
         | 
| 919 | 
            +
                  def plugin(name, options = {})
         | 
| 920 | 
            +
                    hash_plugins = get_hash_value('plugins') || {}
         | 
| 921 | 
            +
                    (hash_plugins[name] ||= {}).merge!(options.deep_stringify_keys)
         | 
| 922 | 
            +
                    set_hash_value('plugins', hash_plugins)
         | 
| 923 | 
            +
                  end
         | 
| 924 | 
            +
             | 
| 459 925 | 
             
                  # This hook allows you to make any changes to the Pods after they have
         | 
| 460 926 | 
             
                  # been downloaded but before they are installed.
         | 
| 461 927 | 
             
                  #
         | 
| 462 | 
            -
                  # It receives the
         | 
| 463 | 
            -
                  # [`Pod::Hooks::InstallerRepresentation`](http://docs.cocoapods.org/cocoapods/pod/hooks/installerrepresentation/)
         | 
| 464 | 
            -
                  # as its only argument.
         | 
| 928 | 
            +
                  # It receives the [Pod::Installer] as its only argument.
         | 
| 465 929 | 
             
                  #
         | 
| 466 | 
            -
                  # @example  Defining a pre | 
| 930 | 
            +
                  # @example  Defining a pre-install hook in a Podfile.
         | 
| 467 931 | 
             
                  #
         | 
| 468 | 
            -
                  #   pre_install do | | 
| 932 | 
            +
                  #   pre_install do |installer|
         | 
| 469 933 | 
             
                  #     # Do something fancy!
         | 
| 470 934 | 
             
                  #   end
         | 
| 471 935 | 
             
                  #
         | 
| @@ -474,18 +938,34 @@ module Pod | |
| 474 938 | 
             
                    @pre_install_callback = block
         | 
| 475 939 | 
             
                  end
         | 
| 476 940 |  | 
| 941 | 
            +
                  # This hook allows you to make changes before the project is written
         | 
| 942 | 
            +
                  # to disk.
         | 
| 943 | 
            +
                  #
         | 
| 944 | 
            +
                  # It receives the [Pod::Installer] as its only argument.
         | 
| 945 | 
            +
                  #
         | 
| 946 | 
            +
                  # @example  Customizing the dependencies before integration
         | 
| 947 | 
            +
                  #
         | 
| 948 | 
            +
                  #   pre_integrate do |installer|
         | 
| 949 | 
            +
                  #     # perform some changes on dependencies
         | 
| 950 | 
            +
                  #   end
         | 
| 951 | 
            +
                  #
         | 
| 952 | 
            +
                  # @return   [void]
         | 
| 953 | 
            +
                  #
         | 
| 954 | 
            +
                  def pre_integrate(&block)
         | 
| 955 | 
            +
                    raise Informative, 'Specifying multiple `pre_integrate` hooks is unsupported.' if @pre_integrate_callback
         | 
| 956 | 
            +
                    @pre_integrate_callback = block
         | 
| 957 | 
            +
                  end
         | 
| 958 | 
            +
             | 
| 477 959 | 
             
                  # This hook allows you to make any last changes to the generated Xcode
         | 
| 478 960 | 
             
                  # project before it is written to disk, or any other tasks you might want
         | 
| 479 961 | 
             
                  # to perform.
         | 
| 480 962 | 
             
                  #
         | 
| 481 | 
            -
                  # It receives the
         | 
| 482 | 
            -
                  # [`Pod::Hooks::InstallerRepresentation`](http://docs.cocoapods.org/cocoapods/pod/hooks/installerrepresentation/)
         | 
| 483 | 
            -
                  # as its only argument.
         | 
| 963 | 
            +
                  # It receives the [Pod::Installer] as its only argument.
         | 
| 484 964 | 
             
                  #
         | 
| 485 | 
            -
                  # @example  Customizing the  | 
| 965 | 
            +
                  # @example  Customizing the build settings of all targets
         | 
| 486 966 | 
             
                  #
         | 
| 487 | 
            -
                  #   post_install do | | 
| 488 | 
            -
                  #      | 
| 967 | 
            +
                  #   post_install do |installer|
         | 
| 968 | 
            +
                  #     installer.pods_project.targets.each do |target|
         | 
| 489 969 | 
             
                  #       target.build_configurations.each do |config|
         | 
| 490 970 | 
             
                  #         config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported'
         | 
| 491 971 | 
             
                  #       end
         | 
| @@ -495,8 +975,27 @@ module Pod | |
| 495 975 | 
             
                  # @return   [void]
         | 
| 496 976 | 
             
                  #
         | 
| 497 977 | 
             
                  def post_install(&block)
         | 
| 978 | 
            +
                    raise Informative, 'Specifying multiple `post_install` hooks is unsupported.' if @post_install_callback
         | 
| 498 979 | 
             
                    @post_install_callback = block
         | 
| 499 980 | 
             
                  end
         | 
| 981 | 
            +
             | 
| 982 | 
            +
                  # This hook allows you to make changes after the project is written
         | 
| 983 | 
            +
                  # to disk.
         | 
| 984 | 
            +
                  #
         | 
| 985 | 
            +
                  # It receives the [Pod::Installer] as its only argument.
         | 
| 986 | 
            +
                  #
         | 
| 987 | 
            +
                  # @example  Customizing the build settings of all targets
         | 
| 988 | 
            +
                  #
         | 
| 989 | 
            +
                  #   post_integrate do |installer|
         | 
| 990 | 
            +
                  #     # some change after project write to disk
         | 
| 991 | 
            +
                  #   end
         | 
| 992 | 
            +
                  #
         | 
| 993 | 
            +
                  # @return   [void]
         | 
| 994 | 
            +
                  #
         | 
| 995 | 
            +
                  def post_integrate(&block)
         | 
| 996 | 
            +
                    raise Informative, 'Specifying multiple `post_integrate` hooks is unsupported.' if @post_integrate_callback
         | 
| 997 | 
            +
                    @post_integrate_callback = block
         | 
| 998 | 
            +
                  end
         | 
| 500 999 | 
             
                end
         | 
| 501 1000 | 
             
              end
         | 
| 502 1001 | 
             
            end
         |