blob: ca6c31f23226ef0d82a51260a962483dade2eaae [file] [log] [blame]
module Pod
class Installer
# Context object designed to be used with the HooksManager which describes
# the context of the installer.
#
class PostInstallHooksContext
# @return [String] The path to the sandbox root (`Pods` directory).
#
attr_accessor :sandbox_root
# @return [Project] The Pods Xcode project.
#
attr_accessor :pods_project
# @return [Sandbox] The Sandbox for the project.
#
attr_accessor :sandbox
# @return [Array<UmbrellaTargetDescription>] The list of
# the CocoaPods umbrella targets generated by the installer.
#
attr_accessor :umbrella_targets
# @return [PostInstallHooksContext] Convenience class generator method
#
# @param [Sandbox] sandbox
# The sandbox
#
# @param [Array<AggregateTarget>] aggregate_targets
# The aggregate targets, which will been presented by an adequate
# {UmbrellaTargetDescription} in the generated context.
#
# @return [HooksContext] Convenience class method to generate the
# static context.
#
def self.generate(sandbox, aggregate_targets)
umbrella_targets_descriptions = []
aggregate_targets.each do |umbrella|
desc = UmbrellaTargetDescription.new
desc.user_project = umbrella.user_project
desc.user_targets = umbrella.user_targets
desc.specs = umbrella.specs
desc.platform_name = umbrella.platform.name
desc.platform_deployment_target = umbrella.platform.deployment_target.to_s
desc.cocoapods_target_label = umbrella.label
umbrella_targets_descriptions << desc
end
result = new
result.sandbox_root = sandbox.root.to_s
result.pods_project = sandbox.project
result.sandbox = sandbox
result.umbrella_targets = umbrella_targets_descriptions
result
end
# Pure data class which describes and umbrella target.
#
class UmbrellaTargetDescription
# @return [Xcodeproj::Project] The user project into which this target
# is integrated.
#
attr_accessor :user_project
# @return [String] The path of the user project
# integrated by this target.
#
def user_project_path
user_project.path if user_project
end
# @return [Array<PBXNativeTarget>]
# The list of user targets integrated by this umbrella target.
#
attr_accessor :user_targets
# @return [Array<String>] The list of the UUIDs of the
# user targets integrated by this umbrella
# target. They can be used to find the
# targets opening the project They can be used
# to find the targets opening the project with
# Xcodeproj.
#
def user_target_uuids
user_targets.map(&:uuid)
end
# @return [Array<Specification>] The list of the
# specifications of the target.
#
attr_accessor :specs
# @return [Symbol] The platform (either `:ios`, `:watchos`, `:tvos`, or `:osx`).
#
attr_accessor :platform_name
# @return [String] The deployment target.
#
attr_accessor :platform_deployment_target
# @return [String] The label for the target.
#
attr_accessor :cocoapods_target_label
end
end
end
end