fastlane 2.191.0 → 2.194.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +84 -84
  3. data/cert/lib/cert/options.rb +1 -1
  4. data/deliver/lib/deliver/options.rb +1 -1
  5. data/fastlane/lib/assets/completions/completion.bash +4 -1
  6. data/fastlane/lib/assets/completions/completion.zsh +6 -5
  7. data/fastlane/lib/fastlane/actions/.notarize.rb.swp +0 -0
  8. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
  9. data/fastlane/lib/fastlane/actions/create_xcframework.rb +97 -17
  10. data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +1 -1
  11. data/fastlane/lib/fastlane/actions/gradle.rb +1 -1
  12. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
  13. data/fastlane/lib/fastlane/actions/notarize.rb +97 -12
  14. data/fastlane/lib/fastlane/actions/push_git_tags.rb +1 -1
  15. data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
  16. data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
  17. data/fastlane/lib/fastlane/actions/set_changelog.rb +1 -1
  18. data/fastlane/lib/fastlane/actions/slather.rb +6 -0
  19. data/fastlane/lib/fastlane/actions/sync_code_signing.rb +1 -1
  20. data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +3 -1
  21. data/fastlane/lib/fastlane/actions/zip.rb +5 -5
  22. data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +11 -5
  23. data/fastlane/lib/fastlane/version.rb +1 -1
  24. data/fastlane/swift/Deliverfile.swift +1 -1
  25. data/fastlane/swift/DeliverfileProtocol.swift +2 -2
  26. data/fastlane/swift/Fastlane.swift +101 -43
  27. data/fastlane/swift/Gymfile.swift +1 -1
  28. data/fastlane/swift/GymfileProtocol.swift +1 -1
  29. data/fastlane/swift/Matchfile.swift +1 -1
  30. data/fastlane/swift/MatchfileProtocol.swift +3 -3
  31. data/fastlane/swift/Precheckfile.swift +1 -1
  32. data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
  33. data/fastlane/swift/Scanfile.swift +1 -1
  34. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  35. data/fastlane/swift/Screengrabfile.swift +1 -1
  36. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  37. data/fastlane/swift/Snapshotfile.swift +1 -1
  38. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  39. data/fastlane/swift/formatting/Brewfile.lock.json +10 -10
  40. data/fastlane_core/lib/fastlane_core/build_watcher.rb +25 -6
  41. data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +5 -0
  42. data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +41 -0
  43. data/match/lib/match/options.rb +2 -2
  44. data/match/lib/match/runner.rb +10 -9
  45. data/pilot/lib/pilot/build_manager.rb +14 -4
  46. data/pilot/lib/pilot/manager.rb +3 -1
  47. data/pilot/lib/pilot/options.rb +21 -2
  48. data/precheck/lib/precheck/options.rb +1 -1
  49. data/produce/lib/produce/service.rb +1 -1
  50. data/sigh/lib/assets/resign.sh +1 -1
  51. data/sigh/lib/sigh/options.rb +1 -1
  52. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -1
  53. data/spaceship/lib/spaceship/connect_api/api_client.rb +15 -1
  54. data/spaceship/lib/spaceship/connect_api/models/app.rb +2 -1
  55. data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -1
  56. data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
  57. data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +4 -0
  58. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +7 -5
  59. data/spaceship/lib/spaceship/connect_api/token.rb +2 -0
  60. data/supply/lib/supply/client.rb +38 -5
  61. data/supply/lib/supply/options.rb +7 -0
  62. data/supply/lib/supply/uploader.rb +9 -6
  63. metadata +35 -20
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.191.0
20
+ // Generated with fastlane 2.194.0
@@ -196,4 +196,4 @@ public extension GymfileProtocol {
196
196
 
197
197
  // Please don't remove the lines below
198
198
  // They are used to detect outdated files
199
- // FastlaneRunnerAPIVersion [0.9.82]
199
+ // FastlaneRunnerAPIVersion [0.9.86]
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.191.0
20
+ // Generated with fastlane 2.194.0
@@ -23,7 +23,7 @@ public protocol MatchfileProtocol: class {
23
23
  /// Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
24
24
  var apiKeyPath: String? { get }
25
25
 
26
- /// Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)
26
+ /// Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)
27
27
  var apiKey: [String: Any]? { get }
28
28
 
29
29
  /// Your Apple ID Username
@@ -98,7 +98,7 @@ public protocol MatchfileProtocol: class {
98
98
  /// Renew the provisioning profiles every time you run match
99
99
  var force: Bool { get }
100
100
 
101
- /// Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile type 'appstore'
101
+ /// Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'
102
102
  var forceForNewDevices: Bool { get }
103
103
 
104
104
  /// Disables confirmation prompts during nuke, answering them with yes
@@ -184,4 +184,4 @@ public extension MatchfileProtocol {
184
184
 
185
185
  // Please don't remove the lines below
186
186
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.76]
187
+ // FastlaneRunnerAPIVersion [0.9.80]
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.191.0
20
+ // Generated with fastlane 2.194.0
@@ -5,7 +5,7 @@ public protocol PrecheckfileProtocol: class {
5
5
  /// Path to your App Store Connect API Key JSON file (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file)
6
6
  var apiKeyPath: String? { get }
7
7
 
8
- /// Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)
8
+ /// Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)
9
9
  var apiKey: [String: Any]? { get }
10
10
 
11
11
  /// The bundle identifier of your app
@@ -52,4 +52,4 @@ public extension PrecheckfileProtocol {
52
52
 
53
53
  // Please don't remove the lines below
54
54
  // They are used to detect outdated files
55
- // FastlaneRunnerAPIVersion [0.9.75]
55
+ // FastlaneRunnerAPIVersion [0.9.79]
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.191.0
20
+ // Generated with fastlane 2.194.0
@@ -296,4 +296,4 @@ public extension ScanfileProtocol {
296
296
 
297
297
  // Please don't remove the lines below
298
298
  // They are used to detect outdated files
299
- // FastlaneRunnerAPIVersion [0.9.87]
299
+ // FastlaneRunnerAPIVersion [0.9.91]
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.191.0
20
+ // Generated with fastlane 2.194.0
@@ -96,4 +96,4 @@ public extension ScreengrabfileProtocol {
96
96
 
97
97
  // Please don't remove the lines below
98
98
  // They are used to detect outdated files
99
- // FastlaneRunnerAPIVersion [0.9.77]
99
+ // FastlaneRunnerAPIVersion [0.9.81]
@@ -17,4 +17,4 @@ public class Snapshotfile: SnapshotfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.191.0
20
+ // Generated with fastlane 2.194.0
@@ -200,4 +200,4 @@ public extension SnapshotfileProtocol {
200
200
 
201
201
  // Please don't remove the lines below
202
202
  // They are used to detect outdated files
203
- // FastlaneRunnerAPIVersion [0.9.71]
203
+ // FastlaneRunnerAPIVersion [0.9.75]
@@ -43,19 +43,19 @@
43
43
  "macOS": "10.15.7"
44
44
  },
45
45
  "big_sur": {
46
- "HOMEBREW_VERSION": "2.4.13-249-g6454504",
47
- "HOMEBREW_PREFIX": "/usr/local",
48
- "Homebrew/homebrew-core": "020491c34515c229d904e6e69e14157cb728d2fa",
49
- "CLT": "11.0.28.3",
50
- "Xcode": "12.0",
51
- "macOS": "11.0"
46
+ "HOMEBREW_VERSION": "3.2.10-50-ge3f851d",
47
+ "HOMEBREW_PREFIX": "/opt/homebrew",
48
+ "Homebrew/homebrew-core": "73588fb5f5edccfe62f1b290a3298b402fbd71d5",
49
+ "CLT": "12.5.1.0.1.1623191612",
50
+ "Xcode": "13.0",
51
+ "macOS": "11.5.2"
52
52
  },
53
53
  "monterey": {
54
- "HOMEBREW_VERSION": "3.2.6-34-g6bb3699",
54
+ "HOMEBREW_VERSION": "3.2.12-9-gb19fcef",
55
55
  "HOMEBREW_PREFIX": "/usr/local",
56
- "Homebrew/homebrew-core": "b7523de28df0f0f819ff2c49c84611eec19f5455",
57
- "CLT": "13.0.0.0.1.1626155413",
58
- "Xcode": "13.0",
56
+ "Homebrew/homebrew-core": "e79d8126370187be3bd7be6bdbffacf803732113",
57
+ "CLT": "13.0.0.0.1.1628499445",
58
+ "Xcode": "12.5.1",
59
59
  "macOS": "12.0"
60
60
  }
61
61
  }
@@ -11,7 +11,7 @@ module FastlaneCore
11
11
 
12
12
  class << self
13
13
  # @return The build we waited for. This method will always return a build
14
- def wait_for_build_processing_to_be_complete(app_id: nil, platform: nil, train_version: nil, app_version: nil, build_version: nil, poll_interval: 10, timeout_duration: nil, strict_build_watch: false, return_when_build_appears: false, return_spaceship_testflight_build: true, select_latest: false)
14
+ def wait_for_build_processing_to_be_complete(app_id: nil, platform: nil, train_version: nil, app_version: nil, build_version: nil, poll_interval: 10, timeout_duration: nil, strict_build_watch: false, return_when_build_appears: false, return_spaceship_testflight_build: true, select_latest: false, wait_for_build_beta_detail_processing: false)
15
15
  # Warn about train_version being removed in the future
16
16
  if train_version
17
17
  UI.deprecated(":train_version is no longer a used argument on FastlaneCore::BuildWatcher. Please use :app_version instead.")
@@ -41,13 +41,13 @@ module FastlaneCore
41
41
  showed_info = true
42
42
  end
43
43
 
44
- report_status(build: matched_build)
44
+ report_status(build: matched_build, wait_for_build_beta_detail_processing: wait_for_build_beta_detail_processing)
45
45
 
46
46
  # Processing of builds by AppStoreConnect can be a very time consuming task and will
47
47
  # block the worker running this task until it is completed. In some cases,
48
48
  # having a build resource appear in AppStoreConnect (matched_build) may be enough (i.e. setting a changelog)
49
49
  # so here we may choose to skip the full processing of the build if return_when_build_appears is true
50
- if matched_build && (return_when_build_appears || matched_build.processed?)
50
+ if matched_build && (return_when_build_appears || processed?(build: matched_build, wait_for_build_beta_detail_processing: wait_for_build_beta_detail_processing))
51
51
 
52
52
  if !app_version.nil? && app_version != app_version_queried
53
53
  UI.important("App version is #{app_version} but build was found while querying #{app_version_queried}")
@@ -145,10 +145,29 @@ module FastlaneCore
145
145
  return nil
146
146
  end
147
147
 
148
- def report_status(build: nil)
149
- if build && !build.processed?
148
+ def processed?(build: nil, wait_for_build_beta_detail_processing: false)
149
+ return false unless build
150
+
151
+ is_processed = build.processed?
152
+
153
+ # App Store Connect API has multiple build processing states
154
+ # builds have one processing status
155
+ # buildBetaDetails have two processing statues (internal and external testing)
156
+ #
157
+ # If set, this method will only return true if all three statuses are complete
158
+ if wait_for_build_beta_detail_processing
159
+ is_processed &&= (build.build_beta_detail&.processed? || false)
160
+ end
161
+
162
+ return is_processed
163
+ end
164
+
165
+ def report_status(build: nil, wait_for_build_beta_detail_processing: false)
166
+ is_processed = processed?(build: build, wait_for_build_beta_detail_processing: wait_for_build_beta_detail_processing)
167
+
168
+ if build && !is_processed
150
169
  UI.message("Waiting for App Store Connect to finish processing the new build (#{build.app_version} - #{build.version}) for #{build.platform}")
151
- elsif build && build.processed?
170
+ elsif build && is_processed
152
171
  UI.success("Successfully finished processing the build #{build.app_version} - #{build.version} for #{build.platform}")
153
172
  else
154
173
  UI.message("Waiting for the build to show up in the build list - this may take a few minutes (check your email for processing issues if this continues)")
@@ -10,6 +10,11 @@ module FastlaneCore
10
10
  return nil
11
11
  end
12
12
 
13
+ # Fetches the app platform from the given pkg file.
14
+ def self.fetch_app_platform(path)
15
+ return "osx"
16
+ end
17
+
13
18
  # Fetches the app version from the given pkg file.
14
19
  def self.fetch_app_version(path)
15
20
  xml = self.fetch_distribution_xml_file(path)
@@ -34,6 +34,46 @@ module Commander
34
34
 
35
35
  attr_accessor :collector
36
36
 
37
+ # Temporary work around for issues mentioned in https://github.com/fastlane/fastlane/pull/18760
38
+ # Code taken from https://github.com/commander-rb/commander/blob/40d06bfbc54906d0de7c72ac73f4e9188c9ca294/lib/commander/runner.rb#L372-L385
39
+ #
40
+ # Problem:
41
+ # `optparse` is guessing that command option `-e` is referring to global option `--env` (because it starts with an e).
42
+ # This is raising OptionParser::MissingArgument error because `--env` takes a string argument.
43
+ # A command of `-e --verbose` works because `--verbose` is seen as the argument.
44
+ # A command of `--verbose -e` doesn't work because no argument after `-e` so MissingArgument is raised again.
45
+ # This broke somewhere between Ruby 2.5 and Ruby 2.6
46
+ #
47
+ # Solution:
48
+ # Proper solution is to set `parser.require_exact = true` but this only available on `optparse` version 0.1.1
49
+ # which is not used by Commander.
50
+ # `require_exact` will prevent OptionParser from assuming `-e` is the same as `--env STRING`
51
+ # Even if it was on RubyGems, it would require Commander to allow this option to be set on OptionParser
52
+ #
53
+ # This work around was made on 2021-08-13
54
+ #
55
+ # When fixed:
56
+ # This method implementation overrides one provided by Commander::Runner already. Just delete this method
57
+ # so the existing one can be used
58
+ def parse_global_options
59
+ parser = options.inject(OptionParser.new) do |options, option|
60
+ options.on(*option[:args], &global_option_proc(option[:switches], &option[:proc]))
61
+ end
62
+
63
+ # This is the actual solution but is only in version 0.1.1 of optparse and its not in Commander
64
+ # This is the only change from Commanders implementation of parse_global_options
65
+ parser.require_exact = true
66
+
67
+ options = @args.dup
68
+ begin
69
+ parser.parse!(options)
70
+ rescue OptionParser::InvalidOption => e
71
+ # Remove the offending args and retry.
72
+ options = options.reject { |o| e.args.include?(o) }
73
+ retry
74
+ end
75
+ end
76
+
37
77
  def run!
38
78
  require_program(:version, :description)
39
79
  trap('INT') { abort(program(:int_message)) } if program(:int_message)
@@ -47,6 +87,7 @@ module Commander
47
87
  say(version)
48
88
  return
49
89
  end
90
+
50
91
  parse_global_options
51
92
  remove_global_options(options, @args)
52
93
 
@@ -83,7 +83,7 @@ module Match
83
83
  end),
84
84
  FastlaneCore::ConfigItem.new(key: :api_key,
85
85
  env_names: ["SIGH_API_KEY", "APP_STORE_CONNECT_API_KEY"],
86
- description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)",
86
+ description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)",
87
87
  type: Hash,
88
88
  optional: true,
89
89
  sensitive: true,
@@ -239,7 +239,7 @@ module Match
239
239
  default_value: false),
240
240
  FastlaneCore::ConfigItem.new(key: :force_for_new_devices,
241
241
  env_name: "MATCH_FORCE_FOR_NEW_DEVICES",
242
- description: "Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile type 'appstore'",
242
+ description: "Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'",
243
243
  type: Boolean,
244
244
  default_value: false),
245
245
  FastlaneCore::ConfigItem.new(key: :skip_confirmation,
@@ -191,12 +191,12 @@ module Match
191
191
  UI.verbose("Certificate '#{File.basename(cert_path)}' is already installed on this machine")
192
192
  else
193
193
  Utils.import(cert_path, params[:keychain_name], password: params[:keychain_password])
194
- end
195
194
 
196
- # Import the private key
197
- # there seems to be no good way to check if it's already installed - so just install it
198
- # Key will only be added to the partition list if it isn't already installed
199
- Utils.import(keys.last, params[:keychain_name], password: params[:keychain_password])
195
+ # Import the private key
196
+ # there seems to be no good way to check if it's already installed - so just install it
197
+ # Key will only be added to the partition list if it isn't already installed
198
+ Utils.import(keys.last, params[:keychain_name], password: params[:keychain_password])
199
+ end
200
200
  else
201
201
  UI.message("Skipping installation of certificate as it would not work on this operating system.")
202
202
  end
@@ -243,13 +243,14 @@ module Match
243
243
  force = params[:force]
244
244
 
245
245
  if params[:force_for_new_devices] && !params[:readonly]
246
- if prov_type != :appstore && !params[:force]
246
+ prov_types_without_devices = [:appstore, :developer_id]
247
+ if !prov_types_without_devices.include?(prov_type) && !params[:force]
247
248
  force = device_count_different?(profile: profile, keychain_path: keychain_path, platform: params[:platform].to_sym)
248
249
  else
249
250
  # App Store provisioning profiles don't contain device identifiers and
250
251
  # thus shouldn't be renewed if the device count has changed.
251
- UI.important("Warning: `force_for_new_devices` is set but is ignored for App Store provisioning profiles.")
252
- UI.important("You can safely stop specifying `force_for_new_devices` when running Match for type 'appstore'.")
252
+ UI.important("Warning: `force_for_new_devices` is set but is ignored for App Store & Developer ID provisioning profiles.")
253
+ UI.important("You can safely stop specifying `force_for_new_devices` when running Match for type 'appstore' or 'developer_id'.")
253
254
  end
254
255
  end
255
256
 
@@ -343,7 +344,7 @@ module Match
343
344
  [
344
345
  Spaceship::ConnectAPI::Device::DeviceClass::APPLE_TV
345
346
  ]
346
- when :mac, :catalyst
347
+ when :macos, :catalyst
347
348
  [
348
349
  Spaceship::ConnectAPI::Device::DeviceClass::MAC
349
350
  ]
@@ -16,7 +16,7 @@ module Pilot
16
16
  should_login_in_start = options[:apple_id].nil?
17
17
  start(options, should_login: should_login_in_start)
18
18
 
19
- UI.user_error!("No ipa file given") unless config[:ipa]
19
+ UI.user_error!("No ipa or pkg file given") if config[:ipa].nil? && config[:pkg].nil?
20
20
 
21
21
  check_for_changelog_or_whats_new!(options)
22
22
 
@@ -25,10 +25,17 @@ module Pilot
25
25
  dir = Dir.mktmpdir
26
26
 
27
27
  platform = fetch_app_platform
28
- package_path = FastlaneCore::IpaUploadPackageBuilder.new.generate(app_id: fetch_app_id,
28
+ if options[:ipa]
29
+ package_path = FastlaneCore::IpaUploadPackageBuilder.new.generate(app_id: fetch_app_id,
29
30
  ipa_path: options[:ipa],
30
31
  package_path: dir,
31
32
  platform: platform)
33
+ else
34
+ package_path = FastlaneCore::PkgUploadPackageBuilder.new.generate(app_id: fetch_app_id,
35
+ pkg_path: options[:pkg],
36
+ package_path: dir,
37
+ platform: platform)
38
+ end
32
39
 
33
40
  transporter = transporter_for_selected_team(options)
34
41
  result = transporter.upload(package_path: package_path)
@@ -94,6 +101,9 @@ module Pilot
94
101
  if config[:ipa]
95
102
  app_version = FastlaneCore::IpaFileAnalyser.fetch_app_version(config[:ipa])
96
103
  app_build = FastlaneCore::IpaFileAnalyser.fetch_app_build(config[:ipa])
104
+ elsif config[:pkg]
105
+ app_version = FastlaneCore::PkgFileAnalyser.fetch_app_version(config[:pkg])
106
+ app_build = FastlaneCore::PkgFileAnalyser.fetch_app_build(config[:pkg])
97
107
  else
98
108
  app_version = config[:app_version]
99
109
  app_build = config[:build_number]
@@ -108,7 +118,8 @@ module Pilot
108
118
  timeout_duration: config[:wait_processing_timeout_duration],
109
119
  return_when_build_appears: return_when_build_appears,
110
120
  return_spaceship_testflight_build: false,
111
- select_latest: config[:distribute_only]
121
+ select_latest: config[:distribute_only],
122
+ wait_for_build_beta_detail_processing: true
112
123
  )
113
124
 
114
125
  unless latest_build.app_version == app_version && latest_build.version == app_build
@@ -558,7 +569,6 @@ module Pilot
558
569
  attributes[:autoNotifyEnabled] = info[:auto_notify_enabled] if info.key?(:auto_notify_enabled)
559
570
  build_beta_detail = build.build_beta_detail
560
571
 
561
- # https://github.com/fastlane/fastlane/pull/16006
562
572
  if build_beta_detail
563
573
  Spaceship::ConnectAPI.patch_build_beta_details(build_beta_details_id: build_beta_detail.id, attributes: attributes)
564
574
  else
@@ -73,7 +73,8 @@ module Pilot
73
73
 
74
74
  def fetch_app_identifier
75
75
  result = config[:app_identifier]
76
- result ||= FastlaneCore::IpaFileAnalyser.fetch_app_identifier(config[:ipa])
76
+ result ||= FastlaneCore::IpaFileAnalyser.fetch_app_identifier(config[:ipa]) if config[:ipa]
77
+ result ||= FastlaneCore::PkgFileAnalyser.fetch_app_identifier(config[:pkg]) if config[:pkg]
77
78
  result ||= UI.input("Please enter the app's bundle identifier: ")
78
79
  UI.verbose("App identifier (#{result})")
79
80
  return result
@@ -82,6 +83,7 @@ module Pilot
82
83
  def fetch_app_platform(required: true)
83
84
  result = config[:app_platform]
84
85
  result ||= FastlaneCore::IpaFileAnalyser.fetch_app_platform(config[:ipa]) if config[:ipa]
86
+ result ||= FastlaneCore::PkgFileAnalyser.fetch_app_platform(config[:pkg]) if config[:pkg]
85
87
  if required
86
88
  result ||= UI.input("Please enter the app's platform (appletvos, ios, osx): ")
87
89
  UI.user_error!("App Platform must be ios, appletvos, or osx") unless ['ios', 'appletvos', 'osx'].include?(result)
@@ -20,7 +20,7 @@ module Pilot
20
20
  end),
21
21
  FastlaneCore::ConfigItem.new(key: :api_key,
22
22
  env_names: ["PILOT_API_KEY", "APP_STORE_CONNECT_API_KEY"],
23
- description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#use-return-value-and-pass-in-as-an-option)",
23
+ description: "Your App Store Connect API Key information (https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-hash-option)",
24
24
  type: Hash,
25
25
  optional: true,
26
26
  sensitive: true,
@@ -48,7 +48,6 @@ module Pilot
48
48
  env_name: "PILOT_PLATFORM",
49
49
  description: "The platform to use (optional)",
50
50
  optional: true,
51
- default_value: 'ios',
52
51
  verify_block: proc do |value|
53
52
  UI.user_error!("The platform can only be ios, appletvos, or osx") unless ['ios', 'appletvos', 'osx'].include?(value)
54
53
  end),
@@ -82,6 +81,26 @@ module Pilot
82
81
  value = File.expand_path(value)
83
82
  UI.user_error!("Could not find ipa file at path '#{value}'") unless File.exist?(value)
84
83
  UI.user_error!("'#{value}' doesn't seem to be an ipa file") unless value.end_with?(".ipa")
84
+ end,
85
+ conflicting_options: [:pkg],
86
+ conflict_block: proc do |value|
87
+ UI.user_error!("You can't use 'ipa' and '#{value.key}' options in one run.")
88
+ end),
89
+ FastlaneCore::ConfigItem.new(key: :pkg,
90
+ short_option: "-P",
91
+ optional: true,
92
+ env_name: "PILOT_PKG",
93
+ description: "Path to your pkg file",
94
+ code_gen_sensitive: true,
95
+ default_value: Dir["*.pkg"].sort_by { |x| File.mtime(x) }.last,
96
+ default_value_dynamic: true,
97
+ verify_block: proc do |value|
98
+ UI.user_error!("Could not find pkg file at path '#{File.expand_path(value)}'") unless File.exist?(value)
99
+ UI.user_error!("'#{value}' doesn't seem to be a pkg file") unless value.end_with?(".pkg")
100
+ end,
101
+ conflicting_options: [:ipa],
102
+ conflict_block: proc do |value|
103
+ UI.user_error!("You can't use 'pkg' and '#{value.key}' options in one run.")
85
104
  end),
86
105
 
87
106
  # app review info