pilot 1.4.1 → 1.5.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/README.md +37 -33
- data/lib/pilot/build_manager.rb +12 -12
- data/lib/pilot/commands_generator.rb +4 -3
- data/lib/pilot/manager.rb +5 -4
- data/lib/pilot/options.rb +4 -4
- data/lib/pilot/tester_exporter.rb +2 -2
- data/lib/pilot/tester_importer.rb +3 -3
- data/lib/pilot/tester_manager.rb +24 -10
- data/lib/pilot/version.rb +1 -1
- metadata +23 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f1e44d1482a75b5b6cc38fb79309233ffc34d106
|
|
4
|
+
data.tar.gz: 14bf3e03b9932767897baec443526151ba3cec9d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b15ccfb0bf04e29a61634a8c66a951e229cf6d7f4fb16dac26fc2c8d986c729f8b0069383406fadaef5cbf7e50d49230a673d87d5d400b4769a71711f269fad7
|
|
7
|
+
data.tar.gz: ef9c501eb0a54a5c36b2e1726d554291d872261c05f8027a667f1854ab03edb740a3b1b98afdf9fa9fc08a35e1a34631b9d3d727bf824353bb808a719715b652
|
data/README.md
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
<h3 align="center">
|
|
2
|
-
<a href="https://github.com/fastlane/fastlane">
|
|
3
|
-
<img src="assets/fastlane.png" width="150" />
|
|
2
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/fastlane">
|
|
3
|
+
<img src="../fastlane/assets/fastlane.png" width="150" />
|
|
4
4
|
<br />
|
|
5
5
|
fastlane
|
|
6
6
|
</a>
|
|
7
7
|
</h3>
|
|
8
8
|
<p align="center">
|
|
9
|
-
<a href="https://github.com/fastlane/deliver">deliver</a> •
|
|
10
|
-
<a href="https://github.com/fastlane/snapshot">snapshot</a> •
|
|
11
|
-
<a href="https://github.com/fastlane/frameit">frameit</a> •
|
|
12
|
-
<a href="https://github.com/fastlane/pem">pem</a> •
|
|
13
|
-
<a href="https://github.com/fastlane/sigh">sigh</a> •
|
|
14
|
-
<a href="https://github.com/fastlane/produce">produce</a> •
|
|
15
|
-
<a href="https://github.com/fastlane/cert">cert</a> •
|
|
16
|
-
<a href="https://github.com/fastlane/spaceship">spaceship</a> •
|
|
9
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/deliver">deliver</a> •
|
|
10
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/snapshot">snapshot</a> •
|
|
11
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/frameit">frameit</a> •
|
|
12
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/pem">pem</a> •
|
|
13
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/sigh">sigh</a> •
|
|
14
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/produce">produce</a> •
|
|
15
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/cert">cert</a> •
|
|
16
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/spaceship">spaceship</a> •
|
|
17
17
|
<b>pilot</b> •
|
|
18
18
|
<a href="https://github.com/fastlane/boarding">boarding</a> •
|
|
19
|
-
<a href="https://github.com/fastlane/gym">gym</a> •
|
|
20
|
-
<a href="https://github.com/fastlane/scan">scan</a> •
|
|
21
|
-
<a href="https://github.com/fastlane/match">match</a>
|
|
19
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/gym">gym</a> •
|
|
20
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/scan">scan</a> •
|
|
21
|
+
<a href="https://github.com/fastlane/fastlane/tree/master/match">match</a>
|
|
22
22
|
</p>
|
|
23
23
|
-------
|
|
24
24
|
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
Pilot
|
|
30
30
|
============
|
|
31
31
|
[](https://twitter.com/FastlaneTools)
|
|
32
|
-
[](https://github.com/fastlane/
|
|
32
|
+
[](https://github.com/fastlane/fastlane/blob/master/pilot/LICENSE)
|
|
33
33
|
[](http://rubygems.org/gems/pilot)
|
|
34
34
|
|
|
35
35
|
|
|
@@ -49,9 +49,9 @@ Get in contact with the developer on Twitter: [@FastlaneTools](https://twitter.c
|
|
|
49
49
|
|
|
50
50
|
-------
|
|
51
51
|
<p align="center">
|
|
52
|
-
<a href="#installation">Installation</a> •
|
|
53
|
-
<a href="#usage">Usage</a> •
|
|
54
|
-
<a href="#tips">Tips</a> •
|
|
52
|
+
<a href="#installation">Installation</a> •
|
|
53
|
+
<a href="#usage">Usage</a> •
|
|
54
|
+
<a href="#tips">Tips</a> •
|
|
55
55
|
<a href="#need-help">Need help?</a>
|
|
56
56
|
</p>
|
|
57
57
|
|
|
@@ -69,7 +69,7 @@ For all commands you can specify the Apple ID to use using `-u felix@krausefx.co
|
|
|
69
69
|
|
|
70
70
|
## Uploading builds
|
|
71
71
|
|
|
72
|
-
To upload a new build, just run
|
|
72
|
+
To upload a new build, just run
|
|
73
73
|
|
|
74
74
|
```
|
|
75
75
|
pilot upload
|
|
@@ -164,7 +164,7 @@ To add a new tester to both your iTunes Connect account and to your app (if give
|
|
|
164
164
|
pilot add email@invite.com
|
|
165
165
|
```
|
|
166
166
|
|
|
167
|
-
Additionally you can specify the app identifier (if necessary):
|
|
167
|
+
Additionally you can specify the app identifier (if necessary):
|
|
168
168
|
|
|
169
169
|
```
|
|
170
170
|
pilot add email@email.com -a com.krausefx.app
|
|
@@ -230,18 +230,18 @@ pilot import -c ~/Desktop/testers.csv
|
|
|
230
230
|
## [`fastlane`](https://fastlane.tools) Toolchain
|
|
231
231
|
|
|
232
232
|
- [`fastlane`](https://fastlane.tools): Connect all deployment tools into one streamlined workflow
|
|
233
|
-
- [`deliver`](https://github.com/fastlane/deliver): Upload screenshots, metadata and your app to the App Store
|
|
234
|
-
- [`snapshot`](https://github.com/fastlane/snapshot): Automate taking localized screenshots of your iOS app on every device
|
|
235
|
-
- [`frameit`](https://github.com/fastlane/frameit): Quickly put your screenshots into the right device frames
|
|
236
|
-
- [`produce`](https://github.com/fastlane/produce): Create new iOS apps on iTunes Connect and Dev Portal using the command line
|
|
237
|
-
- [`pem`](https://github.com/fastlane/pem): Automatically generate and renew your push notification profiles
|
|
238
|
-
- [`sigh`](https://github.com/fastlane/sigh): Because you would rather spend your time building stuff than fighting provisioning
|
|
239
|
-
- [`cert`](https://github.com/fastlane/cert): Automatically create and maintain iOS code signing certificates
|
|
240
|
-
- [`spaceship`](https://github.com/fastlane/spaceship): Ruby library to access the Apple Dev Center and iTunes Connect
|
|
233
|
+
- [`deliver`](https://github.com/fastlane/fastlane/tree/master/deliver): Upload screenshots, metadata and your app to the App Store
|
|
234
|
+
- [`snapshot`](https://github.com/fastlane/fastlane/tree/master/snapshot): Automate taking localized screenshots of your iOS app on every device
|
|
235
|
+
- [`frameit`](https://github.com/fastlane/fastlane/tree/master/frameit): Quickly put your screenshots into the right device frames
|
|
236
|
+
- [`produce`](https://github.com/fastlane/fastlane/tree/master/produce): Create new iOS apps on iTunes Connect and Dev Portal using the command line
|
|
237
|
+
- [`pem`](https://github.com/fastlane/fastlane/tree/master/pem): Automatically generate and renew your push notification profiles
|
|
238
|
+
- [`sigh`](https://github.com/fastlane/fastlane/tree/master/sigh): Because you would rather spend your time building stuff than fighting provisioning
|
|
239
|
+
- [`cert`](https://github.com/fastlane/fastlane/tree/master/cert): Automatically create and maintain iOS code signing certificates
|
|
240
|
+
- [`spaceship`](https://github.com/fastlane/fastlane/tree/master/spaceship): Ruby library to access the Apple Dev Center and iTunes Connect
|
|
241
241
|
- [`boarding`](https://github.com/fastlane/boarding): The easiest way to invite your TestFlight beta testers
|
|
242
|
-
- [`gym`](https://github.com/fastlane/gym): Building your iOS apps has never been easier
|
|
243
|
-
- [`scan`](https://github.com/fastlane/scan): The easiest way to run tests of your iOS and Mac app
|
|
244
|
-
- [`match`](https://github.com/fastlane/match): Easily sync your certificates and profiles across your team using git
|
|
242
|
+
- [`gym`](https://github.com/fastlane/fastlane/tree/master/gym): Building your iOS apps has never been easier
|
|
243
|
+
- [`scan`](https://github.com/fastlane/fastlane/tree/master/scan): The easiest way to run tests of your iOS and Mac app
|
|
244
|
+
- [`match`](https://github.com/fastlane/fastlane/tree/master/match): Easily sync your certificates and profiles across your team using git
|
|
245
245
|
|
|
246
246
|
##### [Like this tool? Be the first to know about updates and new fastlane tools](https://tinyletter.com/krausefx)
|
|
247
247
|
|
|
@@ -259,22 +259,26 @@ If you run into any issues you can use the `verbose` mode to get a more detailed
|
|
|
259
259
|
DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t DAV" pilot ...
|
|
260
260
|
```
|
|
261
261
|
|
|
262
|
-
If you are using `pilot` via the [fastlane action](https://github.com/fastlane/fastlane/blob/master/docs/Actions.md#pilot), add the following to your `Fastfile`
|
|
262
|
+
If you are using `pilot` via the [fastlane action](https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md#pilot), add the following to your `Fastfile`
|
|
263
263
|
|
|
264
264
|
```
|
|
265
265
|
ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
|
|
266
266
|
pilot...
|
|
267
267
|
```
|
|
268
268
|
|
|
269
|
+
## Credentials Issues
|
|
270
|
+
|
|
271
|
+
If your password contains special characters, `pilot` may throw a confusing error saying your "Your Apple ID or password was entered incorrectly". The easiest way to fix this error is to change your password to something that **does not** contains special characters.
|
|
272
|
+
|
|
269
273
|
## How is my password stored?
|
|
270
274
|
|
|
271
|
-
`pilot` uses the [CredentialsManager](https://github.com/fastlane/credentials_manager) from `fastlane`.
|
|
275
|
+
`pilot` uses the [CredentialsManager](https://github.com/fastlane/fastlane/tree/master/credentials_manager) from `fastlane`.
|
|
272
276
|
|
|
273
277
|
# Need help?
|
|
274
278
|
Please submit an issue on GitHub and provide information about your setup
|
|
275
279
|
|
|
276
280
|
# Code of Conduct
|
|
277
|
-
Help us keep `pilot` open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/
|
|
281
|
+
Help us keep `pilot` open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/fastlane/blob/master/CODE_OF_CONDUCT.md).
|
|
278
282
|
|
|
279
283
|
# License
|
|
280
284
|
This project is licensed under the terms of the MIT license. See the LICENSE file.
|
data/lib/pilot/build_manager.rb
CHANGED
|
@@ -3,9 +3,9 @@ module Pilot
|
|
|
3
3
|
def upload(options)
|
|
4
4
|
start(options)
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
UI.user_error!("No ipa file given") unless config[:ipa]
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
UI.success("Ready to upload new build to TestFlight (App: #{app.apple_id})...")
|
|
9
9
|
|
|
10
10
|
plist = FastlaneCore::IpaFileAnalyser.fetch_info_plist_file(config[:ipa]) || {}
|
|
11
11
|
platform = plist["DTPlatformName"]
|
|
@@ -19,16 +19,16 @@ module Pilot
|
|
|
19
19
|
result = transporter.upload(app.apple_id, package_path)
|
|
20
20
|
|
|
21
21
|
if result
|
|
22
|
-
|
|
22
|
+
UI.message("Successfully uploaded the new binary to iTunes Connect")
|
|
23
23
|
|
|
24
24
|
unless config[:skip_submission]
|
|
25
25
|
uploaded_build = wait_for_processing_build
|
|
26
26
|
distribute_build(uploaded_build, options)
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
UI.message("Successfully distributed build to beta testers 🚀")
|
|
29
29
|
end
|
|
30
30
|
else
|
|
31
|
-
|
|
31
|
+
UI.user_error!("Error uploading ipa file, more information see above")
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
|
|
@@ -72,7 +72,7 @@ module Pilot
|
|
|
72
72
|
wait_processing_interval = config[:wait_processing_interval].to_i
|
|
73
73
|
latest_build = nil
|
|
74
74
|
loop do
|
|
75
|
-
|
|
75
|
+
UI.message("Waiting for iTunes Connect to process the new build")
|
|
76
76
|
sleep wait_processing_interval
|
|
77
77
|
builds = app.all_processing_builds
|
|
78
78
|
break if builds.count == 0
|
|
@@ -88,23 +88,23 @@ module Pilot
|
|
|
88
88
|
b.build_version == latest_build.build_version
|
|
89
89
|
end
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
UI.message("Waiting for iTunes Connect to finish processing the new build (#{full_build.train_version} - #{full_build.build_version})")
|
|
92
92
|
sleep wait_processing_interval
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
if full_build
|
|
96
96
|
minutes = ((Time.now - start) / 60).round
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
UI.success("Successfully finished processing the build")
|
|
98
|
+
UI.message("You can now tweet: ")
|
|
99
|
+
UI.important("iTunes Connect #iosprocessingtime #{minutes} minutes")
|
|
100
100
|
return full_build
|
|
101
101
|
else
|
|
102
|
-
|
|
102
|
+
UI.user_error!("Error: Seems like iTunes Connect didn't properly pre-process the binary")
|
|
103
103
|
end
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
def distribute_build(uploaded_build, options)
|
|
107
|
-
|
|
107
|
+
UI.message("Distributing new build to testers")
|
|
108
108
|
|
|
109
109
|
# First, set the changelog (if necessary)
|
|
110
110
|
uploaded_build.update_build_information!(whats_new: options[:changelog])
|
|
@@ -27,6 +27,7 @@ module Pilot
|
|
|
27
27
|
def handle_multiple(action, args, options)
|
|
28
28
|
mgr = Pilot::TesterManager.new
|
|
29
29
|
config = FastlaneCore::Configuration.create(Pilot::Options.available_options, convert_options(options))
|
|
30
|
+
args.push(config[:email]) if config[:email] && args.empty?
|
|
30
31
|
args.push(ask("Email address of the tester: ".yellow)) if args.empty?
|
|
31
32
|
failures = []
|
|
32
33
|
args.each do |address|
|
|
@@ -35,10 +36,10 @@ module Pilot
|
|
|
35
36
|
mgr.public_send(action, config)
|
|
36
37
|
rescue => ex
|
|
37
38
|
failures.push(address)
|
|
38
|
-
|
|
39
|
+
UI.message("[#{address}]: #{ex}")
|
|
39
40
|
end
|
|
40
41
|
end
|
|
41
|
-
|
|
42
|
+
UI.user_error!("Some operations failed: #{failures}") unless failures.empty?
|
|
42
43
|
end
|
|
43
44
|
|
|
44
45
|
def run
|
|
@@ -46,7 +47,7 @@ module Pilot
|
|
|
46
47
|
program :description, Pilot::DESCRIPTION
|
|
47
48
|
program :help, "Author", "Felix Krause <pilot@krausefx.com>"
|
|
48
49
|
program :help, "Website", "https://fastlane.tools"
|
|
49
|
-
program :help, "GitHub", "https://github.com/fastlane/pilot"
|
|
50
|
+
program :help, "GitHub", "https://github.com/fastlane/fastlane/tree/master/pilot"
|
|
50
51
|
program :help_formatter, :compact
|
|
51
52
|
|
|
52
53
|
global_option("--verbose") { $verbose = true }
|
data/lib/pilot/manager.rb
CHANGED
|
@@ -11,10 +11,10 @@ module Pilot
|
|
|
11
11
|
def login
|
|
12
12
|
config[:username] ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
UI.message("Login to iTunes Connect (#{config[:username]})")
|
|
15
15
|
Spaceship::Tunes.login(config[:username])
|
|
16
16
|
Spaceship::Tunes.select_team
|
|
17
|
-
|
|
17
|
+
UI.message("Login successful")
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
# The app object we're currently using
|
|
@@ -23,7 +23,7 @@ module Pilot
|
|
|
23
23
|
|
|
24
24
|
@app ||= Spaceship::Application.find(@apple_id)
|
|
25
25
|
unless @app
|
|
26
|
-
|
|
26
|
+
UI.user_error!("Could not find app with #{(config[:apple_id] || config[:app_identifier])}")
|
|
27
27
|
end
|
|
28
28
|
return @app
|
|
29
29
|
end
|
|
@@ -40,7 +40,7 @@ module Pilot
|
|
|
40
40
|
|
|
41
41
|
if config[:app_identifier]
|
|
42
42
|
@app ||= Spaceship::Application.find(config[:app_identifier])
|
|
43
|
-
|
|
43
|
+
UI.user_error!("Couldn't find app '#{config[:app_identifier]}' on the account of '#{config[:username]}' on iTunes Connect") unless @app
|
|
44
44
|
app_id ||= @app.apple_id
|
|
45
45
|
end
|
|
46
46
|
|
|
@@ -53,6 +53,7 @@ module Pilot
|
|
|
53
53
|
result = config[:app_identifier]
|
|
54
54
|
result ||= FastlaneCore::IpaFileAnalyser.fetch_app_identifier(config[:ipa])
|
|
55
55
|
result ||= ask("Please enter the app's bundle identifier: ")
|
|
56
|
+
UI.verbose("App identifier (#{result})")
|
|
56
57
|
return result
|
|
57
58
|
end
|
|
58
59
|
end
|
data/lib/pilot/options.rb
CHANGED
|
@@ -26,8 +26,8 @@ module Pilot
|
|
|
26
26
|
description: "Path to the ipa file to upload",
|
|
27
27
|
default_value: Dir["*.ipa"].first,
|
|
28
28
|
verify_block: proc do |value|
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
UI.user_error!("Could not find ipa file at path '#{value}'") unless File.exist? value
|
|
30
|
+
UI.user_error!("'#{value}' doesn't seem to be an ipa file") unless value.end_with? ".ipa"
|
|
31
31
|
end),
|
|
32
32
|
FastlaneCore::ConfigItem.new(key: :changelog,
|
|
33
33
|
short_option: "-w",
|
|
@@ -67,7 +67,7 @@ module Pilot
|
|
|
67
67
|
description: "The tester's email",
|
|
68
68
|
optional: true,
|
|
69
69
|
verify_block: proc do |value|
|
|
70
|
-
|
|
70
|
+
UI.user_error!("Please pass a valid email address") unless value.include? "@"
|
|
71
71
|
end),
|
|
72
72
|
FastlaneCore::ConfigItem.new(key: :testers_file_path,
|
|
73
73
|
short_option: "-c",
|
|
@@ -82,7 +82,7 @@ module Pilot
|
|
|
82
82
|
default_value: 30,
|
|
83
83
|
type: Integer,
|
|
84
84
|
verify_block: proc do |value|
|
|
85
|
-
|
|
85
|
+
UI.user_error!("Please enter a valid positive number of seconds") unless value.to_i > 0
|
|
86
86
|
end),
|
|
87
87
|
FastlaneCore::ConfigItem.new(key: :team_id,
|
|
88
88
|
short_option: "-q",
|
|
@@ -4,7 +4,7 @@ require "pilot/tester_util"
|
|
|
4
4
|
module Pilot
|
|
5
5
|
class TesterExporter < Manager
|
|
6
6
|
def export_testers(options)
|
|
7
|
-
|
|
7
|
+
UI.user_error!("Export file path is required") unless options[:testers_file_path]
|
|
8
8
|
|
|
9
9
|
start(options)
|
|
10
10
|
require 'csv'
|
|
@@ -37,7 +37,7 @@ module Pilot
|
|
|
37
37
|
csv << [tester.first_name, tester.last_name, tester.email, tester.devices.count, group_names, install_version, pretty_date]
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
UI.success("Successfully exported CSV to #{file}")
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
end
|
|
@@ -3,7 +3,7 @@ require "fastlane_core"
|
|
|
3
3
|
module Pilot
|
|
4
4
|
class TesterImporter < Manager
|
|
5
5
|
def import_testers(options)
|
|
6
|
-
|
|
6
|
+
UI.user_error!("Import file path is required") unless options[:testers_file_path]
|
|
7
7
|
|
|
8
8
|
start(options)
|
|
9
9
|
|
|
@@ -23,7 +23,7 @@ module Pilot
|
|
|
23
23
|
first_name, last_name, email = row
|
|
24
24
|
|
|
25
25
|
unless email
|
|
26
|
-
|
|
26
|
+
UI.error("No email found in row: #{row}")
|
|
27
27
|
next
|
|
28
28
|
end
|
|
29
29
|
|
|
@@ -40,7 +40,7 @@ module Pilot
|
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
UI.success("Successfully imported #{imported_tester_count} testers from #{file}")
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
end
|
data/lib/pilot/tester_manager.rb
CHANGED
|
@@ -11,28 +11,28 @@ module Pilot
|
|
|
11
11
|
tester ||= Spaceship::Tunes::Tester::External.find(config[:email])
|
|
12
12
|
|
|
13
13
|
if tester
|
|
14
|
-
|
|
14
|
+
UI.success("Existing tester #{tester.email}")
|
|
15
15
|
else
|
|
16
16
|
tester = Spaceship::Tunes::Tester::External.create!(email: config[:email],
|
|
17
17
|
first_name: config[:first_name],
|
|
18
18
|
last_name: config[:last_name])
|
|
19
|
-
|
|
19
|
+
UI.success("Successfully invited tester: #{tester.email}")
|
|
20
20
|
end
|
|
21
21
|
|
|
22
22
|
app_filter = (config[:apple_id] || config[:app_identifier])
|
|
23
23
|
if app_filter
|
|
24
24
|
begin
|
|
25
25
|
app = Spaceship::Application.find(app_filter)
|
|
26
|
-
|
|
26
|
+
UI.user_error!("Couldn't find app with '#{app_filter}'") unless app
|
|
27
27
|
tester.add_to_app!(app.apple_id)
|
|
28
|
-
|
|
28
|
+
UI.success("Successfully added tester to app #{app_filter}")
|
|
29
29
|
rescue => ex
|
|
30
|
-
|
|
30
|
+
UI.error("Could not add #{tester.email} to app: #{ex}")
|
|
31
31
|
raise ex
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
34
|
rescue => ex
|
|
35
|
-
|
|
35
|
+
UI.error("Could not create tester #{config[:email]}")
|
|
36
36
|
raise ex
|
|
37
37
|
end
|
|
38
38
|
end
|
|
@@ -43,7 +43,7 @@ module Pilot
|
|
|
43
43
|
tester = Spaceship::Tunes::Tester::Internal.find(config[:email])
|
|
44
44
|
tester ||= Spaceship::Tunes::Tester::External.find(config[:email])
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
UI.user_error!("Tester #{config[:email]} not found") unless tester
|
|
47
47
|
|
|
48
48
|
describe_tester(tester)
|
|
49
49
|
return tester
|
|
@@ -56,10 +56,23 @@ module Pilot
|
|
|
56
56
|
tester ||= Spaceship::Tunes::Tester::Internal.find(config[:email])
|
|
57
57
|
|
|
58
58
|
if tester
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
app_filter = (config[:apple_id] || config[:app_identifier])
|
|
60
|
+
if app_filter
|
|
61
|
+
begin
|
|
62
|
+
app = Spaceship::Application.find(app_filter)
|
|
63
|
+
UI.user_error!("Couldn't find app with '#{app_filter}'") unless app
|
|
64
|
+
tester.remove_from_app!(app.apple_id)
|
|
65
|
+
UI.success("Successfully removed tester #{tester.email} from app #{app_filter}")
|
|
66
|
+
rescue => ex
|
|
67
|
+
UI.error("Could not remove #{tester.email} from app: #{ex}")
|
|
68
|
+
raise ex
|
|
69
|
+
end
|
|
70
|
+
else
|
|
71
|
+
tester.delete!
|
|
72
|
+
UI.success("Successfully removed tester #{tester.email}")
|
|
73
|
+
end
|
|
61
74
|
else
|
|
62
|
-
|
|
75
|
+
UI.error("Tester not found: #{config[:email]}")
|
|
63
76
|
end
|
|
64
77
|
end
|
|
65
78
|
|
|
@@ -70,6 +83,7 @@ module Pilot
|
|
|
70
83
|
app_filter = (config[:apple_id] || config[:app_identifier])
|
|
71
84
|
if app_filter
|
|
72
85
|
app = Spaceship::Application.find(app_filter)
|
|
86
|
+
UI.user_error!("Couldn't find app with '#{app_filter}'") unless app
|
|
73
87
|
int_testers = Spaceship::Tunes::Tester::Internal.all_by_app(app.apple_id)
|
|
74
88
|
ext_testers = Spaceship::Tunes::Tester::External.all_by_app(app.apple_id)
|
|
75
89
|
else
|
data/lib/pilot/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pilot
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Felix Krause
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-04-04 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: fastlane_core
|
|
@@ -16,7 +16,7 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.
|
|
19
|
+
version: 0.41.2
|
|
20
20
|
- - "<"
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
22
|
version: 1.0.0
|
|
@@ -26,7 +26,7 @@ dependencies:
|
|
|
26
26
|
requirements:
|
|
27
27
|
- - ">="
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: 0.
|
|
29
|
+
version: 0.41.2
|
|
30
30
|
- - "<"
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
32
|
version: 1.0.0
|
|
@@ -36,7 +36,7 @@ dependencies:
|
|
|
36
36
|
requirements:
|
|
37
37
|
- - ">="
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: 0.
|
|
39
|
+
version: 0.24.1
|
|
40
40
|
- - "<"
|
|
41
41
|
- !ruby/object:Gem::Version
|
|
42
42
|
version: 1.0.0
|
|
@@ -46,7 +46,7 @@ dependencies:
|
|
|
46
46
|
requirements:
|
|
47
47
|
- - ">="
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: 0.
|
|
49
|
+
version: 0.24.1
|
|
50
50
|
- - "<"
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
52
|
version: 1.0.0
|
|
@@ -120,6 +120,20 @@ dependencies:
|
|
|
120
120
|
- - "~>"
|
|
121
121
|
- !ruby/object:Gem::Version
|
|
122
122
|
version: 3.1.0
|
|
123
|
+
- !ruby/object:Gem::Dependency
|
|
124
|
+
name: rspec_junit_formatter
|
|
125
|
+
requirement: !ruby/object:Gem::Requirement
|
|
126
|
+
requirements:
|
|
127
|
+
- - "~>"
|
|
128
|
+
- !ruby/object:Gem::Version
|
|
129
|
+
version: 0.2.3
|
|
130
|
+
type: :development
|
|
131
|
+
prerelease: false
|
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
133
|
+
requirements:
|
|
134
|
+
- - "~>"
|
|
135
|
+
- !ruby/object:Gem::Version
|
|
136
|
+
version: 0.2.3
|
|
123
137
|
- !ruby/object:Gem::Dependency
|
|
124
138
|
name: pry
|
|
125
139
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -196,14 +210,14 @@ dependencies:
|
|
|
196
210
|
requirements:
|
|
197
211
|
- - "~>"
|
|
198
212
|
- !ruby/object:Gem::Version
|
|
199
|
-
version: 0.
|
|
213
|
+
version: 0.38.0
|
|
200
214
|
type: :development
|
|
201
215
|
prerelease: false
|
|
202
216
|
version_requirements: !ruby/object:Gem::Requirement
|
|
203
217
|
requirements:
|
|
204
218
|
- - "~>"
|
|
205
219
|
- !ruby/object:Gem::Version
|
|
206
|
-
version: 0.
|
|
220
|
+
version: 0.38.0
|
|
207
221
|
description: The best way to manage your TestFlight testers and builds from your terminal
|
|
208
222
|
email:
|
|
209
223
|
- pilot@krausefx.com
|
|
@@ -245,7 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
245
259
|
version: '0'
|
|
246
260
|
requirements: []
|
|
247
261
|
rubyforge_project:
|
|
248
|
-
rubygems_version: 2.4.
|
|
262
|
+
rubygems_version: 2.4.5.1
|
|
249
263
|
signing_key:
|
|
250
264
|
specification_version: 4
|
|
251
265
|
summary: The best way to manage your TestFlight testers and builds from your terminal
|