Module: Pod::PodGenerate::Patches::AnalyzerPatch::CachedResolution

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

Overview

缓存解析结果的模块通过 prepend 机制覆盖 Analyzer#resolve_dependencies,在 Molinillo 执行前后插入缓存读写逻辑

Instance Method Summary collapse

Instance Method Details

#resolve_dependencies(locked_dependencies) ⇒ Hash{TargetDefinition => Array<Specification>}

重写 resolve_dependencies,利用缓存跳过 Molinillo 解析

工作流程:

1. compute_resolution_cache_key: 计算当前 Podfile + lockfile 的 SHA256 缓存键
2. load_cached_result: 如果缓存命中且有效,从 Manifest 重建 specs_by_target 并返回
3. super(locked_dependencies): 缓存未命中,调用原始 Molinillo 解析
4. save_cached_result: 保存本次解析结果到 YAML 文件供下次使用

Parameters:

  • locked_dependencies (Hash)

    锁定的依赖关系,传递给原始解析器

Returns:

  • (Hash{TargetDefinition => Array<Specification>})

    每个 Podfile TargetDefinition 映射到其依赖的 Specification 对象数组



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/cocoapods-podgenerate/patches/analyzer_patch.rb', line 73

def resolve_dependencies(locked_dependencies)
  # 步骤 1:计算缓存键(SHA256,基于 Podfile + lockfile 内容)
  cache_key = compute_resolution_cache_key(locked_dependencies)

  # 步骤 2:尝试从缓存加载并重建结果
  cached = load_cached_result(cache_key)
  if cached
    Pod::UI.message '[cocoapods-podgenerate] 解析缓存命中 - 跳过 Molinillo 解析'
    return cached
  end

  # 步骤 3:缓存未命中,执行完整的 Molinillo 依赖解析
  Pod::UI.message '[cocoapods-podgenerate] 解析缓存未命中 - 运行 Molinillo 解析'
  result = super(locked_dependencies)

  # 步骤 4:保存解析结果到缓存(只保存可序列化的名称和版本)
  save_cached_result(cache_key, result)
  result
end