class Pod::Sandbox
The sandbox provides support for the directory that CocoaPods uses for an installation. In this directory the Pods projects, the support files and the sources of the Pods are stored.
CocoaPods assumes to have control of the sandbox.
Once completed the sandbox will have the following file structure:
Pods | +-- Headers | +-- Private | | +-- [Pod Name] | +-- Public | +-- [Pod Name] | +-- Local Podspecs | +-- External Sources | +-- Normal Sources | +-- Target Support Files | +-- [Target Name] | +-- Pods-acknowledgements.markdown | +-- Pods-acknowledgements.plist | +-- Pods-dummy.m | +-- Pods-prefix.pch | +-- Pods.xcconfig | +-- [Pod Name] | +-- Manifest.lock | +-- Pods.xcodeproj
Attributes
@return [Hash{String=>Hash}] The options necessary to recreate the exact
checkout of a given Pod grouped by its name.
@return [Hash{String=>Pathname}] The path of the Pods' podspecs with a local source
grouped by their root name.
@return [Lockfile] the manifest which contains the information about the
installed pods.
@return [Array<String>] The names of the pods that have been
pre-downloaded from an external source.
@return [Project] the Pods project.
@return [HeadersStore] the header directory for the user targets.
@return [Pathname] the root of the sandbox.
Public Class Methods
Initialize a new instance
@param [String, Pathname] root @see root
# File lib/cocoapods/sandbox.rb, line 57 def initialize(root) FileUtils.mkdir_p(root) @root = Pathname.new(root).realpath @public_headers = HeadersStore.new(self, 'Public', :public) @predownloaded_pods = [] @checkout_sources = {} @development_pods = {} @pods_with_absolute_path = [] @stored_podspecs = {} end
Public Instance Methods
Removes the files of the Pod
with the given name from the sandbox.
@return [void]
# File lib/cocoapods/sandbox.rb, line 87 def clean_pod(name) root_name = Specification.root_name(name) unless local?(root_name) path = pod_dir(name) path.rmtree if path.exist? end podspec_path = specification_path(name) podspec_path.rmtree if podspec_path end
@return [Pathname] The directory where headers are stored.
# File lib/cocoapods/sandbox.rb, line 174 def headers_root root + 'Headers' end
@return [String] a string representation suitable for debugging.
# File lib/cocoapods/sandbox.rb, line 111 def inspect "#<#{self.class}> with root #{root}" end
Returns true if the path as originally specified was absolute.
@param [String] name
@return [Bool] true if originally absolute
# File lib/cocoapods/sandbox.rb, line 168 def local_path_was_absolute?(name) @pods_with_absolute_path.include? name end
@param [String] name
The name of a locally specified Pod
@return [Pathname] Path to the local Podspec of the Pod
# File lib/cocoapods/sandbox.rb, line 397 def local_podspec(name) root_name = Specification.root_name(name) development_pods[root_name] end
@return [Pathname] the path of the manifest.
# File lib/cocoapods/sandbox.rb, line 123 def manifest_path root + 'Manifest.lock' end
Returns the path where the Pod
with the given name is stored, taking into account whether the Pod
is locally sourced.
@param [String] name
The name of the Pod.
@return [Pathname] the path of the Pod
.
# File lib/cocoapods/sandbox.rb, line 153 def pod_dir(name) root_name = Specification.root_name(name) if local?(root_name) Pathname.new(development_pods[root_name].dirname) else sources_root + root_name end end
Checks if a Pod
has been pre-downloaded by the resolver in order to fetch the podspec.
@param [String] name
The name of the Pod.
@return [Bool] Whether the Pod
has been pre-downloaded.
# File lib/cocoapods/sandbox.rb, line 314 def predownloaded?(name) root_name = Specification.root_name(name) predownloaded_pods.include?(root_name) end
Prepares the sandbox for a new installation removing any file that will be regenerated and ensuring that the directories exists.
# File lib/cocoapods/sandbox.rb, line 100 def prepare FileUtils.rm_rf(headers_root) FileUtils.mkdir_p(headers_root) FileUtils.mkdir_p(sources_root) FileUtils.mkdir_p(specifications_root) FileUtils.mkdir_p(target_support_files_root) end
@return [Pathname] the path of the Pods project.
# File lib/cocoapods/sandbox.rb, line 129 def project_path root + 'Pods.xcodeproj' end
Removes the checkout source of a Pod
.
@param [String] name
The name of the Pod.
@return [void]
# File lib/cocoapods/sandbox.rb, line 344 def remove_checkout_source(name) root_name = Specification.root_name(name) checkout_sources.delete(root_name) end
@return [Pathname] The directory where the downloaded sources of
the Pods are stored.
# File lib/cocoapods/sandbox.rb, line 181 def sources_root root end
Returns the specification for the Pod
with the given name.
@param [String] name
the name of the Pod for which the specification is requested.
@return [Specification] the specification if the file is found.
# File lib/cocoapods/sandbox.rb, line 212 def specification(name) @stored_podspecs[name] ||= if file = specification_path(name) original_path = development_pods[name] Specification.from_file(original_path || file) end end
Returns the path of the specification for the Pod
with the given name, if one is stored.
@param [String] name
the name of the Pod for which the podspec file is requested.
@return [Pathname] the path or nil. @return [Nil] if the podspec is not stored.
# File lib/cocoapods/sandbox.rb, line 228 def specification_path(name) name = Specification.root_name(name) path = specifications_root + "#{name}.podspec" if path.exist? path else path = specifications_root + "#{name}.podspec.json" if path.exist? path end end end
@return [Pathname] the path for the directory where the
specifications are stored.
# File lib/cocoapods/sandbox.rb, line 188 def specifications_root root + 'Local Podspecs' end
Stores the local path of a Pod
.
@param [String] name
The name of the Pod.
@param [Hash] source
The hash which contains the options as returned by the downloader.
@return [void]
# File lib/cocoapods/sandbox.rb, line 332 def store_checkout_source(name, source) root_name = Specification.root_name(name) checkout_sources[root_name] = source end
Stores the local path of a Pod
.
@param [String] name
The name of the Pod.
@param [Pathname, String] path
The path to the local Podspec
@param [Bool] was_absolute
True if the specified local path was absolute.
@return [void]
# File lib/cocoapods/sandbox.rb, line 369 def store_local_path(name, path, was_absolute = false) root_name = Specification.root_name(name) path = Pathname.new(path) unless path.is_a?(Pathname) development_pods[root_name] = path @pods_with_absolute_path << root_name if was_absolute end
Stores a specification in the `Local Podspecs` folder.
@param [String] name
the name of the pod
@param [String, Pathname, Specification] podspec
The contents of the specification (String) or the path to a podspec file (Pathname).
@return [void]
# File lib/cocoapods/sandbox.rb, line 253 def store_podspec(name, podspec, _external_source = false, json = false) file_name = json ? "#{name}.podspec.json" : "#{name}.podspec" output_path = specifications_root + file_name case podspec when String output_path.open('w') { |f| f.puts(podspec) } when Pathname unless podspec.exist? raise Informative, "No podspec found for `#{name}` in #{podspec}" end spec = Specification.from_file(podspec) FileUtils.copy(podspec, output_path) when Specification raise ArgumentError, 'can only store Specification objects as json' unless json output_path.open('w') { |f| f.puts(podspec.to_pretty_json) } spec = podspec.dup else raise ArgumentError, "Unknown type for podspec: #{podspec.inspect}" end spec ||= Specification.from_file(output_path) spec.defined_in_file ||= output_path unless spec.name == name raise Informative, "The name of the given podspec `#{spec.name}` doesn't match the expected one `#{name}`" end @stored_podspecs[spec.name] = spec end
Marks a Pod
as pre-downloaded
@param [String] name
The name of the Pod.
@return [void]
# File lib/cocoapods/sandbox.rb, line 296 def store_pre_downloaded_pod(name) root_name = Specification.root_name(name) predownloaded_pods << root_name end
Returns the path for the directory where the support files of a target are stored.
@param [String] name
The name of the target.
@return [Pathname] the path of the support files.
# File lib/cocoapods/sandbox.rb, line 141 def target_support_files_dir(name) target_support_files_root + name end
@return [Pathname] The directory where the files generated by
CocoaPods to support the umbrella targets are stored.
# File lib/cocoapods/sandbox.rb, line 195 def target_support_files_root root + 'Target Support Files' end