fir-cli 0.0.4 → 0.0.5
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 +4 -4
- data/lib/fir-cli.rb +27 -29
- data/lib/lagunitas.ext.rb +48 -19
- data/lib/lagunitas.patch.rb +40 -0
- metadata +2 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7542e6029327b193019ad292029cda16611bb3df
         | 
| 4 | 
            +
              data.tar.gz: a8211154ff64bd79f1111a4530bcf304a8a3516a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 594509c71c4ef5933ceb9e80bbfed36dcb03971ece925301256da6a370e445d10728de088d6a8cc41255a68e5a4265b9b9d978182f0e1c0e84d6e0cb206440f0
         | 
| 7 | 
            +
              data.tar.gz: ad35e24c12be9f02ee2335c4639736e85dd09be297192b4d42c0f01c951b4d6d372d44284643e2d1ccbec582b960b0bfde7c8ad0614ab31c82717848016dfb92
         | 
    
        data/lib/fir-cli.rb
    CHANGED
    
    | @@ -10,6 +10,7 @@ require 'pngdefry' | |
| 10 10 | 
             
            require 'user_config'
         | 
| 11 11 | 
             
            require 'rest_client'
         | 
| 12 12 | 
             
            require 'lagunitas'
         | 
| 13 | 
            +
            require 'lagunitas.patch'
         | 
| 13 14 | 
             
            require 'lagunitas.ext'
         | 
| 14 15 |  | 
| 15 16 | 
             
            # p Lagunitas::App.new('').respond_to? :mobileprovision
         | 
| @@ -34,7 +35,7 @@ class FirCli < Thor | |
| 34 35 | 
             
              end
         | 
| 35 36 |  | 
| 36 37 | 
             
              desc 'config', '配置全局设置'
         | 
| 37 | 
            -
              option :resign, :aliases => '-r', :desc => ' | 
| 38 | 
            +
              option :resign, :aliases => '-r', :desc => '是否以企业签名发布', :type => :boolean
         | 
| 38 39 | 
             
              option :token, :aliases => '-t', :desc => '用户令牌'
         | 
| 39 40 | 
             
              option :email, :aliases => '-e', :desc => '邮件地址'
         | 
| 40 41 | 
             
              option :verbose, :aliases => '-v', :desc => '输出配置项', :type => :boolean
         | 
| @@ -54,8 +55,8 @@ class FirCli < Thor | |
| 54 55 | 
             
              option :short, :aliases => '-s', :desc => '自定义短地址'
         | 
| 55 56 | 
             
              option :token, :aliases => '-t', :desc => '用户令牌,不写则使用已经登陆信息'
         | 
| 56 57 | 
             
              def update(path)
         | 
| 57 | 
            -
                app =  | 
| 58 | 
            -
                fir_app =  | 
| 58 | 
            +
                app = _info path, false, true
         | 
| 59 | 
            +
                fir_app = _fir_info app[:identifier]
         | 
| 59 60 | 
             
                opt_short = options[:short]
         | 
| 60 61 | 
             
                post = {}
         | 
| 61 62 | 
             
                post[:public] = options[:public] != nil ? options[:public] : @ipa_config['public']
         | 
| @@ -64,9 +65,9 @@ class FirCli < Thor | |
| 64 65 | 
             
                post.each { |i| if i[1] == fir_app[i[0]] then post.delete i[0] end }
         | 
| 65 66 |  | 
| 66 67 | 
             
                if post.length == 0 then puts '> 没有可以更新的项目'; return end
         | 
| 67 | 
            -
                 | 
| 68 | 
            +
                _fir_put fir_app[:id], post
         | 
| 68 69 |  | 
| 69 | 
            -
                fir_app =  | 
| 70 | 
            +
                fir_app = _fir_info app[:identifier]
         | 
| 70 71 | 
             
                if opt_short && opt_short != fir_app[:short]
         | 
| 71 72 | 
             
                  puts "> 短地址 #{ opt_short } 被占用,FIR.im 自动更新短地址为 #{ fir_app[:short] }"
         | 
| 72 73 | 
             
                end
         | 
| @@ -79,13 +80,13 @@ class FirCli < Thor | |
| 79 80 | 
             
              option :token, :aliases => '-t', :desc => '用户令牌,不写则使用已经登陆信息'
         | 
| 80 81 | 
             
              option :changelog, :aliases => '-c', :desc => '修改纪录,默认为空字符串', :default => ''
         | 
| 81 82 | 
             
              def publish(path)
         | 
| 82 | 
            -
                if  | 
| 83 | 
            +
                if _opt_resign
         | 
| 83 84 | 
             
                  tfile = Tempfile.new SecureRandom.hex
         | 
| 84 85 | 
             
                  resign path, tfile.path
         | 
