cocoapods-tj 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +1 -0
- data/lib/cocoapods-tj/command/bin/archive.rb +203 -0
- data/lib/cocoapods-tj/command/bin/auto.rb +189 -0
- data/lib/cocoapods-tj/command/bin/code.rb +198 -0
- data/lib/cocoapods-tj/command/bin/imy.rb +45 -0
- data/lib/cocoapods-tj/command/bin/init.rb +65 -0
- data/lib/cocoapods-tj/command/bin/initHotKey.rb +66 -0
- data/lib/cocoapods-tj/command/bin/install.rb +41 -0
- data/lib/cocoapods-tj/command/bin/lib/lint.rb +66 -0
- data/lib/cocoapods-tj/command/bin/local.rb +142 -0
- data/lib/cocoapods-tj/command/bin/repo/update.rb +42 -0
- data/lib/cocoapods-tj/command/bin/spec/create.rb +68 -0
- data/lib/cocoapods-tj/command/bin/spec/push.rb +114 -0
- data/lib/cocoapods-tj/command/bin/update.rb +144 -0
- data/lib/cocoapods-tj/command/bin.rb +42 -0
- data/lib/cocoapods-tj/command.rb +2 -0
- data/lib/cocoapods-tj/config/config.rb +129 -0
- data/lib/cocoapods-tj/config/config_asker.rb +49 -0
- data/lib/cocoapods-tj/config/config_builder.rb +201 -0
- data/lib/cocoapods-tj/config/config_hot_key.rb +102 -0
- data/lib/cocoapods-tj/config/config_hot_key_asker.rb +48 -0
- data/lib/cocoapods-tj/gem_version.rb +10 -0
- data/lib/cocoapods-tj/helpers/Info.plist +0 -0
- data/lib/cocoapods-tj/helpers/build_helper.rb +154 -0
- data/lib/cocoapods-tj/helpers/build_utils.rb +62 -0
- data/lib/cocoapods-tj/helpers/framework.rb +79 -0
- data/lib/cocoapods-tj/helpers/framework_builder.rb +391 -0
- data/lib/cocoapods-tj/helpers/library.rb +54 -0
- data/lib/cocoapods-tj/helpers/library_builder.rb +89 -0
- data/lib/cocoapods-tj/helpers/local/loca_llibrary.rb +57 -0
- data/lib/cocoapods-tj/helpers/local/local_build_helper.rb +177 -0
- data/lib/cocoapods-tj/helpers/local/local_framework.rb +85 -0
- data/lib/cocoapods-tj/helpers/local/local_framework_builder.rb +226 -0
- data/lib/cocoapods-tj/helpers/local/local_library_builder.rb +91 -0
- data/lib/cocoapods-tj/helpers/sources_helper.rb +32 -0
- data/lib/cocoapods-tj/helpers/spec_creator.rb +150 -0
- data/lib/cocoapods-tj/helpers/spec_files_helper.rb +73 -0
- data/lib/cocoapods-tj/helpers/spec_source_creator.rb +189 -0
- data/lib/cocoapods-tj/helpers/upload_helper.rb +81 -0
- data/lib/cocoapods-tj/helpers.rb +5 -0
- data/lib/cocoapods-tj/native/acknowledgements.rb +26 -0
- data/lib/cocoapods-tj/native/analyzer.rb +29 -0
- data/lib/cocoapods-tj/native/file_accessor.rb +20 -0
- data/lib/cocoapods-tj/native/installation_options.rb +21 -0
- data/lib/cocoapods-tj/native/installer.rb +106 -0
- data/lib/cocoapods-tj/native/linter.rb +26 -0
- data/lib/cocoapods-tj/native/path_source.rb +29 -0
- data/lib/cocoapods-tj/native/pod_source_installer.rb +18 -0
- data/lib/cocoapods-tj/native/pod_target_installer.rb +81 -0
- data/lib/cocoapods-tj/native/podfile.rb +91 -0
- data/lib/cocoapods-tj/native/podfile_env.rb +37 -0
- data/lib/cocoapods-tj/native/podfile_generator.rb +135 -0
- data/lib/cocoapods-tj/native/podspec_finder.rb +23 -0
- data/lib/cocoapods-tj/native/resolver.rb +202 -0
- data/lib/cocoapods-tj/native/sandbox_analyzer.rb +11 -0
- data/lib/cocoapods-tj/native/source.rb +35 -0
- data/lib/cocoapods-tj/native/sources_manager.rb +18 -0
- data/lib/cocoapods-tj/native/specification.rb +10 -0
- data/lib/cocoapods-tj/native/target_validator.rb +41 -0
- data/lib/cocoapods-tj/native/validator.rb +40 -0
- data/lib/cocoapods-tj/native.rb +23 -0
- data/lib/cocoapods-tj/source_provider_hook.rb +50 -0
- data/lib/cocoapods-tj.rb +2 -0
- data/lib/cocoapods_plugin.rb +3 -0
- data/spec/command/bin_spec.rb +12 -0
- data/spec/spec_helper.rb +50 -0
- metadata +182 -0
| @@ -0,0 +1,391 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            require 'cocoapods-tj/helpers/framework.rb'
         | 
