module Jxedt def self.config Jxedt::Config.instance end class Config attr_accessor :dsl_config APPLICABLE_DSL_CONFIG = { :all_binary => '全部组件允许使用二进制。默认为false', :binary_dir => "framework的保存路径,相对于'Pods/Pods.xcodeproj'的相对路径。默认为'../_Prebuild'", :binary_switch => "二进制开关,关闭则不hook pre_install过程。默认为true", :prebuild_job => "开启编译任务,设置为false则不触发编译。默认为true", :keep_source_project => "保留源码的pods工程,默认保留,方便查看源码", :dev_pods_enabled => "Development Pods是否支持binary。默认为false", :excluded_pods => "排除binary的pods", :xcconfig_configuration_alias => "xcconfig文件中configuration的别名,configurations设置为多个值的时候会用到,用于搜索替换。一般不需要设置,有默认值为'cocoapods-jxedt-binary'", :framework_header_search_enabled => "设置开启binary的framework是否配置framework的HEADER_SEARCH_PATH,兼容头文件引用的问题。默认为false", :silent_build => "静默编译。默认true", :configurations => "支持的configuration配置,可以写字符串'Debug'或'Release',也可以写多个'['Debug', 'Release']'。默认为'Release'", :xcframework => "编译结果是否为xcframework。默认false", :clean_build => "编译的时候是否clean。默认true", :bitcode_enabled => "开启bitcode。默认false", :device_build_enabled => "编译真机。默认true", :simulator_build_enabled => "编译模拟器。默认false", :disable_dsym => "禁止编译dsym产物。默认true", :disable_resource_compilable_pods => "禁止编译有需要编译的resource文件(xib、xcdatamodeld等)的pod", :build_log_path => "编译的log输出路径", :prebuild_sandbox_path => '预编译的sandbox路径,可以配置一个多台电脑都可访问的路径,可以做源码和二进制的link。必须以`/Users/cocoapods-jxedt`开头', :build_args => "编译的配置。了解xcodebuild命令的可以配置编译参数,例如配置 ARCHS='arm64 armv7'", :git_cache => 'git缓存配置,A Hash. 详情查看 GIT_CACHE_CONFIG' }.freeze GIT_CACHE_CONFIG = { :repo => '配置缓存仓库地址,如:{:remote => "https://github.com/user/cocoapods-cache.git", :local => "~/.cocoapods-jxedt/cocoapods-cache"},或者直接写远程仓库地址"https://github.com/user/cocoapods-cache.git"', :branch => 'git cache的branch,默认是master分支', :auto_fetch => 'pod install过程是否自动拉取远程的二进制,默认true', :auto_push => 'pod install过程是否自动同步二进制结果到远程仓库,默认false', }.freeze def initialize() @dsl_config = {} @git_config = {} end def self.instance @instance ||= new() end def validate_dsl_config inapplicable_options = @dsl_config.keys - APPLICABLE_DSL_CONFIG.keys return if inapplicable_options.empty? message = <<~HEREDOC [WARNING] The following options (in `config_cocoapods_util`) are not correct: #{inapplicable_options}. Available options: #{APPLICABLE_DSL_CONFIG}. HEREDOC Pod::UI.puts message.yellow end def all_binary_enabled? @dsl_config[:all_binary] || false end def binary_switch? @dsl_config[:binary_switch] || @dsl_config[:binary_switch].nil? end def prebuild_job? @dsl_config[:prebuild_job] || @dsl_config[:prebuild_job].nil? end def keep_source_project? @dsl_config[:keep_source_project] || false end def dev_pods_enabled? @dsl_config[:dev_pods_enabled] || false end def excluded_pods @dsl_config[:excluded_pods] || [] end def framework_header_search_enabled? @dsl_config[:framework_header_search_enabled] || false end def binary_dir @dsl_config[:binary_dir] || '../_Prebuild' end def xcconfig_configuration_alias @val ||= begin val = @dsl_config[:xcconfig_configuration_alias] val = "cocoapods-jxedt-binary" if val.nil? || val.empty? val end end def silent_build? @dsl_config[:silent_build] || @dsl_config[:silent_build].nil? end def xcframework? @dsl_config[:xcframework] || false end def clean_build? @dsl_config[:clean_build] || @dsl_config[:clean_build].nil? end def bitcode_enabled? @dsl_config[:bitcode_enabled] || false end def disable_dsym? @dsl_config[:disable_dsym] || @dsl_config[:disable_dsym].nil? end def disable_resource_compilable_pods? @dsl_config[:disable_resource_compilable_pods] || false end def device_build_enabled? @dsl_config[:device_build_enabled] || @dsl_config[:device_build_enabled].nil? end def simulator_build_enabled? @dsl_config[:simulator_build_enabled] || false end def build_log_path @dsl_config[:build_log_path] end def prebuild_sandbox_path @sandbox_path ||= begin sandbox_path = @dsl_config[:prebuild_sandbox_path] sandbox_path = nil unless sandbox_path =~ /^\/Users\/cocoapods-jxedt\/.{1,}$/ sandbox_path = nil unless File.exist?('/Users/cocoapods-jxedt') sandbox_path end end def build_args @args ||= begin args = @dsl_config[:build_args] || {} args[:default] ||= ["ONLY_ACTIVE_ARCH=NO", "BUILD_LIBRARY_FOR_DISTRIBUTION=YES"] args[:device] ||= [] # ["ARCHS='arm64 armv7 armv7s'", "ONLY_ACTIVE_ARCH=NO"] args[:simulator] ||= [] # ["ARCHS='arm64 x86_64 i386'", "ONLY_ACTIVE_ARCH=NO"] args end end def support_configurations @configurations ||= begin configurations = [] user_config = @dsl_config[:configurations] configurations << user_config if user_config.is_a?(String) configurations += user_config if user_config.is_a?(Array) configurations = ["Release"] if configurations.empty? configurations end end # git配置 ======================================= git配置 def git_cache_config @git_cache ||= @dsl_config[:git_cache] || {} end def cache_repo @cache_repo ||= begin cache_repo = {} user_config = git_cache_config[:repo] cache_repo[:remote] = user_config if user_config.is_a?(String) cache_repo.merge!(user_config) if user_config.is_a?(Hash) cache_repo end end def git_remote_repo @remote ||= cache_repo[:remote] end def cache_repo_enabled? remote = git_remote_repo remote && remote.is_a?(String) && remote =~ /.*\.git$/ end def git_cache_path return nil unless cache_repo_enabled? local = cache_repo[:local] return File.expand_path(local) if local && local.is_a?(String) && local.split('/').size > 1 remote = git_remote_repo repo_name = Pathname.new(remote).basename.sub_ext('').to_s File.expand_path("~/.cocoapods-jxedt/#{repo_name}") end def auto_fetch? git_cache_config[:auto_fetch] || git_cache_config[:auto_fetch].nil? end def auto_push? git_cache_config[:auto_push] end def cache_branch git_cache_config[:branch] || 'master' end # git配置 ======================================= git配置 end end