| 85 86 | 
             
                  path = tfile.path
         | 
| 86 87 | 
             
                end
         | 
| 87 | 
            -
                app =  | 
| 88 | 
            -
                fir_app =  | 
| 88 | 
            +
                app = _info path
         | 
| 89 | 
            +
                fir_app = _fir_info app[:identifier]
         | 
| 89 90 |  | 
| 90 91 | 
             
                id = fir_app[:id]
         | 
| 91 92 | 
             
                short = fir_app[:short]
         | 
| @@ -115,13 +116,13 @@ class FirCli < Thor | |
| 115 116 | 
             
                  puts '上传图标成功'
         | 
| 116 117 | 
             
                end
         | 
| 117 118 |  | 
| 118 | 
            -
                 | 
| 119 | 
            +
                _fir_put fir_app[:id],
         | 
| 119 120 | 
             
                        :name => app[:display_name] || app[:name],
         | 
| 120 121 | 
             
                        :short => options[:short] || fir_app[:short],
         | 
| 121 122 | 
             
                        :version => app[:version],
         | 
| 122 123 | 
             
                        :versionShort => app[:short_version]
         | 
| 123 124 |  | 
| 124 | 
            -
                 | 
| 125 | 
            +
                _fir_vput upload_res[:versionOid],
         | 
| 125 126 | 
             
                         :version => app[:version],
         | 
| 126 127 | 
             
                         :versionShort => app[:short_version],
         | 
| 127 128 | 
             
                         :devices => app[:devices],
         | 
| @@ -132,14 +133,14 @@ class FirCli < Thor | |
| 132 133 | 
             
                puts "> http://fir.im/#{short}"
         | 
| 133 134 | 
             
              end
         | 
| 134 135 |  | 
| 135 | 
            -
              desc ' | 
| 136 | 
            +
              desc 'info IPA_FILE_PATH', '获取 .ipa 文件的信息'
         | 
| 136 137 | 
             
              option 'verbose', :aliases => '-v', :desc => '显示更多信息', :type => :boolean
         | 
| 137 138 | 
             
              option 'fir', :aliases => '-f', :desc => '显示托管在 fir.im 的信息', :type => :boolean
         | 
| 138 | 
            -
              def  | 
| 139 | 
            -
                app =  | 
| 139 | 
            +
              def info(path)
         | 
| 140 | 
            +
                app = _info path, false, options['verbose']
         | 
| 140 141 | 
             
                app.each { |i| puts "#{ Paint[i[0].to_s.rjust(15), :blue] }  #{ i[1] }" }
         | 
| 141 142 | 
             
                if options[:fir]
         | 
| 142 | 
            -
                  fir_app =  | 
| 143 | 
            +
                  fir_app = _fir_info app[:identifier]
         | 
| 143 144 | 
             
                  fir_app.each { |i| puts "#{ Paint[i[0].to_s.rjust(15), :blue] }  #{ i[1] }" }
         | 
| 144 145 | 
             
                end
         | 
| 145 146 | 
             
              end
         | 
| @@ -154,7 +155,7 @@ class FirCli < Thor | |
| 154 155 | 
             
                puts "! 用分发,请注意:#{ Paint['当证书失效后,所有安装以失效证', :red ] }"
         | 
| 155 156 | 
             
                puts "! #{ Paint['书签名的的用户都会无法正常运行应用;同时托管在', :red ] }"
         | 
| 156 157 | 
             
                puts "! #{ Paint['fir.im 的应用将无法正常安装。', :red ] }"
         | 
| 157 | 
            -
                if  | 
| 158 | 
            +
                if _opt_email == nil
         | 
| 158 159 | 
             
                  puts Paint['! 您需要提供邮件地址才能使用 resign.tapbeta.com 的签名服务', :red]
         | 
| 159 160 | 
             
                  puts Paint['! 使用 fir config --email=EMAIL 进行设置', :green]
         | 
| 160 161 | 
             
                  exit
         | 
| @@ -198,7 +199,7 @@ class FirCli < Thor | |
| 198 199 | 
             
              end
         | 
| 199 200 |  | 
| 200 201 | 
             
              private
         | 
| 201 | 
            -
              def  | 
| 202 | 
            +
              def _info(path, quiet = false, more = false)
         | 
| 202 203 | 
             
                path = Pathname.new(Dir.pwd).join(path).cleanpath
         | 
| 203 204 | 
             
                ipa = Lagunitas::IPA.new path
         | 
| 204 205 | 
             
                if !quiet then puts '> 正在解析 ipa 文件...' end
         | 
| @@ -214,17 +215,14 @@ class FirCli < Thor | |
| 214 215 | 
             
                  # :distribution_name => app.distribution_name
         | 
