shenzhen 0.11.2 → 0.12.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 +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
|