fastlane 2.139.0 → 2.140.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +60 -60
- data/fastlane/lib/fastlane/action.rb +1 -1
- data/fastlane/lib/fastlane/actions/.hockey.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/gradle.rb +43 -2
- data/fastlane/lib/fastlane/actions/run_tests.rb +5 -22
- data/fastlane/lib/fastlane/runner.rb +23 -18
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +25 -7
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/Precheckfile.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/Snapshotfile.swift +1 -1
- data/{gym/lib/gym/.runner.rb.swp → fastlane_core/lib/fastlane_core/.build_watcher.rb.swp} +0 -0
- data/gym/lib/gym/runner.rb +30 -16
- data/pilot/lib/pilot/.manager.rb.swp +0 -0
- data/pilot/lib/pilot/build_manager.rb +15 -6
- data/scan/lib/scan/detect_values.rb +6 -1
- data/scan/lib/scan/manager.rb +18 -1
- data/scan/lib/scan/options.rb +12 -0
- data/scan/lib/scan/slack_poster.rb +1 -1
- data/scan/lib/scan/test_command_generator.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/.DS_Store +0 -0
- data/spaceship/lib/spaceship/portal/.certificate.rb.swp +0 -0
- data/spaceship/lib/spaceship/tunes/iap.rb +11 -11
- data/spaceship/lib/spaceship/tunes/iap_detail.rb +7 -3
- data/spaceship/lib/spaceship/tunes/iap_families.rb +12 -1
- data/spaceship/lib/spaceship/tunes/iap_family_details.rb +26 -17
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -2
- metadata +37 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8475d80e9f0452ef7ac3c90a50b82dc52b110235819d0d422783984a5a2e3241
|
|
4
|
+
data.tar.gz: ccfd6ed3734d272250f69816ca5fa408af1102e83336f5e50d8a818ee81e569f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 723bba1783d4fcc2f466010f29d2becae0384549ba9593113cf543bc4642e485c25fa7be07a825d75102d14d0e058819ddb2af52ed026bc425f693310ca9d7e3
|
|
7
|
+
data.tar.gz: 6ffd0b1013c0b31e2ce53789bc855f2a09809bdb8bbb1294f05be06bd356ce390e7b51a77fc61c1cd123b921a3af0ea65d8d36df471a0a72306e454eeb2e041b
|
data/README.md
CHANGED
|
@@ -40,23 +40,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
40
40
|
</a>
|
|
41
41
|
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
|
42
42
|
</td>
|
|
43
|
-
<td id='
|
|
44
|
-
<a href='https://github.com/
|
|
45
|
-
<img src='https://github.com/
|
|
46
|
-
</a>
|
|
47
|
-
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
48
|
-
</td>
|
|
49
|
-
<td id='josh-holtz'>
|
|
50
|
-
<a href='https://github.com/joshdholtz'>
|
|
51
|
-
<img src='https://github.com/joshdholtz.png?size=140'>
|
|
52
|
-
</a>
|
|
53
|
-
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
|
54
|
-
</td>
|
|
55
|
-
<td id='helmut-januschka'>
|
|
56
|
-
<a href='https://github.com/hjanuschka'>
|
|
57
|
-
<img src='https://github.com/hjanuschka.png?size=140'>
|
|
43
|
+
<td id='stefan-natchev'>
|
|
44
|
+
<a href='https://github.com/snatchev'>
|
|
45
|
+
<img src='https://github.com/snatchev.png?size=140'>
|
|
58
46
|
</a>
|
|
59
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
47
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
|
60
48
|
</td>
|
|
61
49
|
<td id='jorge-revuelta-h'>
|
|
62
50
|
<a href='https://github.com/minuscorp'>
|
|
@@ -64,19 +52,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
64
52
|
</a>
|
|
65
53
|
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
|
66
54
|
</td>
|
|
67
|
-
|
|
68
|
-
<
|
|
69
|
-
<
|
|
70
|
-
<a href='https://github.com/revolter'>
|
|
71
|
-
<img src='https://github.com/revolter.png?size=140'>
|
|
72
|
-
</a>
|
|
73
|
-
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
|
74
|
-
</td>
|
|
75
|
-
<td id='jimmy-dee'>
|
|
76
|
-
<a href='https://github.com/jdee'>
|
|
77
|
-
<img src='https://github.com/jdee.png?size=140'>
|
|
55
|
+
<td id='maksym-grebenets'>
|
|
56
|
+
<a href='https://github.com/mgrebenets'>
|
|
57
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
|
78
58
|
</a>
|
|
79
|
-
<h4 align='center'>
|
|
59
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
|
80
60
|
</td>
|
|
81
61
|
<td id='jérôme-lacoste'>
|
|
82
62
|
<a href='https://github.com/lacostej'>
|
|
@@ -84,25 +64,13 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
84
64
|
</a>
|
|
85
65
|
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
|
86
66
|
</td>
|
|
87
|
-
<td id='matthew-ellis'>
|
|
88
|
-
<a href='https://github.com/matthewellis'>
|
|
89
|
-
<img src='https://github.com/matthewellis.png?size=140'>
|
|
90
|
-
</a>
|
|
91
|
-
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
|
92
|
-
</td>
|
|
93
|
-
<td id='joshua-liebowitz'>
|
|
94
|
-
<a href='https://github.com/taquitos'>
|
|
95
|
-
<img src='https://github.com/taquitos.png?size=140'>
|
|
96
|
-
</a>
|
|
97
|
-
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
|
98
|
-
</td>
|
|
99
67
|
</tr>
|
|
100
68
|
<tr>
|
|
101
|
-
<td id='
|
|
102
|
-
<a href='https://github.com/
|
|
103
|
-
<img src='https://github.com/
|
|
69
|
+
<td id='josh-holtz'>
|
|
70
|
+
<a href='https://github.com/joshdholtz'>
|
|
71
|
+
<img src='https://github.com/joshdholtz.png?size=140'>
|
|
104
72
|
</a>
|
|
105
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
73
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
|
106
74
|
</td>
|
|
107
75
|
<td id='felix-krause'>
|
|
108
76
|
<a href='https://github.com/KrauseFx'>
|
|
@@ -116,37 +84,75 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
116
84
|
</a>
|
|
117
85
|
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
|
118
86
|
</td>
|
|
87
|
+
<td id='helmut-januschka'>
|
|
88
|
+
<a href='https://github.com/hjanuschka'>
|
|
89
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
|
90
|
+
</a>
|
|
91
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
|
92
|
+
</td>
|
|
93
|
+
<td id='matthew-ellis'>
|
|
94
|
+
<a href='https://github.com/matthewellis'>
|
|
95
|
+
<img src='https://github.com/matthewellis.png?size=140'>
|
|
96
|
+
</a>
|
|
97
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
|
98
|
+
</td>
|
|
99
|
+
</tr>
|
|
100
|
+
<tr>
|
|
101
|
+
<td id='andrew-mcburney'>
|
|
102
|
+
<a href='https://github.com/armcburney'>
|
|
103
|
+
<img src='https://github.com/armcburney.png?size=140'>
|
|
104
|
+
</a>
|
|
105
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
|
106
|
+
</td>
|
|
119
107
|
<td id='kohki-miki'>
|
|
120
108
|
<a href='https://github.com/giginet'>
|
|
121
109
|
<img src='https://github.com/giginet.png?size=140'>
|
|
122
110
|
</a>
|
|
123
111
|
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
|
124
112
|
</td>
|
|
125
|
-
<td id='
|
|
126
|
-
<a href='https://github.com/
|
|
127
|
-
<img src='https://github.com/
|
|
113
|
+
<td id='jimmy-dee'>
|
|
114
|
+
<a href='https://github.com/jdee'>
|
|
115
|
+
<img src='https://github.com/jdee.png?size=140'>
|
|
128
116
|
</a>
|
|
129
|
-
<h4 align='center'
|
|
117
|
+
<h4 align='center'>Jimmy Dee</h4>
|
|
118
|
+
</td>
|
|
119
|
+
<td id='aaron-brager'>
|
|
120
|
+
<a href='https://github.com/getaaron'>
|
|
121
|
+
<img src='https://github.com/getaaron.png?size=140'>
|
|
122
|
+
</a>
|
|
123
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
130
124
|
</td>
|
|
131
|
-
</tr>
|
|
132
|
-
<tr>
|
|
133
125
|
<td id='fumiya-nakamura'>
|
|
134
126
|
<a href='https://github.com/nafu'>
|
|
135
127
|
<img src='https://github.com/nafu.png?size=140'>
|
|
136
128
|
</a>
|
|
137
129
|
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
|
138
130
|
</td>
|
|
131
|
+
</tr>
|
|
132
|
+
<tr>
|
|
133
|
+
<td id='joshua-liebowitz'>
|
|
134
|
+
<a href='https://github.com/taquitos'>
|
|
135
|
+
<img src='https://github.com/taquitos.png?size=140'>
|
|
136
|
+
</a>
|
|
137
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
|
138
|
+
</td>
|
|
139
|
+
<td id='iulian-onofrei'>
|
|
140
|
+
<a href='https://github.com/revolter'>
|
|
141
|
+
<img src='https://github.com/revolter.png?size=140'>
|
|
142
|
+
</a>
|
|
143
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
|
144
|
+
</td>
|
|
139
145
|
<td id='danielle-tomlinson'>
|
|
140
146
|
<a href='https://github.com/endocrimes'>
|
|
141
147
|
<img src='https://github.com/endocrimes.png?size=140'>
|
|
142
148
|
</a>
|
|
143
149
|
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
|
144
150
|
</td>
|
|
145
|
-
<td id='
|
|
146
|
-
<a href='https://github.com/
|
|
147
|
-
<img src='https://github.com/
|
|
151
|
+
<td id='manu-wallner'>
|
|
152
|
+
<a href='https://github.com/milch'>
|
|
153
|
+
<img src='https://github.com/milch.png?size=140'>
|
|
148
154
|
</a>
|
|
149
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
155
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
150
156
|
</td>
|
|
151
157
|
<td id='luka-mirosevic'>
|
|
152
158
|
<a href='https://github.com/lmirosevic'>
|
|
@@ -154,12 +160,6 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
154
160
|
</a>
|
|
155
161
|
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
156
162
|
</td>
|
|
157
|
-
<td id='andrew-mcburney'>
|
|
158
|
-
<a href='https://github.com/armcburney'>
|
|
159
|
-
<img src='https://github.com/armcburney.png?size=140'>
|
|
160
|
-
</a>
|
|
161
|
-
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
|
162
|
-
</td>
|
|
163
163
|
</tr>
|
|
164
164
|
</table>
|
|
165
165
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -17,12 +17,16 @@ module Fastlane
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
class GradleAction < Action
|
|
20
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
|
20
21
|
def self.run(params)
|
|
21
22
|
task = params[:task]
|
|
22
23
|
flavor = params[:flavor]
|
|
23
24
|
build_type = params[:build_type]
|
|
25
|
+
tasks = params[:tasks]
|
|
24
26
|
|
|
25
|
-
gradle_task =
|
|
27
|
+
gradle_task = gradle_task(task, flavor, build_type, tasks)
|
|
28
|
+
|
|
29
|
+
UI.user_error!('Please pass a gradle task or tasks') if gradle_task.empty?
|
|
26
30
|
|
|
27
31
|
project_dir = params[:project_dir]
|
|
28
32
|
|
|
@@ -101,6 +105,28 @@ module Fastlane
|
|
|
101
105
|
|
|
102
106
|
return result
|
|
103
107
|
end
|
|
108
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
|
109
|
+
|
|
110
|
+
def self.gradle_task(task, flavor, build_type, tasks)
|
|
111
|
+
gradle_task = [task, flavor, build_type].join
|
|
112
|
+
|
|
113
|
+
if gradle_task.empty? && !tasks.nil?
|
|
114
|
+
gradle_task = tasks.join(' ')
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
gradle_task
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def self.step_text(params)
|
|
121
|
+
task = params[:task]
|
|
122
|
+
flavor = params[:flavor]
|
|
123
|
+
build_type = params[:build_type]
|
|
124
|
+
tasks = params[:tasks]
|
|
125
|
+
|
|
126
|
+
gradle_task = gradle_task(task, flavor, build_type, tasks)
|
|
127
|
+
|
|
128
|
+
return gradle_task
|
|
129
|
+
end
|
|
104
130
|
|
|
105
131
|
#####################################################
|
|
106
132
|
# @!group Documentation
|
|
@@ -119,7 +145,8 @@ module Fastlane
|
|
|
119
145
|
FastlaneCore::ConfigItem.new(key: :task,
|
|
120
146
|
env_name: 'FL_GRADLE_TASK',
|
|
121
147
|
description: 'The gradle task you want to execute, e.g. `assemble`, `bundle` or `test`. For tasks such as `assembleMyFlavorRelease` you should use gradle(task: \'assemble\', flavor: \'Myflavor\', build_type: \'Release\')',
|
|
122
|
-
|
|
148
|
+
conflicting_options: [:tasks],
|
|
149
|
+
optional: true,
|
|
123
150
|
is_string: true),
|
|
124
151
|
FastlaneCore::ConfigItem.new(key: :flavor,
|
|
125
152
|
env_name: 'FL_GRADLE_FLAVOR',
|
|
@@ -131,6 +158,13 @@ module Fastlane
|
|
|
131
158
|
description: 'The build type that you want the task for, e.g. `Release`. Useful for some tasks such as `assemble`',
|
|
132
159
|
optional: true,
|
|
133
160
|
is_string: true),
|
|
161
|
+
FastlaneCore::ConfigItem.new(key: :tasks,
|
|
162
|
+
type: Array,
|
|
163
|
+
env_name: 'FL_GRADLE_TASKS',
|
|
164
|
+
description: 'The multiple gradle tasks that you want to execute, e.g. `[assembleDebug, bundleDebug]`',
|
|
165
|
+
conflicting_options: [:task],
|
|
166
|
+
optional: true,
|
|
167
|
+
is_string: false),
|
|
134
168
|
FastlaneCore::ConfigItem.new(key: :flags,
|
|
135
169
|
env_name: 'FL_GRADLE_FLAGS',
|
|
136
170
|
description: 'All parameter flags you want to pass to the gradle command, e.g. `--exitcode --xml file.xml`',
|
|
@@ -219,6 +253,13 @@ module Fastlane
|
|
|
219
253
|
)
|
|
220
254
|
```
|
|
221
255
|
|
|
256
|
+
You can pass multiple gradle tasks:
|
|
257
|
+
```ruby
|
|
258
|
+
gradle(
|
|
259
|
+
tasks: ["assembleDebug", "bundleDebug"]
|
|
260
|
+
)
|
|
261
|
+
```
|
|
262
|
+
|
|
222
263
|
You can pass properties to gradle:
|
|
223
264
|
```ruby
|
|
224
265
|
gradle(
|
|
@@ -10,17 +10,10 @@ module Fastlane
|
|
|
10
10
|
class RunTestsAction < Action
|
|
11
11
|
def self.run(values)
|
|
12
12
|
require 'scan'
|
|
13
|
-
|
|
13
|
+
manager = Scan::Manager.new
|
|
14
14
|
|
|
15
15
|
begin
|
|
16
|
-
|
|
17
|
-
Scan.config = values # we set this here to auto-detect missing values, which we need later on
|
|
18
|
-
unless values[:derived_data_path].to_s.empty?
|
|
19
|
-
plist_files_before = test_summary_filenames(values[:derived_data_path])
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
values[:destination] = destination # restore destination value
|
|
23
|
-
Scan::Manager.new.work(values)
|
|
16
|
+
manager.work(values)
|
|
24
17
|
|
|
25
18
|
zip_build_products_path = Scan.cache[:zip_build_products_path]
|
|
26
19
|
Actions.lane_context[SharedValues::SCAN_ZIP_BUILD_PRODUCTS_PATH] = zip_build_products_path if zip_build_products_path
|
|
@@ -37,8 +30,10 @@ module Fastlane
|
|
|
37
30
|
end
|
|
38
31
|
ensure
|
|
39
32
|
unless values[:derived_data_path].to_s.empty?
|
|
33
|
+
plist_files_before = manager.plist_files_before || []
|
|
34
|
+
|
|
40
35
|
Actions.lane_context[SharedValues::SCAN_DERIVED_DATA_PATH] = values[:derived_data_path]
|
|
41
|
-
plist_files_after = test_summary_filenames(values[:derived_data_path])
|
|
36
|
+
plist_files_after = manager.test_summary_filenames(values[:derived_data_path])
|
|
42
37
|
all_test_summaries = (plist_files_after - plist_files_before)
|
|
43
38
|
Actions.lane_context[SharedValues::SCAN_GENERATED_PLIST_FILES] = all_test_summaries
|
|
44
39
|
Actions.lane_context[SharedValues::SCAN_GENERATED_PLIST_FILE] = all_test_summaries.last
|
|
@@ -85,18 +80,6 @@ module Fastlane
|
|
|
85
80
|
|
|
86
81
|
private_class_method
|
|
87
82
|
|
|
88
|
-
def self.test_summary_filenames(derived_data_path)
|
|
89
|
-
files = []
|
|
90
|
-
|
|
91
|
-
# Xcode < 10
|
|
92
|
-
files += Dir["#{derived_data_path}/**/Logs/Test/*TestSummaries.plist"]
|
|
93
|
-
|
|
94
|
-
# Xcode 10
|
|
95
|
-
files += Dir["#{derived_data_path}/**/Logs/Test/*.xcresult/TestSummaries.plist"]
|
|
96
|
-
|
|
97
|
-
return files
|
|
98
|
-
end
|
|
99
|
-
|
|
100
83
|
def self.example_code
|
|
101
84
|
[
|
|
102
85
|
'run_tests',
|
|
@@ -225,27 +225,32 @@ module Fastlane
|
|
|
225
225
|
|
|
226
226
|
begin
|
|
227
227
|
Dir.chdir(custom_dir) do # go up from the fastlane folder, to the project folder
|
|
228
|
-
#
|
|
228
|
+
# Removing step_name before its parsed into configurations
|
|
229
|
+
args = arguments.kind_of?(Array) && arguments.first.kind_of?(Hash) ? arguments.first : {}
|
|
230
|
+
step_name = args.delete(:step_name)
|
|
231
|
+
|
|
232
|
+
# arguments is an array by default, containing an hash with the actual parameters
|
|
233
|
+
# Since we usually just need the passed hash, we'll just use the first object if there is only one
|
|
234
|
+
if arguments.count == 0
|
|
235
|
+
configurations = ConfigurationHelper.parse(class_ref, {}) # no parameters => empty hash
|
|
236
|
+
elsif arguments.count == 1 && arguments.first.kind_of?(Hash)
|
|
237
|
+
configurations = ConfigurationHelper.parse(class_ref, arguments.first) # Correct configuration passed
|
|
238
|
+
elsif !class_ref.available_options
|
|
239
|
+
# This action does not use the new action format
|
|
240
|
+
# Just passing the arguments to this method
|
|
241
|
+
configurations = arguments
|
|
242
|
+
else
|
|
243
|
+
UI.user_error!("You have to call the integration like `#{method_sym}(key: \"value\")`. Run `fastlane action #{method_sym}` for all available keys. Please check out the current documentation on GitHub.")
|
|
244
|
+
end
|
|
229
245
|
|
|
246
|
+
# If another action is calling this action, we shouldn't show it in the summary
|
|
247
|
+
# A nil value for action_name will hide it from the summary
|
|
230
248
|
unless from_action
|
|
231
|
-
|
|
232
|
-
action_name
|
|
233
|
-
args.delete(:step_name)
|
|
249
|
+
action_name = step_name
|
|
250
|
+
action_name ||= class_ref.method(:step_text).arity == 1 ? class_ref.step_text(configurations) : class_ref.step_text
|
|
234
251
|
end
|
|
235
|
-
Actions.execute_action(action_name) do
|
|
236
|
-
# arguments is an array by default, containing an hash with the actual parameters
|
|
237
|
-
# Since we usually just need the passed hash, we'll just use the first object if there is only one
|
|
238
|
-
if arguments.count == 0
|
|
239
|
-
arguments = ConfigurationHelper.parse(class_ref, {}) # no parameters => empty hash
|
|
240
|
-
elsif arguments.count == 1 && arguments.first.kind_of?(Hash)
|
|
241
|
-
arguments = ConfigurationHelper.parse(class_ref, arguments.first) # Correct configuration passed
|
|
242
|
-
elsif !class_ref.available_options
|
|
243
|
-
# This action does not use the new action format
|
|
244
|
-
# Just passing the arguments to this method
|
|
245
|
-
else
|
|
246
|
-
UI.user_error!("You have to call the integration like `#{method_sym}(key: \"value\")`. Run `fastlane action #{method_sym}` for all available keys. Please check out the current documentation on GitHub.")
|
|
247
|
-
end
|
|
248
252
|
|
|
253
|
+
Actions.execute_action(action_name) do
|
|
249
254
|
if Fastlane::Actions.is_deprecated?(class_ref)
|
|
250
255
|
puts("==========================================".deprecated)
|
|
251
256
|
puts("This action (#{method_sym}) is deprecated".deprecated)
|
|
@@ -253,7 +258,7 @@ module Fastlane
|
|
|
253
258
|
puts("==========================================\n".deprecated)
|
|
254
259
|
end
|
|
255
260
|
class_ref.runner = self # needed to call another action from an action
|
|
256
|
-
return class_ref.run(
|
|
261
|
+
return class_ref.run(configurations)
|
|
257
262
|
end
|
|
258
263
|
end
|
|
259
264
|
rescue Interrupt => e
|
|
@@ -829,6 +829,7 @@ func buildAndUploadToAppetize(xcodebuild: [String : Any] = [:],
|
|
|
829
829
|
- task: The gradle task you want to execute, e.g. `assemble`, `bundle` or `test`. For tasks such as `assembleMyFlavorRelease` you should use gradle(task: 'assemble', flavor: 'Myflavor', build_type: 'Release')
|
|
830
830
|
- flavor: The flavor that you want the task for, e.g. `MyFlavor`. If you are running the `assemble` task in a multi-flavor project, and you rely on Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] then you must specify a flavor here or else this value will be undefined
|
|
831
831
|
- buildType: The build type that you want the task for, e.g. `Release`. Useful for some tasks such as `assemble`
|
|
832
|
+
- tasks: The multiple gradle tasks that you want to execute, e.g. `[assembleDebug, bundleDebug]`
|
|
832
833
|
- flags: All parameter flags you want to pass to the gradle command, e.g. `--exitcode --xml file.xml`
|
|
833
834
|
- projectDir: The root directory of the gradle project
|
|
834
835
|
- gradlePath: The path to your `gradlew`. If you specify a relative path, it is assumed to be relative to the `project_dir`
|
|
@@ -842,9 +843,10 @@ func buildAndUploadToAppetize(xcodebuild: [String : Any] = [:],
|
|
|
842
843
|
|
|
843
844
|
Run `./gradlew tasks` to get a list of all available gradle tasks for your project
|
|
844
845
|
*/
|
|
845
|
-
func buildAndroidApp(task: String,
|
|
846
|
+
func buildAndroidApp(task: String? = nil,
|
|
846
847
|
flavor: String? = nil,
|
|
847
848
|
buildType: String? = nil,
|
|
849
|
+
tasks: [String]? = nil,
|
|
848
850
|
flags: String? = nil,
|
|
849
851
|
projectDir: String = ".",
|
|
850
852
|
gradlePath: String? = nil,
|
|
@@ -856,6 +858,7 @@ func buildAndroidApp(task: String,
|
|
|
856
858
|
let command = RubyCommand(commandID: "", methodName: "build_android_app", className: nil, args: [RubyCommand.Argument(name: "task", value: task),
|
|
857
859
|
RubyCommand.Argument(name: "flavor", value: flavor),
|
|
858
860
|
RubyCommand.Argument(name: "build_type", value: buildType),
|
|
861
|
+
RubyCommand.Argument(name: "tasks", value: tasks),
|
|
859
862
|
RubyCommand.Argument(name: "flags", value: flags),
|
|
860
863
|
RubyCommand.Argument(name: "project_dir", value: projectDir),
|
|
861
864
|
RubyCommand.Argument(name: "gradle_path", value: gradlePath),
|
|
@@ -2583,7 +2586,7 @@ func downloadDsyms(username: String,
|
|
|
2583
2586
|
func downloadFromPlayStore(packageName: String,
|
|
2584
2587
|
versionName: String? = nil,
|
|
2585
2588
|
track: String = "production",
|
|
2586
|
-
metadataPath: String
|
|
2589
|
+
metadataPath: String = "./metadata",
|
|
2587
2590
|
key: String? = nil,
|
|
2588
2591
|
issuer: String? = nil,
|
|
2589
2592
|
jsonKey: String? = nil,
|
|
@@ -3425,6 +3428,7 @@ func googlePlayTrackVersionCodes(packageName: String,
|
|
|
3425
3428
|
- task: The gradle task you want to execute, e.g. `assemble`, `bundle` or `test`. For tasks such as `assembleMyFlavorRelease` you should use gradle(task: 'assemble', flavor: 'Myflavor', build_type: 'Release')
|
|
3426
3429
|
- flavor: The flavor that you want the task for, e.g. `MyFlavor`. If you are running the `assemble` task in a multi-flavor project, and you rely on Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] then you must specify a flavor here or else this value will be undefined
|
|
3427
3430
|
- buildType: The build type that you want the task for, e.g. `Release`. Useful for some tasks such as `assemble`
|
|
3431
|
+
- tasks: The multiple gradle tasks that you want to execute, e.g. `[assembleDebug, bundleDebug]`
|
|
3428
3432
|
- flags: All parameter flags you want to pass to the gradle command, e.g. `--exitcode --xml file.xml`
|
|
3429
3433
|
- projectDir: The root directory of the gradle project
|
|
3430
3434
|
- gradlePath: The path to your `gradlew`. If you specify a relative path, it is assumed to be relative to the `project_dir`
|
|
@@ -3438,9 +3442,10 @@ func googlePlayTrackVersionCodes(packageName: String,
|
|
|
3438
3442
|
|
|
3439
3443
|
Run `./gradlew tasks` to get a list of all available gradle tasks for your project
|
|
3440
3444
|
*/
|
|
3441
|
-
func gradle(task: String,
|
|
3445
|
+
func gradle(task: String? = nil,
|
|
3442
3446
|
flavor: String? = nil,
|
|
3443
3447
|
buildType: String? = nil,
|
|
3448
|
+
tasks: [String]? = nil,
|
|
3444
3449
|
flags: String? = nil,
|
|
3445
3450
|
projectDir: String = ".",
|
|
3446
3451
|
gradlePath: String? = nil,
|
|
@@ -3452,6 +3457,7 @@ func gradle(task: String,
|
|
|
3452
3457
|
let command = RubyCommand(commandID: "", methodName: "gradle", className: nil, args: [RubyCommand.Argument(name: "task", value: task),
|
|
3453
3458
|
RubyCommand.Argument(name: "flavor", value: flavor),
|
|
3454
3459
|
RubyCommand.Argument(name: "build_type", value: buildType),
|
|
3460
|
+
RubyCommand.Argument(name: "tasks", value: tasks),
|
|
3455
3461
|
RubyCommand.Argument(name: "flags", value: flags),
|
|
3456
3462
|
RubyCommand.Argument(name: "project_dir", value: projectDir),
|
|
3457
3463
|
RubyCommand.Argument(name: "gradle_path", value: gradlePath),
|
|
@@ -5398,6 +5404,8 @@ func rubyVersion() {
|
|
|
5398
5404
|
- configuration: The configuration to use when building the app. Defaults to 'Release'
|
|
5399
5405
|
- xcargs: Pass additional arguments to xcodebuild. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++"
|
|
5400
5406
|
- xcconfig: Use an extra XCCONFIG file to build your app
|
|
5407
|
+
- appName: App name to use in slack message and logfile name
|
|
5408
|
+
- deploymentTargetVersion: Target version of the app being build or tested. Used to filter out simulator version
|
|
5401
5409
|
- slackUrl: Create an Incoming WebHook for your Slack group to post results there
|
|
5402
5410
|
- slackChannel: #channel or @username
|
|
5403
5411
|
- slackMessage: The message included with each message posted to slack
|
|
@@ -5456,6 +5464,8 @@ func runTests(workspace: String? = nil,
|
|
|
5456
5464
|
configuration: String? = nil,
|
|
5457
5465
|
xcargs: String? = nil,
|
|
5458
5466
|
xcconfig: String? = nil,
|
|
5467
|
+
appName: String? = nil,
|
|
5468
|
+
deploymentTargetVersion: String? = nil,
|
|
5459
5469
|
slackUrl: String? = nil,
|
|
5460
5470
|
slackChannel: String? = nil,
|
|
5461
5471
|
slackMessage: String? = nil,
|
|
@@ -5511,6 +5521,8 @@ func runTests(workspace: String? = nil,
|
|
|
5511
5521
|
RubyCommand.Argument(name: "configuration", value: configuration),
|
|
5512
5522
|
RubyCommand.Argument(name: "xcargs", value: xcargs),
|
|
5513
5523
|
RubyCommand.Argument(name: "xcconfig", value: xcconfig),
|
|
5524
|
+
RubyCommand.Argument(name: "app_name", value: appName),
|
|
5525
|
+
RubyCommand.Argument(name: "deployment_target_version", value: deploymentTargetVersion),
|
|
5514
5526
|
RubyCommand.Argument(name: "slack_url", value: slackUrl),
|
|
5515
5527
|
RubyCommand.Argument(name: "slack_channel", value: slackChannel),
|
|
5516
5528
|
RubyCommand.Argument(name: "slack_message", value: slackMessage),
|
|
@@ -5647,6 +5659,8 @@ func say(text: Any,
|
|
|
5647
5659
|
- configuration: The configuration to use when building the app. Defaults to 'Release'
|
|
5648
5660
|
- xcargs: Pass additional arguments to xcodebuild. Be sure to quote the setting names and values e.g. OTHER_LDFLAGS="-ObjC -lstdc++"
|
|
5649
5661
|
- xcconfig: Use an extra XCCONFIG file to build your app
|
|
5662
|
+
- appName: App name to use in slack message and logfile name
|
|
5663
|
+
- deploymentTargetVersion: Target version of the app being build or tested. Used to filter out simulator version
|
|
5650
5664
|
- slackUrl: Create an Incoming WebHook for your Slack group to post results there
|
|
5651
5665
|
- slackChannel: #channel or @username
|
|
5652
5666
|
- slackMessage: The message included with each message posted to slack
|
|
@@ -5705,6 +5719,8 @@ func scan(workspace: Any? = scanfile.workspace,
|
|
|
5705
5719
|
configuration: Any? = scanfile.configuration,
|
|
5706
5720
|
xcargs: Any? = scanfile.xcargs,
|
|
5707
5721
|
xcconfig: Any? = scanfile.xcconfig,
|
|
5722
|
+
appName: Any? = scanfile.appName,
|
|
5723
|
+
deploymentTargetVersion: Any? = scanfile.deploymentTargetVersion,
|
|
5708
5724
|
slackUrl: Any? = scanfile.slackUrl,
|
|
5709
5725
|
slackChannel: Any? = scanfile.slackChannel,
|
|
5710
5726
|
slackMessage: Any? = scanfile.slackMessage,
|
|
@@ -5760,6 +5776,8 @@ func scan(workspace: Any? = scanfile.workspace,
|
|
|
5760
5776
|
RubyCommand.Argument(name: "configuration", value: configuration),
|
|
5761
5777
|
RubyCommand.Argument(name: "xcargs", value: xcargs),
|
|
5762
5778
|
RubyCommand.Argument(name: "xcconfig", value: xcconfig),
|
|
5779
|
+
RubyCommand.Argument(name: "app_name", value: appName),
|
|
5780
|
+
RubyCommand.Argument(name: "deployment_target_version", value: deploymentTargetVersion),
|
|
5763
5781
|
RubyCommand.Argument(name: "slack_url", value: slackUrl),
|
|
5764
5782
|
RubyCommand.Argument(name: "slack_channel", value: slackChannel),
|
|
5765
5783
|
RubyCommand.Argument(name: "slack_message", value: slackMessage),
|
|
@@ -6738,7 +6756,7 @@ func supply(packageName: String,
|
|
|
6738
6756
|
releaseStatus: String = "completed",
|
|
6739
6757
|
track: String = "production",
|
|
6740
6758
|
rollout: String? = nil,
|
|
6741
|
-
metadataPath: String
|
|
6759
|
+
metadataPath: String = "./metadata",
|
|
6742
6760
|
key: String? = nil,
|
|
6743
6761
|
issuer: String? = nil,
|
|
6744
6762
|
jsonKey: String? = nil,
|
|
@@ -7766,7 +7784,7 @@ func uploadToPlayStore(packageName: String,
|
|
|
7766
7784
|
releaseStatus: String = "completed",
|
|
7767
7785
|
track: String = "production",
|
|
7768
7786
|
rollout: String? = nil,
|
|
7769
|
-
metadataPath: String
|
|
7787
|
+
metadataPath: String = "./metadata",
|
|
7770
7788
|
key: String? = nil,
|
|
7771
7789
|
issuer: String? = nil,
|
|
7772
7790
|
jsonKey: String? = nil,
|
|
@@ -8265,7 +8283,7 @@ func xcov(workspace: String? = nil,
|
|
|
8265
8283
|
coverallsServiceJobId: String? = nil,
|
|
8266
8284
|
coverallsRepoToken: String? = nil,
|
|
8267
8285
|
xcconfig: String? = nil,
|
|
8268
|
-
ideFoundationPath: String = "/Applications/Xcode-11.
|
|
8286
|
+
ideFoundationPath: String = "/Applications/Xcode-11.2.1.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
|
|
8269
8287
|
legacySupport: Bool = false) {
|
|
8270
8288
|
let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
|
|
8271
8289
|
RubyCommand.Argument(name: "project", value: project),
|
|
@@ -8410,4 +8428,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
|
|
|
8410
8428
|
|
|
8411
8429
|
// Please don't remove the lines below
|
|
8412
8430
|
// They are used to detect outdated files
|
|
8413
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
8431
|
+
// FastlaneRunnerAPIVersion [0.9.68]
|
|
Binary file
|
|
@@ -129,6 +129,12 @@ protocol ScanfileProtocol: class {
|
|
|
129
129
|
/// Use an extra XCCONFIG file to build your app
|
|
130
130
|
var xcconfig: String? { get }
|
|
131
131
|
|
|
132
|
+
/// App name to use in slack message and logfile name
|
|
133
|
+
var appName: String? { get }
|
|
134
|
+
|
|
135
|
+
/// Target version of the app being build or tested. Used to filter out simulator version
|
|
136
|
+
var deploymentTargetVersion: String? { get }
|
|
137
|
+
|
|
132
138
|
/// Create an Incoming WebHook for your Slack group to post results there
|
|
133
139
|
var slackUrl: String? { get }
|
|
134
140
|
|
|
@@ -210,6 +216,8 @@ extension ScanfileProtocol {
|
|
|
210
216
|
var configuration: String? { return nil }
|
|
211
217
|
var xcargs: String? { return nil }
|
|
212
218
|
var xcconfig: String? { return nil }
|
|
219
|
+
var appName: String? { return nil }
|
|
220
|
+
var deploymentTargetVersion: String? { return nil }
|
|
213
221
|
var slackUrl: String? { return nil }
|
|
214
222
|
var slackChannel: String? { return nil }
|
|
215
223
|
var slackMessage: String? { return nil }
|
|
@@ -226,4 +234,4 @@ extension ScanfileProtocol {
|
|
|
226
234
|
|
|
227
235
|
// Please don't remove the lines below
|
|
228
236
|
// They are used to detect outdated files
|
|
229
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
237
|
+
// FastlaneRunnerAPIVersion [0.9.24]
|
|
Binary file
|
data/gym/lib/gym/runner.rb
CHANGED
|
@@ -160,31 +160,45 @@ module Gym
|
|
|
160
160
|
dwarfdump_command << "dwarfdump"
|
|
161
161
|
dwarfdump_command << "--uuid #{dsym.shellescape}"
|
|
162
162
|
|
|
163
|
+
# Extract uuids
|
|
163
164
|
dwarfdump_result = Helper.backticks(dwarfdump_command.join(" "), print: false)
|
|
164
165
|
architecture_infos = dwarfdump_result.split("\n")
|
|
165
|
-
|
|
166
|
-
info_array = info.split(" ")
|
|
166
|
+
architecture_infos.each do |info|
|
|
167
|
+
info_array = info.split(" ", 4)
|
|
167
168
|
uuid = info_array[1]
|
|
169
|
+
dwarf_file_path = info_array[3]
|
|
168
170
|
|
|
169
171
|
if uuid.nil? || !uuid.match(uuid_regex)
|
|
170
|
-
|
|
171
|
-
else
|
|
172
|
-
uuid
|
|
172
|
+
next
|
|
173
173
|
end
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
architecture_uuids = architecture_uuids.reject(&:nil?)
|
|
177
|
-
|
|
178
|
-
symbol_map_paths = architecture_uuids.map do |uuid|
|
|
179
|
-
"#{bcsymbolmaps_directory.shellescape}/#{uuid}.bcsymbolmap"
|
|
180
|
-
end
|
|
181
174
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
175
|
+
# Find bcsymbolmap file to be used:
|
|
176
|
+
# - if a <uuid>.plist file exists, we will extract uuid of bcsymbolmap and use it
|
|
177
|
+
# - if a <uuid>.bcsymbolmap file exists, we will use it
|
|
178
|
+
# - otherwise let dsymutil figure it out
|
|
179
|
+
symbol_map_path = nil
|
|
180
|
+
split_dwarf_file_path = File.split(dwarf_file_path)
|
|
181
|
+
dsym_plist_file_path = File.join(split_dwarf_file_path[0], "..", "#{uuid}.plist")
|
|
182
|
+
if File.exist?(dsym_plist_file_path)
|
|
183
|
+
dsym_plist = Plist.parse_xml(dsym_plist_file_path)
|
|
184
|
+
original_uuid = dsym_plist['DBGOriginalUUID']
|
|
185
|
+
possible_symbol_map_path = "#{bcsymbolmaps_directory}/#{original_uuid}.bcsymbolmap"
|
|
186
|
+
if File.exist?(possible_symbol_map_path)
|
|
187
|
+
symbol_map_path = possible_symbol_map_path.shellescape
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
if symbol_map_path.nil?
|
|
191
|
+
possible_symbol_map_path = File.join(bcsymbolmaps_directory, "#{uuid}.bcsymbolmap")
|
|
192
|
+
if File.exist?(possible_symbol_map_path)
|
|
193
|
+
symbol_map_path = possible_symbol_map_path.shellescape
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
if symbol_map_path.nil?
|
|
197
|
+
symbol_map_path = bcsymbolmaps_directory.shellescape
|
|
198
|
+
end
|
|
185
199
|
command = []
|
|
186
200
|
command << "dsymutil"
|
|
187
|
-
command << "--symbol-map #{
|
|
201
|
+
command << "--symbol-map #{symbol_map_path}"
|
|
188
202
|
command << dsym.shellescape
|
|
189
203
|
Helper.backticks(command.join(" "), print: !Gym.config[:silent])
|
|
190
204
|
end
|
|
Binary file
|
|
@@ -245,12 +245,21 @@ module Pilot
|
|
|
245
245
|
end
|
|
246
246
|
|
|
247
247
|
def self.truncate_changelog(changelog)
|
|
248
|
-
|
|
249
|
-
if changelog
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
248
|
+
max_changelog_bytes = 4000
|
|
249
|
+
if changelog
|
|
250
|
+
changelog_bytes = changelog.unpack('C*').length
|
|
251
|
+
if changelog_bytes > max_changelog_bytes
|
|
252
|
+
UI.important("Changelog will be truncated since it exceeds Apple's #{max_changelog_bytes}-byte limit. It currently contains #{changelog_bytes} bytes.")
|
|
253
|
+
new_changelog = ''
|
|
254
|
+
new_changelog_bytes = 0
|
|
255
|
+
max_changelog_bytes -= 3 # Will append '...' later.
|
|
256
|
+
changelog.chars.each do |char|
|
|
257
|
+
new_changelog_bytes += char.unpack('C*').length
|
|
258
|
+
break if new_changelog_bytes >= max_changelog_bytes
|
|
259
|
+
new_changelog += char
|
|
260
|
+
end
|
|
261
|
+
changelog = new_changelog + '...'
|
|
262
|
+
end
|
|
254
263
|
end
|
|
255
264
|
changelog
|
|
256
265
|
end
|
|
@@ -108,7 +108,7 @@ module Scan
|
|
|
108
108
|
def self.detect_simulator(devices, requested_os_type, deployment_target_key, default_device_name, simulator_type_descriptor)
|
|
109
109
|
require 'set'
|
|
110
110
|
|
|
111
|
-
deployment_target_version =
|
|
111
|
+
deployment_target_version = get_deployment_target_version(deployment_target_key)
|
|
112
112
|
|
|
113
113
|
simulators = filter_simulators(
|
|
114
114
|
FastlaneCore::DeviceManager.simulators(requested_os_type).tap do |array|
|
|
@@ -215,5 +215,10 @@ module Scan
|
|
|
215
215
|
Scan.config[:destination] = min_xcode8? ? ["platform=macOS"] : ["platform=OS X"]
|
|
216
216
|
end
|
|
217
217
|
end
|
|
218
|
+
|
|
219
|
+
# get deployment target version
|
|
220
|
+
def self.get_deployment_target_version(deployment_target_key)
|
|
221
|
+
Scan.config[:deployment_target_version] || Scan.project.build_settings(key: deployment_target_key) || '0'
|
|
222
|
+
end
|
|
218
223
|
end
|
|
219
224
|
end
|
data/scan/lib/scan/manager.rb
CHANGED
|
@@ -4,8 +4,13 @@ require_relative 'runner'
|
|
|
4
4
|
|
|
5
5
|
module Scan
|
|
6
6
|
class Manager
|
|
7
|
+
attr_accessor :plist_files_before
|
|
8
|
+
|
|
7
9
|
def work(options)
|
|
8
|
-
Scan.config = options
|
|
10
|
+
Scan.config = options # we set this here to auto-detect missing values, which we need later on
|
|
11
|
+
unless options[:derived_data_path].to_s.empty?
|
|
12
|
+
self.plist_files_before = test_summary_filenames(Scan.config[:derived_data_path])
|
|
13
|
+
end
|
|
9
14
|
|
|
10
15
|
# Also print out the path to the used Xcode installation
|
|
11
16
|
# We go 2 folders up, to not show "Contents/Developer/"
|
|
@@ -17,5 +22,17 @@ module Scan
|
|
|
17
22
|
|
|
18
23
|
return Runner.new.run
|
|
19
24
|
end
|
|
25
|
+
|
|
26
|
+
def test_summary_filenames(derived_data_path)
|
|
27
|
+
files = []
|
|
28
|
+
|
|
29
|
+
# Xcode < 10
|
|
30
|
+
files += Dir["#{derived_data_path}/**/Logs/Test/*TestSummaries.plist"]
|
|
31
|
+
|
|
32
|
+
# Xcode 10
|
|
33
|
+
files += Dir["#{derived_data_path}/**/Logs/Test/*.xcresult/TestSummaries.plist"]
|
|
34
|
+
|
|
35
|
+
return files
|
|
36
|
+
end
|
|
20
37
|
end
|
|
21
38
|
end
|
data/scan/lib/scan/options.rb
CHANGED
|
@@ -316,6 +316,18 @@ module Scan
|
|
|
316
316
|
UI.user_error!("File not found at path '#{File.expand_path(value)}'") unless File.exist?(value)
|
|
317
317
|
end),
|
|
318
318
|
|
|
319
|
+
# build settings
|
|
320
|
+
FastlaneCore::ConfigItem.new(key: :app_name,
|
|
321
|
+
env_name: "SCAN_APP_NAME",
|
|
322
|
+
optional: true,
|
|
323
|
+
description: "App name to use in slack message and logfile name",
|
|
324
|
+
is_string: true),
|
|
325
|
+
FastlaneCore::ConfigItem.new(key: :deployment_target_version,
|
|
326
|
+
env_name: "SCAN_DEPLOYMENT_TARGET_VERSION",
|
|
327
|
+
optional: true,
|
|
328
|
+
description: "Target version of the app being build or tested. Used to filter out simulator version",
|
|
329
|
+
is_string: true),
|
|
330
|
+
|
|
319
331
|
# slack
|
|
320
332
|
FastlaneCore::ConfigItem.new(key: :slack_url,
|
|
321
333
|
short_option: "-i",
|
|
@@ -44,7 +44,7 @@ module Scan
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
Fastlane::Actions::SlackAction.run({
|
|
47
|
-
message: "#{Scan.project.app_name} Tests:\n#{Scan.config[:slack_message]}",
|
|
47
|
+
message: "#{Scan.config[:app_name] || Scan.project.app_name} Tests:\n#{Scan.config[:slack_message]}",
|
|
48
48
|
channel: channel,
|
|
49
49
|
slack_url: Scan.config[:slack_url].to_s,
|
|
50
50
|
success: results[:build_errors].to_i == 0 && results[:failures].to_i == 0,
|
|
@@ -120,7 +120,7 @@ module Scan
|
|
|
120
120
|
|
|
121
121
|
# Store the raw file
|
|
122
122
|
def xcodebuild_log_path
|
|
123
|
-
file_name = "#{Scan.project.app_name}-#{Scan.config[:scheme]}.log"
|
|
123
|
+
file_name = "#{Scan.config[:app_name] || Scan.project.app_name}-#{Scan.config[:scheme]}.log"
|
|
124
124
|
containing = File.expand_path(Scan.config[:buildlog_path])
|
|
125
125
|
FileUtils.mkdir_p(containing)
|
|
126
126
|
|
|
Binary file
|
|
Binary file
|
|
@@ -105,17 +105,6 @@ module Spaceship
|
|
|
105
105
|
end
|
|
106
106
|
end
|
|
107
107
|
|
|
108
|
-
# find a specific product
|
|
109
|
-
# @param product_id (String) Product Id
|
|
110
|
-
def find(product_id)
|
|
111
|
-
all.each do |product|
|
|
112
|
-
if product.product_id == product_id
|
|
113
|
-
return product
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
return nil
|
|
117
|
-
end
|
|
118
|
-
|
|
119
108
|
# return all available In-App-Purchase's of current app
|
|
120
109
|
# this is not paged inside iTC-API so if you have a lot if IAP's (2k+)
|
|
121
110
|
# it might take some time to load, same as it takes when you load the list via App Store Connect
|
|
@@ -132,6 +121,17 @@ module Spaceship
|
|
|
132
121
|
return_iaps
|
|
133
122
|
end
|
|
134
123
|
|
|
124
|
+
# find a specific product
|
|
125
|
+
# @param product_id (String) Product Id
|
|
126
|
+
def find(product_id)
|
|
127
|
+
all.each do |product|
|
|
128
|
+
if product.product_id == product_id
|
|
129
|
+
return product
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
return nil
|
|
133
|
+
end
|
|
134
|
+
|
|
135
135
|
private
|
|
136
136
|
|
|
137
137
|
def find_product_with_retries(product_id, max_tries)
|
|
@@ -80,7 +80,9 @@ module Spaceship
|
|
|
80
80
|
language = localized_version["value"]["localeCode"]
|
|
81
81
|
parsed_versions[language.to_sym] = {
|
|
82
82
|
name: localized_version["value"]["name"]["value"],
|
|
83
|
-
description: localized_version["value"]["description"]["value"]
|
|
83
|
+
description: localized_version["value"]["description"]["value"],
|
|
84
|
+
id: localized_version["value"]["id"],
|
|
85
|
+
status: localized_version["value"]["status"]
|
|
84
86
|
}
|
|
85
87
|
end
|
|
86
88
|
return parsed_versions
|
|
@@ -98,7 +100,8 @@ module Spaceship
|
|
|
98
100
|
"value" => {
|
|
99
101
|
"name" => { "value" => current_version[:name] },
|
|
100
102
|
"description" => { "value" => current_version[:description] },
|
|
101
|
-
"localeCode" =>
|
|
103
|
+
"localeCode" => language.to_s,
|
|
104
|
+
"id" => current_version[:id]
|
|
102
105
|
}
|
|
103
106
|
}
|
|
104
107
|
end
|
|
@@ -167,7 +170,8 @@ module Spaceship
|
|
|
167
170
|
"value" => {
|
|
168
171
|
"description" => { "value" => value[:description] },
|
|
169
172
|
"name" => { "value" => value[:name] },
|
|
170
|
-
"localeCode" => language.to_s
|
|
173
|
+
"localeCode" => language.to_s,
|
|
174
|
+
"id" => value[:id]
|
|
171
175
|
}
|
|
172
176
|
}
|
|
173
177
|
end
|
|
@@ -40,7 +40,7 @@ module Spaceship
|
|
|
40
40
|
client.create_iap_family(app_id: self.application.apple_id, name: name, product_id: product_id, reference_name: reference_name, versions: versions_array)
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
# returns a list of all families
|
|
43
|
+
# returns a list of all available subscription groups/families of the current In-App-Purchase
|
|
44
44
|
def all
|
|
45
45
|
r = client.iap_families(app_id: self.application.apple_id)
|
|
46
46
|
return_families = []
|
|
@@ -52,6 +52,17 @@ module Spaceship
|
|
|
52
52
|
end
|
|
53
53
|
return_families
|
|
54
54
|
end
|
|
55
|
+
|
|
56
|
+
# find a specific family
|
|
57
|
+
# @param family_id (String) Family Id
|
|
58
|
+
def find(family_id)
|
|
59
|
+
all.each do |family|
|
|
60
|
+
if family.family_id == family_id
|
|
61
|
+
return family
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
return nil
|
|
65
|
+
end
|
|
55
66
|
end
|
|
56
67
|
end
|
|
57
68
|
end
|
|
@@ -18,13 +18,34 @@ module Spaceship
|
|
|
18
18
|
# @return (Intger) amount of linked in-app purchases of this family (read-only)
|
|
19
19
|
attr_accessor :iap_count
|
|
20
20
|
|
|
21
|
+
# @return (Array) of all in-app purchase family details
|
|
22
|
+
attr_accessor :family_details
|
|
23
|
+
|
|
21
24
|
attr_mapping({
|
|
22
25
|
'id' => :family_id,
|
|
23
26
|
'name.value' => :name,
|
|
24
27
|
'activeAddOns' => :linked_iaps,
|
|
25
|
-
'totalActiveAddOns' => :iap_count
|
|
28
|
+
'totalActiveAddOns' => :iap_count,
|
|
29
|
+
'details.value' => :family_details
|
|
26
30
|
})
|
|
27
31
|
|
|
32
|
+
# @return (Hash) localized names
|
|
33
|
+
def versions
|
|
34
|
+
parsed_versions = {}
|
|
35
|
+
raw_versions = raw_data["details"]["value"]
|
|
36
|
+
raw_versions.each do |version|
|
|
37
|
+
language = version["value"]["localeCode"]["value"]
|
|
38
|
+
parsed_versions[language.to_sym] = {
|
|
39
|
+
subscription_name: version["value"]["subscriptionName"]["value"],
|
|
40
|
+
name: version["value"]["name"]["value"],
|
|
41
|
+
id: version["value"]["id"],
|
|
42
|
+
status: version["value"]["status"]
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
return parsed_versions
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# transforms user-set versions to iTC ones
|
|
28
49
|
def versions=(value = {})
|
|
29
50
|
if value.kind_of?(Array)
|
|
30
51
|
# input that comes from iTC api
|
|
@@ -36,7 +57,8 @@ module Spaceship
|
|
|
36
57
|
"value" => {
|
|
37
58
|
"subscriptionName" => { "value" => current_version[:subscription_name] },
|
|
38
59
|
"name" => { "value" => current_version[:name] },
|
|
39
|
-
"localeCode" => { "value" => language }
|
|
60
|
+
"localeCode" => { "value" => language },
|
|
61
|
+
"id" => current_version[:id]
|
|
40
62
|
}
|
|
41
63
|
}
|
|
42
64
|
end
|
|
@@ -44,20 +66,6 @@ module Spaceship
|
|
|
44
66
|
raw_data.set(["details"], { "value" => new_versions })
|
|
45
67
|
end
|
|
46
68
|
|
|
47
|
-
# @return (Hash) localized names
|
|
48
|
-
def versions
|
|
49
|
-
parsed_versions = {}
|
|
50
|
-
raw_versions = raw_data["details"]["value"]
|
|
51
|
-
raw_versions.each do |version|
|
|
52
|
-
language = version["value"]["localeCode"]["value"]
|
|
53
|
-
parsed_versions[language.to_sym] = {
|
|
54
|
-
subscription_name: version["value"]["subscriptionName"]["value"],
|
|
55
|
-
name: version["value"]["name"]["value"]
|
|
56
|
-
}
|
|
57
|
-
end
|
|
58
|
-
return parsed_versions
|
|
59
|
-
end
|
|
60
|
-
|
|
61
69
|
# modify existing family
|
|
62
70
|
def save!
|
|
63
71
|
# Transform localization versions back to original format.
|
|
@@ -67,7 +75,8 @@ module Spaceship
|
|
|
67
75
|
"value" => {
|
|
68
76
|
"subscriptionName" => { "value" => value[:subscription_name] },
|
|
69
77
|
"name" => { "value" => value[:name] },
|
|
70
|
-
"localeCode" => { "value" => language_code.to_s }
|
|
78
|
+
"localeCode" => { "value" => language_code.to_s },
|
|
79
|
+
"id" => value[:id]
|
|
71
80
|
}
|
|
72
81
|
}
|
|
73
82
|
end
|
|
@@ -400,7 +400,7 @@ module Spaceship
|
|
|
400
400
|
rating_url << "sort=REVIEW_SORT_ORDER_MOST_RECENT"
|
|
401
401
|
rating_url << "&index=#{index}"
|
|
402
402
|
rating_url << "&storefront=#{storefront}" unless storefront.empty?
|
|
403
|
-
rating_url << "&
|
|
403
|
+
rating_url << "&versionId=#{version_id}" unless version_id.empty?
|
|
404
404
|
|
|
405
405
|
r = request(:get, rating_url)
|
|
406
406
|
all_reviews.concat(parse_response(r, 'data')['reviews'])
|
|
@@ -627,7 +627,7 @@ module Spaceship
|
|
|
627
627
|
handle_itc_response(r.body)
|
|
628
628
|
end
|
|
629
629
|
|
|
630
|
-
def transform_to_raw_pricing_intervals(app_id = nil, purchase_id = nil, pricing_intervals =
|
|
630
|
+
def transform_to_raw_pricing_intervals(app_id = nil, purchase_id = nil, pricing_intervals = 5, subscription_price_target = nil)
|
|
631
631
|
intervals_array = []
|
|
632
632
|
if pricing_intervals
|
|
633
633
|
intervals_array = pricing_intervals.map do |interval|
|
metadata
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fastlane
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.140.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
+
- Olivier Halligon
|
|
8
|
+
- Jan Piotrowski
|
|
9
|
+
- Manu Wallner
|
|
7
10
|
- Kohki Miki
|
|
11
|
+
- Stefan Natchev
|
|
8
12
|
- Josh Holtz
|
|
9
|
-
- Helmut Januschka
|
|
10
|
-
- Jorge Revuelta H
|
|
11
|
-
- Jimmy Dee
|
|
12
13
|
- Jérôme Lacoste
|
|
13
|
-
-
|
|
14
|
-
- Manu Wallner
|
|
15
|
-
- Stefan Natchev
|
|
14
|
+
- Maksym Grebenets
|
|
16
15
|
- Andrew McBurney
|
|
17
|
-
-
|
|
16
|
+
- Joshua Liebowitz
|
|
17
|
+
- Matthew Ellis
|
|
18
|
+
- Jimmy Dee
|
|
19
|
+
- Fumiya Nakamura
|
|
18
20
|
- Felix Krause
|
|
19
21
|
- Danielle Tomlinson
|
|
22
|
+
- Helmut Januschka
|
|
20
23
|
- Aaron Brager
|
|
21
|
-
-
|
|
22
|
-
- Matthew Ellis
|
|
23
|
-
- Maksym Grebenets
|
|
24
|
+
- Iulian Onofrei
|
|
24
25
|
- Luka Mirosevic
|
|
25
|
-
-
|
|
26
|
-
- Fumiya Nakamura
|
|
26
|
+
- Jorge Revuelta H
|
|
27
27
|
autorequire:
|
|
28
28
|
bindir: bin
|
|
29
29
|
cert_chain: []
|
|
30
|
-
date:
|
|
30
|
+
date: 2020-01-08 00:00:00.000000000 Z
|
|
31
31
|
dependencies:
|
|
32
32
|
- !ruby/object:Gem::Dependency
|
|
33
33
|
name: slack-notifier
|
|
@@ -791,6 +791,20 @@ dependencies:
|
|
|
791
791
|
- - "~>"
|
|
792
792
|
- !ruby/object:Gem::Version
|
|
793
793
|
version: 2.3.2
|
|
794
|
+
- !ruby/object:Gem::Dependency
|
|
795
|
+
name: hashdiff
|
|
796
|
+
requirement: !ruby/object:Gem::Requirement
|
|
797
|
+
requirements:
|
|
798
|
+
- - "<"
|
|
799
|
+
- !ruby/object:Gem::Version
|
|
800
|
+
version: 0.4.0
|
|
801
|
+
type: :development
|
|
802
|
+
prerelease: false
|
|
803
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
804
|
+
requirements:
|
|
805
|
+
- - "<"
|
|
806
|
+
- !ruby/object:Gem::Version
|
|
807
|
+
version: 0.4.0
|
|
794
808
|
- !ruby/object:Gem::Dependency
|
|
795
809
|
name: coveralls
|
|
796
810
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -986,6 +1000,9 @@ files:
|
|
|
986
1000
|
- fastlane/lib/fastlane.rb
|
|
987
1001
|
- fastlane/lib/fastlane/action.rb
|
|
988
1002
|
- fastlane/lib/fastlane/action_collector.rb
|
|
1003
|
+
- fastlane/lib/fastlane/actions/.hockey.rb.swp
|
|
1004
|
+
- fastlane/lib/fastlane/actions/.slack.rb.swp
|
|
1005
|
+
- fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp
|
|
989
1006
|
- fastlane/lib/fastlane/actions/README.md
|
|
990
1007
|
- fastlane/lib/fastlane/actions/actions_helper.rb
|
|
991
1008
|
- fastlane/lib/fastlane/actions/adb.rb
|
|
@@ -1315,6 +1332,7 @@ files:
|
|
|
1315
1332
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj
|
|
1316
1333
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
|
1317
1334
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
|
|
1335
|
+
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate
|
|
1318
1336
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme
|
|
1319
1337
|
- fastlane/swift/FastlaneSwiftRunner/README.txt
|
|
1320
1338
|
- fastlane/swift/Gymfile.swift
|
|
@@ -1343,6 +1361,7 @@ files:
|
|
|
1343
1361
|
- fastlane_core/README.md
|
|
1344
1362
|
- fastlane_core/lib/assets/XMLTemplate.xml.erb
|
|
1345
1363
|
- fastlane_core/lib/fastlane_core.rb
|
|
1364
|
+
- fastlane_core/lib/fastlane_core/.build_watcher.rb.swp
|
|
1346
1365
|
- fastlane_core/lib/fastlane_core/analytics/action_completion_context.rb
|
|
1347
1366
|
- fastlane_core/lib/fastlane_core/analytics/action_launch_context.rb
|
|
1348
1367
|
- fastlane_core/lib/fastlane_core/analytics/analytics_event_builder.rb
|
|
@@ -1421,7 +1440,6 @@ files:
|
|
|
1421
1440
|
- gym/lib/assets/GymfileTemplate.swift
|
|
1422
1441
|
- gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh
|
|
1423
1442
|
- gym/lib/gym.rb
|
|
1424
|
-
- gym/lib/gym/.runner.rb.swp
|
|
1425
1443
|
- gym/lib/gym/code_signing_mapping.rb
|
|
1426
1444
|
- gym/lib/gym/commands_generator.rb
|
|
1427
1445
|
- gym/lib/gym/detect_values.rb
|
|
@@ -1470,6 +1488,7 @@ files:
|
|
|
1470
1488
|
- pem/lib/pem/options.rb
|
|
1471
1489
|
- pilot/README.md
|
|
1472
1490
|
- pilot/lib/pilot.rb
|
|
1491
|
+
- pilot/lib/pilot/.manager.rb.swp
|
|
1473
1492
|
- pilot/lib/pilot/build_manager.rb
|
|
1474
1493
|
- pilot/lib/pilot/commands_generator.rb
|
|
1475
1494
|
- pilot/lib/pilot/features.rb
|
|
@@ -1601,6 +1620,7 @@ files:
|
|
|
1601
1620
|
- spaceship/lib/spaceship/client.rb
|
|
1602
1621
|
- spaceship/lib/spaceship/commands_generator.rb
|
|
1603
1622
|
- spaceship/lib/spaceship/connect_api.rb
|
|
1623
|
+
- spaceship/lib/spaceship/connect_api/.DS_Store
|
|
1604
1624
|
- spaceship/lib/spaceship/connect_api/client.rb
|
|
1605
1625
|
- spaceship/lib/spaceship/connect_api/model.rb
|
|
1606
1626
|
- spaceship/lib/spaceship/connect_api/models/app.rb
|
|
@@ -1643,6 +1663,7 @@ files:
|
|
|
1643
1663
|
- spaceship/lib/spaceship/launcher.rb
|
|
1644
1664
|
- spaceship/lib/spaceship/module.rb
|
|
1645
1665
|
- spaceship/lib/spaceship/playground.rb
|
|
1666
|
+
- spaceship/lib/spaceship/portal/.certificate.rb.swp
|
|
1646
1667
|
- spaceship/lib/spaceship/portal/app.rb
|
|
1647
1668
|
- spaceship/lib/spaceship/portal/app_group.rb
|
|
1648
1669
|
- spaceship/lib/spaceship/portal/app_service.rb
|
|
@@ -1782,7 +1803,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
1782
1803
|
- !ruby/object:Gem::Version
|
|
1783
1804
|
version: '0'
|
|
1784
1805
|
requirements: []
|
|
1785
|
-
rubygems_version: 3.0.
|
|
1806
|
+
rubygems_version: 3.0.3
|
|
1786
1807
|
signing_key:
|
|
1787
1808
|
specification_version: 4
|
|
1788
1809
|
summary: The easiest way to automate beta deployments and releases for your iOS and
|