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.
@@ -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,3 @@
1
+ module Shenzhen
2
+ VERSION = '0.14.5'
3
+ 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
@@ -0,0 +1,4 @@
1
+ require 'shenzhen/version'
2
+ require 'shenzhen/agvtool'
3
+ require 'shenzhen/xcodebuild'
4
+ require 'shenzhen/plistbuddy'
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: []