fastlane 2.97.0 → 2.98.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +72 -72
  3. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -0
  4. data/fastlane/lib/fastlane/actions/carthage.rb +3 -3
  5. data/fastlane/lib/fastlane/actions/docs/build_ios_app.md +6 -6
  6. data/fastlane/lib/fastlane/actions/docs/check_app_store_metadata.md +8 -8
  7. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +13 -5
  8. data/fastlane/lib/fastlane/actions/docs/get_provisioning_profile.md +54 -18
  9. data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +39 -21
  10. data/fastlane/lib/fastlane/actions/docs/run_tests.md +14 -8
  11. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +5 -5
  12. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +3 -1
  13. data/fastlane/lib/fastlane/actions/mailgun.rb +15 -2
  14. data/fastlane/lib/fastlane/actions/modify_services.rb +1 -1
  15. data/fastlane/lib/fastlane/actions/nexus_upload.rb +63 -15
  16. data/fastlane/lib/fastlane/actions/unlock_keychain.rb +1 -0
  17. data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +26 -0
  18. data/fastlane/lib/fastlane/plugins/plugin_search.rb +1 -0
  19. data/fastlane/lib/fastlane/plugins/plugin_update_manager.rb +1 -0
  20. data/fastlane/lib/fastlane/version.rb +1 -1
  21. data/fastlane/swift/Deliverfile.swift +1 -1
  22. data/fastlane/swift/Fastlane.swift +20 -10
  23. data/fastlane/swift/Gymfile.swift +1 -1
  24. data/fastlane/swift/Matchfile.swift +1 -1
  25. data/fastlane/swift/Precheckfile.swift +1 -1
  26. data/fastlane/swift/Scanfile.swift +1 -1
  27. data/fastlane/swift/Screengrabfile.swift +1 -1
  28. data/fastlane/swift/Snapshotfile.swift +1 -1
  29. data/pilot/lib/pilot/build_manager.rb +9 -0
  30. data/pilot/lib/pilot/options.rb +6 -0
  31. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +9 -0
  32. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +5 -2
  33. data/spaceship/lib/spaceship/portal/app_service.rb +3 -0
  34. data/spaceship/lib/spaceship/test_flight/build.rb +5 -0
  35. data/supply/lib/supply/client.rb +1 -0
  36. metadata +19 -25
@@ -35,7 +35,9 @@ Check out this gif:
35
35
 
36
36
  # Usage
37
37
 
38
- fastlane pem
38
+ ```no-highlight
39
+ fastlane pem
40
+ ```
39
41
 
40
42
  Yes, that's the whole command!
41
43
 
@@ -50,27 +52,39 @@ Note that ``_pem_`` will never revoke your existing certificates. _pem_ can't do
50
52
 
51
53
  If you already have a push certificate enabled, which is active for at least 30 more days, _pem_ will not create a new certificate. If you still want to create one, use the `force`:
52
54
 
53
- fastlane pem --force
55
+ ```no-highlight
56
+ fastlane pem --force
57
+ ```
54
58
 
55
59
  You can pass parameters like this:
56
60
 
57
- fastlane pem -a com.krausefx.app -u username
61
+ ```no-highlight
62
+ fastlane pem -a com.krausefx.app -u username
63
+ ```
58
64
 
59
65
  If you want to generate a development certificate instead:
60
66
 
61
- fastlane pem --development
67
+ ```no-highlight
68
+ fastlane pem --development
69
+ ```
62
70
 
63
71
  Set a password for your `p12` file:
64
72
 
65
- fastlane pem -p "MyPass"
73
+ ```no-highlight
74
+ fastlane pem -p "MyPass"
75
+ ```
66
76
 
67
77
  You can specify a name for the output file:
68
78
 
69
- fastlane pem -o my.pem
79
+ ```no-highlight
80
+ fastlane pem -o my.pem
81
+ ```
70
82
 
71
83
  To get a list of available options run:
72
84
 
73
- fastlane action pem
85
+ ```no-highlight
86
+ fastlane action pem
87
+ ```
74
88
 
75
89
 
76
90
  ### Note about empty `p12` passwords and Keychain Access.app
