Class: Pod::Installer::Xcode::MultiPodsProjectGenerator
- Inherits:
-
PodsProjectGenerator
- Object
- PodsProjectGenerator
- Pod::Installer::Xcode::MultiPodsProjectGenerator
- Defined in:
- lib/cocoapods/installer/xcode/multi_pods_project_generator.rb
Overview
The MultiPodsProjectGenerator handles generation of the 'Pods/Pods.xcodeproj' and Xcode projects for every PodTarget. All Pod Target projects are nested under the 'Pods.xcodeproj'.
Instance Attribute Summary
Attributes inherited from PodsProjectGenerator
#aggregate_targets, #build_configurations, #config, #installation_options, #metadata_cache, #pod_targets, #project_object_version, #sandbox
Instance Method Summary collapse
- #create_container_project(aggregate_targets, path) ⇒ Object private
- #create_pods_project(pod_targets, path, parent_project) ⇒ Object private
-
#generate! ⇒ PodsProjectGeneratorResult
Generates
Pods/Pods.xcodeproj
and all pod target subprojects. - #install_aggregate_targets_into_project(project, aggregate_targets) ⇒ Object private
- #install_all_pod_targets(projects_by_pod_targets) ⇒ Object private
- #pod_name_from_grouping(pod_targets) ⇒ Object private
Methods inherited from PodsProjectGenerator
#add_system_framework_dependencies, #add_system_frameworks_to_native_target, #configure_schemes, #configure_schemes_for_pod_target, #initialize, #install_aggregate_targets, #install_file_references, #install_pod_targets, #integrate_targets, #set_scheme_build_configurations, #share_scheme_for_development_pod?, #wire_target_dependencies
Constructor Details
This class inherits a constructor from Pod::Installer::Xcode::PodsProjectGenerator
Instance Method Details
#create_container_project(aggregate_targets, path) ⇒ Object (private)
36 37 38 39 40 41 |
# File 'lib/cocoapods/installer/xcode/multi_pods_project_generator.rb', line 36 def create_container_project(aggregate_targets, path) return unless aggregate_targets platforms = aggregate_targets.map(&:platform) ProjectGenerator.new(sandbox, path, [], build_configurations, platforms, project_object_version, config.podfile_path).generate! end |
#create_pods_project(pod_targets, path, parent_project) ⇒ Object (private)
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/cocoapods/installer/xcode/multi_pods_project_generator.rb', line 43 def create_pods_project(pod_targets, path, parent_project) platforms = pod_targets.map(&:platform) project = ProjectGenerator.new(sandbox, path, pod_targets, build_configurations, platforms, project_object_version, false, :pod_target_subproject => true).generate! # Instead of saving every subproject to disk, we can optimize this by creating a temporary folder # the file reference can use so that we only have to call `save` once for all projects. project.path.mkpath if parent_project pod_name = pod_name_from_grouping(pod_targets) is_local = sandbox.local?(pod_name) parent_project.add_pod_subproject(project, is_local) end install_file_references(project, pod_targets) project end |
#generate! ⇒ PodsProjectGeneratorResult
Generates Pods/Pods.xcodeproj
and all pod target subprojects.
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/cocoapods/installer/xcode/multi_pods_project_generator.rb', line 12 def generate! # Generate container Pods.xcodeproj. container_project = create_container_project(aggregate_targets, sandbox.project_path) project_paths_by_pod_targets = pod_targets.group_by do |pod_target| sandbox.pod_target_project_path(pod_target.project_name) end projects_by_pod_targets = Hash[project_paths_by_pod_targets.map do |project_path, pod_targets| project = create_pods_project(pod_targets, project_path, container_project) [project, pod_targets] end] # Note: We must call `install_file_references` on all pod targets before installing them. pod_target_installation_results = install_all_pod_targets(projects_by_pod_targets) aggregate_target_installation_results = install_aggregate_targets_into_project(container_project, aggregate_targets) target_installation_results = InstallationResults.new(pod_target_installation_results, aggregate_target_installation_results) integrate_targets(target_installation_results.pod_target_installation_results) wire_target_dependencies(target_installation_results) PodsProjectGeneratorResult.new(container_project, projects_by_pod_targets, target_installation_results) end |
#install_aggregate_targets_into_project(project, aggregate_targets) ⇒ Object (private)
68 69 70 71 |
# File 'lib/cocoapods/installer/xcode/multi_pods_project_generator.rb', line 68 def install_aggregate_targets_into_project(project, aggregate_targets) return {} unless project install_aggregate_targets(project, aggregate_targets) end |
#install_all_pod_targets(projects_by_pod_targets) ⇒ Object (private)
60 61 62 63 64 65 66 |
# File 'lib/cocoapods/installer/xcode/multi_pods_project_generator.rb', line 60 def install_all_pod_targets(projects_by_pod_targets) UI. '- Installing Pod Targets' do projects_by_pod_targets.each_with_object({}) do |(project, pod_targets), target_installation_results| target_installation_results.merge!(install_pod_targets(project, pod_targets)) end end end |
#pod_name_from_grouping(pod_targets) ⇒ Object (private)
73 74 75 76 77 78 |
# File 'lib/cocoapods/installer/xcode/multi_pods_project_generator.rb', line 73 def pod_name_from_grouping(pod_targets) # The presumption here for multi pods project is that we group by `pod_name`, thus the grouping of `pod_targets` # should share the same `pod_name`. raise '[BUG] Expected at least 1 pod target' if pod_targets.empty? pod_targets.first.pod_name end |