fastlane 2.151.2 → 2.155.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 +82 -82
- data/deliver/lib/deliver/app_screenshot.rb +1 -1
- data/deliver/lib/deliver/commands_generator.rb +7 -4
- data/deliver/lib/deliver/detect_values.rb +9 -3
- data/deliver/lib/deliver/download_screenshots.rb +1 -3
- data/deliver/lib/deliver/html_generator.rb +8 -1
- data/deliver/lib/deliver/options.rb +1 -1
- data/deliver/lib/deliver/runner.rb +5 -10
- data/deliver/lib/deliver/setup.rb +92 -3
- data/deliver/lib/deliver/submit_for_review.rb +4 -6
- data/deliver/lib/deliver/upload_metadata.rb +51 -30
- data/deliver/lib/deliver/upload_price_tier.rb +1 -3
- data/deliver/lib/deliver/upload_screenshots.rb +75 -44
- data/fastlane/lib/fastlane/{helper/.s3_client_helper.rb.swp → .erb_template_helper.rb.swp} +0 -0
- data/{deliver/lib/deliver/.commands_generator.rb.swp → fastlane/lib/fastlane/actions/.git_commit.rb.swp} +0 -0
- data/fastlane/lib/fastlane/actions/carthage.rb +7 -0
- data/fastlane/lib/fastlane/actions/create_keychain.rb +5 -1
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +3 -1
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +21 -2
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +4 -4
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +4 -2
- data/fastlane/lib/fastlane/actions/erb.rb +10 -2
- data/fastlane/lib/fastlane/actions/git_branch.rb +4 -1
- data/fastlane/lib/fastlane/actions/git_pull.rb +13 -2
- data/fastlane/lib/fastlane/actions/sync_code_signing.rb +5 -0
- data/fastlane/lib/fastlane/actions/upload_to_testflight.rb +11 -3
- data/fastlane/lib/fastlane/runner.rb +3 -1
- 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 +419 -192
- 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 +10 -2
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- 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 +9 -1
- data/fastlane_core/lib/fastlane_core/device_manager.rb +25 -6
- data/frameit/lib/frameit/editor.rb +11 -6
- data/gym/lib/gym/detect_values.rb +6 -3
- data/gym/lib/gym/module.rb +30 -0
- data/gym/lib/gym/runner.rb +23 -18
- data/match/lib/match/generator.rb +6 -0
- data/match/lib/match/options.rb +16 -4
- data/match/lib/match/runner.rb +13 -5
- data/match/lib/match/spaceship_ensure.rb +7 -9
- data/match/lib/match/storage/git_storage.rb +16 -2
- data/match/lib/match/storage/google_cloud_storage.rb +1 -1
- data/pilot/lib/pilot/build_manager.rb +9 -0
- data/pilot/lib/pilot/options.rb +7 -1
- data/scan/lib/scan/runner.rb +19 -6
- data/sigh/lib/sigh/download_all.rb +42 -27
- data/sigh/lib/sigh/module.rb +26 -0
- data/sigh/lib/sigh/options.rb +2 -2
- data/sigh/lib/sigh/runner.rb +74 -33
- data/snapshot/lib/snapshot/options.rb +10 -0
- data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +5 -0
- data/snapshot/lib/snapshot/test_command_generator.rb +3 -2
- data/snapshot/lib/snapshot/test_command_generator_xcode_8.rb +4 -1
- data/spaceship/lib/spaceship/connect_api.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/client.rb +5 -3
- data/spaceship/lib/spaceship/connect_api/model.rb +15 -1
- data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/models/app.rb +61 -3
- data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/models/app_preview.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot.rb +44 -5
- data/spaceship/lib/spaceship/connect_api/models/app_store_review_detail.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +12 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_release_request.rb +12 -0
- data/spaceship/lib/spaceship/connect_api/models/build.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +17 -5
- data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +41 -7
- data/spaceship/lib/spaceship/connect_api/models/idfa_declaration.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/models/profile.rb +31 -1
- data/spaceship/lib/spaceship/connect_api/provisioning/client.rb +46 -4
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +41 -0
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +32 -1
- data/supply/lib/supply/client.rb +2 -1
- data/supply/lib/supply/options.rb +8 -1
- metadata +34 -61
- data/deliver/lib/deliver/.submit_for_review.rb.swp +0 -0
- data/frameit/lib/frameit/.editor.rb.swp +0 -0
@@ -7,9 +7,7 @@ require 'fastlane_core/pkg_file_analyser'
|
|
7
7
|
module Deliver
|
8
8
|
class SubmitForReview
|
9
9
|
def submit!(options)
|
10
|
-
|
11
|
-
app_id = legacy_app.apple_id
|
12
|
-
app = Spaceship::ConnectAPI::App.get(app_id: app_id)
|
10
|
+
app = options[:app]
|
13
11
|
|
14
12
|
platform = Spaceship::ConnectAPI::Platform.map(options[:platform])
|
15
13
|
version = app.get_edit_app_store_version(platform: platform)
|
@@ -120,10 +118,10 @@ module Deliver
|
|
120
118
|
" Example: submission_information: { add_id_info_uses_idfa: false }",
|
121
119
|
" Example: submission_information: {",
|
122
120
|
" add_id_info_uses_idfa: true,",
|
123
|
-
" add_id_info_limits_tracking: false,",
|
124
121
|
" add_id_info_serves_ads: false,",
|
125
|
-
"
|
126
|
-
"
|
122
|
+
" add_id_info_tracks_install: true,",
|
123
|
+
" add_id_info_tracks_action: true,",
|
124
|
+
" add_id_info_limits_tracking: true",
|
127
125
|
" }",
|
128
126
|
" Example CLI:",
|
129
127
|
" --submission_information \"{\\\"add_id_info_uses_idfa\\\": false}\""
|
@@ -8,10 +8,10 @@ module Deliver
|
|
8
8
|
LOCALISED_VERSION_VALUES = {
|
9
9
|
description: "description",
|
10
10
|
keywords: "keywords",
|
11
|
-
release_notes: "
|
12
|
-
support_url: "
|
13
|
-
marketing_url: "
|
14
|
-
promotional_text: "
|
11
|
+
release_notes: "whats_new",
|
12
|
+
support_url: "support_url",
|
13
|
+
marketing_url: "marketing_url",
|
14
|
+
promotional_text: "promotional_text"
|
15
15
|
}
|
16
16
|
|
17
17
|
# Everything attached to the version but not being localised
|
@@ -23,14 +23,19 @@ module Deliver
|
|
23
23
|
LOCALISED_APP_VALUES = {
|
24
24
|
name: "name",
|
25
25
|
subtitle: "subtitle",
|
26
|
-
privacy_url: "
|
27
|
-
apple_tv_privacy_policy: "
|
26
|
+
privacy_url: "privacy_policy_url",
|
27
|
+
apple_tv_privacy_policy: "privacy_policy_text"
|
28
28
|
}
|
29
29
|
|
30
30
|
# Non localized app details values
|
31
|
-
NON_LOCALISED_APP_VALUES =
|
32
|
-
|
33
|
-
|
31
|
+
NON_LOCALISED_APP_VALUES = {
|
32
|
+
primary_category: :primary_category,
|
33
|
+
secondary_category: :secondary_category,
|
34
|
+
primary_first_sub_category: :primary_subcategory_one,
|
35
|
+
primary_second_sub_category: :primary_subcategory_two,
|
36
|
+
secondary_first_sub_category: :secondary_subcategory_one,
|
37
|
+
secondary_second_sub_category: :secondary_subcategory_two
|
38
|
+
}
|
34
39
|
|
35
40
|
# Review information values
|
36
41
|
REVIEW_INFORMATION_VALUES_LEGACY = {
|
@@ -43,12 +48,12 @@ module Deliver
|
|
43
48
|
review_notes: :notes
|
44
49
|
}
|
45
50
|
REVIEW_INFORMATION_VALUES = {
|
46
|
-
first_name: "
|
47
|
-
last_name: "
|
48
|
-
phone_number: "
|
49
|
-
email_address: "
|
50
|
-
demo_user: "
|
51
|
-
demo_password: "
|
51
|
+
first_name: "contact_first_name",
|
52
|
+
last_name: "contact_last_name",
|
53
|
+
phone_number: "contact_phone",
|
54
|
+
email_address: "contact_email",
|
55
|
+
demo_user: "demo_account_name",
|
56
|
+
demo_password: "demo_account_password",
|
52
57
|
notes: "notes"
|
53
58
|
}
|
54
59
|
|
@@ -74,9 +79,7 @@ module Deliver
|
|
74
79
|
def upload(options)
|
75
80
|
return if options[:skip_metadata]
|
76
81
|
|
77
|
-
|
78
|
-
app_id = legacy_app.apple_id
|
79
|
-
app = Spaceship::ConnectAPI::App.get(app_id: app_id)
|
82
|
+
app = options[:app]
|
80
83
|
|
81
84
|
platform = Spaceship::ConnectAPI::Platform.map(options[:platform])
|
82
85
|
|
@@ -175,6 +178,11 @@ module Deliver
|
|
175
178
|
end
|
176
179
|
non_localized_version_attributes['releaseType'] = release_type
|
177
180
|
|
181
|
+
# Update app store version
|
182
|
+
# This needs to happen before updating localizations (https://openradar.appspot.com/radar?id=4925914991296512)
|
183
|
+
UI.message("Uploading metadata to App Store Connect for version")
|
184
|
+
version.update(attributes: non_localized_version_attributes)
|
185
|
+
|
178
186
|
# Update app store version localizations
|
179
187
|
app_store_version_localizations.each do |app_store_version_localization|
|
180
188
|
attributes = localized_version_attributes_by_locale[app_store_version_localization.locale]
|
@@ -193,10 +201,6 @@ module Deliver
|
|
193
201
|
end
|
194
202
|
end
|
195
203
|
|
196
|
-
# Update app store version
|
197
|
-
UI.message("Uploading metadata to App Store Connect for version")
|
198
|
-
version.update(attributes: non_localized_version_attributes)
|
199
|
-
|
200
204
|
# Update categories
|
201
205
|
app_info = app.fetch_edit_app_info
|
202
206
|
if app_info
|
@@ -494,7 +498,7 @@ module Deliver
|
|
494
498
|
end
|
495
499
|
|
496
500
|
# Load non localised data
|
497
|
-
(NON_LOCALISED_VERSION_VALUES.keys + NON_LOCALISED_APP_VALUES).each do |key|
|
501
|
+
(NON_LOCALISED_VERSION_VALUES.keys + NON_LOCALISED_APP_VALUES.keys).each do |key|
|
498
502
|
path = File.join(options[:metadata_path], "#{key}.txt")
|
499
503
|
next unless File.exist?(path)
|
500
504
|
|
@@ -503,13 +507,30 @@ module Deliver
|
|
503
507
|
end
|
504
508
|
|
505
509
|
# Load review information
|
506
|
-
|
507
|
-
|
510
|
+
# This is used to find the file path for both new and legacy review information filenames
|
511
|
+
resolve_review_info_path = lambda do |option_name|
|
508
512
|
path = File.join(options[:metadata_path], REVIEW_INFORMATION_DIR, "#{option_name}.txt")
|
509
|
-
|
510
|
-
|
513
|
+
return nil unless File.exist?(path)
|
514
|
+
return nil if options[:app_review_information][option_name].to_s.length > 0
|
511
515
|
|
512
516
|
UI.message("Loading '#{path}'...")
|
517
|
+
return path
|
518
|
+
end
|
519
|
+
|
520
|
+
# First try and load review information from legacy filenames
|
521
|
+
options[:app_review_information] ||= {}
|
522
|
+
REVIEW_INFORMATION_VALUES_LEGACY.each do |legacy_option_name, option_name|
|
523
|
+
path = resolve_review_info_path.call(legacy_option_name)
|
524
|
+
next if path.nil?
|
525
|
+
options[:app_review_information][option_name] ||= File.read(path)
|
526
|
+
|
527
|
+
UI.deprecated("Review rating option '#{legacy_option_name}' from iTunesConnect has been deprecated. Please replace with '#{option_name}'")
|
528
|
+
end
|
529
|
+
|
530
|
+
# Then load review information from new App Store Connect filenames
|
531
|
+
REVIEW_INFORMATION_VALUES.keys.each do |option_name|
|
532
|
+
path = resolve_review_info_path.call(option_name)
|
533
|
+
next if path.nil?
|
513
534
|
options[:app_review_information][option_name] ||= File.read(path)
|
514
535
|
end
|
515
536
|
end
|
@@ -541,10 +562,10 @@ module Deliver
|
|
541
562
|
attributes[attribute_name] = strip_value unless strip_value.empty?
|
542
563
|
end
|
543
564
|
|
544
|
-
if !attributes["
|
545
|
-
attributes["
|
565
|
+
if !attributes["demo_account_name"].to_s.empty? && !attributes["demo_account_password"].to_s.empty?
|
566
|
+
attributes["demo_account_required"] = true
|
546
567
|
else
|
547
|
-
attributes["
|
568
|
+
attributes["demo_account_required"] = false
|
548
569
|
end
|
549
570
|
|
550
571
|
UI.message("Uploading app review information to App Store Connect")
|
@@ -12,9 +12,7 @@ module Deliver
|
|
12
12
|
return if options[:skip_screenshots]
|
13
13
|
return if options[:edit_live]
|
14
14
|
|
15
|
-
|
16
|
-
app_id = legacy_app.apple_id
|
17
|
-
app = Spaceship::ConnectAPI::App.get(app_id: app_id)
|
15
|
+
app = options[:app]
|
18
16
|
|
19
17
|
platform = Spaceship::ConnectAPI::Platform.map(options[:platform])
|
20
18
|
version = app.get_edit_app_store_version(platform: platform)
|
@@ -28,47 +26,7 @@ module Deliver
|
|
28
26
|
localizations = version.get_app_store_version_localizations
|
29
27
|
|
30
28
|
if options[:overwrite_screenshots]
|
31
|
-
|
32
|
-
localizations.each do |localization|
|
33
|
-
# Only delete screenshots if trying to upload
|
34
|
-
next unless screenshots_per_language.keys.include?(localization.locale)
|
35
|
-
|
36
|
-
# Iterate over all screenshots for each set and delete
|
37
|
-
screenshot_sets = localization.get_app_screenshot_sets
|
38
|
-
|
39
|
-
# Multi threading delete on single localization
|
40
|
-
threads = []
|
41
|
-
errors = []
|
42
|
-
|
43
|
-
screenshot_sets.each do |screenshot_set|
|
44
|
-
UI.message("Removing all previously uploaded screenshots for '#{localization.locale}' '#{screenshot_set.screenshot_display_type}'...")
|
45
|
-
screenshot_set.app_screenshots.each do |screenshot|
|
46
|
-
UI.verbose("Deleting screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
|
47
|
-
threads << Thread.new do
|
48
|
-
begin
|
49
|
-
screenshot.delete!
|
50
|
-
UI.verbose("Deleted screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
|
51
|
-
rescue => error
|
52
|
-
UI.verbose("Failed to delete screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
|
53
|
-
errors << error
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
sleep(1) # Feels bad but sleeping a bit to let the threads catchup
|
60
|
-
|
61
|
-
unless threads.empty?
|
62
|
-
Helper.show_loading_indicator("Waiting for screenshots to be deleted for '#{localization.locale}'... (might be slow)") unless FastlaneCore::Globals.verbose?
|
63
|
-
threads.each(&:join)
|
64
|
-
Helper.hide_loading_indicator unless FastlaneCore::Globals.verbose?
|
65
|
-
end
|
66
|
-
|
67
|
-
# Crash if any errors happen while deleting
|
68
|
-
errors.each do |error|
|
69
|
-
UI.error(error.message)
|
70
|
-
end
|
71
|
-
end
|
29
|
+
delete_screenshots(localizations, screenshots_per_language)
|
72
30
|
end
|
73
31
|
|
74
32
|
# Finding languages to enable
|
@@ -95,6 +53,79 @@ module Deliver
|
|
95
53
|
upload_screenshots(screenshots_per_language, localizations, options)
|
96
54
|
end
|
97
55
|
|
56
|
+
def delete_screenshots(localizations, screenshots_per_language, tries: 5)
|
57
|
+
tries -= 1
|
58
|
+
|
59
|
+
# Get localizations on version
|
60
|
+
localizations.each do |localization|
|
61
|
+
# Only delete screenshots if trying to upload
|
62
|
+
next unless screenshots_per_language.keys.include?(localization.locale)
|
63
|
+
|
64
|
+
# Iterate over all screenshots for each set and delete
|
65
|
+
screenshot_sets = localization.get_app_screenshot_sets
|
66
|
+
|
67
|
+
# Multi threading delete on single localization
|
68
|
+
threads = []
|
69
|
+
errors = []
|
70
|
+
|
71
|
+
screenshot_sets.each do |screenshot_set|
|
72
|
+
UI.message("Removing all previously uploaded screenshots for '#{localization.locale}' '#{screenshot_set.screenshot_display_type}'...")
|
73
|
+
screenshot_set.app_screenshots.each do |screenshot|
|
74
|
+
UI.verbose("Deleting screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
|
75
|
+
threads << Thread.new do
|
76
|
+
begin
|
77
|
+
screenshot.delete!
|
78
|
+
UI.verbose("Deleted screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
|
79
|
+
rescue => error
|
80
|
+
UI.verbose("Failed to delete screenshot - #{localization.locale} #{screenshot_set.screenshot_display_type} #{screenshot.id}")
|
81
|
+
errors << error
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
sleep(1) # Feels bad but sleeping a bit to let the threads catchup
|
88
|
+
|
89
|
+
unless threads.empty?
|
90
|
+
Helper.show_loading_indicator("Waiting for screenshots to be deleted for '#{localization.locale}'... (might be slow)") unless FastlaneCore::Globals.verbose?
|
91
|
+
threads.each(&:join)
|
92
|
+
Helper.hide_loading_indicator unless FastlaneCore::Globals.verbose?
|
93
|
+
end
|
94
|
+
|
95
|
+
# Crash if any errors happen while deleting
|
96
|
+
errors.each do |error|
|
97
|
+
UI.error(error.message)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# Verify all screenshots have been deleted
|
102
|
+
# Sometimes API requests will fail but screenshots will still be deleted
|
103
|
+
count = count_screenshots(localizations)
|
104
|
+
UI.important("Number of screenshots not deleted: #{count}")
|
105
|
+
if count > 0
|
106
|
+
if tries.zero?
|
107
|
+
UI.user_error!("Failed verification of all screenshots deleted... #{count} screenshot(s) still exist")
|
108
|
+
else
|
109
|
+
UI.error("Failed to delete all screenshots... Tries remaining: #{tries}")
|
110
|
+
delete_screenshots(localizations, screenshots_per_language, tries: tries)
|
111
|
+
end
|
112
|
+
else
|
113
|
+
UI.message("Successfully deleted all screenshots")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def count_screenshots(localizations)
|
118
|
+
count = 0
|
119
|
+
localizations.each do |localization|
|
120
|
+
screenshot_sets = localization.get_app_screenshot_sets
|
121
|
+
screenshot_sets.each do |screenshot_set|
|
122
|
+
count += screenshot_set.app_screenshots.size
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
return count
|
127
|
+
end
|
128
|
+
|
98
129
|
def upload_screenshots(screenshots_per_language, localizations, options)
|
99
130
|
# Check if should wait for processing
|
100
131
|
# Default to waiting if submitting for review (since needed for submission)
|
Binary file
|
Binary file
|
@@ -20,6 +20,7 @@ module Fastlane
|
|
20
20
|
cmd << "--output #{params[:output]}" if params[:output]
|
21
21
|
cmd << "--use-ssh" if params[:use_ssh]
|
22
22
|
cmd << "--use-submodules" if params[:use_submodules]
|
23
|
+
cmd << "--use-netrc" if params[:use_netrc]
|
23
24
|
cmd << "--no-use-binaries" if params[:use_binaries] == false
|
24
25
|
cmd << "--no-checkout" if params[:no_checkout] == true
|
25
26
|
cmd << "--no-build" if params[:no_build] == true
|
@@ -89,6 +90,12 @@ module Fastlane
|
|
89
90
|
is_string: false,
|
90
91
|
type: Boolean,
|
91
92
|
optional: true),
|
93
|
+
FastlaneCore::ConfigItem.new(key: :use_netrc,
|
94
|
+
env_name: "FL_CARTHAGE_USE_NETRC",
|
95
|
+
description: "Use .netrc for downloading frameworks",
|
96
|
+
is_string: false,
|
97
|
+
type: Boolean,
|
98
|
+
optional: true),
|
92
99
|
FastlaneCore::ConfigItem.new(key: :use_binaries,
|
93
100
|
env_name: "FL_CARTHAGE_USE_BINARIES",
|
94
101
|
description: "Check out dependency repositories even when prebuilt frameworks exist",
|
@@ -4,6 +4,7 @@ module Fastlane
|
|
4
4
|
module Actions
|
5
5
|
module SharedValues
|
6
6
|
ORIGINAL_DEFAULT_KEYCHAIN = :ORIGINAL_DEFAULT_KEYCHAIN
|
7
|
+
KEYCHAIN_PATH = :KEYCHAIN_PATH
|
7
8
|
end
|
8
9
|
|
9
10
|
class CreateKeychainAction < Action
|
@@ -32,6 +33,8 @@ module Fastlane
|
|
32
33
|
UI.important("If creating a new Keychain DB is required please set the `require_create` option true to cause the action to fail")
|
33
34
|
end
|
34
35
|
|
36
|
+
Actions.lane_context[Actions::SharedValues::KEYCHAIN_PATH] = keychain_path
|
37
|
+
|
35
38
|
if params[:default_keychain]
|
36
39
|
# if there is no default keychain - setting the original will fail - silent this error
|
37
40
|
begin
|
@@ -91,7 +94,8 @@ module Fastlane
|
|
91
94
|
|
92
95
|
def self.output
|
93
96
|
[
|
94
|
-
['ORIGINAL_DEFAULT_KEYCHAIN', 'The path to the default keychain']
|
97
|
+
['ORIGINAL_DEFAULT_KEYCHAIN', 'The path to the default keychain'],
|
98
|
+
['KEYCHAIN_PATH', 'The path of the keychain']
|
95
99
|
]
|
96
100
|
end
|
97
101
|
|
@@ -135,7 +135,7 @@ The general parameters are defined in the `default` key and can be:
|
|
135
135
|
| `show_complete_frame` | Specifies whether _frameit_ should shrink the device frame so that it is completely shown in the framed screenshot. If it is false, clipping of the device frame might occur at the bottom (when `title_below_image` is `false`) or top (when `title_below_image` is `true`) of the framed screenshot. | `false` |
|
136
136
|
| `padding` | The content of the framed screenshot will be resized to match the specified `padding` around all edges. The vertical padding is also applied between the text and the top or bottom (depending on `title_below_image`) of the device frame. <p> There are 3 different options of specyfying the padding: <p> 1. Default: An integer value that defines both horizontal and vertical padding in pixels. <br> 2. A string that defines (different) padding values in pixels for horizontal and vertical padding. The syntax is `"<horizontal>x<vertical>"`, e.g. `"30x60"`. <br> 3. A string that defines (different) padding values in percentage for horizontal and vertical padding. The syntax is `"<horizontal>%x<vertical>%"`, e.g. `"5%x10%"`. <br> **Note:** The percentage is calculated from the smallest image dimension (height or width). <p> A combination of option 2 and 3 is possible, e.g. `"5%x40"`. | `50` |
|
137
137
|
| `interline_spacing` | Specifies whether _frameit_ should add or subtract this many pixels between the individual lines of text. This only applies to a multi-line `title` and/or `keyword` to expand or squash together the individual lines of text. | `0` |
|
138
|
-
| `font_scale_factor` | Specifies whether _frameit_ should increase or decrease the font size of the text. | `0.1` |
|
138
|
+
| `font_scale_factor` | Specifies whether _frameit_ should increase or decrease the font size of the text. Is ignored for `keyword` or `title`, if `font_size` is specified. | `0.1` |
|
139
139
|
| `frame` | Overrides the color of the frame to be used. (Valid values are `BLACK`, `WHITE`, `GOLD` and `ROSE_GOLD`) | NA |
|
140
140
|
| `title_min_height` | Specifies a height always reserved for the title. Value can be a percentage of the height or an absolute value. The device will be placed below (or above) this area. Convenient to ensure the device top (or bottom) will be consistently placed at the same height on the different screenshots. | NA |
|
141
141
|
| `use_platform` | Overrides the platform used for the screenshot. Valid values are `IOS`, `ANDROID` and `ANY`. | `IOS` |
|
@@ -163,6 +163,7 @@ The `keyword` and `title` parameters are both used in `default` and `data`. They
|
|
163
163
|
|-----|-------------|---------------|
|
164
164
|
| `color` | The font color for the text. Specify a hex/html color code. | `#000000` (black) |
|
165
165
|
| `font` | The font family for the text. Specify the (relative) path to the font file (e.g. an OpenType Font). | The default `imagemagick` font, which is system dependent. |
|
166
|
+
| `font_size` | The font size for the text specified in points. If not specified or `0`, font will be scaled automatically to fit the available space. _frameit_ still shrinks the text, if it would not fit. | NA |
|
166
167
|
| `text` | The text that should be used for the `keyword` or `title`. <p> Note: If you want to use localised text, use [`.strings` files](#strings-files). | NA |
|
167
168
|
|
168
169
|
### Example
|
@@ -176,6 +177,7 @@ The `keyword` and `title` parameters are both used in `default` and `data`. They
|
|
176
177
|
},
|
177
178
|
"title": {
|
178
179
|
"font": "./fonts/MyFont-Th.otf",
|
180
|
+
"font_size": 128,
|
179
181
|
"color": "#545454"
|
180
182
|
},
|
181
183
|
"background": "./background.jpg",
|
@@ -111,6 +111,25 @@ match
|
|
111
111
|
|
112
112
|
You can find more information about GitHub basic authentication and personal token generation here: [https://developer.github.com/v3/auth/#basic-authentication](https://developer.github.com/v3/auth/#basic-authentication)
|
113
113
|
|
114
|
+
##### Git Storage on GitHub - Deploy keys
|
115
|
+
|
116
|
+
If your machine does not have a private key set up for your certificates repository, you can give _match_ a path for one:
|
117
|
+
|
118
|
+
Using parameter:
|
119
|
+
|
120
|
+
```
|
121
|
+
match(git_private_key: '<PATH TO YOUR KEY>')
|
122
|
+
```
|
123
|
+
|
124
|
+
Using environment variable:
|
125
|
+
|
126
|
+
```
|
127
|
+
ENV['MATCH_GIT_PRIVATE_KEY'] = '<PATH TO YOUR KEY>'
|
128
|
+
match
|
129
|
+
```
|
130
|
+
|
131
|
+
You can find more information about GitHub basic authentication and personal token generation here: [https://developer.github.com/v3/auth/#basic-authentication](https://developer.github.com/v3/auth/#basic-authentication)
|
132
|
+
|
114
133
|
##### Git Storage on Azure Devops
|
115
134
|
|
116
135
|
If you're running a pipeline on Azure Devops and using git storage in a another repository on the same project, you might want to use `bearer` token authentication.
|
@@ -488,14 +507,14 @@ _match_ stores the certificate (`.cer`) and the private key (`.p12`) files separ
|
|
488
507
|
Decrypt your cert found in `certs/<type>/<unique-id>.cer` as a pem file:
|
489
508
|
|
490
509
|
```no-highlight
|
491
|
-
openssl aes-256-cbc -k "<password>" -in "certs/<type>/<unique-id>.cer" -out "cert.der" -a -d
|
510
|
+
openssl aes-256-cbc -k "<password>" -in "certs/<type>/<unique-id>.cer" -out "cert.der" -a -d -md [md5|sha256]
|
492
511
|
openssl x509 -inform der -in cert.der -out cert.pem
|
493
512
|
```
|
494
513
|
|
495
514
|
Decrypt your private key found in `certs/<type>/<unique-id>.p12` as a pem file:
|
496
515
|
|
497
516
|
```no-highlight
|
498
|
-
openssl aes-256-cbc -k "<password>" -in "certs/distribution/<unique-id>.p12" -out "key.pem" -a -d
|
517
|
+
openssl aes-256-cbc -k "<password>" -in "certs/distribution/<unique-id>.p12" -out "key.pem" -a -d -md [md5|sha256]
|
499
518
|
```
|
500
519
|
|
501
520
|
Generate an encrypted p12 file with the same or new password:
|
@@ -471,7 +471,7 @@ _deliver_ allows for metadata to be set through `.txt` files in the metadata fol
|
|
471
471
|
|
472
472
|
Key | Editable While Live | Directory | Filename
|
473
473
|
----|--------|--------|--------
|
474
|
-
<%- (Deliver::UploadMetadata::NON_LOCALISED_VERSION_VALUES.keys + Deliver::UploadMetadata::NON_LOCALISED_APP_VALUES).each do |value| -%>
|
474
|
+
<%- (Deliver::UploadMetadata::NON_LOCALISED_VERSION_VALUES.keys + Deliver::UploadMetadata::NON_LOCALISED_APP_VALUES.keys).each do |value| -%>
|
475
475
|
`<%= value %>` | <%= Deliver::UploadMetadata::NON_LOCALISED_LIVE_VALUES.include?(value) ? 'Yes' : 'No' %> | `<metadata_path>` | `<%= value %>.txt`
|
476
476
|
<%- end %>
|
477
477
|
|
@@ -485,10 +485,10 @@ Key | Editable While Live | Directory | Filename
|
|
485
485
|
|
486
486
|
### Review Information Metadata
|
487
487
|
|
488
|
-
Key | Editable While Live | Directory | Filename
|
489
|
-
|
488
|
+
Key | Editable While Live | Directory | Filename | Deprecated Filename
|
489
|
+
----|--------|--------|--------|--------
|
490
490
|
<%- Deliver::UploadMetadata::REVIEW_INFORMATION_VALUES_LEGACY.each do |key, value| -%>
|
491
|
-
`<%= value %>` | Yes | `<metadata_path>/<%= Deliver::UploadMetadata::REVIEW_INFORMATION_DIR %>` | `<%= value %>.txt`
|
491
|
+
`<%= value %>` | Yes | `<metadata_path>/<%= Deliver::UploadMetadata::REVIEW_INFORMATION_DIR %>` | `<%= value %>.txt` | `<%= key %>.txt`
|
492
492
|
<%- end %>
|
493
493
|
|
494
494
|
## Reference
|