@@ -80,23 +94,27 @@ While the file is valid, the Mac's Keychain Access will not allow you to open th
80
94
 
81
95
  Instead, you may verify the file is valid using OpenSSL:
82
96
 
83
- openssl pkcs12 -info -in my.p12
97
+ ```no-highlight
98
+ openssl pkcs12 -info -in my.p12
99
+ ```
84
100
 
85
101
  If you need the `p12` in your keychain, perhaps to test push with an app like [Knuff](https://github.com/KnuffApp/Knuff) or [Pusher](https://github.com/noodlewerk/NWPusher), you can use `openssl` to export the `p12` to _pem_ and back to `p12`:
86
102
 
87
- % openssl pkcs12 -in my.p12 -out my.pem
88
- Enter Import Password:
89
- <hit enter: the p12 has no password>
90
- MAC verified OK
91
- Enter PEM pass phrase:
92
- <enter a temporary password to encrypt the pem file>
93
-
94
- % openssl pkcs12 -export -in my.pem -out my-with-passphrase.p12
95
- Enter pass phrase for temp.pem:
96
- <enter the temporary password to decrypt the pem file>
97
-
98
- Enter Export Password:
99
- <enter a password for encrypting the new p12 file>
103
+ ```no-highlight
104
+ % openssl pkcs12 -in my.p12 -out my.pem
105
+ Enter Import Password:
106
+ <hit enter: the p12 has no password>
107
+ MAC verified OK
108
+ Enter PEM pass phrase:
109
+ <enter a temporary password to encrypt the pem file>
110
+
111
+ % openssl pkcs12 -export -in my.pem -out my-with-passphrase.p12
112
+ Enter pass phrase for temp.pem:
113
+ <enter the temporary password to decrypt the pem file>
114
+
115
+ Enter Export Password:
116
+ <enter a password for encrypting the new p12 file>
117
+ ```
100
118
 
101
119
  ## Environment Variables
102
120
 
@@ -71,15 +71,15 @@ _scan_ uses the latest APIs and tools to make running tests plain simple and off
71
71
  🚠 | Sensible defaults: Automatically detect the project, schemes and more
72
72
  📊 | Support for HTML, JSON and JUnit reports
73
73
  🔎 | Xcode duplicated your simulators again? _scan_ will handle this for you
74
- 🔗 | Works perfectly with [_fastlane_](https://fastlane.tools) and other tools
74
+ 🔗 | Works perfectly with [_fastlane_](https://fastlane.tools) and other tools
75
75
  🚅 | Don't remember any complicated build commands, just _scan_
76
- 🔧 | Easy and dynamic configuration using parameters and environment variables
76
+ 🔧 | Easy and dynamic configuration using parameters and environment variables
77
77
  📢 | Beautiful slack notifications of the test results
78
- 💾 | Store common build settings in a `Scanfile`
78
+ 💾 | Store common build settings in a `Scanfile`
79
79
  📤 | The raw `xcodebuild` outputs are stored in `~/Library/Logs/scan`
80
80
  💻 | Supports both iOS and Mac applications
81
- 👱 | Automatically switches to the [travis formatter](https://github.com/kattrali/xcpretty-travis-formatter) when running on Travis
82
- 📖 | Helps you resolve common test errors like simulator not responding
81
+ 👱 | Automatically switches to the [travis formatter](https://github.com/kattrali/xcpretty-travis-formatter) when running on Travis
82
+ 📖 | Helps you resolve common test errors like simulator not responding
83
83
 
84
84
  _scan_ uses a plain `xcodebuild` command, therefore keeping 100% compatible with `xcodebuild`. To generate the nice output, _scan_ uses [xcpretty](https://github.com/supermarin/xcpretty). You can alway access the raw output in `~/Library/Logs/scan`.
85
85
 
@@ -90,15 +90,21 @@ _scan_ uses a plain `xcodebuild` command, therefore keeping 100% compatible with
90
90
 
91
91
  # Usage
92
92
 
93
- fastlane scan
93
+ ```no-highlight
94
+ fastlane scan
95
+ ```
94
96
 
95
97
  That's all you need to run your tests. If you want more control, here are some available parameters:
96
98
 
97
- fastlane scan --workspace "Example.xcworkspace" --scheme "AppName" --device "iPhone 6" --clean
99
+ ```no-highlight
100
+ fastlane scan --workspace "Example.xcworkspace" --scheme "AppName" --device "iPhone 6" --clean
101
+ ```
98
102
 
99
103
  If you need to use a different xcode install, use `xcode-select` or define `DEVELOPER_DIR`:
100
104
 
101
- DEVELOPER_DIR="/Applications/Xcode6.2.app" scan
105
+ ```no-highlight
106
+ DEVELOPER_DIR="/Applications/Xcode6.2.app" scan
107
+ ```
102
108
 
103
109
  To run _scan_ on multiple devices via [_fastlane_](https://fastlane.tools), add this to your `Fastfile`:
104
110
 
@@ -32,8 +32,8 @@ To upload builds to TestFlight check out [_pilot_](/actions/pilot).
32
32
 
33
33
  The guide will create all the necessary files for you, using the existing app metadata from iTunes Connect.
34
34
 
35
- - ```cd [your_project_folder]```
36
- - ```fastlane deliver init```
35
+ - `cd [your_project_folder]`
36
+ - `fastlane deliver init`
37
37
  - Enter your iTunes Connect credentials
38
38
  - Enter your app identifier
39
39
  - Enjoy a good drink, while the computer does all the work for you
@@ -684,14 +684,14 @@ Detailed instructions about how to set up _deliver_ and _fastlane_ in `Jenkins`
684
684
 
685
685
  _deliver_ uses the iTunes Transporter to upload metadata and binaries. In case you are behind a firewall, you can specify a different transporter protocol using
686
686
 
687
- ```bash
687
+ ```no-highlight
688
688
  DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t DAV" fastlane deliver
689
689
  ```
690
690
 
691
691
  ## HTTP Proxy
692
692
  iTunes Transporter is a Java application bundled with Xcode. In addition to utilizing the `DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t DAV"`, you need to configure the transporter application to use the proxy independently from the system proxy or any environment proxy settings. You can find the configuration file within Xcode:
693
693
 
694
- ```bash
694
+ ```no-highlight
695
695
  TOOLS_PATH=$( xcode-select -p )
696
696
  REL_PATH='../Applications/Application Loader.app/Contents/itms/java/lib/net.properties'
697
697
  echo "$TOOLS_PATH/$REL_PATH"
@@ -701,7 +701,7 @@ Add necessary proxy configuration values to the net.properties according to [Jav
701
701
 
702
702
  As an alternative to editing the properties files, proxy configuration can be specified on the command line directly:
703
703
 
704
- ```bash
704
+ ```no-highlight
705
705
  DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t DAV -Dhttp.proxyHost=myproxy.com -Dhttp.proxyPort=8080"
706
706
  ```
707
707
 
@@ -192,7 +192,9 @@ fastlane pilot import -c ~/Desktop/testers.csv
192
192
 
193
193
  If you run into any issues you can use the `verbose` mode to get a more detailed output:
194
194
 
195
- fastlane pilot upload --verbose
195
+ ```no-highlight
196
+ fastlane pilot upload --verbose
197
+ ```
196
198
 
197
199
  ## Firewall Issues
198
200
 
@@ -91,8 +91,14 @@ module Fastlane
91
91
  env_name: "MAILGUN_ATTACHMENT",
92
92
  description: "Mail Attachment filenames, either an array or just one string",
93
93
  optional: true,
94
- is_string: false)
95
-
94
+ is_string: false),
95
+ FastlaneCore::ConfigItem.new(key: :custom_placeholders,
96
+ short_option: "-p",
97
+ env_name: "MAILGUN_CUSTOM_PLACEHOLDERS",
98
+ description: "Placeholders for template given as a hash",
99
+ default_value: {},
100
+ is_string: false,
101
+ type: Hash)
96
102
  ]
97
103
  end
98
104
 
@@ -140,6 +146,9 @@ module Fastlane
140
146
  hash[:success] = options[:success]
141
147
  hash[:ci_build_link] = options[:ci_build_link]
142
148
 
149
+ # concatenate with custom placeholders passed by user
150
+ hash = hash.merge(options[:custom_placeholders])
151
+
143
152
  # grabs module
144
153
  eth = Fastlane::ErbTemplateHelper
145
154
 
@@ -171,6 +180,10 @@ module Fastlane
171
180
  app_link: "http://www.myapplink.com",
172
181
  ci_build_link: "http://www.mycibuildlink.com",
173
182
  template_path: "HTML_TEMPLATE_PATH",
183
+ custom_placeholders: {
184
+ :var1 => 123,
185
+ :var2 => "string"
186
+ },
174
187
  attachment: "dirname/filename.ext"
175
188
  )'
176
189
  ]
@@ -153,7 +153,7 @@ module Fastlane
153
153
  username: "test.account@gmail.com",
154
154
  app_identifier: "com.someorg.app",
155
155
  services: {
156
- push_notifications: "on",
156
+ push_notification: "on",
157
157
  associated_domains: "off"
158
158
  }
159
159
  )'
@@ -14,7 +14,23 @@ module Fastlane
14
14
  end
15
15
 
16
16
  def self.upload_url(params)
17
- "#{params[:endpoint]}#{params[:mount_path]}/service/local/artifact/maven/content".shellescape
17
+ url = "#{params[:endpoint]}#{params[:mount_path]}"
18
+
19
+ if params[:nexus_version] == 2
20
+ url << "/service/local/artifact/maven/content"
21
+ else
22
+ file_extension = File.extname(params[:file]).shellescape
23
+
24
+ url << "/repository/#{params[:repo_id]}"
25
+ url << "/#{params[:repo_group_id].gsub('.', '/')}"
26
+ url << "/#{params[:repo_project_name]}"
27
+ url << "/#{params[:repo_project_version]}"
28
+ url << "/#{params[:repo_project_name]}-#{params[:repo_project_version]}"
29
+ url << "-#{params[:repo_classifier]}" if params[:repo_classifier]
30
+ url << file_extension.to_s
31
+ end
32
+
33
+ url.shellescape
18
34
  end
19
35
 
20
36
  def self.verbose(params)
@@ -26,19 +42,24 @@ module Fastlane
26
42
  file_extension = file_path.split('.').last.shellescape
27
43
 
28
44
  options = []
29
- options << "-F p=zip"
30
- options << "-F hasPom=false"
31
- options << "-F r=#{params[:repo_id].shellescape}"
32
- options << "-F g=#{params[:repo_group_id].shellescape}"
33
- options << "-F a=#{params[:repo_project_name].shellescape}"
34
- options << "-F v=#{params[:repo_project_version].shellescape}"
35
-
36
- if params[:repo_classifier]
37
- options << "-F c=#{params[:repo_classifier].shellescape}"
45
+ if params[:nexus_version] == 2
46
+ options << "-F p=zip"
47
+ options << "-F hasPom=false"
48
+ options << "-F r=#{params[:repo_id].shellescape}"
49
+ options << "-F g=#{params[:repo_group_id].shellescape}"
50
+ options << "-F a=#{params[:repo_project_name].shellescape}"
51
+ options << "-F v=#{params[:repo_project_version].shellescape}"
52
+
53
+ if params[:repo_classifier]
54
+ options << "-F c=#{params[:repo_classifier].shellescape}"
55
+ end
56
+
57
+ options << "-F e=#{file_extension}"
58
+ options << "-F file=@#{file_path}"
59
+ else
60
+ options << "--upload-file #{file_path}"
38
61
  end
39
62
 
40
- options << "-F e=#{file_extension}"
41
- options << "-F file=@#{file_path}"
42
63
  options << "-u #{params[:username].shellescape}:#{params[:password].shellescape}"
43
64
 
44
65
  options
@@ -107,7 +128,7 @@ module Fastlane
107
128
  optional: false),
108
129
  FastlaneCore::ConfigItem.new(key: :mount_path,
109
130
  env_name: "FL_NEXUS_MOUNT_PATH",
110
- description: "Nexus mount path",
131
+ description: "Nexus mount path (Nexus 3 instances have this configured as empty by default)",
111
132
  default_value: "/nexus",
112
133
  optional: true),
113
134
  FastlaneCore::ConfigItem.new(key: :username,
@@ -124,6 +145,18 @@ module Fastlane
124
145
  is_string: false,
125
146
  default_value: true,
126
147
  optional: true),
148
+ FastlaneCore::ConfigItem.new(key: :nexus_version,
149
+ env_name: "FL_NEXUS_MAJOR_VERSION",
150
+ description: "Nexus major version",
151
+ type: Integer,
152
+ default_value: 2,
153
+ optional: true,
154
+ verify_block: proc do |value|
155
+ min_version = 2
156
+ max_version = 3
157
+ UI.user_error!("Unsupported version (#{value}) min. supported version: #{min_version}") unless value >= min_version
158
+ UI.user_error!("Unsupported version (#{value}) max. supported version: #{max_version}") unless value <= max_version
159
+ end),
127
160
  FastlaneCore::ConfigItem.new(key: :verbose,
128
161
  env_name: "FL_NEXUS_VERBOSE",
129
162
  description: "Make detailed output",
@@ -151,7 +184,7 @@ module Fastlane
151
184
  end
152
185
 
153
186
  def self.authors
154
- ["xfreebird"]
187
+ ["xfreebird", "mdio"]
155
188
  end
156
189
 
157
190
  def self.is_supported?(platform)
@@ -160,7 +193,22 @@ module Fastlane
160
193
 
161
194
  def self.example_code
162
195
  [
163
- 'nexus_upload(
196
+ '# for Nexus 2
197
+ nexus_upload(
198
+ file: "/path/to/file.ipa",
199
+ repo_id: "artefacts",
200
+ repo_group_id: "com.fastlane",
201
+ repo_project_name: "ipa",
202
+ repo_project_version: "1.13",
203
+ repo_classifier: "dSYM", # Optional
204
+ endpoint: "http://localhost:8081",
205
+ username: "admin",
206
+ password: "admin123"
207
+ )',
208
+ '# for Nexus 3
209
+ nexus_upload(
210
+ nexus_version: 3,
211
+ mount_path: "",
164
212
  file: "/path/to/file.ipa",
165
213
  repo_id: "artefacts",
166
214
  repo_group_id: "com.fastlane",
@@ -72,6 +72,7 @@ module Fastlane
72
72
  FastlaneCore::ConfigItem.new(key: :path,
73
73
  env_name: "FL_UNLOCK_KEYCHAIN_PATH",
74
74
  description: "Path to the keychain file",
75
+ default_value: "login",
75
76
  optional: false),
76
77
  FastlaneCore::ConfigItem.new(key: :password,
77
78
  env_name: "FL_UNLOCK_KEYCHAIN_PASSWORD",
@@ -104,6 +104,32 @@ module Fastlane
104
104
  return nil
105
105
  end
106
106
 
107
+ def actions_md_contents
108
+ action_mds = {}
109
+
110
+ ActionsList.all_actions do |action|
111
+ @action = action
112
+ @action_filename = filename_for_action(action)
113
+
114
+ unless @action_filename
115
+ next
116
+ end
117
+
118
+ @custom_content = load_custom_action_md(action)
119
+
120
+ if action.superclass != Fastlane::Action
121
+ @custom_content ||= load_custom_action_md(action.superclass)
122
+ end
123
+
124
+ template = File.join(Fastlane::ROOT, "lib/assets/ActionDetails.md.erb")
125
+ result = ERB.new(File.read(template), 0, '-').result(binding)
126
+
127
+ action_mds[action.action_name] = result
128
+ end
129
+
130
+ return action_mds
131
+ end
132
+
107
133
  def generate!(target_path: nil)
108
134
  require 'yaml'
109
135
  FileUtils.mkdir_p(target_path)
@@ -1,5 +1,6 @@
1
1
  module Fastlane
2
2
  class PluginSearch
3
+ require 'terminal-table'
3
4
  require 'word_wrap'
4
5
 
5
6
  def self.print_plugins(search_query: nil)
@@ -41,6 +41,7 @@ module Fastlane
41
41
  return
42
42
  end
43
43
 
44
+ require 'terminal-table'
44
45
  puts(Terminal::Table.new({
45
46
  rows: FastlaneCore::PrintTable.transform_output(rows),
46
47
  title: "Plugin updates available".yellow,
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.97.0'.freeze
2
+ VERSION = '2.98.0'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.97.0
21
+ // Generated with fastlane 2.98.0
@@ -2033,7 +2033,8 @@ func mailgun(mailgunSandboxDomain: String? = nil,
2033
2033
  ciBuildLink: String? = nil,
2034
2034
  templatePath: String? = nil,
2035
2035
  replyTo: String? = nil,
2036
- attachment: String? = nil) {
2036
+ attachment: String? = nil,
2037
+ customPlaceholders: [String : Any] = [:]) {
2037
2038
  let command = RubyCommand(commandID: "", methodName: "mailgun", className: nil, args: [RubyCommand.Argument(name: "mailgun_sandbox_domain", value: mailgunSandboxDomain),
2038
2039
  RubyCommand.Argument(name: "mailgun_sandbox_postmaster", value: mailgunSandboxPostmaster),
2039
2040
  RubyCommand.Argument(name: "mailgun_apikey", value: mailgunApikey),
@@ -2048,7 +2049,8 @@ func mailgun(mailgunSandboxDomain: String? = nil,
2048
2049
  RubyCommand.Argument(name: "ci_build_link", value: ciBuildLink),
2049
2050
  RubyCommand.Argument(name: "template_path", value: templatePath),
2050
2051
  RubyCommand.Argument(name: "reply_to", value: replyTo),
2051
- RubyCommand.Argument(name: "attachment", value: attachment)])
2052
+ RubyCommand.Argument(name: "attachment", value: attachment),
2053
+ RubyCommand.Argument(name: "custom_placeholders", value: customPlaceholders)])
2052
2054
  _ = runner.executeCommand(command)
2053
2055
  }
2054
2056
  func makeChangelogFromJenkins(fallbackChangelog: String = "",
@@ -2130,6 +2132,7 @@ func nexusUpload(file: String,
2130
2132
  username: String,
2131
2133
  password: String,
2132
2134
  sslVerify: Bool = true,
2135
+ nexusVersion: Int = 2,
2133
2136
  verbose: Bool = false,
2134
2137
  proxyUsername: String? = nil,
2135
2138
  proxyPassword: String? = nil,
@@ -2146,6 +2149,7 @@ func nexusUpload(file: String,
2146
2149
  RubyCommand.Argument(name: "username", value: username),
2147
2150
  RubyCommand.Argument(name: "password", value: password),
2148
2151
  RubyCommand.Argument(name: "ssl_verify", value: sslVerify),
2152
+ RubyCommand.Argument(name: "nexus_version", value: nexusVersion),
2149
2153
  RubyCommand.Argument(name: "verbose", value: verbose),
2150
2154
  RubyCommand.Argument(name: "proxy_username", value: proxyUsername),
2151
2155
  RubyCommand.Argument(name: "proxy_password", value: proxyPassword),
@@ -2295,7 +2299,8 @@ func pilot(username: String,
2295
2299
  devPortalTeamId: String? = nil,
2296
2300
  itcProvider: String? = nil,
2297
2301
  groups: [String]? = nil,
2298
- waitForUploadedBuild: Bool = false) {
2302
+ waitForUploadedBuild: Bool = false,
2303
+ rejectBuildWaitingForReview: Bool = false) {
2299
2304
  let command = RubyCommand(commandID: "", methodName: "pilot", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
2300
2305
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
2301
2306
  RubyCommand.Argument(name: "app_platform", value: appPlatform),
@@ -2320,7 +2325,8 @@ func pilot(username: String,
2320
2325
  RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId),
2321
2326
  RubyCommand.Argument(name: "itc_provider", value: itcProvider),
2322
2327
  RubyCommand.Argument(name: "groups", value: groups),
2323
- RubyCommand.Argument(name: "wait_for_uploaded_build", value: waitForUploadedBuild)])
2328
+ RubyCommand.Argument(name: "wait_for_uploaded_build", value: waitForUploadedBuild),
2329
+ RubyCommand.Argument(name: "reject_build_waiting_for_review", value: rejectBuildWaitingForReview)])
2324
2330
  _ = runner.executeCommand(command)
2325
2331
  }
2326
2332
  func pluginScores(outputPath: String,
@@ -3403,7 +3409,8 @@ func testflight(username: String,
3403
3409
  devPortalTeamId: String? = nil,
3404
3410
  itcProvider: String? = nil,
3405
3411
  groups: [String]? = nil,
3406
- waitForUploadedBuild: Bool = false) {
3412
+ waitForUploadedBuild: Bool = false,
3413
+ rejectBuildWaitingForReview: Bool = false) {
3407
3414
  let command = RubyCommand(commandID: "", methodName: "testflight", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
3408
3415
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
3409
3416
  RubyCommand.Argument(name: "app_platform", value: appPlatform),
@@ -3428,7 +3435,8 @@ func testflight(username: String,
3428
3435
  RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId),
3429
3436
  RubyCommand.Argument(name: "itc_provider", value: itcProvider),
3430
3437
  RubyCommand.Argument(name: "groups", value: groups),
3431
- RubyCommand.Argument(name: "wait_for_uploaded_build", value: waitForUploadedBuild)])
3438
+ RubyCommand.Argument(name: "wait_for_uploaded_build", value: waitForUploadedBuild),
3439
+ RubyCommand.Argument(name: "reject_build_waiting_for_review", value: rejectBuildWaitingForReview)])
3432
3440
  _ = runner.executeCommand(command)
3433
3441
  }
3434
3442
  func tryouts(appId: String,
@@ -3463,7 +3471,7 @@ func typetalk() {
3463
3471
  let command = RubyCommand(commandID: "", methodName: "typetalk", className: nil, args: [])
3464
3472
  _ = runner.executeCommand(command)
3465
3473
  }
3466
- func unlockKeychain(path: String,
3474
+ func unlockKeychain(path: String = "login",
3467
3475
  password: String,
3468
3476
  addToSearchList: Bool = true,
3469
3477
  setDefault: Bool = false) {
@@ -3787,7 +3795,8 @@ func uploadToTestflight(username: String,
3787
3795
  devPortalTeamId: String? = nil,
3788
3796
  itcProvider: String? = nil,
3789
3797
  groups: [String]? = nil,
3790
- waitForUploadedBuild: Bool = false) {
3798
+ waitForUploadedBuild: Bool = false,
3799
+ rejectBuildWaitingForReview: Bool = false) {
3791
3800
  let command = RubyCommand(commandID: "", methodName: "upload_to_testflight", className: nil, args: [RubyCommand.Argument(name: "username", value: username),
3792
3801
  RubyCommand.Argument(name: "app_identifier", value: appIdentifier),
3793
3802
  RubyCommand.Argument(name: "app_platform", value: appPlatform),
@@ -3812,7 +3821,8 @@ func uploadToTestflight(username: String,
3812
3821
  RubyCommand.Argument(name: "dev_portal_team_id", value: devPortalTeamId),
3813
3822
  RubyCommand.Argument(name: "itc_provider", value: itcProvider),
3814
3823
  RubyCommand.Argument(name: "groups", value: groups),
3815
- RubyCommand.Argument(name: "wait_for_uploaded_build", value: waitForUploadedBuild)])
3824
+ RubyCommand.Argument(name: "wait_for_uploaded_build", value: waitForUploadedBuild),
3825
+ RubyCommand.Argument(name: "reject_build_waiting_for_review", value: rejectBuildWaitingForReview)])
3816
3826
  _ = runner.executeCommand(command)
3817
3827
  }
3818
3828
  func verifyBuild(provisioningType: String? = nil,
@@ -4041,4 +4051,4 @@ let screengrabfile: Screengrabfile = Screengrabfile()
4041
4051
  let snapshotfile: Snapshotfile = Snapshotfile()
4042
4052
  // Please don't remove the lines below
4043
4053
  // They are used to detect outdated files
4044
- // FastlaneRunnerAPIVersion [0.9.20]
4054
+ // FastlaneRunnerAPIVersion [0.9.21]