| 215 216 | 
             
                }
         | 
| 216 217 | 
             
                if more
         | 
| 217 | 
            -
                   | 
| 218 | 
            -
                    info[:icons] = app.icons
         | 
| 219 | 
            -
                  rescue
         | 
| 220 | 
            -
                  end
         | 
| 218 | 
            +
                  info[:icons] = app.icons
         | 
| 221 219 | 
             
                  info[:plist] = app.info
         | 
| 222 220 | 
             
                end
         | 
| 223 221 | 
             
                ipa.cleanup
         | 
| 224 222 | 
             
                info
         | 
| 225 223 | 
             
              end
         | 
| 226 | 
            -
              def  | 
| 227 | 
            -
                if ! | 
| 224 | 
            +
              def _fir_info(identifier, quiet = false)
         | 
| 225 | 
            +
                if !_opt_token
         | 
| 228 226 | 
             
                  puts Paint['! 您还没有登录', :red]
         | 
| 229 227 | 
             
                  puts Paint['! 请 fir login USER_TOKEN 登录', :green]
         | 
| 230 228 | 
             
                  exit
         | 
| @@ -234,8 +232,8 @@ class FirCli < Thor | |
| 234 232 | 
             
                res = RestClient.get "http://fir.im/api/v2/app/info/#{identifier}?#{URI.encode_www_form body}"
         | 
| 235 233 | 
             
                JSON.parse res.body, :symbolize_names => true
         | 
| 236 234 | 
             
              end
         | 
| 237 | 
            -
              def  | 
| 238 | 
            -
                if ! | 
| 235 | 
            +
              def _fir_put(id, body, quiet = false)
         | 
| 236 | 
            +
                if !_opt_token
         | 
| 239 237 | 
             
                  puts Paint['! 您还没有登录', :red]
         | 
| 240 238 | 
             
                  puts Paint['! 请 fir login USER_TOKEN 登录', :green]
         | 
| 241 239 | 
             
                  exit
         | 
| @@ -245,8 +243,8 @@ class FirCli < Thor | |
| 245 243 | 
             
                RestClient.put "http://fir.im/api/v2/app/#{id}?#{URI.encode_www_form body}", body
         | 
| 246 244 | 
             
                puts '> 更新成功'
         | 
| 247 245 | 
             
              end
         | 
| 248 | 
            -
              def  | 
| 249 | 
            -
                if ! | 
| 246 | 
            +
              def _fir_vput(id, body, quiet = false)
         | 
| 247 | 
            +
                if !_opt_token
         | 
| 250 248 | 
             
                  puts Paint['! 您还没有登录', :red]
         | 
| 251 249 | 
             
                  puts Paint['! 请 fir login USER_TOKEN 登录', :green]
         | 
| 252 250 | 
             
                  exit
         | 
| @@ -256,13 +254,13 @@ class FirCli < Thor | |
| 256 254 | 
             
                RestClient.put "http://fir.im/api/v2/appVersion/#{id}/complete?#{URI.encode_www_form body}", body
         | 
| 257 255 | 
             
                puts '> 更新成功'
         | 
| 258 256 | 
             
              end
         | 
| 259 | 
            -
              def  | 
| 257 | 
            +
              def _opt_token
         | 
| 260 258 | 
             
                @token = options[:token] || @ipa_config['token'] || nil
         | 
| 261 259 | 
             
              end
         | 
| 262 | 
            -
              def  | 
| 260 | 
            +
              def _opt_email
         | 
| 263 261 | 
             
                @email = options[:email] || @ipa_config['email'] || nil
         | 
| 264 262 | 
             
              end
         | 
| 265 | 
            -
              def  | 
| 263 | 
            +
              def _opt_resign
         | 
| 266 264 | 
             
                @resign = options[:resign] || @ipa_config['resign'] || nil
         | 
| 267 265 | 
             
              end
         | 
| 268 266 | 
             
            end
         | 
    
        data/lib/lagunitas.ext.rb
    CHANGED
    
    | @@ -2,25 +2,54 @@ require 'cfpropertylist' | |
| 2 2 | 
             
            require 'lagunitas'
         | 
| 3 3 | 
             
            module Lagunitas
         | 
| 4 4 | 
             
              class App
         | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 5 | 
            +
                def initialize(path, root)
         | 
| 6 | 
            +
                  @path = path
         | 
| 7 | 
            +
                  @root = root
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
                def name
         | 
| 10 | 
            +
                  @info['CFBundleName']
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
                def mobileprovision
         | 
| 13 | 
            +
                  return if !mobileprovision?
         | 
| 14 | 
            +
                  @mobileprovision ||= CFPropertyList.native_types CFPropertyList::List.new(:data => `security cms -D -i #{File.join @path, 'embedded.mobileprovision'}`).value
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
                def mobileprovision?
         | 
