shenzhen_fir 0.14.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 +7 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +68 -0
- data/LICENSE +19 -0
- data/README.md +198 -0
- data/Rakefile +9 -0
- data/bin/ipa +25 -0
- data/compare_varnish.jpg +0 -0
- data/lib/shenzhen/agvtool.rb +17 -0
- data/lib/shenzhen/commands/build.rb +208 -0
- data/lib/shenzhen/commands/distribute.rb +30 -0
- data/lib/shenzhen/commands/info.rb +94 -0
- data/lib/shenzhen/commands.rb +16 -0
- data/lib/shenzhen/plistbuddy.rb +9 -0
- data/lib/shenzhen/plugins/crashlytics.rb +82 -0
- data/lib/shenzhen/plugins/deploygate.rb +97 -0
- data/lib/shenzhen/plugins/fir.rb +151 -0
- data/lib/shenzhen/plugins/ftp.rb +181 -0
- data/lib/shenzhen/plugins/hockeyapp.rb +119 -0
- data/lib/shenzhen/plugins/itunesconnect.rb +142 -0
- data/lib/shenzhen/plugins/pgyer.rb +135 -0
- data/lib/shenzhen/plugins/rivierabuild.rb +81 -0
- data/lib/shenzhen/plugins/s3.rb +139 -0
- data/lib/shenzhen/plugins/testfairy.rb +99 -0
- data/lib/shenzhen/version.rb +3 -0
- data/lib/shenzhen/xcodebuild.rb +99 -0
- data/lib/shenzhen.rb +4 -0
- data/npm-debug.log +84 -0
- data/shenzhen.gemspec +37 -0
- metadata +268 -0
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'openssl'
|
3
|
+
require 'faraday'
|
4
|
+
require 'faraday_middleware'
|
5
|
+
|
6
|
+
module Shenzhen::Plugins
|
7
|
+
module TestFairy
|
8
|
+
class Client
|
9
|
+
HOSTNAME = 'app.testfairy.com'
|
10
|
+
|
11
|
+
def initialize(api_key)
|
12
|
+
@api_key = api_key
|
13
|
+
@connection = Faraday.new(:url => "https://#{HOSTNAME}") do |builder|
|
14
|
+
builder.request :multipart
|
15
|
+
builder.request :url_encoded
|
16
|
+
builder.response :json, :content_type => /\bjson$/
|
17
|
+
builder.use FaradayMiddleware::FollowRedirects
|
18
|
+
builder.adapter :net_http
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def upload_build(ipa, options)
|
23
|
+
options[:file] = Faraday::UploadIO.new(ipa, 'application/octet-stream') if ipa and File.exist?(ipa)
|
24
|
+
|
25
|
+
if symbols_file = options.delete(:symbols_file)
|
26
|
+
options[:symbols_file] = Faraday::UploadIO.new(symbols_file, 'application/octet-stream')
|
27
|
+
end
|
28
|
+
|
29
|
+
@connection.post do |req|
|
30
|
+
req.url("/api/upload/")
|
31
|
+
req.body = options
|
32
|
+
end.on_complete do |env|
|
33
|
+
yield env[:status], env[:body] if block_given?
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
command :'distribute:testfairy' do |c|
|
41
|
+
c.syntax = "ipa distribute:testfairy [options]"
|
42
|
+
c.summary = "Distribute an .ipa file over TestFairy"
|
43
|
+
c.description = ""
|
44
|
+
c.option '-f', '--file FILE', ".ipa file for the build"
|
45
|
+
c.option '-d', '--dsym FILE', "zipped .dsym package for the build"
|
46
|
+
c.option '-a', '--key KEY', "API Key. Available at https://app.testfairy.com/settings for details."
|
47
|
+
c.option '-c', '--comment COMMENT', "Comment for the build"
|
48
|
+
c.option '--tester-groups GROUPS', 'Comma-separated list of tester groups to be notified on the new build. Or "all" to notify all testers.'
|
49
|
+
c.option '--metrics METRICS', "Comma-separated list of metrics to record"
|
50
|
+
c.option '--max-duration DURATION', 'Maximum session recording length, eg 20m or 1h. Default is "10m". Maximum 24h.'
|
51
|
+
c.option '--video ACTIVE', 'Video recording settings "on", "off" or "wifi" for recording video only when wifi is available. Default is "on".'
|
52
|
+
c.option '--video-quality QUALITY', 'Video quality settings, "high", "medium" or "low". Default is "high".'
|
53
|
+
c.option '--video-rate RATE', 'Video rate recording in frames per second, default is "1.0".'
|
54
|
+
c.option '--icon-watermark ADD', 'Add a small watermark to app icon. Default is "off".'
|
55
|
+
|
56
|
+
c.action do |args, options|
|
57
|
+
determine_file! unless @file = options.file
|
58
|
+
say_warning "Missing or unspecified .ipa file" unless @file and File.exist?(@file)
|
59
|
+
|
60
|
+
determine_dsym! unless @dsym = options.dsym
|
61
|
+
say_warning "Specified dSYM.zip file doesn't exist" if @dsym and !File.exist?(@dsym)
|
62
|
+
|
63
|
+
determine_testfairy_api_key! unless @api_key = options.key || ENV['TESTFAIRY_API_KEY']
|
64
|
+
say_error "Missing API Key" and abort unless @api_key
|
65
|
+
|
66
|
+
determine_notes! unless @comment = options.comment
|
67
|
+
say_error "Missing release comment" and abort unless @comment
|
68
|
+
|
69
|
+
parameters = {}
|
70
|
+
# Required
|
71
|
+
parameters[:api_key] = @api_key
|
72
|
+
# Optional
|
73
|
+
parameters[:comment] = @comment
|
74
|
+
parameters[:symbols_file] = @dsym if @dsym
|
75
|
+
parameters[:testers_groups] = options.testers_groups if options.testers_groups
|
76
|
+
parameters[:'max-duration'] = options.max_duration if options.max_duration
|
77
|
+
parameters[:video] = options.video if options.video
|
78
|
+
parameters[:'video-quality'] = options.video_quality if options.video_quality
|
79
|
+
parameters[:'video-rate'] = options.video_rate if options.video_rate
|
80
|
+
parameters[:'icon-watermark'] = options.icon_watermark if options.icon_watermark
|
81
|
+
parameters[:metrics] = options.metrics if options.metrics
|
82
|
+
|
83
|
+
|
84
|
+
client = Shenzhen::Plugins::TestFairy::Client.new(@api_key)
|
85
|
+
response = client.upload_build(@file, parameters)
|
86
|
+
case response.status
|
87
|
+
when 200...300
|
88
|
+
say_ok "Build successfully uploaded to TestFairy"
|
89
|
+
else
|
90
|
+
say_error "Error uploading to TestFairy: #{response.body}"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
def determine_testfairy_api_key!
|
97
|
+
@api_key ||= ask "API Key:"
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module Shenzhen::XcodeBuild
|
4
|
+
class Info < OpenStruct; end
|
5
|
+
class Settings < OpenStruct
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
def initialize(hash = {})
|
9
|
+
super
|
10
|
+
self.targets = hash.keys
|
11
|
+
end
|
12
|
+
|
13
|
+
def members
|
14
|
+
self.targets
|
15
|
+
end
|
16
|
+
|
17
|
+
def each
|
18
|
+
members.each do |target|
|
19
|
+
yield target, send(target)
|
20
|
+
end
|
21
|
+
|
22
|
+
self
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class Error < StandardError; end
|
27
|
+
class NilOutputError < Error; end
|
28
|
+
|
29
|
+
class << self
|
30
|
+
def info(*args)
|
31
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
32
|
+
output = `xcrun xcodebuild -list #{(args + args_from_options(options)).join(" ")} 2>&1`
|
33
|
+
|
34
|
+
raise Error.new $1 if /^xcodebuild\: error\: (.+)$/ === output
|
35
|
+
|
36
|
+
return nil unless /\S/ === output
|
37
|
+
|
38
|
+
lines = output.split(/\n/)
|
39
|
+
info, group = {}, nil
|
40
|
+
|
41
|
+
info[:project] = lines.shift.match(/\"(.+)\"\:/)[1] rescue nil
|
42
|
+
|
43
|
+
lines.each do |line|
|
44
|
+
if /\:$/ === line
|
45
|
+
group = line.strip[0...-1].downcase.gsub(/\s+/, '_')
|
46
|
+
info[group] = []
|
47
|
+
next
|
48
|
+
end
|
49
|
+
|
50
|
+
unless group.nil? or /\.$/ === line
|
51
|
+
info[group] << line.strip
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
info.each do |group, values|
|
56
|
+
next unless Array === values
|
57
|
+
values.delete("") and values.uniq!
|
58
|
+
end
|
59
|
+
|
60
|
+
Info.new(info)
|
61
|
+
end
|
62
|
+
|
63
|
+
def settings(*args)
|
64
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
65
|
+
output = `xcrun xcodebuild #{(args + args_from_options(options)).join(" ")} -showBuildSettings 2> /dev/null`
|
66
|
+
|
67
|
+
return nil unless /\S/ === output
|
68
|
+
|
69
|
+
raise Error.new $1 if /^xcodebuild\: error\: (.+)$/ === output
|
70
|
+
|
71
|
+
lines = output.split(/\n/)
|
72
|
+
|
73
|
+
settings, target = {}, nil
|
74
|
+
lines.each do |line|
|
75
|
+
case line
|
76
|
+
when /Build settings for action build and target \"?([^":]+)/
|
77
|
+
target = $1
|
78
|
+
settings[target] = {}
|
79
|
+
else
|
80
|
+
key, value = line.split(/\=/).collect(&:strip)
|
81
|
+
settings[target][key] = value if target
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
Settings.new(settings)
|
86
|
+
end
|
87
|
+
|
88
|
+
def version
|
89
|
+
output = `xcrun xcodebuild -version`
|
90
|
+
output.scan(/([\d+\.?]+)/).flatten.first rescue nil
|
91
|
+
end
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
def args_from_options(options = {})
|
96
|
+
options.reject{|key, value| value.nil?}.collect{|key, value| "-#{key} '#{value}'"}
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
data/lib/shenzhen.rb
ADDED
data/npm-debug.log
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
0 info it worked if it ends with ok
|
2
|
+
1 verbose cli [ '/Users/will/.nvm/versions/v0.12.2/bin/node',
|
3
|
+
1 verbose cli '/Users/will/.nvm/versions/v0.12.2/bin/npm',
|
4
|
+
1 verbose cli 'install',
|
5
|
+
1 verbose cli 'htop' ]
|
6
|
+
2 info using npm@2.7.4
|
7
|
+
3 info using node@v0.12.2
|
8
|
+
4 verbose config Skipping project config: /Users/will/.npmrc. (matches userconfig)
|
9
|
+
5 warn package.json querystring@0.2.0 querystring is also the name of a node core module.
|
10
|
+
6 silly cache add args [ 'htop', null ]
|
11
|
+
7 verbose cache add spec htop
|
12
|
+
8 silly cache add parsed spec { raw: 'htop',
|
13
|
+
8 silly cache add scope: null,
|
14
|
+
8 silly cache add name: 'htop',
|
15
|
+
8 silly cache add rawSpec: '',
|
16
|
+
8 silly cache add spec: '*',
|
17
|
+
8 silly cache add type: 'range' }
|
18
|
+
9 verbose addNamed htop@*
|
19
|
+
10 silly addNamed semver.valid null
|
20
|
+
11 silly addNamed semver.validRange *
|
21
|
+
12 silly addNameRange { name: 'htop', range: '*', hasData: false }
|
22
|
+
13 silly mapToRegistry name htop
|
23
|
+
14 silly mapToRegistry using default registry
|
24
|
+
15 silly mapToRegistry registry https://registry.npmjs.org/
|
25
|
+
16 silly mapToRegistry uri https://registry.npmjs.org/htop
|
26
|
+
17 verbose addNameRange registry:https://registry.npmjs.org/htop not in flight; fetching
|
27
|
+
18 verbose request uri https://registry.npmjs.org/htop
|
28
|
+
19 verbose request no auth needed
|
29
|
+
20 info attempt registry request try #1 at 16:16:01
|
30
|
+
21 verbose request using bearer token for auth
|
31
|
+
22 verbose request id f2db814ca79dbe2d
|
32
|
+
23 http request GET https://registry.npmjs.org/htop
|
33
|
+
24 http 404 https://registry.npmjs.org/htop
|
34
|
+
25 verbose headers { 'content-type': 'application/json',
|
35
|
+
25 verbose headers 'cache-control': 'max-age=0',
|
36
|
+
25 verbose headers 'content-length': '2',
|
37
|
+
25 verbose headers 'accept-ranges': 'bytes',
|
38
|
+
25 verbose headers date: 'Fri, 06 Nov 2015 08:16:02 GMT',
|
39
|
+
25 verbose headers via: '1.1 varnish',
|
40
|
+
25 verbose headers connection: 'keep-alive',
|
41
|
+
25 verbose headers 'x-served-by': 'cache-nrt6134-NRT',
|
42
|
+
25 verbose headers 'x-cache': 'MISS',
|
43
|
+
25 verbose headers 'x-cache-hits': '0',
|
44
|
+
25 verbose headers 'x-timer': 'S1446797762.290517,VS0,VE187' }
|
45
|
+
26 silly get cb [ 404,
|
46
|
+
26 silly get { 'content-type': 'application/json',
|
47
|
+
26 silly get 'cache-control': 'max-age=0',
|
48
|
+
26 silly get 'content-length': '2',
|
49
|
+
26 silly get 'accept-ranges': 'bytes',
|
50
|
+
26 silly get date: 'Fri, 06 Nov 2015 08:16:02 GMT',
|
51
|
+
26 silly get via: '1.1 varnish',
|
52
|
+
26 silly get connection: 'keep-alive',
|
53
|
+
26 silly get 'x-served-by': 'cache-nrt6134-NRT',
|
54
|
+
26 silly get 'x-cache': 'MISS',
|
55
|
+
26 silly get 'x-cache-hits': '0',
|
56
|
+
26 silly get 'x-timer': 'S1446797762.290517,VS0,VE187' } ]
|
57
|
+
27 verbose stack Error: Registry returned 404 for GET on https://registry.npmjs.org/htop
|
58
|
+
27 verbose stack at CachingRegistryClient.<anonymous> (/Users/will/.nvm/versions/v0.12.2/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:239:14)
|
59
|
+
27 verbose stack at Request._callback (/Users/will/.nvm/versions/v0.12.2/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:170:14)
|
60
|
+
27 verbose stack at Request.self.callback (/Users/will/.nvm/versions/v0.12.2/lib/node_modules/npm/node_modules/request/request.js:344:22)
|
61
|
+
27 verbose stack at Request.emit (events.js:110:17)
|
62
|
+
27 verbose stack at Request.<anonymous> (/Users/will/.nvm/versions/v0.12.2/lib/node_modules/npm/node_modules/request/request.js:1239:14)
|
63
|
+
27 verbose stack at Request.emit (events.js:129:20)
|
64
|
+
27 verbose stack at IncomingMessage.<anonymous> (/Users/will/.nvm/versions/v0.12.2/lib/node_modules/npm/node_modules/request/request.js:1187:12)
|
65
|
+
27 verbose stack at IncomingMessage.emit (events.js:129:20)
|
66
|
+
27 verbose stack at _stream_readable.js:908:16
|
67
|
+
27 verbose stack at process._tickCallback (node.js:355:11)
|
68
|
+
28 verbose statusCode 404
|
69
|
+
29 verbose pkgid htop
|
70
|
+
30 verbose cwd /Users/will/service/shenzhen
|
71
|
+
31 error Darwin 14.0.0
|
72
|
+
32 error argv "/Users/will/.nvm/versions/v0.12.2/bin/node" "/Users/will/.nvm/versions/v0.12.2/bin/npm" "install" "htop"
|
73
|
+
33 error node v0.12.2
|
74
|
+
34 error npm v2.7.4
|
75
|
+
35 error code E404
|
76
|
+
36 error 404 Registry returned 404 for GET on https://registry.npmjs.org/htop
|
77
|
+
36 error 404
|
78
|
+
36 error 404 'htop' is not in the npm registry.
|
79
|
+
36 error 404 You should bug the author to publish it (or use the name yourself!)
|
80
|
+
36 error 404 It was specified as a dependency of 'willnode'
|
81
|
+
36 error 404
|
82
|
+
36 error 404 Note that you can also install from a
|
83
|
+
36 error 404 tarball, folder, http url, or git url.
|
84
|
+
37 verbose exit [ 1, true ]
|
data/shenzhen.gemspec
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
|
4
|
+
require "shenzhen/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "shenzhen_fir"
|
8
|
+
s.authors = ["Mattt Thompson"]
|
9
|
+
s.email = "m@mattt.me"
|
10
|
+
s.license = "MIT"
|
11
|
+
s.homepage = "http://nomad-cli.com"
|
12
|
+
s.version = Shenzhen::VERSION
|
13
|
+
s.platform = Gem::Platform::RUBY
|
14
|
+
s.summary = "Shenzhen"
|
15
|
+
s.description = "CLI for Building & Distributing iOS Apps (.ipa Files)"
|
16
|
+
|
17
|
+
s.add_dependency "commander", "~> 4.3"
|
18
|
+
s.add_dependency "highline", ">= 1.7.2"
|
19
|
+
s.add_dependency "terminal-table", "~> 1.4.5"
|
20
|
+
s.add_dependency "json", "~> 1.8"
|
21
|
+
s.add_dependency "faraday", "~> 0.8.9"
|
22
|
+
s.add_dependency "faraday_middleware", "~> 0.9"
|
23
|
+
s.add_dependency "dotenv", ">= 0.7"
|
24
|
+
s.add_dependency "aws-sdk", "~> 1.0"
|
25
|
+
s.add_dependency "net-sftp", "~> 2.1.2"
|
26
|
+
s.add_dependency "plist", "~> 3.1.0"
|
27
|
+
s.add_dependency "rubyzip", "~> 1.1"
|
28
|
+
s.add_dependency "security", "~> 0.1.3"
|
29
|
+
|
30
|
+
s.add_development_dependency "rspec"
|
31
|
+
s.add_development_dependency "rake"
|
32
|
+
|
33
|
+
s.files = Dir["./**/*"].reject { |file| file =~ /\.\/(bin|log|pkg|script|spec|test|vendor)/ }
|
34
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
35
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
36
|
+
s.require_paths = ["lib"]
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,268 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: shenzhen_fir
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.14.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mattt Thompson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-11-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: commander
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: highline
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.7.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.7.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: terminal-table
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.4.5
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.4.5
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: json
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.8'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.8'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: faraday
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.8.9
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.8.9
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: faraday_middleware
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.9'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.9'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: dotenv
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.7'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.7'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: aws-sdk
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '1.0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '1.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: net-sftp
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 2.1.2
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 2.1.2
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: plist
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 3.1.0
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 3.1.0
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rubyzip
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.1'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '1.1'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: security
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 0.1.3
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 0.1.3
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: rspec
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: rake
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
description: CLI for Building & Distributing iOS Apps (.ipa Files)
|
210
|
+
email: m@mattt.me
|
211
|
+
executables:
|
212
|
+
- ipa
|
213
|
+
extensions: []
|
214
|
+
extra_rdoc_files: []
|
215
|
+
files:
|
216
|
+
- "./Gemfile"
|
217
|
+
- "./Gemfile.lock"
|
218
|
+
- "./LICENSE"
|
219
|
+
- "./README.md"
|
220
|
+
- "./Rakefile"
|
221
|
+
- "./compare_varnish.jpg"
|
222
|
+
- "./lib/shenzhen.rb"
|
223
|
+
- "./lib/shenzhen/agvtool.rb"
|
224
|
+
- "./lib/shenzhen/commands.rb"
|
225
|
+
- "./lib/shenzhen/commands/build.rb"
|
226
|
+
- "./lib/shenzhen/commands/distribute.rb"
|
227
|
+
- "./lib/shenzhen/commands/info.rb"
|
228
|
+
- "./lib/shenzhen/plistbuddy.rb"
|
229
|
+
- "./lib/shenzhen/plugins/crashlytics.rb"
|
230
|
+
- "./lib/shenzhen/plugins/deploygate.rb"
|
231
|
+
- "./lib/shenzhen/plugins/fir.rb"
|
232
|
+
- "./lib/shenzhen/plugins/ftp.rb"
|
233
|
+
- "./lib/shenzhen/plugins/hockeyapp.rb"
|
234
|
+
- "./lib/shenzhen/plugins/itunesconnect.rb"
|
235
|
+
- "./lib/shenzhen/plugins/pgyer.rb"
|
236
|
+
- "./lib/shenzhen/plugins/rivierabuild.rb"
|
237
|
+
- "./lib/shenzhen/plugins/s3.rb"
|
238
|
+
- "./lib/shenzhen/plugins/testfairy.rb"
|
239
|
+
- "./lib/shenzhen/version.rb"
|
240
|
+
- "./lib/shenzhen/xcodebuild.rb"
|
241
|
+
- "./npm-debug.log"
|
242
|
+
- "./shenzhen.gemspec"
|
243
|
+
- bin/ipa
|
244
|
+
homepage: http://nomad-cli.com
|
245
|
+
licenses:
|
246
|
+
- MIT
|
247
|
+
metadata: {}
|
248
|
+
post_install_message:
|
249
|
+
rdoc_options: []
|
250
|
+
require_paths:
|
251
|
+
- lib
|
252
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
253
|
+
requirements:
|
254
|
+
- - ">="
|
255
|
+
- !ruby/object:Gem::Version
|
256
|
+
version: '0'
|
257
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
258
|
+
requirements:
|
259
|
+
- - ">="
|
260
|
+
- !ruby/object:Gem::Version
|
261
|
+
version: '0'
|
262
|
+
requirements: []
|
263
|
+
rubyforge_project:
|
264
|
+
rubygems_version: 2.2.2
|
265
|
+
signing_key:
|
266
|
+
specification_version: 4
|
267
|
+
summary: Shenzhen
|
268
|
+
test_files: []
|