Module: Pod::PodGenerate::Patches::InstallerPatch::ForceIncrementalInstall

Defined in:
lib/cocoapods-podgenerate/patches/installer_patch.rb

Overview

── Optimization 1: Force-enable incremental_installation ──

Instance Method Summary collapse

Instance Method Details

#create_and_save_projects(pod_targets_to_generate, aggregate_targets_to_generate, build_configurations, project_object_version) ⇒ Object

── Optimization 3+4: create_and_save_projects with parallel configure_schemes ──



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/cocoapods-podgenerate/patches/installer_patch.rb', line 69

def create_and_save_projects(pod_targets_to_generate, aggregate_targets_to_generate,
                             build_configurations, project_object_version)
  UI.section 'Generating Pods project' do
    generator = create_generator(pod_targets_to_generate, aggregate_targets_to_generate,
                                 build_configurations, project_object_version,
                                 installation_options.generate_multiple_pod_projects)

    pod_project_generation_result = generator.generate!
    @target_installation_results = pod_project_generation_result.target_installation_results
    @pods_project = pod_project_generation_result.project
    @pod_target_subprojects = pod_project_generation_result.projects_by_pod_targets.keys
    @generated_projects = ([pods_project] + pod_target_subprojects || []).compact
    @generated_pod_targets = pod_targets_to_generate
    @generated_aggregate_targets = aggregate_targets_to_generate || []
    projects_by_pod_targets = pod_project_generation_result.projects_by_pod_targets

    predictabilize_uuids(generated_projects) if installation_options.deterministic_uuids?
    stabilize_target_uuids(generated_projects)

    projects_writer = Pod::Installer::Xcode::PodsProjectWriter.new(sandbox, generated_projects,
                                                   target_installation_results.pod_target_installation_results,
                                                   installation_options)
    projects_writer.write! do
      run_podfile_post_install_hooks
    end

    # Parallel configure_schemes (each project is independent)
    pods_project_pod_targets = pod_targets_to_generate - projects_by_pod_targets.values.flatten
    all_projects_by_pod_targets = {}
    if pods_project
      all_projects_by_pod_targets[pods_project] = pods_project_pod_targets
    end
    all_projects_by_pod_targets.merge!(projects_by_pod_targets) if projects_by_pod_targets

    if all_projects_by_pod_targets.size > 1
      parallel_configure_schemes(all_projects_by_pod_targets, generator, pod_project_generation_result)
    else
      all_projects_by_pod_targets.each do |project, pts|
        generator.configure_schemes(project, pts, pod_project_generation_result)
      end
    end
  end
end

#generate_pods_projectObject

── Optimization 2: Skip project generation when nothing changed ──



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/cocoapods-podgenerate/patches/installer_patch.rb', line 39

def generate_pods_project
  stage_sandbox(sandbox, pod_targets)

  cache_analysis_result = analyze_project_cache
  ptg = cache_analysis_result.pod_targets_to_generate
  atg = cache_analysis_result.aggregate_targets_to_generate

  if ptg.empty? && (atg.nil? || atg.empty?)
    Pod::UI.puts "[cocoapods-podgenerate] No changes — skipping project generation"
    @generated_aggregate_targets = aggregate_targets
    @generated_pod_targets = []
    Pod::Installer::SandboxDirCleaner.new(sandbox, pod_targets, aggregate_targets).clean!
    update_project_cache(cache_analysis_result,
      Pod::Installer::Xcode::PodsProjectGenerator::InstallationResults.new({}, {}))
    return
  end

  # Normal path
  ptg.each do |pod_target|
    pod_target.build_headers.implode_path!(pod_target.headers_sandbox)
    sandbox.public_headers.implode_path!(pod_target.headers_sandbox)
  end

  create_and_save_projects(ptg, atg,
    cache_analysis_result.build_configurations, cache_analysis_result.project_object_version)
  Pod::Installer::SandboxDirCleaner.new(sandbox, pod_targets, aggregate_targets).clean!
  update_project_cache(cache_analysis_result, target_installation_results)
end

#install!Object



32
33
34
35
36
# File 'lib/cocoapods-podgenerate/patches/installer_patch.rb', line 32

def install!
  installation_options.incremental_installation = true
  installation_options.generate_multiple_pod_projects = true
  super
end