| 3 | 
            +
            require 'English'
         | 
| 4 | 
            +
            require 'cocoapods-tj/config/config_builder'
         | 
| 5 | 
            +
            require 'shellwords'
         | 
| 6 | 
            +
            require 'cocoapods-tj/helpers/build_utils'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            module CBin
         | 
| 9 | 
            +
              class Framework
         | 
| 10 | 
            +
                class Builder
         | 
| 11 | 
            +
                  include Pod
         | 
| 12 | 
            +
                  def initialize(spec, file_accessor, platform, source_dir, isRootSpec = true, build_model="Debug")
         | 
| 13 | 
            +
                    @spec = spec
         | 
| 14 | 
            +
                    @source_dir = source_dir
         | 
| 15 | 
            +
                    @file_accessor = file_accessor
         | 
| 16 | 
            +
                    @platform = platform
         | 
| 17 | 
            +
                    @build_model = build_model
         | 
| 18 | 
            +
                    @isRootSpec = isRootSpec
         | 
| 19 | 
            +
                    vendored_static_frameworks = file_accessor.vendored_static_frameworks.map do |framework|
         | 
| 20 | 
            +
                      path = framework
         | 
| 21 | 
            +
                      extn = File.extname  path
         | 
| 22 | 
            +
                      if extn.downcase == '.framework'
         | 
| 23 | 
            +
                        path = File.join(path,File.basename(path, extn))
         | 
| 24 | 
            +
                      end
         | 
| 25 | 
            +
                      path
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                    @vendored_libraries = (vendored_static_frameworks + file_accessor.vendored_static_libraries).map(&:to_s)
         | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  def build
         | 
| 32 | 
            +
                    defines = compile
         | 
| 33 | 
            +
                    build_sim_libraries(defines)
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    defines
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  def lipo_build(defines)
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                    if CBin::Build::Utils.is_swift_module(@spec) || !CBin::Build::Utils.uses_frameworks?
         | 
| 41 | 
            +
                      UI.section("Building static Library #{@spec}") do
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                        output = framework.versions_path + Pathname.new(@spec.name)
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                        build_static_library_for_ios(output)
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                        copy_headers
         | 
| 48 | 
            +
                        copy_license
         | 
| 49 | 
            +
                        copy_resources
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                        cp_to_source_dir
         | 
| 52 | 
            +
                      end
         | 
| 53 | 
            +
                    else
         | 
| 54 | 
            +
                        UI.section("Building framework  #{@spec}") do
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                          output = framework.fwk_path + Pathname.new(@spec.name)
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                          copy_static_framework_dir_for_ios
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                          build_static_framework_machO_for_ios(output)
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                          copy_framework_resources
         | 
| 63 | 
            +
             | 
| 64 | 
            +
             | 
| 65 | 
            +
                      end
         | 
| 66 | 
            +
                    end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                    framework
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                  private
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  def cp_to_source_dir
         | 
| 74 | 
            +
                    framework.remove_current_version if CBin::Build::Utils.is_swift_module(@spec)
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                    framework_name = "#{@spec.name}.framework"
         | 
| 77 | 
            +
                    target_dir = File.join(CBin::Config::Builder.instance.zip_dir,framework_name)
         | 
| 78 | 
            +
                    FileUtils.rm_rf(target_dir) if File.exist?(target_dir)
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                    zip_dir = CBin::Config::Builder.instance.zip_dir
         | 
| 81 | 
            +
                    FileUtils.mkdir_p(zip_dir) unless File.exist?(zip_dir)
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                    `cp -fa #{@platform}/#{framework_name} #{target_dir}`
         | 
| 84 | 
            +
                  end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                  def build_sim_libraries(defines)
         | 
| 87 | 
            +
                    UI.message 'Building simulator libraries'
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                    archs = ios_architectures_sim
         | 
| 90 | 
            +
                    archs.map do |arch|
         | 
| 91 | 
            +
                      xcodebuild(defines, "-sdk iphonesimulator ARCHS=\'#{arch}\' ", "build-#{arch}",@build_model)
         | 
| 92 | 
            +
                    end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                  end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
             | 
| 97 | 
            +
                  def static_libs_in_sandbox(build_dir = 'build')
         | 
