fastlane 2.176.0 → 2.180.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +97 -84
- data/cert/lib/cert/options.rb +1 -0
- data/cert/lib/cert/runner.rb +5 -1
- data/deliver/lib/deliver/app_screenshot.rb +6 -2
- data/deliver/lib/deliver/download_screenshots.rb +1 -2
- data/deliver/lib/deliver/options.rb +1 -0
- data/deliver/lib/deliver/runner.rb +11 -3
- data/deliver/lib/deliver/setup.rb +0 -1
- data/deliver/lib/deliver/upload_metadata.rb +5 -4
- data/deliver/lib/deliver/upload_screenshots.rb +10 -10
- data/fastlane/lib/fastlane/.fastlane_require.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.cocoapods.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +6 -1
- data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +8 -5
- data/fastlane/lib/fastlane/actions/appaloosa.rb +7 -2
- data/fastlane/lib/fastlane/actions/backup_file.rb +1 -1
- data/fastlane/lib/fastlane/actions/build_app.rb +4 -0
- data/fastlane/lib/fastlane/actions/check_app_store_metadata.rb +4 -0
- data/fastlane/lib/fastlane/actions/commit_github_file.rb +11 -1
- data/fastlane/lib/fastlane/actions/create_xcframework.rb +5 -0
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -1
- data/fastlane/lib/fastlane/actions/get_github_release.rb +11 -1
- data/fastlane/lib/fastlane/actions/get_provisioning_profile.rb +4 -0
- data/fastlane/lib/fastlane/actions/get_version_number.rb +17 -10
- data/fastlane/lib/fastlane/actions/git_branch.rb +4 -10
- data/fastlane/lib/fastlane/actions/git_tag_exists.rb +4 -0
- data/fastlane/lib/fastlane/actions/github_api.rb +2 -1
- data/fastlane/lib/fastlane/actions/increment_build_number.rb +8 -1
- data/fastlane/lib/fastlane/actions/install_provisioning_profile.rb +4 -0
- data/fastlane/lib/fastlane/actions/jira.rb +61 -14
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -0
- data/fastlane/lib/fastlane/actions/match_nuke.rb +59 -0
- data/fastlane/lib/fastlane/actions/notarize.rb +98 -51
- data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +0 -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/restore_file.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_changelog.rb +1 -1
- data/fastlane/lib/fastlane/actions/sourcedocs.rb +164 -0
- data/fastlane/lib/fastlane/actions/spaceship_logs.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_project_provisioning.rb +1 -2
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +4 -5
- data/fastlane/lib/fastlane/erb_template_helper.rb +7 -1
- data/fastlane/lib/fastlane/fast_file.rb +9 -5
- data/fastlane/lib/fastlane/fastlane_require.rb +7 -1
- data/fastlane/lib/fastlane/helper/git_helper.rb +11 -7
- data/fastlane/lib/fastlane/plugins/plugin_fetcher.rb +1 -2
- data/fastlane/lib/fastlane/plugins/plugin_info_collector.rb +1 -2
- data/fastlane/lib/fastlane/plugins/plugin_manager.rb +1 -2
- data/fastlane/lib/fastlane/setup/setup.rb +23 -10
- data/fastlane/lib/fastlane/swift_fastlane_function.rb +4 -0
- data/fastlane/lib/fastlane/swift_runner_upgrader.rb +2 -0
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +3 -3
- data/fastlane/swift/Fastlane.swift +557 -326
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/LaneFileProtocol.swift +9 -3
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +3 -3
- data/fastlane/swift/RubyCommand.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +9 -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/SocketClient.swift +2 -1
- data/fastlane/swift/SocketResponse.swift +4 -2
- data/fastlane/swift/formatting/Brewfile.lock.json +13 -13
- data/fastlane_core/lib/fastlane_core.rb +1 -0
- data/fastlane_core/lib/fastlane_core/configuration/configuration.rb +5 -3
- data/fastlane_core/lib/fastlane_core/helper.rb +24 -1
- data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +3 -2
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +14 -8
- data/fastlane_core/lib/fastlane_core/pkg_upload_package_builder.rb +3 -2
- data/fastlane_core/lib/fastlane_core/project.rb +3 -14
- data/{deliver/lib/deliver → fastlane_core/lib/fastlane_core}/queue_worker.rb +4 -4
- data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +12 -1
- data/fastlane_core/lib/fastlane_core/ui/interface.rb +1 -1
- data/gym/lib/gym/generators/.package_command_generator_xcode7.rb.swp +0 -0
- data/gym/lib/gym/generators/package_command_generator.rb +4 -0
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +13 -8
- data/gym/lib/gym/runner.rb +11 -4
- data/match/lib/match/change_password.rb +3 -3
- data/match/lib/match/encryption/interface.rb +1 -1
- data/match/lib/match/encryption/openssl.rb +2 -2
- data/match/lib/match/importer.rb +1 -1
- data/match/lib/match/migrate.rb +1 -1
- data/match/lib/match/module.rb +1 -0
- data/match/lib/match/nuke.rb +1 -1
- data/match/lib/match/runner.rb +1 -1
- data/match/lib/match/storage/google_cloud_storage.rb +1 -1
- data/match/lib/match/storage/s3_storage.rb +1 -1
- data/pilot/lib/pilot/build_manager.rb +18 -6
- data/pilot/lib/pilot/manager.rb +5 -1
- data/pilot/lib/pilot/options.rb +3 -2
- data/precheck/lib/precheck/options.rb +1 -0
- data/precheck/lib/precheck/runner.rb +5 -1
- data/scan/lib/scan/detect_values.rb +4 -1
- data/scan/lib/scan/options.rb +15 -5
- data/scan/lib/scan/runner.rb +52 -1
- data/scan/lib/scan/test_command_generator.rb +8 -8
- data/screengrab/lib/screengrab/android_environment.rb +6 -4
- data/screengrab/lib/screengrab/runner.rb +1 -1
- data/sigh/lib/sigh/download_all.rb +1 -1
- data/sigh/lib/sigh/options.rb +1 -0
- data/sigh/lib/sigh/runner.rb +5 -1
- data/snapshot/lib/assets/SnapshotHelper.swift +1 -1
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +2 -1
- data/spaceship/lib/spaceship/client.rb +18 -17
- data/spaceship/lib/spaceship/connect_api/api_client.rb +24 -6
- data/spaceship/lib/spaceship/connect_api/models/app.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/app_preview_set.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +6 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/build.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/user_invitation.rb +13 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +13 -0
- data/spaceship/lib/spaceship/connect_api/token.rb +8 -2
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +15 -0
- metadata +28 -22
- data/pilot/lib/pilot/.build_manager.rb.swp +0 -0
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'digest/md5'
|
2
|
+
require 'securerandom'
|
2
3
|
|
3
4
|
require_relative 'globals'
|
4
5
|
require_relative 'ui/ui'
|
@@ -12,7 +13,7 @@ module FastlaneCore
|
|
12
13
|
attr_accessor :package_path
|
13
14
|
|
14
15
|
def generate(app_id: nil, pkg_path: nil, package_path: nil, platform: "osx")
|
15
|
-
self.package_path = File.join(package_path, "#{app_id}.itmsp")
|
16
|
+
self.package_path = File.join(package_path, "#{app_id}-#{SecureRandom.uuid}.itmsp")
|
16
17
|
FileUtils.rm_rf(self.package_path) if File.directory?(self.package_path)
|
17
18
|
FileUtils.mkdir_p(self.package_path)
|
18
19
|
|
@@ -32,7 +33,7 @@ module FastlaneCore
|
|
32
33
|
File.write(File.join(self.package_path, METADATA_FILE_NAME), xml)
|
33
34
|
UI.success("Wrote XML data to '#{self.package_path}'") if FastlaneCore::Globals.verbose?
|
34
35
|
|
35
|
-
package_path
|
36
|
+
return self.package_path
|
36
37
|
end
|
37
38
|
|
38
39
|
private
|
@@ -68,22 +68,13 @@ module FastlaneCore
|
|
68
68
|
# Is this project a workspace?
|
69
69
|
attr_accessor :is_workspace
|
70
70
|
|
71
|
-
# Should the output of xcodebuild commands be silenced?
|
72
|
-
attr_accessor :xcodebuild_list_silent
|
73
|
-
|
74
|
-
# Should we redirect stderr to /dev/null for xcodebuild commands?
|
75
|
-
# Gets rid of annoying plugin info warnings.
|
76
|
-
attr_accessor :xcodebuild_suppress_stderr
|
77
|
-
|
78
71
|
# @param options [FastlaneCore::Configuration|Hash] a set of configuration to run xcodebuild to work out build settings
|
79
72
|
# @param xcodebuild_list_silent [Boolean] a flag to silent xcodebuild command's output
|
80
73
|
# @param xcodebuild_suppress_stderr [Boolean] a flag to supress output to stderr from xcodebuild
|
81
|
-
def initialize(options
|
74
|
+
def initialize(options)
|
82
75
|
@options = options
|
83
76
|
@path = File.expand_path(self.options[:workspace] || self.options[:project])
|
84
77
|
@is_workspace = (self.options[:workspace].to_s.length > 0)
|
85
|
-
@xcodebuild_list_silent = xcodebuild_list_silent
|
86
|
-
@xcodebuild_suppress_stderr = xcodebuild_suppress_stderr
|
87
78
|
|
88
79
|
if !path || !File.directory?(path)
|
89
80
|
UI.user_error!("Could not find project at path '#{path}'")
|
@@ -365,14 +356,12 @@ module FastlaneCore
|
|
365
356
|
else
|
366
357
|
command = "xcodebuild clean -showBuildSettings #{xcodebuild_parameters.join(' ')}"
|
367
358
|
end
|
368
|
-
command += " 2> /dev/null" if xcodebuild_suppress_stderr
|
369
359
|
command
|
370
360
|
end
|
371
361
|
|
372
362
|
def build_xcodebuild_resolvepackagedependencies_command
|
373
363
|
return nil if options[:skip_package_dependencies_resolution]
|
374
364
|
command = "xcodebuild -resolvePackageDependencies #{xcodebuild_parameters.join(' ')}"
|
375
|
-
command += " 2> /dev/null" if xcodebuild_suppress_stderr
|
376
365
|
command
|
377
366
|
end
|
378
367
|
|
@@ -395,7 +384,7 @@ module FastlaneCore
|
|
395
384
|
FastlaneCore::CommandExecutor.execute(
|
396
385
|
command: command,
|
397
386
|
print_all: true,
|
398
|
-
print_command:
|
387
|
+
print_command: true
|
399
388
|
)
|
400
389
|
else
|
401
390
|
UI.important("Skipped Swift Package Manager dependencies resolution.")
|
@@ -408,7 +397,7 @@ module FastlaneCore
|
|
408
397
|
begin
|
409
398
|
timeout = FastlaneCore::Project.xcode_build_settings_timeout
|
410
399
|
retries = FastlaneCore::Project.xcode_build_settings_retries
|
411
|
-
@build_settings = FastlaneCore::Project.run_command(command, timeout: timeout, retries: retries, print:
|
400
|
+
@build_settings = FastlaneCore::Project.run_command(command, timeout: timeout, retries: retries, print: true)
|
412
401
|
if @build_settings.empty?
|
413
402
|
UI.error("Could not read build settings. Make sure that the scheme \"#{options[:scheme]}\" is configured for running by going to Product → Scheme → Edit Scheme…, selecting the \"Build\" section, checking the \"Run\" checkbox and closing the scheme window.")
|
414
403
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'thread'
|
2
2
|
|
3
|
-
module
|
3
|
+
module FastlaneCore
|
4
4
|
# This dispatches jobs to worker threads and make it work in parallel.
|
5
5
|
# It's suitable for I/O bounds works and not for CPU bounds works.
|
6
6
|
# Use this when you have all the items that you'll process in advance.
|
7
7
|
# Simply enqueue them to this and call `QueueWorker#start`.
|
8
8
|
class QueueWorker
|
9
|
-
NUMBER_OF_THREADS = Helper.test? ? 1 : [ENV.fetch("
|
9
|
+
NUMBER_OF_THREADS = FastlaneCore::Helper.test? ? 1 : [(ENV["DELIVER_NUMBER_OF_THREADS"] || ENV.fetch("FL_NUMBER_OF_THREADS", 10)).to_i, 10].min
|
10
10
|
|
11
11
|
# @param concurrency (Numeric) - A number of threads to be created
|
12
12
|
# @param block (Proc) - A task you want to execute with enqueued items
|
@@ -16,12 +16,12 @@ module Deliver
|
|
16
16
|
@queue = Queue.new
|
17
17
|
end
|
18
18
|
|
19
|
-
# @param job (Object) - An
|
19
|
+
# @param job (Object) - An arbitrary object that keeps parameters
|
20
20
|
def enqueue(job)
|
21
21
|
@queue.push(job)
|
22
22
|
end
|
23
23
|
|
24
|
-
# @param jobs (Array<Object>) - An array of
|
24
|
+
# @param jobs (Array<Object>) - An array of arbitrary object that keeps parameters
|
25
25
|
def batch_enqueue(jobs)
|
26
26
|
raise(ArgumentError, "Enqueue Array instead of #{jobs.class}") unless jobs.kind_of?(Array)
|
27
27
|
jobs.each { |job| enqueue(job) }
|
@@ -69,7 +69,7 @@ module FastlaneCore
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def command_output(message)
|
72
|
-
actual = (message.split("\r").last || "") # as clearing the line will remove the `>` and the time stamp
|
72
|
+
actual = (encode_as_utf_8_if_possible(message).split("\r").last || "") # as clearing the line will remove the `>` and the time stamp
|
73
73
|
actual.split("\n").each do |msg|
|
74
74
|
if FastlaneCore::Env.truthy?("FASTLANE_DISABLE_OUTPUT_FORMAT")
|
75
75
|
log.info(msg)
|
@@ -150,6 +150,17 @@ module FastlaneCore
|
|
150
150
|
|
151
151
|
private
|
152
152
|
|
153
|
+
def encode_as_utf_8_if_possible(message)
|
154
|
+
return message if message.valid_encoding?
|
155
|
+
|
156
|
+
# genstrings outputs UTF-16, so we should try to use this encoding if it turns out to be valid
|
157
|
+
test_message = message.dup
|
158
|
+
return message.encode(Encoding::UTF_8, Encoding::UTF_16) if test_message.force_encoding(Encoding::UTF_16).valid_encoding?
|
159
|
+
|
160
|
+
# replace any invalid with empty string
|
161
|
+
message.encode(Encoding::UTF_8, invalid: :replace)
|
162
|
+
end
|
163
|
+
|
153
164
|
def verify_interactive!(message)
|
154
165
|
return if interactive?
|
155
166
|
important(message)
|
@@ -138,7 +138,7 @@ module FastlaneCore
|
|
138
138
|
# Basically this should be used when you actively catch the error
|
139
139
|
# and want to show a nice error message to the user
|
140
140
|
def user_error!(error_message, options = {})
|
141
|
-
raise FastlaneError.new(options), error_message.to_s
|
141
|
+
raise FastlaneError.new(show_github_issues: options[:show_github_issues], error_info: options[:error_info]), error_message.to_s
|
142
142
|
end
|
143
143
|
|
144
144
|
# Use this method to exit the program because of a shell command
|
Binary file
|
@@ -81,28 +81,33 @@ module Gym
|
|
81
81
|
Gym.cache[:ipa_path]
|
82
82
|
end
|
83
83
|
|
84
|
-
def
|
85
|
-
path = Gym.cache[:
|
84
|
+
def binary_path
|
85
|
+
path = Gym.cache[:binary_path]
|
86
86
|
return path if path
|
87
87
|
|
88
88
|
path = Dir[File.join(temporary_output_path, "*.pkg")].last
|
89
|
-
|
89
|
+
app_path = Dir[File.join(temporary_output_path, "*.app")].last
|
90
|
+
# We need to process generic PKG or APP
|
90
91
|
if path
|
91
92
|
# Try to find PKG file in the output directory, used when app thinning was not set
|
92
|
-
Gym.cache[:
|
93
|
-
FileUtils.mv(path, Gym.cache[:
|
93
|
+
Gym.cache[:binary_path] = File.join(temporary_output_path, "#{Gym.config[:output_name]}.pkg")
|
94
|
+
FileUtils.mv(path, Gym.cache[:binary_path]) unless File.expand_path(path).casecmp(File.expand_path(Gym.cache[:binary_path]).downcase).zero?
|
94
95
|
elsif Dir.exist?(apps_path)
|
95
96
|
# Try to find "generic" PKG file inside "Apps" folder, used when app thinning was set
|
96
97
|
files = Dir[File.join(apps_path, "*.pkg")]
|
97
98
|
# Generic PKG file doesn't have suffix so its name is the shortest
|
98
99
|
path = files.min_by(&:length)
|
99
|
-
Gym.cache[:
|
100
|
-
FileUtils.cp(path, Gym.cache[:
|
100
|
+
Gym.cache[:binary_path] = File.join(temporary_output_path, "#{Gym.config[:output_name]}.pkg")
|
101
|
+
FileUtils.cp(path, Gym.cache[:binary_path]) unless File.expand_path(path).casecmp(File.expand_path(Gym.cache[:binary_path]).downcase).zero?
|
102
|
+
elsif app_path
|
103
|
+
# Try to find .app file in the output directory. This is used when macOS is set and .app is being generated.
|
104
|
+
Gym.cache[:binary_path] = File.join(temporary_output_path, "#{Gym.config[:output_name]}.app")
|
105
|
+
FileUtils.mv(app_path, Gym.cache[:binary_path]) unless File.expand_path(app_path).casecmp(File.expand_path(Gym.cache[:binary_path]).downcase).zero?
|
101
106
|
else
|
102
107
|
ErrorHandler.handle_empty_pkg unless path
|
103
108
|
end
|
104
109
|
|
105
|
-
Gym.cache[:
|
110
|
+
Gym.cache[:binary_path]
|
106
111
|
end
|
107
112
|
|
108
113
|
# The path the the dsym file for this app. Might be nil
|
data/gym/lib/gym/runner.rb
CHANGED
@@ -243,12 +243,12 @@ module Gym
|
|
243
243
|
# Moves over the binary and dsym file to the output directory
|
244
244
|
# @return (String) The path to the resulting pkg file
|
245
245
|
def move_pkg
|
246
|
-
FileUtils.mv(PackageCommandGenerator.
|
247
|
-
|
246
|
+
FileUtils.mv(PackageCommandGenerator.binary_path, File.expand_path(Gym.config[:output_directory]), force: true)
|
247
|
+
binary_path = File.expand_path(File.join(Gym.config[:output_directory], File.basename(PackageCommandGenerator.binary_path)))
|
248
248
|
|
249
249
|
UI.success("Successfully exported and signed the pkg file:")
|
250
|
-
UI.message(
|
251
|
-
|
250
|
+
UI.message(binary_path)
|
251
|
+
binary_path
|
252
252
|
end
|
253
253
|
|
254
254
|
# copys framework from temp folder:
|
@@ -274,6 +274,13 @@ module Gym
|
|
274
274
|
exe_name = Gym.project.build_settings(key: "EXECUTABLE_NAME")
|
275
275
|
app_path = File.join(BuildCommandGenerator.archive_path, "Products/Applications/#{exe_name}.app")
|
276
276
|
|
277
|
+
unless File.exist?(app_path)
|
278
|
+
# Apparently the `EXECUTABLE_NAME` is not correct. This can happen when building a workspace which has a project
|
279
|
+
# earlier in the build order that has a different `EXECUTABLE_NAME` than the app. Try to find the last `.app` as
|
280
|
+
# a fallback for this situation.
|
281
|
+
app_path = Dir[File.join(BuildCommandGenerator.archive_path, "Products", "Applications", "*.app")].last
|
282
|
+
end
|
283
|
+
|
277
284
|
UI.crash!("Couldn't find application in '#{BuildCommandGenerator.archive_path}'") unless File.exist?(app_path)
|
278
285
|
|
279
286
|
joined_app_path = File.join(Gym.config[:output_directory], File.basename(app_path))
|
@@ -16,7 +16,7 @@ module Match
|
|
16
16
|
|
17
17
|
ensure_ui_interactive
|
18
18
|
|
19
|
-
|
19
|
+
new_password = FastlaneCore::Helper.ask_password(message: "New passphrase for Git Repo: ", confirm: true)
|
20
20
|
|
21
21
|
# Choose the right storage and encryption implementations
|
22
22
|
storage = Storage.for_mode(params[:storage_mode], {
|
@@ -37,10 +37,10 @@ module Match
|
|
37
37
|
encryption.decrypt_files
|
38
38
|
|
39
39
|
encryption.clear_password
|
40
|
-
encryption.store_password(
|
40
|
+
encryption.store_password(new_password)
|
41
41
|
|
42
42
|
message = "[fastlane] Changed passphrase"
|
43
|
-
files_to_commit = encryption.encrypt_files
|
43
|
+
files_to_commit = encryption.encrypt_files(password: new_password)
|
44
44
|
storage.save_changes!(files_to_commit: files_to_commit, custom_message: message)
|
45
45
|
end
|
46
46
|
|
@@ -28,9 +28,9 @@ module Match
|
|
28
28
|
self.working_directory = working_directory
|
29
29
|
end
|
30
30
|
|
31
|
-
def encrypt_files
|
31
|
+
def encrypt_files(password: nil)
|
32
32
|
files = []
|
33
|
-
password
|
33
|
+
password ||= fetch_password!
|
34
34
|
iterate(self.working_directory) do |current|
|
35
35
|
files << current
|
36
36
|
encrypt_specific_file(path: current, password: password)
|
data/match/lib/match/importer.rb
CHANGED
@@ -149,7 +149,7 @@ module Match
|
|
149
149
|
end
|
150
150
|
|
151
151
|
def api_token(params)
|
152
|
-
@api_token ||= Spaceship::ConnectAPI::Token.create(params[:api_key]) if params[:api_key]
|
152
|
+
@api_token ||= Spaceship::ConnectAPI::Token.create(**params[:api_key]) if params[:api_key]
|
153
153
|
@api_token ||= Spaceship::ConnectAPI::Token.from_json_file(params[:api_key_path]) if params[:api_key_path]
|
154
154
|
return @api_token
|
155
155
|
end
|
data/match/lib/match/migrate.rb
CHANGED
@@ -91,7 +91,7 @@ module Match
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def api_token(params)
|
94
|
-
@api_token ||= Spaceship::ConnectAPI::Token.create(params[:api_key]) if params[:api_key]
|
94
|
+
@api_token ||= Spaceship::ConnectAPI::Token.create(**params[:api_key]) if params[:api_key]
|
95
95
|
@api_token ||= Spaceship::ConnectAPI::Token.from_json_file(params[:api_key_path]) if params[:api_key_path]
|
96
96
|
return @api_token
|
97
97
|
end
|
data/match/lib/match/module.rb
CHANGED
@@ -21,6 +21,7 @@ module Match
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.cert_type_sym(type)
|
24
|
+
type = type.to_s
|
24
25
|
return :mac_installer_distribution if type == "mac_installer_distribution"
|
25
26
|
return :developer_id_installer if type == "developer_id_installer"
|
26
27
|
return :developer_id_application if type == "developer_id"
|
data/match/lib/match/nuke.rb
CHANGED
@@ -121,7 +121,7 @@ module Match
|
|
121
121
|
end
|
122
122
|
|
123
123
|
def api_token
|
124
|
-
@api_token ||= Spaceship::ConnectAPI::Token.create(params[:api_key]) if params[:api_key]
|
124
|
+
@api_token ||= Spaceship::ConnectAPI::Token.create(**params[:api_key]) if params[:api_key]
|
125
125
|
@api_token ||= Spaceship::ConnectAPI::Token.from_json_file(params[:api_key_path]) if params[:api_key_path]
|
126
126
|
return @api_token
|
127
127
|
end
|
data/match/lib/match/runner.rb
CHANGED
@@ -139,7 +139,7 @@ module Match
|
|
139
139
|
# rubocop:enable Metrics/PerceivedComplexity
|
140
140
|
|
141
141
|
def api_token(params)
|
142
|
-
@api_token ||= Spaceship::ConnectAPI::Token.create(params[:api_key]) if params[:api_key]
|
142
|
+
@api_token ||= Spaceship::ConnectAPI::Token.create(**params[:api_key]) if params[:api_key]
|
143
143
|
@api_token ||= Spaceship::ConnectAPI::Token.from_json_file(params[:api_key_path]) if params[:api_key_path]
|
144
144
|
return @api_token
|
145
145
|
end
|
@@ -123,7 +123,7 @@ module Match
|
|
123
123
|
end
|
124
124
|
|
125
125
|
def api_token
|
126
|
-
api_token ||= Spaceship::ConnectAPI::Token.create(self.api_key) if self.api_key
|
126
|
+
api_token ||= Spaceship::ConnectAPI::Token.create(**self.api_key) if self.api_key
|
127
127
|
api_token ||= Spaceship::ConnectAPI::Token.from_json_file(self.api_key_path) if self.api_key_path
|
128
128
|
return api_token
|
129
129
|
end
|
@@ -196,7 +196,7 @@ module Match
|
|
196
196
|
end
|
197
197
|
|
198
198
|
def api_token
|
199
|
-
api_token ||= Spaceship::ConnectAPI::Token.create(self.api_key) if self.api_key
|
199
|
+
api_token ||= Spaceship::ConnectAPI::Token.create(**self.api_key) if self.api_key
|
200
200
|
api_token ||= Spaceship::ConnectAPI::Token.from_json_file(self.api_key_path) if self.api_key_path
|
201
201
|
return api_token
|
202
202
|
end
|
@@ -31,10 +31,11 @@ module Pilot
|
|
31
31
|
platform: platform)
|
32
32
|
|
33
33
|
transporter = transporter_for_selected_team(options)
|
34
|
-
result = transporter.upload(
|
34
|
+
result = transporter.upload(package_path: package_path)
|
35
35
|
|
36
36
|
unless result
|
37
|
-
|
37
|
+
transporter_errors = transporter.displayable_errors
|
38
|
+
UI.user_error!("Error uploading ipa file: \n #{transporter_errors}")
|
38
39
|
end
|
39
40
|
|
40
41
|
UI.success("Successfully uploaded the new binary to App Store Connect")
|
@@ -253,9 +254,13 @@ module Pilot
|
|
253
254
|
end
|
254
255
|
end
|
255
256
|
|
256
|
-
|
257
|
-
|
258
|
-
|
257
|
+
if options[:notify_external_testers].nil?
|
258
|
+
UI.important("Using App Store Connect's default for notifying external testers (which is true) - set `notify_external_testers` for full control")
|
259
|
+
else
|
260
|
+
update_build_beta_details(build, {
|
261
|
+
auto_notify_enabled: options[:notify_external_testers]
|
262
|
+
})
|
263
|
+
end
|
259
264
|
end
|
260
265
|
|
261
266
|
def self.truncate_changelog(changelog)
|
@@ -428,7 +433,14 @@ module Pilot
|
|
428
433
|
|
429
434
|
UI.important("Export compliance has been set to '#{uses_non_exempt_encryption}'. Need to wait for build to finishing processing again...")
|
430
435
|
UI.important("Set 'ITSAppUsesNonExemptEncryption' in the 'Info.plist' to skip this step and speed up the submission")
|
431
|
-
|
436
|
+
|
437
|
+
loop do
|
438
|
+
build = Spaceship::ConnectAPI::Build.get(build_id: uploaded_build.id)
|
439
|
+
return build unless build.missing_export_compliance?
|
440
|
+
|
441
|
+
UI.message("Waiting for build #{uploaded_build.id} to process export compliance")
|
442
|
+
sleep(5)
|
443
|
+
end
|
432
444
|
else
|
433
445
|
return uploaded_build
|
434
446
|
end
|
data/pilot/lib/pilot/manager.rb
CHANGED
@@ -23,6 +23,10 @@ module Pilot
|
|
23
23
|
else
|
24
24
|
config[:username] ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
|
25
25
|
|
26
|
+
# Username is now optional since addition of App Store Connect API Key
|
27
|
+
# Force asking for username to prompt user if not already set
|
28
|
+
config.fetch(:username, force_ask: true)
|
29
|
+
|
26
30
|
UI.message("Login to App Store Connect (#{config[:username]})")
|
27
31
|
Spaceship::ConnectAPI.login(config[:username], use_portal: false, use_tunes: true, tunes_team_id: config[:team_id], team_name: config[:team_name])
|
28
32
|
UI.message("Login successful")
|
@@ -30,7 +34,7 @@ module Pilot
|
|
30
34
|
end
|
31
35
|
|
32
36
|
def api_token
|
33
|
-
@api_token ||= Spaceship::ConnectAPI::Token.create(config[:api_key]) if config[:api_key]
|
37
|
+
@api_token ||= Spaceship::ConnectAPI::Token.create(**config[:api_key]) if config[:api_key]
|
34
38
|
@api_token ||= Spaceship::ConnectAPI::Token.from_json_file(config[:api_key_path]) if config[:api_key_path]
|
35
39
|
return @api_token
|
36
40
|
end
|
data/pilot/lib/pilot/options.rb
CHANGED
@@ -31,6 +31,7 @@ module Pilot
|
|
31
31
|
short_option: "-u",
|
32
32
|
env_name: "PILOT_USERNAME",
|
33
33
|
description: "Your Apple ID Username",
|
34
|
+
optional: true,
|
34
35
|
default_value: user,
|
35
36
|
default_value_dynamic: true),
|
36
37
|
FastlaneCore::ConfigItem.new(key: :app_identifier,
|
@@ -182,8 +183,8 @@ module Pilot
|
|
182
183
|
FastlaneCore::ConfigItem.new(key: :notify_external_testers,
|
183
184
|
is_string: false,
|
184
185
|
env_name: "PILOT_NOTIFY_EXTERNAL_TESTERS",
|
185
|
-
description: "Should notify external testers?",
|
186
|
-
|
186
|
+
description: "Should notify external testers? (Not setting a value will use App Store Connect's default which is to notify)",
|
187
|
+
optional: true),
|
187
188
|
FastlaneCore::ConfigItem.new(key: :app_version,
|
188
189
|
env_name: "PILOT_APP_VERSION",
|
189
190
|
description: "The version number of the application build to distribute. If the version number is not specified, then the most recent build uploaded to TestFlight will be distributed. If specified, the most recent build for the version number will be distributed",
|