fastlane 2.150.3 → 2.151.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +86 -86
  3. data/deliver/lib/deliver/options.rb +7 -1
  4. data/deliver/lib/deliver/submit_for_review.rb +7 -7
  5. data/deliver/lib/deliver/upload_metadata.rb +2 -2
  6. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +3 -0
  7. data/fastlane/lib/fastlane/actions/notarize.rb +13 -3
  8. data/fastlane/lib/fastlane/actions/pod_push.rb +10 -1
  9. data/fastlane/lib/fastlane/actions/resign.rb +1 -1
  10. data/fastlane/lib/fastlane/actions/setup_ci.rb +5 -0
  11. data/fastlane/lib/fastlane/actions/setup_circle_ci.rb +1 -1
  12. data/fastlane/lib/fastlane/actions/setup_travis.rb +1 -1
  13. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +10 -2
  14. data/fastlane/lib/fastlane/documentation/docs_generator.rb +1 -1
  15. data/fastlane/lib/fastlane/helper/s3_client_helper.rb +28 -11
  16. data/fastlane/lib/fastlane/server/socket_server.rb +7 -1
  17. data/fastlane/lib/fastlane/swift_fastlane_function.rb +1 -1
  18. data/fastlane/lib/fastlane/version.rb +1 -1
  19. data/fastlane/swift/Actions.swift +1 -1
  20. data/fastlane/swift/ArgumentProcessor.swift +24 -24
  21. data/fastlane/swift/ControlCommand.swift +3 -3
  22. data/fastlane/swift/Deliverfile.swift +4 -8
  23. data/fastlane/swift/DeliverfileProtocol.swift +181 -182
  24. data/fastlane/swift/Fastlane.swift +2813 -2802
  25. data/fastlane/swift/Gymfile.swift +4 -8
  26. data/fastlane/swift/GymfileProtocol.swift +133 -134
  27. data/fastlane/swift/LaneFileProtocol.swift +17 -17
  28. data/fastlane/swift/Matchfile.swift +4 -8
  29. data/fastlane/swift/MatchfileProtocol.swift +115 -112
  30. data/fastlane/swift/Plugins.swift +1 -1
  31. data/fastlane/swift/Precheckfile.swift +4 -8
  32. data/fastlane/swift/PrecheckfileProtocol.swift +22 -23
  33. data/fastlane/swift/RubyCommand.swift +34 -37
  34. data/fastlane/swift/RubyCommandable.swift +3 -1
  35. data/fastlane/swift/Runner.swift +76 -69
  36. data/fastlane/swift/Scanfile.swift +4 -8
  37. data/fastlane/swift/ScanfileProtocol.swift +190 -191
  38. data/fastlane/swift/Screengrabfile.swift +4 -8
  39. data/fastlane/swift/ScreengrabfileProtocol.swift +67 -68
  40. data/fastlane/swift/Snapshotfile.swift +4 -8
  41. data/fastlane/swift/SnapshotfileProtocol.swift +127 -128
  42. data/fastlane/swift/SocketClient.swift +84 -90
  43. data/fastlane/swift/SocketResponse.swift +14 -14
  44. data/fastlane/swift/formatting/Brewfile +1 -0
  45. data/fastlane/swift/formatting/Brewfile.lock.json +39 -0
  46. data/fastlane/swift/formatting/Rakefile +18 -0
  47. data/fastlane/swift/main.swift +5 -6
  48. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +15 -7
  49. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +1 -1
  50. data/match/lib/assets/READMETemplate.md +5 -2
  51. data/match/lib/match/options.rb +4 -0
  52. data/match/lib/match/runner.rb +1 -0
  53. data/match/lib/match/storage/git_storage.rb +1 -1
  54. data/match/lib/match/storage/s3_storage.rb +25 -7
  55. data/sigh/lib/assets/resign.sh +18 -0
  56. data/spaceship/lib/spaceship/client.rb +1 -2
  57. data/spaceship/lib/spaceship/connect_api/client.rb +0 -1
  58. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -1
  59. metadata +31 -38
  60. data/deliver/lib/deliver/.upload_metadata.rb.swp +0 -0
  61. data/spaceship/lib/spaceship/babosa_fix.rb +0 -30
@@ -3,14 +3,15 @@ require 'aws-sdk-s3'
3
3
  module Fastlane
4
4
  module Helper