| 98 | 
            +
                    file = Dir.glob("#{build_dir}/lib#{target_name}.a")
         | 
| 99 | 
            +
                    unless file
         | 
| 100 | 
            +
                      UI.warn "file no find = #{build_dir}/lib#{target_name}.a"
         | 
| 101 | 
            +
                    end
         | 
| 102 | 
            +
                    file
         | 
| 103 | 
            +
                  end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                  def build_static_library_for_ios(output)
         | 
| 106 | 
            +
                    UI.message "Building ios libraries with archs #{ios_architectures}"
         | 
| 107 | 
            +
                    static_libs = static_libs_in_sandbox('build') + static_libs_in_sandbox('build-simulator') + @vendored_libraries
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                    ios_architectures.map do |arch|
         | 
| 110 | 
            +
                      static_libs += static_libs_in_sandbox("build-#{arch}") + @vendored_libraries
         | 
| 111 | 
            +
                    end
         | 
| 112 | 
            +
                    ios_architectures_sim do |arch|
         | 
| 113 | 
            +
                      static_libs += static_libs_in_sandbox("build-#{arch}") + @vendored_libraries
         | 
| 114 | 
            +
                    end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                    build_path = Pathname("build")
         | 
| 117 | 
            +
                    build_path.mkpath unless build_path.exist?
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                    libs = (ios_architectures + ios_architectures_sim) .map do |arch|
         | 
| 120 | 
            +
                      library = "build-#{arch}/lib#{@spec.name}.a"
         | 
| 121 | 
            +
                      library
         | 
| 122 | 
            +
                    end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                    UI.message "lipo -create -output #{output} #{libs.join(' ')}"
         | 
| 125 | 
            +
                    `lipo -create -output #{output} #{libs.join(' ')}`
         | 
| 126 | 
            +
                  end
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                  def ios_build_options
         | 
| 129 | 
            +
                    "ARCHS=\'#{ios_architectures.join(' ')}\' OTHER_CFLAGS=\'-fembed-bitcode -Qunused-arguments\'"
         | 
| 130 | 
            +
                  end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                  def ios_architectures
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                    archs = %w[arm64 armv7]
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                    archs
         | 
| 137 | 
            +
                  end
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                  def ios_architectures_sim
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                    archs = %w[x86_64]
         | 
| 142 | 
            +
                    # TODO 处理是否需要 i386
         | 
| 143 | 
            +
                    archs
         | 
| 144 | 
            +
                  end
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                  def compile
         | 
| 147 | 
            +
                    defines = "GCC_PREPROCESSOR_DEFINITIONS='$(inherited)'"
         | 
| 148 | 
            +
                    defines += ' '
         | 
| 149 | 
            +
                    defines += @spec.consumer(@platform).compiler_flags.join(' ')
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                    options = ios_build_options
         | 
| 152 | 
            +
                      archs = ios_architectures
         | 
| 153 | 
            +
                      archs.map do |arch|
         | 
| 154 | 
            +
                        xcodebuild(defines, "ARCHS=\'#{arch}\' OTHER_CFLAGS=\'-fembed-bitcode -Qunused-arguments\'","build-#{arch}",@build_model)
         | 
| 155 | 
            +
                      end
         | 
| 156 | 
            +
             | 
| 157 | 
            +
             | 
| 158 | 
            +
                    defines
         | 
| 159 | 
            +
                  end
         | 
| 160 | 
            +
             | 
| 161 | 
            +
                  def is_debug_model
         | 
| 162 | 
            +
                    @build_model == "Debug"
         | 
| 163 | 
            +
                  end
         | 
| 164 | 
            +
             | 
| 165 | 
            +
                  def target_name
         | 
| 166 | 
            +
             | 
| 167 | 
            +
                     if @spec.available_platforms.count > 1
         | 
| 168 | 
            +
                       "#{@spec.name}-#{Platform.string_name(@spec.consumer(@platform).platform_name)}"
         | 
| 169 | 
            +
                     else
         | 
| 170 | 
            +
                        @spec.name
         | 
| 171 | 
            +
                     end
         | 
| 172 | 
            +
                  end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                  def xcodebuild(defines = '', args = '', build_dir = 'build', build_model = 'Debug')
         | 
| 175 | 
            +
             | 
| 176 | 
            +
                    unless File.exist?("Pods.xcodeproj") #cocoapods-generate v2.0.0
         | 
| 177 | 
            +
                      command = "xcodebuild #{defines} #{args} CONFIGURATION_BUILD_DIR=#{File.join(File.expand_path("..", build_dir), File.basename(build_dir))} clean build -configuration #{build_model} -target #{target_name} -project ./Pods/Pods.xcodeproj 2>&1"
         | 
