module Pod class Sandbox attr_accessor :source_lockfile end end module Jxedt class PreInstall include ObjectSpace def initialize(installer_context) @installer_context = installer_context end def run # check binary switch return unless Jxedt.config.binary_switch? # [Check Environment] podfile = @installer_context.podfile podfile.target_definition_list.each do |target_definition| raise STDERR.puts "[!] Cocoapods-binary requires `use_frameworks!`".red if not target_definition.uses_frameworks? end require_relative '../helper/prebuild_sandbox' # 如果是Pod::PrebuildSandbox类则直接返回 return if @installer_context.sandbox.is_a?(Pod::PrebuildSandbox) # 获取原始的installer对象,必须先获取对象 original_installer = ObjectSpace.each_object(Pod::Installer).first sandbox = Pod::PrebuildSandbox.from_standard_sandbox(@installer_context.sandbox) source_installer = Pod::Installer.new(sandbox, @installer_context.podfile, @installer_context.lockfile) # 设置原始的installer携带的参数 source_installer.update = original_installer.update source_installer.repo_update = original_installer.repo_update # 执行install source_installer.install! # 保存首次`pod install`的lockfile结果,用来验证二进制文件和后面做结果校验 @installer_context.sandbox.source_lockfile = sandbox.source_lockfile = source_installer.lockfile require_relative '../helper/podfile_options' require_relative '../prebuild' # prebuild_job sandbox.link_source_project! if Jxedt.config.prebuild_job? log_section "🚀 Prebuild frameworks" Jxedt::Prebuild.new(source_installer).build end sandbox.clean_source_project! log_section "🤖 Resume pod installation" require_relative '../targets/pod_target' require_relative '../Intergation' end def log_section(message) Pod::UI.puts "-----------------------------------------" Pod::UI.puts message Pod::UI.puts "-----------------------------------------" end end end