fastlane 2.152.0 → 2.153.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 +76 -76
- 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/runner.rb +5 -10
- data/deliver/lib/deliver/setup.rb +94 -3
- data/deliver/lib/deliver/submit_for_review.rb +1 -3
- data/deliver/lib/deliver/upload_metadata.rb +25 -22
- data/deliver/lib/deliver/upload_price_tier.rb +1 -3
- data/deliver/lib/deliver/upload_screenshots.rb +75 -44
- data/{deliver/lib/deliver/.commands_generator.rb.swp → fastlane/lib/fastlane/.erb_template_helper.rb.swp} +0 -0
- data/fastlane/lib/fastlane/actions/.git_commit.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +3 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +1 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +4 -2
- data/fastlane/lib/fastlane/actions/erb.rb +10 -2
- 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 +1 -1
- data/fastlane/swift/Fastlane.swift +7 -4
- 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 +1 -1
- 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 +1 -1
- data/fastlane_core/lib/fastlane_core/device_manager.rb +20 -6
- data/frameit/lib/frameit/editor.rb +8 -5
- data/scan/lib/scan/runner.rb +19 -6
- data/spaceship/lib/spaceship/connect_api.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/client.rb +2 -2
- data/spaceship/lib/spaceship/connect_api/model.rb +10 -0
- data/spaceship/lib/spaceship/connect_api/models/.app_screenshot.rb.swp +0 -0
- data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/models/app.rb +40 -2
- 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 +10 -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/idfa_declaration.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +32 -1
- metadata +34 -59
- data/deliver/lib/deliver/.submit_for_review.rb.swp +0 -0
- data/deliver/lib/deliver/.upload_metadata.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)
|
@@ -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
|
|
@@ -495,7 +498,7 @@ module Deliver
|
|
495
498
|
end
|
496
499
|
|
497
500
|
# Load non localised data
|
498
|
-
(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|
|
499
502
|
path = File.join(options[:metadata_path], "#{key}.txt")
|
500
503
|
next unless File.exist?(path)
|
501
504
|
|
@@ -542,10 +545,10 @@ module Deliver
|
|
542
545
|
attributes[attribute_name] = strip_value unless strip_value.empty?
|
543
546
|
end
|
544
547
|
|
545
|
-
if !attributes["
|
546
|
-
attributes["
|
548
|
+
if !attributes["demo_account_name"].to_s.empty? && !attributes["demo_account_password"].to_s.empty?
|
549
|
+
attributes["demo_account_required"] = true
|
547
550
|
else
|
548
|
-
attributes["
|
551
|
+
attributes["demo_account_required"] = false
|
549
552
|
end
|
550
553
|
|
551
554
|
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
|
@@ -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",
|
@@ -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
|
|
@@ -22,7 +22,7 @@ module Fastlane
|
|
22
22
|
|
23
23
|
# Process options
|
24
24
|
version = params[:version]
|
25
|
-
build_number = params[:build_number]
|
25
|
+
build_number = params[:build_number].to_s unless params[:build_number].nil?
|
26
26
|
platform = params[:platform]
|
27
27
|
output_directory = params[:output_directory]
|
28
28
|
wait_for_dsym_processing = params[:wait_for_dsym_processing]
|
@@ -258,7 +258,8 @@ module Fastlane
|
|
258
258
|
short_option: "-b",
|
259
259
|
env_name: "DOWNLOAD_DSYMS_BUILD_NUMBER",
|
260
260
|
description: "The app build_number for dSYMs you wish to download",
|
261
|
-
optional: true
|
261
|
+
optional: true,
|
262
|
+
is_string: false),
|
262
263
|
FastlaneCore::ConfigItem.new(key: :min_version,
|
263
264
|
short_option: "-m",
|
264
265
|
env_name: "DOWNLOAD_DSYMS_MIN_VERSION",
|
@@ -308,6 +309,7 @@ module Fastlane
|
|
308
309
|
[
|
309
310
|
'download_dsyms',
|
310
311
|
'download_dsyms(version: "1.0.0", build_number: "345")',
|
312
|
+
'download_dsyms(version: "1.0.1", build_number: 42)',
|
311
313
|
'download_dsyms(version: "live")',
|
312
314
|
'download_dsyms(min_version: "1.2.3")'
|
313
315
|
]
|
@@ -3,7 +3,10 @@ module Fastlane
|
|
3
3
|
class ErbAction < Action
|
4
4
|
def self.run(params)
|
5
5
|
template = File.read(params[:template])
|
6
|
-
|
6
|
+
trim_mode = params[:trim_mode]
|
7
|
+
|
8
|
+
result = Fastlane::ErbTemplateHelper.render(template, params[:placeholders], trim_mode)
|
9
|
+
|
7
10
|
File.open(params[:destination], 'w') { |file| file.write(result) } if params[:destination]
|
8
11
|
UI.message("Successfully parsed template: '#{params[:template]}' and rendered output to: #{params[:destination]}") if params[:destination]
|
9
12
|
result
|
@@ -45,7 +48,12 @@ module Fastlane
|
|
45
48
|
description: "Placeholders given as a hash",
|
46
49
|
default_value: {},
|
47
50
|
is_string: false,
|
48
|
-
type: Hash)
|
51
|
+
type: Hash),
|
52
|
+
FastlaneCore::ConfigItem.new(key: :trim_mode,
|
53
|
+
short_option: "-t",
|
54
|
+
env_name: "FL_ERB_TRIM_MODE",
|
55
|
+
description: "Trim mode applied to the ERB",
|
56
|
+
optional: true)
|
49
57
|
|
50
58
|
]
|
51
59
|
end
|
@@ -216,7 +216,9 @@ module Fastlane
|
|
216
216
|
end
|
217
217
|
|
218
218
|
def execute_action(method_sym, class_ref, arguments, custom_dir: nil, from_action: false)
|
219
|
-
if
|
219
|
+
if from_action == true
|
220
|
+
custom_dir = "." # We preserve the directory from where the previous action was called from
|
221
|
+
elsif custom_dir.nil?
|
220
222
|
custom_dir ||= "." if Helper.test?
|
221
223
|
custom_dir ||= ".."
|
222
224
|
end
|
@@ -2760,7 +2760,7 @@ func downloadDsyms(username: String,
|
|
2760
2760
|
teamName: String? = nil,
|
2761
2761
|
platform: String = "ios",
|
2762
2762
|
version: String? = nil,
|
2763
|
-
buildNumber:
|
2763
|
+
buildNumber: Any? = nil,
|
2764
2764
|
minVersion: String? = nil,
|
2765
2765
|
outputDirectory: String? = nil,
|
2766
2766
|
waitForDsymProcessing: Bool = false,
|
@@ -2974,16 +2974,19 @@ func ensureXcodeVersion(version: String? = nil,
|
|
2974
2974
|
- template: ERB Template File
|
2975
2975
|
- destination: Destination file
|
2976
2976
|
- placeholders: Placeholders given as a hash
|
2977
|
+
- trimMode: Trim mode applied to the ERB
|
2977
2978
|
|
2978
2979
|
Renders an ERB template with `:placeholders` given as a hash via parameter.
|
2979
2980
|
If no `:destination` is set, it returns the rendered template as string.
|
2980
2981
|
*/
|
2981
2982
|
func erb(template: String,
|
2982
2983
|
destination: String? = nil,
|
2983
|
-
placeholders: [String: Any] = [:]
|
2984
|
+
placeholders: [String: Any] = [:],
|
2985
|
+
trimMode: String? = nil) {
|
2984
2986
|
let command = RubyCommand(commandID: "", methodName: "erb", className: nil, args: [RubyCommand.Argument(name: "template", value: template),
|
2985
2987
|
RubyCommand.Argument(name: "destination", value: destination),
|
2986
|
-
RubyCommand.Argument(name: "placeholders", value: placeholders)
|
2988
|
+
RubyCommand.Argument(name: "placeholders", value: placeholders),
|
2989
|
+
RubyCommand.Argument(name: "trim_mode", value: trimMode)])
|
2987
2990
|
_ = runner.executeCommand(command)
|
2988
2991
|
}
|
2989
2992
|
|
@@ -8986,4 +8989,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
|
|
8986
8989
|
|
8987
8990
|
// Please don't remove the lines below
|
8988
8991
|
// They are used to detect outdated files
|
8989
|
-
// FastlaneRunnerAPIVersion [0.9.
|
8992
|
+
// FastlaneRunnerAPIVersion [0.9.79]
|