| 178 | 
            +
                    else
         | 
| 179 | 
            +
                      command = "xcodebuild #{defines} #{args} CONFIGURATION_BUILD_DIR=#{build_dir} clean build -configuration #{build_model} -target #{target_name} -project ./Pods.xcodeproj 2>&1"
         | 
| 180 | 
            +
                    end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                    UI.message "command = #{command}"
         | 
| 183 | 
            +
                    output = `#{command}`.lines.to_a
         | 
| 184 | 
            +
             | 
| 185 | 
            +
                    if $CHILD_STATUS.exitstatus != 0
         | 
| 186 | 
            +
                      raise <<~EOF
         | 
| 187 | 
            +
                        Build command failed: #{command}
         | 
| 188 | 
            +
                        Output:
         | 
| 189 | 
            +
                        #{output.map { |line| "    #{line}" }.join}
         | 
| 190 | 
            +
                      EOF
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                      Process.exit
         | 
| 193 | 
            +
                    end
         | 
| 194 | 
            +
                  end
         | 
| 195 | 
            +
             | 
| 196 | 
            +
                  def copy_headers
         | 
| 197 | 
            +
                    public_headers = Array.new
         | 
| 198 | 
            +
             | 
| 199 | 
            +
                    spec_header_dir = "./Headers/Public/#{@spec.name}"
         | 
| 200 | 
            +
                    unless File.exist?(spec_header_dir)
         | 
| 201 | 
            +
                      spec_header_dir = "./Pods/Headers/Public/#{@spec.name}"
         | 
| 202 | 
            +
                    end
         | 
| 203 | 
            +
                    raise "copy_headers #{spec_header_dir} no exist " unless File.exist?(spec_header_dir)
         | 
| 204 | 
            +
                    Dir.chdir(spec_header_dir) do
         | 
| 205 | 
            +
                      headers = Dir.glob('*.h')
         | 
| 206 | 
            +
                      headers.each do |h|
         | 
| 207 | 
            +
                        public_headers << Pathname.new(File.join(Dir.pwd,h))
         | 
| 208 | 
            +
                      end
         | 
| 209 | 
            +
                    end
         | 
| 210 | 
            +
                    # end
         | 
| 211 | 
            +
             | 
| 212 | 
            +
             | 
| 213 | 
            +
                    public_headers.each do |h|
         | 
| 214 | 
            +
                      `ditto #{h} #{framework.headers_path}/#{h.basename}`
         | 
| 215 | 
            +
                    end
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                    if !@spec.module_map.nil?
         | 
| 218 | 
            +
                      module_map_file = @file_accessor.module_map
         | 
| 219 | 
            +
                      if Pathname(module_map_file).exist?
         | 
| 220 | 
            +
                        module_map = File.read(module_map_file)
         | 
| 221 | 
            +
                      end
         | 
| 222 | 
            +
                    elsif public_headers.map(&:basename).map(&:to_s).include?("#{@spec.name}-umbrella.h")
         | 
| 223 | 
            +
                      module_map = <<-MAP
         | 
| 224 | 
            +
                      framework module #{@spec.name} {
         | 
| 225 | 
            +
                        umbrella header "#{@spec.name}-umbrella.h"
         | 
| 226 | 
            +
             | 
| 227 | 
            +
                        export *
         | 
| 228 | 
            +
                        module * { export * }
         | 
| 229 | 
            +
                      }
         | 
| 230 | 
            +
                      MAP
         | 
| 231 | 
            +
                    end
         | 
| 232 | 
            +
             | 
| 233 | 
            +
                    unless module_map.nil?
         | 
| 234 | 
            +
                      UI.message "Writing module map #{module_map}"
         | 
| 235 | 
            +
                      unless framework.module_map_path.exist?
         | 
| 236 | 
            +
                        framework.module_map_path.mkpath
         | 
| 237 | 
            +
                      end
         | 
| 238 | 
            +
                      File.write("#{framework.module_map_path}/module.modulemap", module_map)
         | 
| 239 | 
            +
             | 
| 240 | 
            +
                      archs = ios_architectures + ios_architectures_sim
         | 
| 241 | 
            +
                      archs.map do |arch|
         | 
| 242 | 
            +
                        swift_module = "build-#{arch}/#{@spec.name}.swiftmodule"
         | 
| 243 | 
            +
                        if File.directory?(swift_module)
         | 
| 244 | 
            +
                          FileUtils.cp_r("#{swift_module}/.", framework.swift_module_path)
         | 
| 245 | 
            +
                        end
         | 
| 246 | 
            +
                      end
         | 
