fastlane 2.191.0 → 2.194.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +84 -84
- data/cert/lib/cert/options.rb +1 -1
- data/deliver/lib/deliver/options.rb +1 -1
- data/fastlane/lib/assets/completions/completion.bash +4 -1
- data/fastlane/lib/assets/completions/completion.zsh +6 -5
- data/fastlane/lib/fastlane/actions/.notarize.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/create_xcframework.rb +97 -17
- data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +1 -1
- data/fastlane/lib/fastlane/actions/gradle.rb +1 -1
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/notarize.rb +97 -12
- data/fastlane/lib/fastlane/actions/push_git_tags.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_changelog.rb +1 -1
- data/fastlane/lib/fastlane/actions/slather.rb +6 -0
- data/fastlane/lib/fastlane/actions/sync_code_signing.rb +1 -1
- data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +3 -1
- data/fastlane/lib/fastlane/actions/zip.rb +5 -5
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +11 -5
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +2 -2
- data/fastlane/swift/Fastlane.swift +101 -43
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +3 -3
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
- data/fastlane/swift/formatting/Brewfile.lock.json +10 -10
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +25 -6
- data/fastlane_core/lib/fastlane_core/pkg_file_analyser.rb +5 -0
- data/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb +41 -0
- data/match/lib/match/options.rb +2 -2
- data/match/lib/match/runner.rb +10 -9
- data/pilot/lib/pilot/build_manager.rb +14 -4
- data/pilot/lib/pilot/manager.rb +3 -1
- data/pilot/lib/pilot/options.rb +21 -2
- data/precheck/lib/precheck/options.rb +1 -1
- data/produce/lib/produce/service.rb +1 -1
- data/sigh/lib/assets/resign.sh +1 -1
- data/sigh/lib/sigh/options.rb +1 -1
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -1
- data/spaceship/lib/spaceship/connect_api/api_client.rb +15 -1
- data/spaceship/lib/spaceship/connect_api/models/app.rb +2 -1
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +7 -5
- data/spaceship/lib/spaceship/connect_api/token.rb +2 -0
- data/supply/lib/supply/client.rb +38 -5
- data/supply/lib/supply/options.rb +7 -0
- data/supply/lib/supply/uploader.rb +9 -6
- metadata +35 -20
@@ -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/#
|
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
|
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.
|
187
|
+
// FastlaneRunnerAPIVersion [0.9.80]
|
@@ -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/#
|
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.
|
55
|
+
// FastlaneRunnerAPIVersion [0.9.79]
|
@@ -43,19 +43,19 @@
|
|
43
43
|
"macOS": "10.15.7"
|
44
44
|
},
|
45
45
|
"big_sur": {
|
46
|
-
"HOMEBREW_VERSION": "2.
|
47
|
-
"HOMEBREW_PREFIX": "/
|
48
|
-
"Homebrew/homebrew-core": "
|
49
|
-
"CLT": "
|
50
|
-
"Xcode": "
|
51
|
-
"macOS": "11.
|
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.
|
54
|
+
"HOMEBREW_VERSION": "3.2.12-9-gb19fcef",
|
55
55
|
"HOMEBREW_PREFIX": "/usr/local",
|
56
|
-
"Homebrew/homebrew-core": "
|
57
|
-
"CLT": "13.0.0.0.1.
|
58
|
-
"Xcode": "
|
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 ||
|
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
|
149
|
-
|
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 &&
|
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
|
|
data/match/lib/match/options.rb
CHANGED
@@ -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/#
|
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
|
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,
|
data/match/lib/match/runner.rb
CHANGED
@@ -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
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
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
|
-
|
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 :
|
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")
|
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
|
-
|
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
|
data/pilot/lib/pilot/manager.rb
CHANGED
@@ -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)
|
data/pilot/lib/pilot/options.rb
CHANGED
@@ -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/#
|
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
|