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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fcf5db2c37b289ef2e099745176fb88ae3aff799
4
- data.tar.gz: 324924e93fe0ac479695c32bc555e0da83dbc618
3
+ metadata.gz: f1e44d1482a75b5b6cc38fb79309233ffc34d106
4
+ data.tar.gz: 14bf3e03b9932767897baec443526151ba3cec9d
5
5
  SHA512:
6
- metadata.gz: b5d65adf78cf5941d2657ff2e4781aeacb534f4e328159bf89349570d76c1d37d20662ba4a2ba76a14f836d9fd43de8d218b0b55d954a98e6cd378891ed7c6fc
7
- data.tar.gz: 6bce97738474ee0d46827ef33719db98a5ea59b8a90f0a8449a988e402d725527136bb7a5d0caeaa5a2ffff755afa7ca5139253cadcfe9d3c51785d0a2bf86d1
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> &bull;
10
- <a href="https://github.com/fastlane/snapshot">snapshot</a> &bull;
11
- <a href="https://github.com/fastlane/frameit">frameit</a> &bull;
12
- <a href="https://github.com/fastlane/pem">pem</a> &bull;
13
- <a href="https://github.com/fastlane/sigh">sigh</a> &bull;
14
- <a href="https://github.com/fastlane/produce">produce</a> &bull;
15
- <a href="https://github.com/fastlane/cert">cert</a> &bull;
16
- <a href="https://github.com/fastlane/spaceship">spaceship</a> &bull;
9
+ <a href="https://github.com/fastlane/fastlane/tree/master/deliver">deliver</a> &bull;
10
+ <a href="https://github.com/fastlane/fastlane/tree/master/snapshot">snapshot</a> &bull;
11
+ <a href="https://github.com/fastlane/fastlane/tree/master/frameit">frameit</a> &bull;
12
+ <a href="https://github.com/fastlane/fastlane/tree/master/pem">pem</a> &bull;
13
+ <a href="https://github.com/fastlane/fastlane/tree/master/sigh">sigh</a> &bull;
14
+ <a href="https://github.com/fastlane/fastlane/tree/master/produce">produce</a> &bull;
15
+ <a href="https://github.com/fastlane/fastlane/tree/master/cert">cert</a> &bull;
16
+ <a href="https://github.com/fastlane/fastlane/tree/master/spaceship">spaceship</a> &bull;
17
17
  <b>pilot</b> &bull;
18
18
  <a href="https://github.com/fastlane/boarding">boarding</a> &bull;
