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
297 298 299 |
# File 'lib/cocoapods-podgenerate/patches/installer_patch.rb', line 297 def install_pod_targets(project, pod_targets) super end |
#integrate_targets(pod_target_installation_results) ⇒ Object
301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 |
# File 'lib/cocoapods-podgenerate/patches/installer_patch.rb', line 301 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 |