5
5
  class S3ClientHelper
6
- attr_reader :client
6
+ attr_reader :access_key
7
+ attr_reader :region
7
8
 
8
- def initialize(access_key: nil, secret_access_key: nil, region: nil)
9
- creds = Aws::Credentials.new(access_key, secret_access_key)
10
- Aws.config.update(
11
- region: region,
12
- credentials: creds
13
- )
9
+ def initialize(access_key: nil, secret_access_key: nil, region: nil, s3_client: nil)
10
+ @access_key = access_key
11
+ @secret_access_key = secret_access_key
12
+ @region = region
13
+
14
+ @client = s3_client
14
15
  end
15
16
 
16
17
  def list_buckets
@@ -50,12 +51,28 @@ module Fastlane
50
51
 
51
52
  return bucket
52
53
  end
53
- end
54
54
 
55
- private
55
+ private
56
+
57
+ attr_reader :secret_access_key
58
+
59
+ def client
60
+ @client ||= Aws::S3::Client.new(
61
+ {
62
+ region: region,
63
+ credentials: create_credentials
64
+ }.compact
65
+ )
66
+ end
67
+
68
+ def create_credentials
69
+ return nil if access_key.nil? || secret_access_key.nil?
56
70
 
57
- def client
58
- @client ||= Aws::S3::Client.new
71
+ Aws::Credentials.new(
72
+ access_key,
73
+ secret_access_key
74
+ )
75
+ end
59
76
  end
60
77
  end
61
78
  end
@@ -215,6 +215,10 @@ module Fastlane
215
215
  exception_array << "#{e.class}:"
216
216
  exception_array << e.backtrace
217
217
 
218
+ ec = e.class
219
+
220
+ em = e.message
221
+
218
222
  while e.respond_to?("cause") && (e = e.cause)
219
223
  exception_array << "cause: #{e.class}"
220
224
  exception_array << e.backtrace
@@ -223,7 +227,9 @@ module Fastlane
223
227
  payload = {
224
228
  payload: {
225
229
  status: "failure",
226
- failure_information: exception_array.flatten
230
+ failure_information: exception_array.flatten,
231
+ failure_class: ec,
232
+ failure_message: em
227
233
  }
228
234
  }
229
235
  return JSON.generate(payload)
@@ -31,7 +31,7 @@ module Fastlane
31
31
 
32
32
  # rubocop:disable LineLength
33
33
  # class instance?
34
- @reserved_words = %w[associativity break case catch class continue convenience default deinit didSet do else enum extension fallthrough false final for func get guard if in infix init inout internal lazy let mutating nil operator override postfix precedence prefix private public repeat required return self set static struct subscript super switch throws true try var weak where while willSet].to_set
34
+ @reserved_words = %w[associativity break case catch class continue convenience default deinit didSet do else enum extension fallthrough false final for func guard if in infix init inout internal lazy let mutating nil operator override precedence private public repeat required return self static struct subscript super switch throws true try var weak where while willSet].to_set
35
35
  # rubocop:enable LineLength
36
36
  end
37
37
 
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.150.3'.freeze
2
+ VERSION = '2.151.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
@@ -12,4 +12,4 @@ import Foundation
12
12
 
13
13
  // Please don't remove the lines below
14
14
  // They are used to detect outdated files
