Module: Pod::PodGenerate::Patches::InstallerPatch::ParallelInstall
- Defined in:
- lib/cocoapods-podgenerate/patches/installer_patch.rb
Overview
── 优化 3: 并行化 PodTargetIntegrator(修复 M3)──
PodTargetIntegrator 为每个 pod target 添加脚本构建阶段(如 embed frameworks、copy resources)。每个 integrator 操作独立的 target,无共享状态 → 并行安全。
v0.1.4 修复 (M3): 使用 Concurrent::FixedThreadPool(限制并发数)
替代原来的裸 Thread.new(可能同时创建 200+ 线程导致资源耗尽)
Instance Method Summary collapse
- #install_pod_targets(project, pod_targets) ⇒ Object
- #integrate_targets(pod_target_installation_results) ⇒ Object
Instance Method Details
#install_pod_targets(project, pod_targets) ⇒ Object
418 419 420 |
# File 'lib/cocoapods-podgenerate/patches/installer_patch.rb', line 418 def install_pod_targets(project, pod_targets) super end |
#integrate_targets(pod_target_installation_results) ⇒ Object
422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 |
# File 'lib/cocoapods-podgenerate/patches/installer_patch.rb', line 422 def integrate_targets(pod_target_installation_results) pods_to_integrate = pod_target_installation_results.values.select do |result| target = result.target !result.test_native_targets.empty? || !result.app_native_targets.empty? || target.contains_script_phases? || target.framework_paths.values.flatten.any? { |p| !p.dsym_path.nil? } || target.xcframeworks.values.any?(&:any?) end return if pods_to_integrate.empty? use_io_paths = !.disable_input_output_paths if pods_to_integrate.size <= 1 # 单 target: 直接调用,无需线程开销 Pod::Installer::Xcode::PodsProjectGenerator::PodTargetIntegrator.new( pods_to_integrate.first, :use_input_output_paths => use_io_paths ).integrate! return end # 多 target: 使用线程池并行集成(M3 修复) pool_size = [[Etc.nprocessors - 1, 2].max, 16].min pool = Concurrent::FixedThreadPool.new(pool_size) pods_to_integrate.each do |result| pool.post do Pod::Installer::Xcode::PodsProjectGenerator::PodTargetIntegrator.new( result, :use_input_output_paths => use_io_paths ).integrate! rescue StandardError => e Pod::UI.warn "[cocoapods-podgenerate] Integrate error: #{e.}" end end pool.shutdown unless pool.wait_for_termination(Pod::PodGenerate::Parallel::ThreadPool::DEFAULT_TIMEOUT) Pod::UI.warn '[cocoapods-podgenerate] Target integration timed out' pool.kill end end |