| 17 | 
            +
                  return true if @mobileprovision
         | 
| 18 | 
            +
                  File.exists? File.join @path, 'embedded.mobileprovision'
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
                def devices
         | 
| 21 | 
            +
                  mobileprovision['ProvisionedDevices'] if mobileprovision
         | 
| 22 | 
            +
                end
         | 
| 14 23 | 
             
                def distribution_name
         | 
| 15 | 
            -
                  mobileprovision['DeveloperCertificates']
         | 
| 16 | 
            -
                end
         | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
                
         | 
| 24 | 
            +
                  mobileprovision['DeveloperCertificates'] if mobileprovision
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
                def metadata
         | 
| 27 | 
            +
                  return if !metadata?
         | 
| 28 | 
            +
                  @metadata ||= CFPropertyList.native_types(CFPropertyList::List.new(file: File.join(@root, 'iTunesMetadata.plist')).value)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
                def metadata?
         | 
| 31 | 
            +
                  return true if @metadata
         | 
| 32 | 
            +
                  File.exists? File.join @root, 'iTunesMetadata.plist'
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
                def release_type
         | 
| 35 | 
            +
                  @release_type ||= begin
         | 
| 36 | 
            +
                    if mobileprovision?
         | 
| 37 | 
            +
                      if devices
         | 
| 38 | 
            +
                        'adhoc'
         | 
| 39 | 
            +
                      else
         | 
| 40 | 
            +
                        'inhouse'
         | 
| 41 | 
            +
                      end
         | 
| 42 | 
            +
                    elsif metadata?
         | 
| 43 | 
            +
                      'store'
         | 
| 44 | 
            +
                    else
         | 
| 45 | 
            +
                      'adhoc'
         | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
              class IPA
         | 
| 51 | 
            +
                def root_path
         | 
| 52 | 
            +
                  contents
         | 
| 53 | 
            +
                end
         | 
| 25 54 | 
             
              end
         | 
| 26 55 | 
             
            end
         | 
| @@ -0,0 +1,40 @@ | |
| 1 | 
            +
            require 'lagunitas'
         | 
| 2 | 
            +
            module Lagunitas
         | 
| 3 | 
            +
              class App
         | 
| 4 | 
            +
                def initialize(path, root)
         | 
| 5 | 
            +
                  @path = path
         | 
| 6 | 
            +
                  @root = root
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
                def icons
         | 
| 9 | 
            +
                  @icons ||= begin
         | 
| 10 | 
            +
                    icons = []
         | 
| 11 | 
            +
                    info['CFBundleIcons']['CFBundlePrimaryIcon']['CFBundleIconFiles'].each do |name|
         | 
| 12 | 
            +
                      icons << get_image(name)
         | 
| 13 | 
            +
                      icons << get_image("#{name}@2x")
         | 
| 14 | 
            +
                    end
         | 
| 15 | 
            +
                    icons.delete_if { |i| !i }
         | 
| 16 | 
            +
                  rescue
         | 
| 17 | 
            +
                    # info['CFBundleIcons'] might be nil
         | 
| 18 | 
            +
                    nil
         | 
| 19 | 
            +
                  end
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
              class IPA
         | 
| 23 | 
            +
                def app
         | 
| 24 | 
            +
                  @app ||= App.new app_path, root_path
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
                def contents
         | 
| 27 | 
            +
                  @contents ||= begin
         | 
| 28 | 
            +
                    tmp_path = "tmp/lagunitas-#{SecureRandom.hex}"
         | 
| 29 | 
            +
                    Zip::ZipFile.open @path do |zip_file|
         | 
| 30 | 
            +
                      zip_file.each do |f|
         | 
| 31 | 
            +
                        f_path = File.join tmp_path, f.name
         | 
| 32 | 
            +
                        FileUtils.mkdir_p File.dirname f_path
         | 
| 33 | 
            +
                        zip_file.extract f, f_path unless File.exist? f_path
         | 
| 34 | 
            +
                      end
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
                    tmp_path
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: fir-cli
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.0. | 
| 4 | 
            +
              version: 0.0.5
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Yan
         | 
| @@ -103,6 +103,7 @@ extra_rdoc_files: [] | |
| 103 103 | 
             
            files:
         | 
| 104 104 | 
             
            - lib/fir-cli.rb
         | 
| 105 105 | 
             
            - lib/lagunitas.ext.rb
         | 
| 106 | 
            +
            - lib/lagunitas.patch.rb
         | 
| 106 107 | 
             
            - bin/fir
         | 
| 107 108 | 
             
            homepage: https://github.com/idy/fir-cli
         | 
| 108 109 | 
             
            licenses:
         |