19
- <a href="https://github.com/fastlane/gym">gym</a> &bull;
20
- <a href="https://github.com/fastlane/scan">scan</a> &bull;
21
- <a href="https://github.com/fastlane/match">match</a>
19
+ <a href="https://github.com/fastlane/fastlane/tree/master/gym">gym</a> &bull;
20
+ <a href="https://github.com/fastlane/fastlane/tree/master/scan">scan</a> &bull;
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
  [![Twitter: @FastlaneTools](https://img.shields.io/badge/contact-@FastlaneTools-blue.svg?style=flat)](https://twitter.com/FastlaneTools)
32
- [![License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/fastlane/pilot/blob/master/LICENSE)
32
+ [![License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/fastlane/fastlane/blob/master/pilot/LICENSE)
33
33
  [![Gem](https://img.shields.io/gem/v/pilot.svg?style=flat)](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> &bull;
53
- <a href="#usage">Usage</a> &bull;
54
- <a href="#tips">Tips</a> &bull;
52
+ <a href="#installation">Installation</a> &bull;
53
+ <a href="#usage">Usage</a> &bull;
54
+ <a href="#tips">Tips</a> &bull;
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/code-of-conduct).
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.
@@ -3,9 +3,9 @@ module Pilot
3
3
  def upload(options)
4
4
  start(options)
5
5
 
6
- raise "No ipa file given".red unless config[:ipa]
6
+ UI.user_error!("No ipa file given") unless config[:ipa]
7
7
 
8
- Helper.log.info "Ready to upload new build to TestFlight (App: #{app.apple_id})...".green
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
- Helper.log.info "Successfully uploaded the new binary to iTunes Connect"
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
- Helper.log.info "Successfully distributed build to beta testers 🚀"
28
+ UI.message("Successfully distributed build to beta testers 🚀")
29
29
  end
30
30
  else
31
- raise "Error uploading ipa file, more information see above".red
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
- Helper.log.info "Waiting for iTunes Connect to process the new build"
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
- Helper.log.info "Waiting for iTunes Connect to finish processing the new build (#{full_build.train_version} - #{full_build.build_version})"
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
- Helper.log.info "Successfully finished processing the build".green
98
- Helper.log.info "You can now tweet: "
99
- Helper.log.info "iTunes Connect #iosprocessingtime #{minutes} minutes".yellow
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
- raise "Error: Seems like iTunes Connect didn't properly pre-process the binary".red
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
- Helper.log.info "Distributing new build to testers"
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
- Helper.log.info "[#{address}]: #{ex}".red
39
+ UI.message("[#{address}]: #{ex}")
39
40
  end
40
41
  end
41
- raise "Some operations failed: #{failures}".red unless failures.empty?
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 }
@@ -11,10 +11,10 @@ module Pilot
11
11
  def login
12
12
  config[:username] ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
13
13
 
14
- Helper.log.info "Login to iTunes Connect (#{config[:username]})"
14
+ UI.message("Login to iTunes Connect (#{config[:username]})")
15
15
  Spaceship::Tunes.login(config[:username])
16
16
  Spaceship::Tunes.select_team
17
- Helper.log.info "Login successful"
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
- raise "Could not find app with #{(config[:apple_id] || config[:app_identifier])}"
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
- raise "Couldn't find app '#{config[:app_identifier]}' on the account of '#{config[:username]}' on iTunes Connect".red unless @app
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
@@ -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
- raise "Could not find ipa file at path '#{value}'" unless File.exist? value
30
- raise "'#{value}' doesn't seem to be an ipa file" unless value.end_with? ".ipa"
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
- raise "Please pass a valid email address" unless value.include? "@"
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
- raise "Please enter a valid positive number of seconds" unless value.to_i > 0
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
- raise "Export file path is required".red unless options[:testers_file_path]
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
- Helper.log.info "Successfully exported CSV to #{file}".green
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
- raise "Import file path is required".red unless options[:testers_file_path]
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
- Helper.log.error "No email found in row: #{row}".red
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
- Helper.log.info "Successfully imported #{imported_tester_count} testers from #{file}".green
43
+ UI.success("Successfully imported #{imported_tester_count} testers from #{file}")
44
44
  end
45
45
  end
46
46
  end
@@ -11,28 +11,28 @@ module Pilot
11
11
  tester ||= Spaceship::Tunes::Tester::External.find(config[:email])
12
12
 
13
13
  if tester
14
- Helper.log.info "Existing tester #{tester.email}".green
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
- Helper.log.info "Successfully invited tester: #{tester.email}".green
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
- raise "Couldn't find app with '#{app_filter}'" unless app
26
+ UI.user_error!("Couldn't find app with '#{app_filter}'") unless app
27
27
  tester.add_to_app!(app.apple_id)
28
- Helper.log.info "Successfully added tester to app #{app_filter}".green
28
+ UI.success("Successfully added tester to app #{app_filter}")
29
29
  rescue => ex
30
- Helper.log.error "Could not add #{tester.email} to app: #{ex}".red
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
- Helper.log.error "Could not create tester #{config[:email]}".red
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
- raise "Tester #{config[:email]} not found".red unless tester
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
- tester.delete!
60
- Helper.log.info "Successfully removed tester #{tester.email}".green
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
- Helper.log.error "Tester not found: #{config[:email]}".red
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
@@ -1,4 +1,4 @@
1
1
  module Pilot
2
- VERSION = "1.4.1"
2
+ VERSION = "1.5.0"
3
3
  DESCRIPTION = "The best way to manage your TestFlight testers and builds from your terminal"
4
4
  end
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.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-02-19 00:00:00.000000000 Z
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.36.5
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.36.5
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.20.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.20.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.35.1
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.35.1
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.0
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