| 247 | 
            +
                      swift_Compatibility_Header = "build-#{archs.first}/Swift\ Compatibility\ Header/#{@spec.name}-Swift.h"
         | 
| 248 | 
            +
                      FileUtils.cp(swift_Compatibility_Header,framework.headers_path) if File.exist?(swift_Compatibility_Header)
         | 
| 249 | 
            +
                      info_plist_file = File.join(File.dirname(__FILE__),"info.plist")
         | 
| 250 | 
            +
                      FileUtils.cp(info_plist_file,framework.fwk_path)
         | 
| 251 | 
            +
                    end
         | 
| 252 | 
            +
                  end
         | 
| 253 | 
            +
             | 
| 254 | 
            +
                  def copy_swift_header
         | 
| 255 | 
            +
             | 
| 256 | 
            +
                  end
         | 
| 257 | 
            +
             | 
| 258 | 
            +
                  def copy_license
         | 
| 259 | 
            +
                    license_file = @spec.license[:file] || 'LICENSE'
         | 
| 260 | 
            +
                    `cp "#{license_file}" .` if Pathname(license_file).exist?
         | 
| 261 | 
            +
                  end
         | 
| 262 | 
            +
             | 
| 263 | 
            +
                  def copy_resources
         | 
| 264 | 
            +
                    resource_dir = './build/*.bundle'
         | 
| 265 | 
            +
                    resource_dir = './build-armv7/*.bundle' if File.exist?('./build-armv7')
         | 
| 266 | 
            +
                    resource_dir = './build-arm64/*.bundle' if File.exist?('./build-arm64')
         | 
| 267 | 
            +
             | 
| 268 | 
            +
                    bundles = Dir.glob(resource_dir)
         | 
| 269 | 
            +
             | 
| 270 | 
            +
                    bundle_names = [@spec, *@spec.recursive_subspecs].flat_map do |spec|
         | 
| 271 | 
            +
                      consumer = spec.consumer(@platform)
         | 
| 272 | 
            +
                      consumer.resource_bundles.keys +
         | 
| 273 | 
            +
                          consumer.resources.map do |r|
         | 
| 274 | 
            +
                            File.basename(r, '.bundle') if File.extname(r) == 'bundle'
         | 
| 275 | 
            +
                          end
         | 
| 276 | 
            +
                    end.compact.uniq
         | 
| 277 | 
            +
             | 
| 278 | 
            +
                    bundles.select! do |bundle|
         | 
| 279 | 
            +
                      bundle_name = File.basename(bundle, '.bundle')
         | 
| 280 | 
            +
                      bundle_names.include?(bundle_name)
         | 
| 281 | 
            +
                    end
         | 
| 282 | 
            +
             | 
| 283 | 
            +
                    if bundles.count > 0
         | 
| 284 | 
            +
                      UI.message "Copying bundle files #{bundles}"
         | 
| 285 | 
            +
                      bundle_files = bundles.join(' ')
         | 
| 286 | 
            +
                      `cp -rp #{bundle_files} #{framework.resources_path} 2>&1`
         | 
| 287 | 
            +
                    end
         | 
| 288 | 
            +
             | 
| 289 | 
            +
                    real_source_dir = @source_dir
         | 
| 290 | 
            +
                    unless @isRootSpec
         | 
| 291 | 
            +
                      spec_source_dir = File.join(Dir.pwd,"#{@spec.name}")
         | 
| 292 | 
            +
                      unless File.exist?(spec_source_dir)
         | 
| 293 | 
            +
                        spec_source_dir = File.join(Dir.pwd,"Pods/#{@spec.name}")
         | 
| 294 | 
            +
                      end
         | 
| 295 | 
            +
                      raise "copy_resources #{spec_source_dir} no exist " unless File.exist?(spec_source_dir)
         | 
| 296 | 
            +
             | 
| 297 | 
            +
                      spec_source_dir = File.join(Dir.pwd,"#{@spec.name}")
         | 
| 298 | 
            +
                      real_source_dir = spec_source_dir
         | 
| 299 | 
            +
                    end
         | 
| 300 | 
            +
             | 
| 301 | 
            +
                    resources = [@spec, *@spec.recursive_subspecs].flat_map do |spec|
         | 
| 302 | 
            +
                      expand_paths(real_source_dir, spec.consumer(@platform).resources)
         | 
| 303 | 
            +
                    end.compact.uniq
         | 
| 304 | 
            +
             | 
| 305 | 
            +
                    if resources.count == 0 && bundles.count == 0
         | 
| 306 | 
            +
                      framework.delete_resources
         | 
| 307 | 
            +
                      return
         | 
| 308 | 
            +
                    end
         | 
| 309 | 
            +
             | 
| 310 | 
            +
                    if resources.count > 0
         | 
