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
415 416 417 |
# File 'lib/cocoapods-podgenerate/patches/installer_patch.rb', line 415 def install_pod_targets(project, pod_targets) super end |
#integrate_targets(pod_target_installation_results) ⇒ Object
419 420 421 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 |
# File 'lib/cocoapods-podgenerate/patches/installer_patch.rb', line 419 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 = Pod::PodGenerate::Parallel::ThreadPool.compute_pool_size 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 |