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
227 228 229 |
# File 'lib/cocoapods-podgenerate/patches/installer_patch.rb', line 227 def install_pod_targets(project, pod_targets) super end |
#integrate_targets(pod_target_installation_results) ⇒ Object
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 |
# File 'lib/cocoapods-podgenerate/patches/installer_patch.rb', line 231 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 |