| 311 | 
            +
                      escape_resource = []
         | 
| 312 | 
            +
                      resources.each do |source|
         | 
| 313 | 
            +
                        escape_resource << Shellwords.join(source)
         | 
| 314 | 
            +
                      end
         | 
| 315 | 
            +
                      UI.message "Copying resources #{escape_resource}"
         | 
| 316 | 
            +
                      `cp -rp #{escape_resource.join(' ')} #{framework.resources_path}`
         | 
| 317 | 
            +
                    end
         | 
| 318 | 
            +
                  end
         | 
| 319 | 
            +
             | 
| 320 | 
            +
                  def expand_paths(source_dir, path_specs)
         | 
| 321 | 
            +
                    path_specs.map do |path_spec|
         | 
| 322 | 
            +
                      Dir.glob(File.join(source_dir, path_spec))
         | 
| 323 | 
            +
                    end
         | 
| 324 | 
            +
                  end
         | 
| 325 | 
            +
             | 
| 326 | 
            +
                  def build_static_framework_machO_for_ios(output)
         | 
| 327 | 
            +
                    UI.message "Building ios framework with archs #{ios_architectures}"
         | 
| 328 | 
            +
             | 
| 329 | 
            +
                    static_libs = static_libs_in_sandbox('build') + @vendored_libraries
         | 
| 330 | 
            +
                    ios_architectures.map do |arch|
         | 
| 331 | 
            +
                      static_libs += static_libs_in_sandbox("build-#{arch}") + @vendored_libraries
         | 
| 332 | 
            +
                    end
         | 
| 333 | 
            +
             | 
| 334 | 
            +
                    ios_architectures_sim do |arch|
         | 
| 335 | 
            +
                      static_libs += static_libs_in_sandbox("build-#{arch}") + @vendored_libraries
         | 
| 336 | 
            +
                    end
         | 
| 337 | 
            +
             | 
| 338 | 
            +
                    build_path = Pathname("build")
         | 
| 339 | 
            +
                    build_path.mkpath unless build_path.exist?
         | 
| 340 | 
            +
             | 
| 341 | 
            +
                    libs = (ios_architectures + ios_architectures_sim) .map do |arch|
         | 
| 342 | 
            +
                      library = "build-#{arch}/#{@spec.name}.framework/#{@spec.name}"
         | 
| 343 | 
            +
                      library
         | 
| 344 | 
            +
                    end
         | 
| 345 | 
            +
             | 
| 346 | 
            +
                    UI.message "lipo -create -output #{output} #{libs.join(' ')}"
         | 
| 347 | 
            +
                    `lipo -create -output #{output} #{libs.join(' ')}`
         | 
| 348 | 
            +
                  end
         | 
| 349 | 
            +
             | 
| 350 | 
            +
                  def copy_static_framework_dir_for_ios
         | 
| 351 | 
            +
             | 
| 352 | 
            +
                    archs = ios_architectures + ios_architectures_sim
         | 
| 353 | 
            +
                    framework_dir = "build-#{ios_architectures_sim.first}/#{@spec.name}.framework"
         | 
| 354 | 
            +
                    framework_dir = "build-#{ios_architectures.first}/#{@spec.name}.framework" unless File.exist?(framework_dir)
         | 
| 355 | 
            +
                    unless File.exist?(framework_dir)
         | 
| 356 | 
            +
                      raise "#{framework_dir} path no exist"
         | 
| 357 | 
            +
                    end
         | 
| 358 | 
            +
                    File.join(Dir.pwd, "build-#{ios_architectures_sim.first}/#{@spec.name}.framework")
         | 
| 359 | 
            +
                    FileUtils.cp_r(framework_dir, framework.root_path)
         | 
| 360 | 
            +
             | 
| 361 | 
            +
                    archs.map do |arch|
         | 
| 362 | 
            +
                      swift_module = "build-#{arch}/#{@spec.name}.framework/Modules/#{@spec.name}.swiftmodule"
         | 
| 363 | 
            +
                      if File.directory?(swift_module)
         | 
| 364 | 
            +
                        FileUtils.cp_r("#{swift_module}/.", framework.swift_module_path)
         | 
| 365 | 
            +
                      end
         | 
| 366 | 
            +
                    end
         | 
| 367 | 
            +
             | 
| 368 | 
            +
                    framework.remove_current_version
         | 
| 369 | 
            +
                  end
         | 
| 370 | 
            +
             | 
| 371 | 
            +
                  def copy_framework_resources
         | 
| 372 | 
            +
                    resources = Dir.glob("#{framework.fwk_path + Pathname.new('Resources')}/*")
         | 
| 373 | 
            +
                    if resources.count == 0
         | 