15
- // FastlaneRunnerAPIVersion [0.9.56]
15
+ // FastlaneRunnerAPIVersion [0.9.56]
@@ -19,68 +19,68 @@ struct ArgumentProcessor {
19
19
  let currentLane: String
20
20
  let commandTimeout: Int
21
21
  let port: UInt32
22
-
23
- init(args: [String]) {
22
+
23
+ init(args: [String]) {
24
24
  // Dump the first arg which is the program name
25
25
  let fastlaneArgs = stride(from: 1, to: args.count - 1, by: 2).map {
26
- RunnerArgument(name: args[$0], value: args[$0+1])
26
+ RunnerArgument(name: args[$0], value: args[$0 + 1])
27
27
  }
28
28
  self.args = fastlaneArgs
29
-
29
+
30
30
  let fastlaneArgsMinusLanes = fastlaneArgs.filter { arg in
31
- return arg.name.lowercased() != "lane"
31
+ arg.name.lowercased() != "lane"
32
32
  }
33
-
33
+
34
34
  let potentialLogMode = fastlaneArgsMinusLanes.filter { arg in
35
- return arg.name.lowercased() == "logmode"
35
+ arg.name.lowercased() == "logmode"
36
36
  }
37
-
37
+
38
38
  port = UInt32(fastlaneArgsMinusLanes.first(where: { $0.name == "swiftServerPort" })?.value ?? "") ?? 2000
39
-
39
+
40
40
  // Configure logMode since we might need to use it before we finish parsing
41
41
  if let logModeArg = potentialLogMode.first {
42
42
  let logModeString = logModeArg.value
43
43
  Logger.logMode = Logger.LogMode(logMode: logModeString)
44
44
  }
45
-
45
+
46
46
  let lanes = self.args.filter { arg in
47
- return arg.name.lowercased() == "lane"
47
+ arg.name.lowercased() == "lane"
48
48
  }
49
49
  verbose(message: lanes.description)
50
-
50
+
51
51
  guard lanes.count == 1 else {
52
52
  let message = "You must have exactly one lane specified as an arg, here's what I got: \(lanes)"
53
53
  log(message: message)
54
54
  fatalError(message)
55
55
  }
56
-
56
+
57
57
  let lane = lanes.first!
58
- self.currentLane = lane.value
59
-
58
+ currentLane = lane.value
59
+
60
60
  // User might have configured a timeout for the socket connection
61
61
  let potentialTimeout = fastlaneArgsMinusLanes.filter { arg in
62
- return arg.name.lowercased() == "timeoutseconds"
62
+ arg.name.lowercased() == "timeoutseconds"
63
63
  }
64
-
64
+
65
65
  if let logModeArg = potentialLogMode.first {
66
66
  let logModeString = logModeArg.value
67
67
  Logger.logMode = Logger.LogMode(logMode: logModeString)
68
68
  }
69
-
69
+
70
70
  if let timeoutArg = potentialTimeout.first {
71
71
  let timeoutString = timeoutArg.value
72
- self.commandTimeout = (timeoutString as NSString).integerValue
72
+ commandTimeout = (timeoutString as NSString).integerValue
73
73
  } else {
74
- self.commandTimeout = SocketClient.defaultCommandTimeoutSeconds
74
+ commandTimeout = SocketClient.defaultCommandTimeoutSeconds
75
75
  }
76
76
  }
77
-
78
- func laneParameters() -> [String : String] {
79
- let laneParametersArgs = self.args.filter { arg in
77
+
78
+ func laneParameters() -> [String: String] {
79
+ let laneParametersArgs = args.filter { arg in
80
80
  let lowercasedName = arg.name.lowercased()
81
81
  return lowercasedName != "timeoutseconds" && lowercasedName != "lane" && lowercasedName != "logmode"
82
82
  }
83
- var laneParameters = [String : String]()
83
+ var laneParameters = [String: String]()
84
84
  for arg in laneParametersArgs {
85
85
  laneParameters[arg.name] = arg.value
86
86
  }
@@ -52,12 +52,12 @@ struct ControlCommand: RubyCommandable {
52
52
  let id: String = UUID().uuidString
53
53
  let shutdownCommandType: ShutdownCommandType
54
54
  var commandJson: String {
55
- var jsonDictionary: [String: Any] = [ControlCommand.commandKey : self.shutdownCommandType.token]
55
+ var jsonDictionary: [String: Any] = [ControlCommand.commandKey: shutdownCommandType.token]
56
56
 
57
57
  if let message = message {
58
58
  jsonDictionary[ShutdownCommandType.userMessageKey] = message
59
59
  }
60
- if case .cancel(let reason) = shutdownCommandType {
60
+ if case let .cancel(reason) = shutdownCommandType {
61
61
  jsonDictionary[ShutdownCommandType.CancelReason.reasonKey] = reason.reasonText
62
62
  }
63
63
 
@@ -67,7 +67,7 @@ struct ControlCommand: RubyCommandable {
67
67
  }
68
68
 
69
69
  init(commandType: ShutdownCommandType, message: String? = nil) {
70
- self.shutdownCommandType = commandType
70
+ shutdownCommandType = commandType
71
71
  self.message = message
72
72
  }
73
73
  }
@@ -9,13 +9,9 @@
9
9
  //
10
10
 
11
11
  class Deliverfile: DeliverfileProtocol {
12
- // If you want to enable `deliver`, run `fastlane deliver init`
13
- // After, this file will be replaced with a custom implementation that contains values you supplied
14
- // during the `init` process, and you won't see this message
12
+ // If you want to enable `deliver`, run `fastlane deliver init`
13
+ // After, this file will be replaced with a custom implementation that contains values you supplied
14
+ // during the `init` process, and you won't see this message
15
15
  }
16
16
 
17
-
18
-
19
-
20
-
21
- // Generated with fastlane 2.150.3
17
+ // Generated with fastlane 2.151.0
@@ -1,249 +1,248 @@
1
1
  protocol DeliverfileProtocol: class {
2
+ /// Your Apple ID Username
3
+ var username: String { get }
2
4
 
3
- /// Your Apple ID Username
4
- var username: String { get }
5
+ /// The bundle identifier of your app
6
+ var appIdentifier: String? { get }
5
7
 
6
- /// The bundle identifier of your app
7
- var appIdentifier: String? { get }
8
+ /// The version that should be edited or created
9
+ var appVersion: String? { get }
8
10
 
9
- /// The version that should be edited or created
10
- var appVersion: String? { get }
11
+ /// Path to your ipa file
12
+ var ipa: String? { get }
11
13
 
12
- /// Path to your ipa file
13
- var ipa: String? { get }
14
+ /// Path to your pkg file
15
+ var pkg: String? { get }
14
16
 
15
- /// Path to your pkg file
16
- var pkg: String? { get }
17
+ /// If set the given build number (already uploaded to iTC) will be used instead of the current built one
18
+ var buildNumber: String? { get }
17
19
 
18
- /// If set the given build number (already uploaded to iTC) will be used instead of the current built one
19
- var buildNumber: String? { get }
20
+ /// The platform to use (optional)
21
+ var platform: String { get }
20
22
 
21
- /// The platform to use (optional)
22
- var platform: String { get }
23
+ /// Modify live metadata, this option disables ipa upload and screenshot upload
24
+ var editLive: Bool { get }
23
25
 
24
- /// Modify live metadata, this option disables ipa upload and screenshot upload
25
- var editLive: Bool { get }
26
+ /// Force usage of live version rather than edit version
27
+ var useLiveVersion: Bool { get }
26
28
 
27
- /// Force usage of live version rather than edit version
28
- var useLiveVersion: Bool { get }
29
+ /// Path to the folder containing the metadata files
30
+ var metadataPath: String? { get }
29
31
 
30
- /// Path to the folder containing the metadata files
31
- var metadataPath: String? { get }
32
+ /// Path to the folder containing the screenshots
33
+ var screenshotsPath: String? { get }
32
34
 
33
- /// Path to the folder containing the screenshots
34
- var screenshotsPath: String? { get }
35
+ /// Skip uploading an ipa or pkg to App Store Connect
36
+ var skipBinaryUpload: Bool { get }
35
37
 
36
- /// Skip uploading an ipa or pkg to App Store Connect
37
- var skipBinaryUpload: Bool { get }
38
+ /// Don't upload the screenshots
39
+ var skipScreenshots: Bool { get }
38
40
 
39
- /// Don't upload the screenshots
40
- var skipScreenshots: Bool { get }
41
+ /// Don't upload the metadata (e.g. title, description). This will still upload screenshots
42
+ var skipMetadata: Bool { get }
41
43
 
42
- /// Don't upload the metadata (e.g. title, description). This will still upload screenshots
43
- var skipMetadata: Bool { get }
44
+ /// Don't update app version for submission
45
+ var skipAppVersionUpdate: Bool { get }
44
46
 
45
- /// Don't update app version for submission
46
- var skipAppVersionUpdate: Bool { get }
47
+ /// Skip the HTML report file verification
48
+ var force: Bool { get }
47
49
 
48
- /// Skip the HTML report file verification
49
- var force: Bool { get }
50
+ /// Clear all previously uploaded screenshots before uploading the new ones
51
+ var overwriteScreenshots: Bool { get }
50
52
 
51
- /// Clear all previously uploaded screenshots before uploading the new ones
52
- var overwriteScreenshots: Bool { get }
53
+ /// Submit the new version for Review after uploading everything
54
+ var submitForReview: Bool { get }
53
55
 
54
- /// Submit the new version for Review after uploading everything
55
- var submitForReview: Bool { get }
56
+ /// Rejects the previously submitted build if it's in a state where it's possible
57
+ var rejectIfPossible: Bool { get }
56
58
 
57
- /// Rejects the previously submitted build if it's in a state where it's possible
58
- var rejectIfPossible: Bool { get }
59
+ /// Should the app be automatically released once it's approved? (Can not be used together with `auto_release_date`)
60
+ var automaticRelease: Bool { get }
59
61
 
60
- /// Should the app be automatically released once it's approved? (Can not be used together with `auto_release_date`)
61
- var automaticRelease: Bool { get }
62
+ /// Date in milliseconds for automatically releasing on pending approval (Can not be used together with `automatic_release`)
63
+ var autoReleaseDate: Int? { get }
62
64
 
63
- /// Date in milliseconds for automatically releasing on pending approval (Can not be used together with `automatic_release`)
64
- var autoReleaseDate: String? { get }
65
+ /// Enable the phased release feature of iTC
66
+ var phasedRelease: Bool { get }
65
67
 
66
- /// Enable the phased release feature of iTC
67
- var phasedRelease: Bool { get }
68
+ /// Reset the summary rating when you release a new version of the application
69
+ var resetRatings: Bool { get }
68
70
 
69
- /// Reset the summary rating when you release a new version of the application
70
- var resetRatings: Bool { get }
71
+ /// The price tier of this application
72
+ var priceTier: String? { get }
71
73
 
72
- /// The price tier of this application
73
- var priceTier: String? { get }
74
+ /// Path to the app rating's config
75
+ var appRatingConfigPath: String? { get }
74
76
 
75
- /// Path to the app rating's config
76
- var appRatingConfigPath: String? { get }
77
+ /// Extra information for the submission (e.g. compliance specifications, IDFA settings)
78
+ var submissionInformation: [String: Any]? { get }
77
79
 
78
- /// Extra information for the submission (e.g. compliance specifications, IDFA settings)
79
- var submissionInformation: [String : Any]? { get }
80
+ /// The ID of your App Store Connect team if you're in multiple teams
81
+ var teamId: String? { get }
80
82
 
81
- /// The ID of your App Store Connect team if you're in multiple teams
82
- var teamId: String? { get }
83
+ /// The name of your App Store Connect team if you're in multiple teams
84
+ var teamName: String? { get }
83
85
 
84
- /// The name of your App Store Connect team if you're in multiple teams
85
- var teamName: String? { get }
86
+ /// The short ID of your Developer Portal team, if you're in multiple teams. Different from your iTC team ID!
87
+ var devPortalTeamId: String? { get }
86
88
 
87
- /// The short ID of your Developer Portal team, if you're in multiple teams. Different from your iTC team ID!
88
- var devPortalTeamId: String? { get }
89
+ /// The name of your Developer Portal team if you're in multiple teams
90
+ var devPortalTeamName: String? { get }
89
91
 
90
- /// The name of your Developer Portal team if you're in multiple teams
91
- var devPortalTeamName: String? { get }
92
+ /// The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
93
+ var itcProvider: String? { get }
92
94
 
93
- /// The provider short name to be used with the iTMSTransporter to identify your team. This value will override the automatically detected provider short name. To get provider short name run `pathToXcode.app/Contents/Applications/Application\ Loader.app/Contents/itms/bin/iTMSTransporter -m provider -u 'USERNAME' -p 'PASSWORD' -account_type itunes_connect -v off`. The short names of providers should be listed in the second column
94
- var itcProvider: String? { get }
95
+ /// Run precheck before submitting to app review
96
+ var runPrecheckBeforeSubmit: Bool { get }
95
97
 
96
- /// Run precheck before submitting to app review
97
- var runPrecheckBeforeSubmit: Bool { get }
98
+ /// The default precheck rule level unless otherwise configured
99
+ var precheckDefaultRuleLevel: String { get }
98
100
 
99
- /// The default precheck rule level unless otherwise configured
100
- var precheckDefaultRuleLevel: String { get }
101
+ /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - An array of localized metadata items to upload individually by language so that errors can be identified. E.g. ['name', 'keywords', 'description']. Note: slow
102
+ var individualMetadataItems: [String] { get }
101
103
 
102
- /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - An array of localized metadata items to upload individually by language so that errors can be identified. E.g. ['name', 'keywords', 'description']. Note: slow
103
- var individualMetadataItems: [String] { get }
104
+ /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the app icon
105
+ var appIcon: String? { get }
104
106
 
105
- /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the app icon
106
- var appIcon: String? { get }
107
+ /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the Apple Watch app icon
108
+ var appleWatchAppIcon: String? { get }
107
109
 
108
- /// **DEPRECATED!** Removed after the migration to the new App Store Connect API in June 2020 - Metadata: The path to the Apple Watch app icon
109
- var appleWatchAppIcon: String? { get }
110
+ /// Metadata: The copyright notice
111
+ var copyright: String? { get }
110
112
 
111
- /// Metadata: The copyright notice
112
- var copyright: String? { get }
113
+ /// Metadata: The english name of the primary category (e.g. `Business`, `Books`)
114
+ var primaryCategory: String? { get }
113
115
 
114
- /// Metadata: The english name of the primary category (e.g. `Business`, `Books`)
115
- var primaryCategory: String? { get }
116
+ /// Metadata: The english name of the secondary category (e.g. `Business`, `Books`)
117
+ var secondaryCategory: String? { get }
116
118
 
117
- /// Metadata: The english name of the secondary category (e.g. `Business`, `Books`)
118
- var secondaryCategory: String? { get }
119
+ /// Metadata: The english name of the primary first sub category (e.g. `Educational`, `Puzzle`)
120
+ var primaryFirstSubCategory: String? { get }
119
121
 
120
- /// Metadata: The english name of the primary first sub category (e.g. `Educational`, `Puzzle`)
121
- var primaryFirstSubCategory: String? { get }
122
+ /// Metadata: The english name of the primary second sub category (e.g. `Educational`, `Puzzle`)
123
+ var primarySecondSubCategory: String? { get }
122
124
 
123
- /// Metadata: The english name of the primary second sub category (e.g. `Educational`, `Puzzle`)
124
- var primarySecondSubCategory: String? { get }
125
+ /// Metadata: The english name of the secondary first sub category (e.g. `Educational`, `Puzzle`)
126
+ var secondaryFirstSubCategory: String? { get }
125
127
 
126
- /// Metadata: The english name of the secondary first sub category (e.g. `Educational`, `Puzzle`)
127
- var secondaryFirstSubCategory: String? { get }
128
+ /// Metadata: The english name of the secondary second sub category (e.g. `Educational`, `Puzzle`)
129
+ var secondarySecondSubCategory: String? { get }
128
130
 
129
- /// Metadata: The english name of the secondary second sub category (e.g. `Educational`, `Puzzle`)
130
- var secondarySecondSubCategory: String? { get }
131
+ /// Metadata: A hash containing the trade representative contact information
132
+ var tradeRepresentativeContactInformation: [String: Any]? { get }
131
133
 
132
- /// Metadata: A hash containing the trade representative contact information
133
- var tradeRepresentativeContactInformation: [String : Any]? { get }
134
+ /// Metadata: A hash containing the review information
135
+ var appReviewInformation: [String: Any]? { get }
134
136
 
135
- /// Metadata: A hash containing the review information
136
- var appReviewInformation: [String : Any]? { get }
137
+ /// Metadata: Path to the app review attachment file
138
+ var appReviewAttachmentFile: String? { get }
137
139
 
138
- /// Metadata: Path to the app review attachment file
139
- var appReviewAttachmentFile: String? { get }
140
+ /// Metadata: The localised app description
141
+ var description: String? { get }
140
142
 
141
- /// Metadata: The localised app description
142
- var description: String? { get }
143
+ /// Metadata: The localised app name
144
+ var name: String? { get }
143
145
 
144
- /// Metadata: The localised app name
145
- var name: String? { get }
146
+ /// Metadata: The localised app subtitle
147
+ var subtitle: [String: Any]? { get }
146
148
 
147
- /// Metadata: The localised app subtitle
148
- var subtitle: [String : Any]? { get }
149
+ /// Metadata: An array of localised keywords
150
+ var keywords: [String: Any]? { get }
149
151
 
150
- /// Metadata: An array of localised keywords
151
- var keywords: [String : Any]? { get }
152
+ /// Metadata: An array of localised promotional texts
153
+ var promotionalText: [String: Any]? { get }
152
154
 
153
- /// Metadata: An array of localised promotional texts
154
- var promotionalText: [String : Any]? { get }
155
+ /// Metadata: Localised release notes for this version
156
+ var releaseNotes: String? { get }
155
157
 
156
- /// Metadata: Localised release notes for this version
157
- var releaseNotes: String? { get }
158
+ /// Metadata: Localised privacy url
159
+ var privacyUrl: String? { get }
158
160
 
159
- /// Metadata: Localised privacy url
160
- var privacyUrl: String? { get }
161
+ /// Metadata: Localised Apple TV privacy policy text
162
+ var appleTvPrivacyPolicy: String? { get }
161
163
 
162
- /// Metadata: Localised Apple TV privacy policy text
163
- var appleTvPrivacyPolicy: String? { get }
164
+ /// Metadata: Localised support url
165
+ var supportUrl: String? { get }
164
166
 
165
- /// Metadata: Localised support url
166
- var supportUrl: String? { get }
167
+ /// Metadata: Localised marketing url
168
+ var marketingUrl: String? { get }
167
169
 
168
- /// Metadata: Localised marketing url
169
- var marketingUrl: String? { get }
170
+ /// Metadata: List of languages to activate
171
+ var languages: [String]? { get }
170
172
 
171
- /// Metadata: List of languages to activate
172
- var languages: [String]? { get }
173
+ /// Ignore errors when invalid languages are found in metadata and screenshot directories
174
+ var ignoreLanguageDirectoryValidation: Bool { get }
173
175
 
174
- /// Ignore errors when invalid languages are found in metadata and screenshot directories
175
- var ignoreLanguageDirectoryValidation: Bool { get }
176
+ /// Should precheck check in-app purchases?
177
+ var precheckIncludeInAppPurchases: Bool { get }
176
178
 
177
- /// Should precheck check in-app purchases?
178
- var precheckIncludeInAppPurchases: Bool { get }
179
-
180
- /// The (spaceship) app ID of the app you want to use/modify
181
- var app: String { get }
179
+ /// The (spaceship) app ID of the app you want to use/modify
180
+ var app: String { get }
182
181
  }
183
182
 
184
183
  extension DeliverfileProtocol {
185
- var username: String { return "" }
186
- var appIdentifier: String? { return nil }
187
- var appVersion: String? { return nil }
188
- var ipa: String? { return nil }
189
- var pkg: String? { return nil }
190
- var buildNumber: String? { return nil }
191
- var platform: String { return "ios" }
192
- var editLive: Bool { return false }
193
- var useLiveVersion: Bool { return false }
194
- var metadataPath: String? { return nil }
195
- var screenshotsPath: String? { return nil }
196
- var skipBinaryUpload: Bool { return false }
197
- var skipScreenshots: Bool { return false }
198
- var skipMetadata: Bool { return false }
199
- var skipAppVersionUpdate: Bool { return false }
200
- var force: Bool { return false }
201
- var overwriteScreenshots: Bool { return false }
202
- var submitForReview: Bool { return false }
203
- var rejectIfPossible: Bool { return false }
204
- var automaticRelease: Bool { return false }
205
- var autoReleaseDate: String? { return nil }
206
- var phasedRelease: Bool { return false }
207
- var resetRatings: Bool { return false }
208
- var priceTier: String? { return nil }
209
- var appRatingConfigPath: String? { return nil }
210
- var submissionInformation: [String : Any]? { return nil }
211
- var teamId: String? { return nil }
212
- var teamName: String? { return nil }
213
- var devPortalTeamId: String? { return nil }
214
- var devPortalTeamName: String? { return nil }
215
- var itcProvider: String? { return nil }
216
- var runPrecheckBeforeSubmit: Bool { return true }
217
- var precheckDefaultRuleLevel: String { return "warn" }
218
- var individualMetadataItems: [String] { return [] }
219
- var appIcon: String? { return nil }
220
- var appleWatchAppIcon: String? { return nil }
221
- var copyright: String? { return nil }
222
- var primaryCategory: String? { return nil }
223
- var secondaryCategory: String? { return nil }
224
- var primaryFirstSubCategory: String? { return nil }
225
- var primarySecondSubCategory: String? { return nil }
226
- var secondaryFirstSubCategory: String? { return nil }
227
- var secondarySecondSubCategory: String? { return nil }
228
- var tradeRepresentativeContactInformation: [String : Any]? { return nil }
229
- var appReviewInformation: [String : Any]? { return nil }
230
- var appReviewAttachmentFile: String? { return nil }
231
- var description: String? { return nil }
232
- var name: String? { return nil }
233
- var subtitle: [String : Any]? { return nil }
234
- var keywords: [String : Any]? { return nil }
235
- var promotionalText: [String : Any]? { return nil }
236
- var releaseNotes: String? { return nil }
237
- var privacyUrl: String? { return nil }
238
- var appleTvPrivacyPolicy: String? { return nil }
239
- var supportUrl: String? { return nil }
240
- var marketingUrl: String? { return nil }
241
- var languages: [String]? { return nil }
242
- var ignoreLanguageDirectoryValidation: Bool { return false }
243
- var precheckIncludeInAppPurchases: Bool { return true }
244
- var app: String { return "" }
184
+ var username: String { return "" }
185
+ var appIdentifier: String? { return nil }
186
+ var appVersion: String? { return nil }
187
+ var ipa: String? { return nil }
188
+ var pkg: String? { return nil }
189
+ var buildNumber: String? { return nil }
190
+ var platform: String { return "ios" }
191
+ var editLive: Bool { return false }
192
+ var useLiveVersion: Bool { return false }
193
+ var metadataPath: String? { return nil }
194
+ var screenshotsPath: String? { return nil }
195
+ var skipBinaryUpload: Bool { return false }
196
+ var skipScreenshots: Bool { return false }
197
+ var skipMetadata: Bool { return false }
198
+ var skipAppVersionUpdate: Bool { return false }
199
+ var force: Bool { return false }
200
+ var overwriteScreenshots: Bool { return false }
201
+ var submitForReview: Bool { return false }
202
+ var rejectIfPossible: Bool { return false }
203
+ var automaticRelease: Bool { return false }
204
+ var autoReleaseDate: Int? { return nil }
205
+ var phasedRelease: Bool { return false }
206
+ var resetRatings: Bool { return false }
207
+ var priceTier: String? { return nil }
208
+ var appRatingConfigPath: String? { return nil }
209
+ var submissionInformation: [String: Any]? { return nil }
210
+ var teamId: String? { return nil }
211
+ var teamName: String? { return nil }
212
+ var devPortalTeamId: String? { return nil }
213
+ var devPortalTeamName: String? { return nil }
214
+ var itcProvider: String? { return nil }
215
+ var runPrecheckBeforeSubmit: Bool { return true }
216
+ var precheckDefaultRuleLevel: String { return "warn" }
217
+ var individualMetadataItems: [String] { return [] }
218
+ var appIcon: String? { return nil }
219
+ var appleWatchAppIcon: String? { return nil }
220
+ var copyright: String? { return nil }
221
+ var primaryCategory: String? { return nil }
222
+ var secondaryCategory: String? { return nil }
223
+ var primaryFirstSubCategory: String? { return nil }
224
+ var primarySecondSubCategory: String? { return nil }
225
+ var secondaryFirstSubCategory: String? { return nil }
226
+ var secondarySecondSubCategory: String? { return nil }
227
+ var tradeRepresentativeContactInformation: [String: Any]? { return nil }
228
+ var appReviewInformation: [String: Any]? { return nil }
229
+ var appReviewAttachmentFile: String? { return nil }
230
+ var description: String? { return nil }
231
+ var name: String? { return nil }
232
+ var subtitle: [String: Any]? { return nil }
233
+ var keywords: [String: Any]? { return nil }
234
+ var promotionalText: [String: Any]? { return nil }
235
+ var releaseNotes: String? { return nil }
236
+ var privacyUrl: String? { return nil }
237
+ var appleTvPrivacyPolicy: String? { return nil }
238
+ var supportUrl: String? { return nil }
239
+ var marketingUrl: String? { return nil }
240
+ var languages: [String]? { return nil }
241
+ var ignoreLanguageDirectoryValidation: Bool { return false }
242
+ var precheckIncludeInAppPurchases: Bool { return true }
243
+ var app: String { return "" }
245
244
  }
246
245
 
247
246
  // Please don't remove the lines below
248
247
  // They are used to detect outdated files
249
- // FastlaneRunnerAPIVersion [0.9.20]
248
+ // FastlaneRunnerAPIVersion [0.9.22]