shenzhen 0.11.2 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +12 -10
- data/README.md +0 -13
- data/lib/shenzhen/commands.rb +0 -1
- data/lib/shenzhen/commands/build.rb +3 -1
- data/lib/shenzhen/commands/distribute.rb +2 -4
- data/lib/shenzhen/plugins/pgyer.rb +2 -2
- data/lib/shenzhen/version.rb +1 -1
- data/shenzhen-0.11.2.gem +0 -0
- data/shenzhen.gemspec +1 -1
- metadata +5 -5
- data/lib/shenzhen/plugins/testflight.rb +0 -99
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a25e6cf547a77b7148e488d19c7007fadc90c3ef
|
4
|
+
data.tar.gz: 6e8c8fb827938d44a1b189be57b74d8693d15a0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 568b6bbf5e2dc785f2a8e843d5be2aa8e70ff77775055f868d43e4eaecea504dd180db064b6f398ba04c0e68cb8e9cc629b1e54ffc178817424f15249087c889
|
7
|
+
data.tar.gz: b48f32a2415431156ebd7920a4cbb8d224d96aa86787541f11294b2ef6a1ac884aa6b46b07de5fe37ac299901036178f321923d1cb63f8523c81d230e9d17e8c
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
shenzhen (0.
|
4
|
+
shenzhen (0.12.0)
|
5
5
|
aws-sdk (~> 1.0)
|
6
|
-
commander (~> 4.
|
6
|
+
commander (~> 4.3)
|
7
7
|
dotenv (~> 0.7)
|
8
8
|
faraday (~> 0.8.9)
|
9
9
|
faraday_middleware (~> 0.9)
|
@@ -17,10 +17,12 @@ PATH
|
|
17
17
|
GEM
|
18
18
|
remote: https://rubygems.org/
|
19
19
|
specs:
|
20
|
-
aws-sdk (1.
|
20
|
+
aws-sdk (1.63.0)
|
21
|
+
aws-sdk-v1 (= 1.63.0)
|
22
|
+
aws-sdk-v1 (1.63.0)
|
21
23
|
json (~> 1.4)
|
22
24
|
nokogiri (>= 1.4.4)
|
23
|
-
commander (4.
|
25
|
+
commander (4.3.0)
|
24
26
|
highline (~> 1.6.11)
|
25
27
|
diff-lcs (1.2.5)
|
26
28
|
dotenv (0.11.1)
|
@@ -31,14 +33,14 @@ GEM
|
|
31
33
|
faraday_middleware (0.9.1)
|
32
34
|
faraday (>= 0.7.4, < 0.10)
|
33
35
|
highline (1.6.21)
|
34
|
-
json (1.8.
|
35
|
-
mini_portile (0.6.
|
36
|
+
json (1.8.2)
|
37
|
+
mini_portile (0.6.2)
|
36
38
|
multipart-post (1.2.0)
|
37
39
|
net-sftp (2.1.2)
|
38
40
|
net-ssh (>= 2.6.5)
|
39
|
-
net-ssh (2.9.
|
40
|
-
nokogiri (1.6.
|
41
|
-
mini_portile (
|
41
|
+
net-ssh (2.9.2)
|
42
|
+
nokogiri (1.6.6.2)
|
43
|
+
mini_portile (~> 0.6.0)
|
42
44
|
plist (3.1.0)
|
43
45
|
rake (10.3.1)
|
44
46
|
rspec (2.14.1)
|
@@ -49,7 +51,7 @@ GEM
|
|
49
51
|
rspec-expectations (2.14.5)
|
50
52
|
diff-lcs (>= 1.1.3, < 2.0)
|
51
53
|
rspec-mocks (2.14.6)
|
52
|
-
rubyzip (1.1.
|
54
|
+
rubyzip (1.1.7)
|
53
55
|
security (0.1.3)
|
54
56
|
terminal-table (1.4.5)
|
55
57
|
|
data/README.md
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
Create `.ipa` files and distribute them from the command line, using any of the following methods:
|
4
4
|
|
5
5
|
- [iTunes Connect](https://itunesconnect.apple.com)
|
6
|
-
- [TestFlight](https://testflightapp.com/)
|
7
6
|
- [HockeyApp](http://www.hockeyapp.net)
|
8
7
|
- [Crashlytics Beta](http://try.crashlytics.com/beta/)
|
9
8
|
- [DeployGate](https://deploygate.com)
|
@@ -48,7 +47,6 @@ Build and distribute iOS apps (.ipa files)
|
|
48
47
|
|
49
48
|
Commands:
|
50
49
|
build Create a new .ipa file for your app
|
51
|
-
distribute:testflight Distribute an .ipa file over TestFlight
|
52
50
|
distribute:hockeyapp Distribute an .ipa file over HockeyApp
|
53
51
|
distribute:crashlytics Distribute an .ipa file over Crashlytics
|
54
52
|
distribute:deploygate Distribute an .ipa file over deploygate
|
@@ -60,9 +58,6 @@ Build and distribute iOS apps (.ipa files)
|
|
60
58
|
info Show mobile provisioning information about an .ipa file
|
61
59
|
help Display global or [command] help documentation.
|
62
60
|
|
63
|
-
Aliases:
|
64
|
-
distribute distribute:testflight
|
65
|
-
|
66
61
|
Global Options:
|
67
62
|
-h, --help Display help documentation
|
68
63
|
-v, --version Display version information
|
@@ -77,14 +72,6 @@ $ ipa build
|
|
77
72
|
$ ipa distribute
|
78
73
|
```
|
79
74
|
|
80
|
-
#### TestFlight Distribution
|
81
|
-
|
82
|
-
```
|
83
|
-
$ ipa distribute:testflight -a API_TOKEN -T TEAM_TOKEN
|
84
|
-
```
|
85
|
-
|
86
|
-
> Shenzhen will load credentials from the environment variables `TESTFLIGHT_API_TOKEN` and `TESTFLIGHT_TEAM_TOKEN` unless otherwise specified.
|
87
|
-
|
88
75
|
#### HockeyApp Distribution
|
89
76
|
|
90
77
|
```
|
data/lib/shenzhen/commands.rb
CHANGED
@@ -75,7 +75,9 @@ command :build do |c|
|
|
75
75
|
actions << :archive unless options.archive == false
|
76
76
|
|
77
77
|
ENV['CC'] = nil # Fix for RVM
|
78
|
-
|
78
|
+
cmd = %{xcodebuild #{flags.join(' ')} #{actions.join(' ')} #{'1> /dev/null' unless $verbose}}
|
79
|
+
say_warning cmd
|
80
|
+
abort unless system cmd
|
79
81
|
|
80
82
|
@target, @xcodebuild_settings = Shenzhen::XcodeBuild.settings(*flags).detect{|target, settings| settings['WRAPPER_EXTENSION'] == "app"}
|
81
83
|
say_error "App settings could not be found." and abort unless @xcodebuild_settings
|
@@ -1,5 +1,3 @@
|
|
1
|
-
alias_command :distribute, :'distribute:testflight'
|
2
|
-
|
3
1
|
private
|
4
2
|
|
5
3
|
def determine_file!
|
@@ -18,7 +16,7 @@ def determine_dsym!
|
|
18
16
|
when 0 then nil
|
19
17
|
when 1 then dsym_files.first
|
20
18
|
else
|
21
|
-
dsym_files.detect do |dsym|
|
19
|
+
dsym_files.detect do |dsym|
|
22
20
|
File.basename(dsym, ".app.dSYM.zip") == File.basename(@file, ".ipa")
|
23
21
|
end or choose "Select a .dSYM.zip file:", *dsym_files
|
24
22
|
end
|
@@ -26,7 +24,7 @@ end
|
|
26
24
|
|
27
25
|
def determine_notes!
|
28
26
|
placeholder = %{What's new in this release: }
|
29
|
-
|
27
|
+
|
30
28
|
@notes = ask_editor placeholder
|
31
29
|
@notes = nil if @notes == placeholder
|
32
30
|
end
|
@@ -75,10 +75,10 @@ command :'distribute:pgyer' do |c|
|
|
75
75
|
determine_file! unless @file = options.file
|
76
76
|
say_error "Missing or unspecified .ipa file" and abort unless @file and File.exist?(@file)
|
77
77
|
|
78
|
-
|
78
|
+
determine_pgyer_user_key! unless @user_key = options.user_key || ENV['PGYER_USER_KEY']
|
79
79
|
say_error "Missing User Key" and abort unless @user_key
|
80
80
|
|
81
|
-
|
81
|
+
determine_pgyer_api_key! unless @api_key = options.api_key || ENV['PGYER_API_KEY']
|
82
82
|
say_error "Missing API Key" and abort unless @api_key
|
83
83
|
|
84
84
|
determine_publish_range! unless @publish_range = options.range
|
data/lib/shenzhen/version.rb
CHANGED
data/shenzhen-0.11.2.gem
ADDED
Binary file
|
data/shenzhen.gemspec
CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.summary = "Shenzhen"
|
15
15
|
s.description = "CLI for Building & Distributing iOS Apps (.ipa Files)"
|
16
16
|
|
17
|
-
s.add_dependency "commander", "~> 4.
|
17
|
+
s.add_dependency "commander", "~> 4.3"
|
18
18
|
s.add_dependency "terminal-table", "~> 1.4.5"
|
19
19
|
s.add_dependency "json", "~> 1.8"
|
20
20
|
s.add_dependency "faraday", "~> 0.8.9"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shenzhen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mattt Thompson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-02-
|
11
|
+
date: 2015-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '4.
|
19
|
+
version: '4.3'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '4.
|
26
|
+
version: '4.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: terminal-table
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -215,7 +215,6 @@ files:
|
|
215
215
|
- ./lib/shenzhen/plugins/itunesconnect.rb
|
216
216
|
- ./lib/shenzhen/plugins/pgyer.rb
|
217
217
|
- ./lib/shenzhen/plugins/s3.rb
|
218
|
-
- ./lib/shenzhen/plugins/testflight.rb
|
219
218
|
- ./lib/shenzhen/version.rb
|
220
219
|
- ./lib/shenzhen/xcodebuild.rb
|
221
220
|
- ./lib/shenzhen.rb
|
@@ -228,6 +227,7 @@ files:
|
|
228
227
|
- ./shenzhen-0.10.3.gem
|
229
228
|
- ./shenzhen-0.11.0.gem
|
230
229
|
- ./shenzhen-0.11.1.gem
|
230
|
+
- ./shenzhen-0.11.2.gem
|
231
231
|
- ./shenzhen.gemspec
|
232
232
|
- bin/ipa
|
233
233
|
homepage: http://nomad-cli.com
|
@@ -1,99 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'openssl'
|
3
|
-
require 'faraday'
|
4
|
-
require 'faraday_middleware'
|
5
|
-
|
6
|
-
module Shenzhen::Plugins
|
7
|
-
module TestFlight
|
8
|
-
class Client
|
9
|
-
HOSTNAME = 'testflightapp.com'
|
10
|
-
|
11
|
-
def initialize(api_token, team_token)
|
12
|
-
@api_token, @team_token = api_token, team_token
|
13
|
-
@connection = Faraday.new(:url => "http://#{HOSTNAME}", :request => { :timeout => 120 }) do |builder|
|
14
|
-
builder.request :multipart
|
15
|
-
builder.request :json
|
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.update({
|
24
|
-
:api_token => @api_token,
|
25
|
-
:team_token => @team_token,
|
26
|
-
:file => Faraday::UploadIO.new(ipa, 'application/octet-stream')
|
27
|
-
})
|
28
|
-
|
29
|
-
if dsym_filename = options.delete(:dsym_filename)
|
30
|
-
options[:dsym] = Faraday::UploadIO.new(dsym_filename, 'application/octet-stream')
|
31
|
-
end
|
32
|
-
|
33
|
-
@connection.post("/api/builds.json", options).on_complete do |env|
|
34
|
-
yield env[:status], env[:body] if block_given?
|
35
|
-
end
|
36
|
-
|
37
|
-
rescue Faraday::Error::TimeoutError
|
38
|
-
say_error "Timed out while uploading build. Check https://testflightapp.com/dashboard/applications/ to see if the upload was completed." and abort
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
command :'distribute:testflight' do |c|
|
45
|
-
c.syntax = "ipa distribute:testflight [options]"
|
46
|
-
c.summary = "Distribute an .ipa file over testflight"
|
47
|
-
c.description = ""
|
48
|
-
c.option '-f', '--file FILE', ".ipa file for the build"
|
49
|
-
c.option '-d', '--dsym FILE', "zipped .dsym package for the build"
|
50
|
-
c.option '-a', '--api_token TOKEN', "API Token. Available at https://testflightapp.com/account/#api-token"
|
51
|
-
c.option '-T', '--team_token TOKEN', "Team Token. Available at https://testflightapp.com/dashboard/team/edit/"
|
52
|
-
c.option '-m', '--notes NOTES', "Release notes for the build"
|
53
|
-
c.option '-l', '--lists LISTS', "Comma separated distribution list names which will receive access to the build"
|
54
|
-
c.option '--notify', "Notify permitted teammates to install the build"
|
55
|
-
c.option '--replace', "Replace binary for an existing build if one is found with the same name/bundle version"
|
56
|
-
|
57
|
-
c.action do |args, options|
|
58
|
-
determine_file! unless @file = options.file
|
59
|
-
say_error "Missing or unspecified .ipa file" and abort unless @file and File.exist?(@file)
|
60
|
-
|
61
|
-
determine_dsym! unless @dsym = options.dsym
|
62
|
-
say_error "Specified dSYM.zip file doesn't exist" if @dsym and !File.exist?(@dsym)
|
63
|
-
|
64
|
-
determine_testflight_api_token! unless @api_token = options.api_token || ENV['TESTFLIGHT_API_TOKEN']
|
65
|
-
say_error "Missing API Token" and abort unless @api_token
|
66
|
-
|
67
|
-
determine_testflight_team_token! unless @team_token = options.team_token || ENV['TESTFLIGHT_TEAM_TOKEN']
|
68
|
-
|
69
|
-
determine_notes! unless @notes = options.notes
|
70
|
-
say_error "Missing release notes" and abort unless @notes
|
71
|
-
|
72
|
-
parameters = {}
|
73
|
-
parameters[:file] = @file
|
74
|
-
parameters[:notes] = @notes
|
75
|
-
parameters[:dsym_filename] = @dsym if @dsym
|
76
|
-
parameters[:notify] = "true" if options.notify
|
77
|
-
parameters[:replace] = "true" if options.replace
|
78
|
-
parameters[:distribution_lists] = options.lists if options.lists
|
79
|
-
|
80
|
-
client = Shenzhen::Plugins::TestFlight::Client.new(@api_token, @team_token)
|
81
|
-
response = client.upload_build(@file, parameters)
|
82
|
-
case response.status
|
83
|
-
when 200...300
|
84
|
-
say_ok "Build successfully uploaded to TestFlight"
|
85
|
-
else
|
86
|
-
say_error "Error uploading to TestFlight: #{response.body}" and abort
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
private
|
91
|
-
|
92
|
-
def determine_testflight_api_token!
|
93
|
-
@api_token ||= ask "API Token:"
|
94
|
-
end
|
95
|
-
|
96
|
-
def determine_testflight_team_token!
|
97
|
-
@team_token ||= ask "Team Token:"
|
98
|
-
end
|
99
|
-
end
|