| 374 | 
            +
                      framework.delete_resources
         | 
| 375 | 
            +
                    end
         | 
| 376 | 
            +
                  end
         | 
| 377 | 
            +
             | 
| 378 | 
            +
             | 
| 379 | 
            +
             | 
| 380 | 
            +
                  def framework
         | 
| 381 | 
            +
                    @framework ||= begin
         | 
| 382 | 
            +
                      framework = Framework.new(@spec.name, @platform.name.to_s)
         | 
| 383 | 
            +
                      framework.make
         | 
| 384 | 
            +
                      framework
         | 
| 385 | 
            +
                    end
         | 
| 386 | 
            +
                  end
         | 
| 387 | 
            +
             | 
| 388 | 
            +
             | 
| 389 | 
            +
                end
         | 
| 390 | 
            +
              end
         | 
| 391 | 
            +
            end
         | 
| @@ -0,0 +1,54 @@ | |
| 1 | 
            +
            # copy from https://github.com/CocoaPods/cocoapods-packager
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module CBin
         | 
| 4 | 
            +
              class Library
         | 
| 5 | 
            +
                attr_reader :headers_path
         | 
| 6 | 
            +
                attr_reader :resources_path
         | 
| 7 | 
            +
                attr_reader :root_path
         | 
| 8 | 
            +
                attr_reader :versions_path
         | 
| 9 | 
            +
                attr_reader :name_path
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def initialize(name, platform, version)
         | 
| 12 | 
            +
                  @name = name
         | 
| 13 | 
            +
                  @platform = platform
         | 
| 14 | 
            +
                  @version = version
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                def make
         | 
| 18 | 
            +
                  make_root
         | 
| 19 | 
            +
                  make_library
         | 
| 20 | 
            +
                  make_headers
         | 
| 21 | 
            +
                  make_resources
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def delete_resources
         | 
| 25 | 
            +
                  Pathname.new(@resources_path).rmtree
         | 
| 26 | 
            +
                  (Pathname.new(@fwk_path) + Pathname.new('Resources')).delete
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                private
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def make_library
         | 
| 32 | 
            +
                  @name_path = CBin::Config::Builder.instance.library_name_version(@name,@version)
         | 
| 33 | 
            +
                  @fwk_path = @root_path + Pathname.new(@name_path)
         | 
| 34 | 
            +
                  @fwk_path.mkdir unless @fwk_path.exist?
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  @versions_path = @fwk_path
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def make_headers
         | 
| 40 | 
            +
                  @headers_path = @versions_path + Pathname.new('Headers')
         | 
| 41 | 
            +
                  @headers_path.mkpath unless @headers_path.exist?
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                def make_resources
         | 
| 45 | 
            +
                  @resources_path = @versions_path + Pathname.new('Resources')
         | 
| 46 | 
            +
                  @resources_path.mkpath unless @resources_path.exist?
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                def make_root
         | 
| 50 | 
            +
                  @root_path = Pathname.new(@platform)
         | 
| 51 | 
            +
                  @root_path.mkpath unless @root_path.exist?
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
            end
         | 
| @@ -0,0 +1,89 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'cocoapods-tj/helpers/framework.rb'
         | 
| 4 | 
            +
            require 'cocoapods-tj/helpers/library.rb'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            require 'English'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            module CBin
         | 
| 9 | 
            +
              class Library
         | 
| 10 | 
            +
                class Builder
         | 
| 11 | 
            +
                  include Pod
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  def initialize(spec, file_accessor, platform, source_dir,framework_path)
         | 
| 14 | 
            +
                    @spec = spec
         | 
| 15 | 
            +
                    @source_dir = source_dir
         | 
| 16 | 
            +
                    @file_accessor = file_accessor
         | 
| 17 | 
            +
                    @platform = platform
         | 
| 18 | 
            +
                    @framework = framework_path
         | 
| 19 | 
            +
                    @source_files = "#{@source_dir}/#{library.name_path}"
         | 
| 20 | 
            +
                    @source_zip_file = "#{@source_files}.zip"
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  def build
         | 
| 24 | 
            +
                    UI.section("Building static library #{@spec}") do
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                      clean_source_dir
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                      copy_headers
         | 
| 29 | 
            +
                      copy_library
         | 
| 30 | 
            +
                      copy_resources
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                      cp_to_source_dir
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  private
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  def clean_source_dir
         | 
| 39 | 
            +
                    FileUtils.rm_rf(@source_files) if File.exist?(@source_files)
         | 
| 40 | 
            +
                    FileUtils.rm_rf(@source_zip_file) if File.exist?(@source_zip_file)
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  def cp_to_source_dir
         | 
