Module: Pod::PodGenerate::Patches::MultiProjectGeneratorPatch::ParallelMultiProjectGenerator

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

Instance Method Summary collapse

Instance Method Details

#install_all_pod_targets(projects_by_pod_targets) ⇒ Object

── Optimization: Parallel install_all_pod_targets ──Each project has independent pod targets (different xcodeproj directories), so PodTargetInstaller operations can run concurrently without locking.



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/cocoapods-podgenerate/patches/multi_project_generator_patch.rb', line 34

def install_all_pod_targets(projects_by_pod_targets)
  UI.message '- Installing Pod Targets (parallel)' do
    pool_size = compute_pool_size
    mutex = Mutex.new
    all_results = {}

    pool = Concurrent::FixedThreadPool.new(pool_size)
    projects_by_pod_targets.each do |project, pts|
      pool.post do
        target_results = install_pod_targets(project, pts)
        mutex.synchronize { all_results.merge!(target_results) }
      rescue StandardError => e
        mutex.synchronize do
          Pod::UI.warn "[cocoapods-podgenerate] Pod target install: #{e.message}"
        end
      end
    end

    pool.shutdown
    pool.wait_for_termination
    all_results
  end
end