| 44 | 
            +
                    target_dir = library.versions_path
         | 
| 45 | 
            +
                    dest_file = "#{@source_dir}/#{library.name_path}"
         | 
| 46 | 
            +
                    FileUtils.rm_rf(dest_file) if File.exist?(dest_file)
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    `cp -fa #{target_dir} #{dest_file}/`
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  def copy_headers
         | 
| 52 | 
            +
                    FileUtils.cp_r(framework.headers_path,library.versions_path) if File.exist?(framework.headers_path)
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  def copy_library
         | 
| 56 | 
            +
                    src_file = "#{framework.versions_path}/#{@spec.name}"
         | 
| 57 | 
            +
                    unless File.exist?(src_file)
         | 
| 58 | 
            +
                      raise Informative, "framework没有文件:#{src_file}"
         | 
| 59 | 
            +
                    end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                    dest_file = "#{library.versions_path}/#{@spec.name}"
         | 
| 62 | 
            +
                    rename_dest_file = "#{library.versions_path}/lib#{@spec.name}.a"
         | 
| 63 | 
            +
                    FileUtils.cp_r(src_file,dest_file)
         | 
| 64 | 
            +
                    File.rename(dest_file, rename_dest_file ) if File.exist?(dest_file)
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                  def copy_resources
         | 
| 68 | 
            +
                    FileUtils.cp_r(framework.resources_path,library.versions_path) if File.exist?(framework.resources_path)
         | 
| 69 | 
            +
                  end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
             | 
| 72 | 
            +
                  def framework
         | 
| 73 | 
            +
                    @framework ||= begin
         | 
| 74 | 
            +
                                    framework = Framework.new(@spec.name, @platform.name.to_s)
         | 
| 75 | 
            +
                                    framework.make
         | 
| 76 | 
            +
                                    framework
         | 
| 77 | 
            +
                                   end
         | 
| 78 | 
            +
                  end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                  def library
         | 
| 81 | 
            +
                    @library ||= begin
         | 
| 82 | 
            +
                                   library = Library.new(@spec.name, @platform.name.to_s,@spec.version)
         | 
| 83 | 
            +
                                   library.make
         | 
| 84 | 
            +
                                   library
         | 
| 85 | 
            +
                                 end
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
                end
         | 
| 88 | 
            +
              end
         | 
| 89 | 
            +
            end
         | 
| @@ -0,0 +1,57 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
             | 
| 3 | 
            +
            # copy from https://github.com/CocoaPods/cocoapods-packager
         | 
| 4 | 
            +
            require 'cocoapods-tj/config/config_builder'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module CBin
         | 
| 7 | 
            +
              class LocalLibrary
         | 
| 8 | 
            +
                attr_reader :headers_path
         | 
| 9 | 
            +
                attr_reader :resources_path
         | 
| 10 | 
            +
                attr_reader :root_path
         | 
| 11 | 
            +
                attr_reader :versions_path
         | 
| 12 | 
            +
                attr_reader :name_path
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                def initialize(name, platform, version)
         | 
| 15 | 
            +
                  @name = name
         | 
| 16 | 
            +
                  @platform = platform
         | 
| 17 | 
            +
                  @version = version
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                def make
         | 
| 21 | 
            +
                  make_root
         | 
| 22 | 
            +
                  make_library
         | 
| 23 | 
            +
                  make_headers
         | 
| 24 | 
            +
                  make_resources
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def delete_resources
         | 
| 28 | 
            +
                  Pathname.new(@resources_path).rmtree
         | 
| 29 | 
            +
                  (Pathname.new(@fwk_path) + Pathname.new('Resources')).delete
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                private
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                def make_library
         | 
| 35 | 
            +
                  @name_path = CBin::Config::Builder.instance.library_name_version(@name, @version)
         | 
| 36 | 
            +
                  @fwk_path = @root_path + Pathname.new(@name_path)
         | 
| 37 | 
            +
                  @fwk_path.mkdir unless @fwk_path.exist?
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  @versions_path = @fwk_path
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                def make_headers
         | 
| 43 | 
            +
                  @headers_path = @versions_path + Pathname.new('Headers')
         | 
| 44 | 
            +
                  # @headers_path.mkpath unless @headers_path.exist?
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                def make_resources
         | 
| 48 | 
            +
                  @resources_path = @versions_path + Pathname.new('Resources')
         | 
| 49 | 
            +
                  # @resources_path.mkpath unless @resources_path.exist?
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                def make_root
         | 
| 53 | 
            +
                  @root_path = Pathname.new(@platform)
         | 
| 54 | 
            +
                  @root_path.mkpath unless @root_path.exist?
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
              end
         | 
| 57 | 
            +
            end
         |