fastlane 2.99.1 → 2.100.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 +74 -74
- data/deliver/lib/deliver/html_generator.rb +2 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +2 -2
- data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +1 -1
- data/fastlane/lib/fastlane/actions/github_api.rb +2 -2
- data/fastlane/lib/fastlane/actions/jira.rb +14 -1
- data/fastlane/lib/fastlane/actions/pod_lib_lint.rb +1 -0
- data/fastlane/lib/fastlane/actions/pod_push.rb +1 -0
- data/fastlane/lib/fastlane/actions/reset_simulator_contents.rb +22 -4
- data/fastlane/lib/fastlane/actions/run_tests.rb +5 -0
- data/fastlane/lib/fastlane/actions/sonar.rb +7 -1
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +14 -0
- data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +11 -3
- data/fastlane/lib/fastlane/helper/podspec_helper.rb +1 -1
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -0
- data/fastlane/lib/fastlane/swift_lane_manager.rb +4 -0
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +18 -6
- 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/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +3 -1
- data/fastlane_core/lib/fastlane_core/analytics/analytics_session.rb +23 -0
- data/fastlane_core/lib/fastlane_core/configuration/configuration_file.rb +1 -1
- data/pilot/lib/pilot/options.rb +1 -1
- data/produce/lib/produce/developer_center.rb +2 -2
- data/snapshot/lib/assets/SnapshotHelper.swift +2 -2
- data/snapshot/lib/snapshot/fixes/hardware_keyboard_fix.rb +11 -0
- data/snapshot/lib/snapshot/options.rb +7 -0
- data/snapshot/lib/snapshot/test_command_generator.rb +1 -1
- data/snapshot/lib/snapshot/test_command_generator_base.rb +18 -1
- data/snapshot/lib/snapshot/test_command_generator_xcode_8.rb +1 -1
- data/spaceship/README.md +1 -1
- data/spaceship/lib/spaceship/portal/app_service.rb +1 -1
- data/spaceship/lib/spaceship/portal/portal_client.rb +0 -1
- data/spaceship/lib/spaceship/tunes/app_ratings.rb +1 -1
- data/spaceship/lib/spaceship/tunes/spaceship.rb +2 -2
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -2
- data/supply/lib/supply/client.rb +10 -1
- data/supply/lib/supply/uploader.rb +7 -4
- metadata +15 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 603c6c4c52a4b7e3ee28a74647967d1a164d57ec
|
|
4
|
+
data.tar.gz: a16ae832039304eeb3a65d8329cc5c2bfd40539f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d9a120cf0031540c113f5b796351f02988ef8868edb67c7cf1941371459ba6a8f36140293ecd4f76476856ade5a7c7287f743c63c13cfeabbd3b14ce780a73bd
|
|
7
|
+
data.tar.gz: 9165f7db15d367bcf5a9503a7a2d304f6c141d56873f8e7104abe5c927ad788717bac03775b84cc4a7e0506b2957d31c3cef592937addadade8ade982d419c8c
|
data/README.md
CHANGED
|
@@ -32,17 +32,49 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
32
32
|
|
|
33
33
|
<table id='team'>
|
|
34
34
|
<tr>
|
|
35
|
+
<td id='jorge-revuelta-h'>
|
|
36
|
+
<a href='https://github.com/minuscorp'>
|
|
37
|
+
<img src='https://github.com/minuscorp.png?size=140'>
|
|
38
|
+
</a>
|
|
39
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
|
40
|
+
</td>
|
|
41
|
+
<td id='maksym-grebenets'>
|
|
42
|
+
<a href='https://github.com/mgrebenets'>
|
|
43
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
|
44
|
+
</a>
|
|
45
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
|
46
|
+
</td>
|
|
35
47
|
<td id='danielle-tomlinson'>
|
|
36
48
|
<a href='https://github.com/DanToml'>
|
|
37
49
|
<img src='https://github.com/DanToml.png?size=140'>
|
|
38
50
|
</a>
|
|
39
51
|
<h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
|
|
40
52
|
</td>
|
|
41
|
-
<td id='
|
|
42
|
-
<a href='https://github.com/
|
|
43
|
-
<img src='https://github.com/
|
|
53
|
+
<td id='matthew-ellis'>
|
|
54
|
+
<a href='https://github.com/matthewellis'>
|
|
55
|
+
<img src='https://github.com/matthewellis.png?size=140'>
|
|
44
56
|
</a>
|
|
45
|
-
<h4 align='center'>
|
|
57
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
|
58
|
+
</td>
|
|
59
|
+
<td id='helmut-januschka'>
|
|
60
|
+
<a href='https://github.com/hjanuschka'>
|
|
61
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
|
62
|
+
</a>
|
|
63
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
|
64
|
+
</td>
|
|
65
|
+
</tr>
|
|
66
|
+
<tr>
|
|
67
|
+
<td id='luka-mirosevic'>
|
|
68
|
+
<a href='https://github.com/lmirosevic'>
|
|
69
|
+
<img src='https://github.com/lmirosevic.png?size=140'>
|
|
70
|
+
</a>
|
|
71
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
72
|
+
</td>
|
|
73
|
+
<td id='andrew-mcburney'>
|
|
74
|
+
<a href='https://github.com/AndrewMcBurney'>
|
|
75
|
+
<img src='https://github.com/AndrewMcBurney.png?size=140'>
|
|
76
|
+
</a>
|
|
77
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
|
46
78
|
</td>
|
|
47
79
|
<td id='olivier-halligon'>
|
|
48
80
|
<a href='https://github.com/AliSoftware'>
|
|
@@ -50,31 +82,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
50
82
|
</a>
|
|
51
83
|
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
|
52
84
|
</td>
|
|
53
|
-
<td id='
|
|
54
|
-
<a href='https://github.com/
|
|
55
|
-
<img src='https://github.com/
|
|
85
|
+
<td id='aaron-brager'>
|
|
86
|
+
<a href='https://github.com/getaaron'>
|
|
87
|
+
<img src='https://github.com/getaaron.png?size=140'>
|
|
56
88
|
</a>
|
|
57
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
89
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
|
58
90
|
</td>
|
|
59
|
-
<td id='
|
|
60
|
-
<a href='https://github.com/
|
|
61
|
-
<img src='https://github.com/
|
|
91
|
+
<td id='kohki-miki'>
|
|
92
|
+
<a href='https://github.com/giginet'>
|
|
93
|
+
<img src='https://github.com/giginet.png?size=140'>
|
|
62
94
|
</a>
|
|
63
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
95
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
|
64
96
|
</td>
|
|
65
97
|
</tr>
|
|
66
98
|
<tr>
|
|
67
|
-
<td id='
|
|
68
|
-
<a href='https://github.com/
|
|
69
|
-
<img src='https://github.com/
|
|
99
|
+
<td id='jérôme-lacoste'>
|
|
100
|
+
<a href='https://github.com/lacostej'>
|
|
101
|
+
<img src='https://github.com/lacostej.png?size=140'>
|
|
70
102
|
</a>
|
|
71
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
103
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
|
72
104
|
</td>
|
|
73
|
-
<td id='
|
|
74
|
-
<a href='https://github.com/
|
|
75
|
-
<img src='https://github.com/
|
|
105
|
+
<td id='iulian-onofrei'>
|
|
106
|
+
<a href='https://github.com/revolter'>
|
|
107
|
+
<img src='https://github.com/revolter.png?size=140'>
|
|
76
108
|
</a>
|
|
77
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
109
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
|
78
110
|
</td>
|
|
79
111
|
<td id='joshua-liebowitz'>
|
|
80
112
|
<a href='https://github.com/taquitos'>
|
|
@@ -82,37 +114,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
82
114
|
</a>
|
|
83
115
|
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
|
84
116
|
</td>
|
|
85
|
-
<td id='
|
|
86
|
-
<a href='https://github.com/
|
|
87
|
-
<img src='https://github.com/
|
|
117
|
+
<td id='stefan-natchev'>
|
|
118
|
+
<a href='https://github.com/snatchev'>
|
|
119
|
+
<img src='https://github.com/snatchev.png?size=140'>
|
|
88
120
|
</a>
|
|
89
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
121
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
|
90
122
|
</td>
|
|
91
|
-
<td id='
|
|
92
|
-
<a href='https://github.com/
|
|
93
|
-
<img src='https://github.com/
|
|
123
|
+
<td id='jimmy-dee'>
|
|
124
|
+
<a href='https://github.com/jdee'>
|
|
125
|
+
<img src='https://github.com/jdee.png?size=140'>
|
|
94
126
|
</a>
|
|
95
|
-
<h4 align='center'
|
|
127
|
+
<h4 align='center'>Jimmy Dee</h4>
|
|
96
128
|
</td>
|
|
97
129
|
</tr>
|
|
98
130
|
<tr>
|
|
99
|
-
<td id='
|
|
100
|
-
<a href='https://github.com/
|
|
101
|
-
<img src='https://github.com/
|
|
102
|
-
</a>
|
|
103
|
-
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
|
104
|
-
</td>
|
|
105
|
-
<td id='aaron-brager'>
|
|
106
|
-
<a href='https://github.com/getaaron'>
|
|
107
|
-
<img src='https://github.com/getaaron.png?size=140'>
|
|
131
|
+
<td id='manu-wallner'>
|
|
132
|
+
<a href='https://github.com/milch'>
|
|
133
|
+
<img src='https://github.com/milch.png?size=140'>
|
|
108
134
|
</a>
|
|
109
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
135
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
110
136
|
</td>
|
|
111
|
-
<td id='
|
|
112
|
-
<a href='https://github.com/
|
|
113
|
-
<img src='https://github.com/
|
|
137
|
+
<td id='fumiya-nakamura'>
|
|
138
|
+
<a href='https://github.com/nafu'>
|
|
139
|
+
<img src='https://github.com/nafu.png?size=140'>
|
|
114
140
|
</a>
|
|
115
|
-
<h4 align='center'><a href='https://twitter.com/
|
|
141
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
|
116
142
|
</td>
|
|
117
143
|
<td id='felix-krause'>
|
|
118
144
|
<a href='https://github.com/KrauseFx'>
|
|
@@ -120,6 +146,12 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
120
146
|
</a>
|
|
121
147
|
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
|
122
148
|
</td>
|
|
149
|
+
<td id='jan-piotrowski'>
|
|
150
|
+
<a href='https://github.com/janpio'>
|
|
151
|
+
<img src='https://github.com/janpio.png?size=140'>
|
|
152
|
+
</a>
|
|
153
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
|
154
|
+
</td>
|
|
123
155
|
<td id='josh-holtz'>
|
|
124
156
|
<a href='https://github.com/joshdholtz'>
|
|
125
157
|
<img src='https://github.com/joshdholtz.png?size=140'>
|
|
@@ -127,38 +159,6 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
|
127
159
|
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
|
128
160
|
</td>
|
|
129
161
|
</tr>
|
|
130
|
-
<tr>
|
|
131
|
-
<td id='kohki-miki'>
|
|
132
|
-
<a href='https://github.com/giginet'>
|
|
133
|
-
<img src='https://github.com/giginet.png?size=140'>
|
|
134
|
-
</a>
|
|
135
|
-
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
|
136
|
-
</td>
|
|
137
|
-
<td id='helmut-januschka'>
|
|
138
|
-
<a href='https://github.com/hjanuschka'>
|
|
139
|
-
<img src='https://github.com/hjanuschka.png?size=140'>
|
|
140
|
-
</a>
|
|
141
|
-
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
|
142
|
-
</td>
|
|
143
|
-
<td id='jérôme-lacoste'>
|
|
144
|
-
<a href='https://github.com/lacostej'>
|
|
145
|
-
<img src='https://github.com/lacostej.png?size=140'>
|
|
146
|
-
</a>
|
|
147
|
-
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
|
148
|
-
</td>
|
|
149
|
-
<td id='manu-wallner'>
|
|
150
|
-
<a href='https://github.com/milch'>
|
|
151
|
-
<img src='https://github.com/milch.png?size=140'>
|
|
152
|
-
</a>
|
|
153
|
-
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
|
154
|
-
</td>
|
|
155
|
-
<td id='luka-mirosevic'>
|
|
156
|
-
<a href='https://github.com/lmirosevic'>
|
|
157
|
-
<img src='https://github.com/lmirosevic.png?size=140'>
|
|
158
|
-
</a>
|
|
159
|
-
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
|
160
|
-
</td>
|
|
161
|
-
</tr>
|
|
162
162
|
</table>
|
|
163
163
|
|
|
164
164
|
Special thanks to all [contributors](https://github.com/fastlane/fastlane/graphs/contributors) for extending and improving _fastlane_.
|
|
@@ -9,7 +9,8 @@ module Deliver
|
|
|
9
9
|
|
|
10
10
|
def run(options, screenshots)
|
|
11
11
|
begin
|
|
12
|
-
|
|
12
|
+
fastlane_path = FastlaneCore::FastlaneFolder.path
|
|
13
|
+
html_path = self.render(options, screenshots, fastlane_path)
|
|
13
14
|
rescue => ex
|
|
14
15
|
UI.error(ex.inspect)
|
|
15
16
|
UI.error(ex.backtrace.join("\n"))
|
|
@@ -120,7 +120,7 @@ module Fastlane
|
|
|
120
120
|
#####################################################
|
|
121
121
|
|
|
122
122
|
def self.description
|
|
123
|
-
"Download dSYM files from
|
|
123
|
+
"Download dSYM files from App Store Connect for Bitcode apps"
|
|
124
124
|
end
|
|
125
125
|
|
|
126
126
|
def self.details
|
|
@@ -135,7 +135,7 @@ module Fastlane
|
|
|
135
135
|
SAMPLE
|
|
136
136
|
|
|
137
137
|
[
|
|
138
|
-
"This action downloads dSYM files from
|
|
138
|
+
"This action downloads dSYM files from App Store Connect after the ipa gets re-compiled by Apple. Useful if you have Bitcode enabled.".markdown_preserve_newlines,
|
|
139
139
|
sample
|
|
140
140
|
].join("\n")
|
|
141
141
|
end
|
|
@@ -9,7 +9,7 @@ module Fastlane
|
|
|
9
9
|
branch = params[:branch]
|
|
10
10
|
branch_expr = /#{branch}/
|
|
11
11
|
if Actions.git_branch =~ branch_expr
|
|
12
|
-
UI.success("Git branch
|
|
12
|
+
UI.success("Git branch matches `#{branch}`, all good! 💪")
|
|
13
13
|
else
|
|
14
14
|
UI.user_error!("Git is not on a branch matching `#{branch}`. Current branch is `#{Actions.git_branch}`! Please ensure the repo is checked out to the correct branch.")
|
|
15
15
|
end
|
|
@@ -16,7 +16,7 @@ module Fastlane
|
|
|
16
16
|
headers = construct_headers(params[:api_token], params[:headers])
|
|
17
17
|
payload = construct_body(params[:body], params[:raw_body])
|
|
18
18
|
error_handlers = params[:error_handlers] || {}
|
|
19
|
-
secure = params[:secure]
|
|
19
|
+
secure = params[:secure]
|
|
20
20
|
|
|
21
21
|
response = call_endpoint(
|
|
22
22
|
url,
|
|
@@ -140,7 +140,7 @@ module Fastlane
|
|
|
140
140
|
FastlaneCore::ConfigItem.new(key: :secure,
|
|
141
141
|
env_name: "FL_GITHUB_API_SECURE",
|
|
142
142
|
description: "Optionally disable secure requests (ssl_verify_peer)",
|
|
143
|
-
|
|
143
|
+
type: Boolean,
|
|
144
144
|
default_value: true,
|
|
145
145
|
optional: true)
|
|
146
146
|
]
|
|
@@ -6,8 +6,8 @@ module Fastlane
|
|
|
6
6
|
require 'jira-ruby'
|
|
7
7
|
|
|
8
8
|
site = params[:url]
|
|
9
|
-
context_path = ""
|
|
10
9
|
auth_type = :basic
|
|
10
|
+
context_path = params[:context_path]
|
|
11
11
|
username = params[:username]
|
|
12
12
|
password = params[:password]
|
|
13
13
|
ticket_id = params[:ticket_id]
|
|
@@ -43,6 +43,11 @@ module Fastlane
|
|
|
43
43
|
verify_block: proc do |value|
|
|
44
44
|
UI.user_error!("No url for Jira given, pass using `url: 'url'`") if value.to_s.length == 0
|
|
45
45
|
end),
|
|
46
|
+
FastlaneCore::ConfigItem.new(key: :context_path,
|
|
47
|
+
env_name: "FL_JIRA_CONTEXT_PATH",
|
|
48
|
+
description: "Appends to the url (ex: \"/jira\")",
|
|
49
|
+
optional: true,
|
|
50
|
+
default_value: ""),
|
|
46
51
|
FastlaneCore::ConfigItem.new(key: :username,
|
|
47
52
|
env_name: "FL_JIRA_USERNAME",
|
|
48
53
|
description: "Username for JIRA instance",
|
|
@@ -90,6 +95,14 @@ module Fastlane
|
|
|
90
95
|
password: "Your password",
|
|
91
96
|
ticket_id: "Ticket ID, i.e. IOS-123",
|
|
92
97
|
comment_text: "Text to post as a comment"
|
|
98
|
+
)',
|
|
99
|
+
'jira(
|
|
100
|
+
url: "https://yourserverdomain.com",
|
|
101
|
+
context_path: "/jira",
|
|
102
|
+
username: "Your username",
|
|
103
|
+
password: "Your password",
|
|
104
|
+
ticket_id: "Ticket ID, i.e. IOS-123",
|
|
105
|
+
comment_text: "Text to post as a comment"
|
|
93
106
|
)'
|
|
94
107
|
]
|
|
95
108
|
end
|
|
@@ -61,6 +61,7 @@ module Fastlane
|
|
|
61
61
|
description: "The sources of repos you want the pod spec to lint with, separated by commas",
|
|
62
62
|
optional: true,
|
|
63
63
|
is_string: false,
|
|
64
|
+
type: Array,
|
|
64
65
|
verify_block: proc do |value|
|
|
65
66
|
UI.user_error!("Sources must be an array.") unless value.kind_of?(Array)
|
|
66
67
|
end),
|
|
@@ -80,6 +80,7 @@ module Fastlane
|
|
|
80
80
|
description: "The sources of repos you want the pod spec to lint with, separated by commas",
|
|
81
81
|
optional: true,
|
|
82
82
|
is_string: false,
|
|
83
|
+
type: Array,
|
|
83
84
|
verify_block: proc do |value|
|
|
84
85
|
UI.user_error!("Sources must be an array.") unless value.kind_of?(Array)
|
|
85
86
|
end),
|
|
@@ -2,13 +2,31 @@ module Fastlane
|
|
|
2
2
|
module Actions
|
|
3
3
|
class ResetSimulatorContentsAction < Action
|
|
4
4
|
def self.run(params)
|
|
5
|
+
ios_versions = params[:ios]
|
|
6
|
+
|
|
5
7
|
if Helper.xcode_at_least?("9")
|
|
6
|
-
|
|
7
|
-
|
|
8
|
+
reset_xcode9_and_higher(ios_versions)
|
|
9
|
+
else
|
|
10
|
+
reset_up_to_xcode8(ios_versions)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def self.reset_xcode9_and_higher(ios_versions)
|
|
15
|
+
UI.verbose("Resetting simulator contents for Xcode 9 and later")
|
|
16
|
+
simulators = FastlaneCore::DeviceManager.simulators('iOS')
|
|
17
|
+
if ios_versions
|
|
18
|
+
simulators.select! { |s| ios_versions.include?(s.os_version) }
|
|
19
|
+
end
|
|
20
|
+
simulators.each do |simulator|
|
|
21
|
+
FastlaneCore::Simulator.reset(udid: simulator.udid)
|
|
8
22
|
end
|
|
23
|
+
UI.success('Simulators reset')
|
|
24
|
+
end
|
|
9
25
|
|
|
10
|
-
|
|
11
|
-
|
|
26
|
+
def self.reset_up_to_xcode8(ios_versions)
|
|
27
|
+
UI.verbose("Resetting simulator contents for Xcode 8 and earlier")
|
|
28
|
+
if ios_versions
|
|
29
|
+
ios_versions.each do |os_version|
|
|
12
30
|
FastlaneCore::Simulator.reset_all_by_version(os_version: os_version)
|
|
13
31
|
end
|
|
14
32
|
else
|
|
@@ -22,6 +22,11 @@ module Fastlane
|
|
|
22
22
|
Scan::Manager.new.work(values)
|
|
23
23
|
|
|
24
24
|
return true
|
|
25
|
+
rescue FastlaneCore::Interface::FastlaneBuildFailure => ex
|
|
26
|
+
# Specifically catching FastlaneBuildFailure to prevent build/compile errors from being
|
|
27
|
+
# silenced when :fail_build is set to false
|
|
28
|
+
# :fail_build should only suppress testing failures
|
|
29
|
+
raise ex
|
|
25
30
|
rescue => ex
|
|
26
31
|
if values[:fail_build]
|
|
27
32
|
raise ex
|
|
@@ -19,6 +19,7 @@ module Fastlane
|
|
|
19
19
|
sonar_scanner_args << "-Dsonar.language=\"#{params[:project_language]}\"" if params[:project_language]
|
|
20
20
|
sonar_scanner_args << "-Dsonar.sourceEncoding=\"#{params[:source_encoding]}\"" if params[:source_encoding]
|
|
21
21
|
sonar_scanner_args << "-Dsonar.login=\"#{params[:sonar_login]}\"" if params[:sonar_login]
|
|
22
|
+
sonar_scanner_args << "-Dsonar.host.url=\"#{params[:sonar_url]}\"" if params[:sonar_url]
|
|
22
23
|
sonar_scanner_args << params[:sonar_runner_args] if params[:sonar_runner_args]
|
|
23
24
|
|
|
24
25
|
command = [
|
|
@@ -91,7 +92,12 @@ module Fastlane
|
|
|
91
92
|
description: "Pass the Sonar Login token (e.g: xxxxxxprivate_token_XXXXbXX7e)",
|
|
92
93
|
optional: true,
|
|
93
94
|
is_string: true,
|
|
94
|
-
sensitive: true)
|
|
95
|
+
sensitive: true),
|
|
96
|
+
FastlaneCore::ConfigItem.new(key: :sonar_url,
|
|
97
|
+
env_name: "FL_SONAR_URL",
|
|
98
|
+
description: "Pass the url of the Sonar server",
|
|
99
|
+
optional: true,
|
|
100
|
+
is_string: true)
|
|
95
101
|
]
|
|
96
102
|
end
|
|
97
103
|
|
|
@@ -18,6 +18,9 @@ module Fastlane
|
|
|
18
18
|
dsym_paths << params[:dsym_path] if params[:dsym_path]
|
|
19
19
|
dsym_paths += Actions.lane_context[SharedValues::DSYM_PATHS] if Actions.lane_context[SharedValues::DSYM_PATHS]
|
|
20
20
|
|
|
21
|
+
# Allows adding of additional multiple dsym_paths since :dsym_path can be autoset by other actions
|
|
22
|
+
dsym_paths += params[:dsym_paths] if params[:dsym_paths]
|
|
23
|
+
|
|
21
24
|
if dsym_paths.count == 0
|
|
22
25
|
UI.error("Couldn't find any dSYMs, please pass them using the dsym_path option")
|
|
23
26
|
return nil
|
|
@@ -151,6 +154,17 @@ module Fastlane
|
|
|
151
154
|
UI.user_error!("Couldn't find file at path '#{File.expand_path(value)}'") unless File.exist?(value)
|
|
152
155
|
UI.user_error!("Symbolication file needs to be dSYM or zip") unless value.end_with?(".zip", ".dSYM")
|
|
153
156
|
end),
|
|
157
|
+
FastlaneCore::ConfigItem.new(key: :dsym_paths,
|
|
158
|
+
env_name: "FL_UPLOAD_SYMBOLS_TO_CRASHLYTICS_DSYM_PATHS",
|
|
159
|
+
description: "Paths to the DSYM files or zips to upload",
|
|
160
|
+
optional: true,
|
|
161
|
+
type: Array,
|
|
162
|
+
verify_block: proc do |values|
|
|
163
|
+
values.each do |value|
|
|
164
|
+
UI.user_error!("Couldn't find file at path '#{File.expand_path(value)}'") unless File.exist?(value)
|
|
165
|
+
UI.user_error!("Symbolication file needs to be dSYM or zip") unless value.end_with?(".zip", ".dSYM")
|
|
166
|
+
end
|
|
167
|
+
end),
|
|
154
168
|
FastlaneCore::ConfigItem.new(key: :api_token,
|
|
155
169
|
env_name: "CRASHLYTICS_API_TOKEN",
|
|
156
170
|
sensitive: true,
|
|
@@ -8,8 +8,13 @@ module Fastlane
|
|
|
8
8
|
path = params[:crashlytics_path]
|
|
9
9
|
|
|
10
10
|
# Finding submit binary inside of given Crashlytics path (for backwards compatability)
|
|
11
|
-
if path
|
|
12
|
-
|
|
11
|
+
if path
|
|
12
|
+
if File.basename(path) != "submit"
|
|
13
|
+
path = Dir[File.join(path, '**', 'submit')].last
|
|
14
|
+
UI.verbose(":crashlytics_path passed through parameters did not point to a submit binary. Using this submit binary on that path instead: '#{path}'")
|
|
15
|
+
else
|
|
16
|
+
UI.verbose("Using :crashlytics_path passed in through parameters: '#{path}'")
|
|
17
|
+
end
|
|
13
18
|
end
|
|
14
19
|
|
|
15
20
|
# Check for submit binary outside of Crashlytics.framework (for Crashlytics 3.4.1 and over)
|
|
@@ -20,7 +25,7 @@ module Fastlane
|
|
|
20
25
|
path ||= Dir["./**/Crashlytics.framework/submit"].last
|
|
21
26
|
|
|
22
27
|
if path && path.downcase.include?("crashlytics.framework")
|
|
23
|
-
UI.deprecated("Crashlytics has
|
|
28
|
+
UI.deprecated("Crashlytics has moved the submit binary outside of Crashlytics.framework directory as of 3.4.1. Please change :crashlytics_path to `<PODS_ROOT>/Crashlytics/submit`")
|
|
24
29
|
end
|
|
25
30
|
|
|
26
31
|
return path
|
|
@@ -31,6 +36,9 @@ module Fastlane
|
|
|
31
36
|
unless submit_binary
|
|
32
37
|
UI.user_error!("Couldn't find Crashlytics' submit binary in current directory. Make sure to add the 'Crashlytics' pod to your 'Podfile' and run `pod update`")
|
|
33
38
|
end
|
|
39
|
+
if File.basename(submit_binary) != "submit"
|
|
40
|
+
UI.user_error!("Invalid crashlytics path was detected with '#{submit_binary}'. Path must point to the `submit` binary (example: './Pods/Crashlytics/submit')")
|
|
41
|
+
end
|
|
34
42
|
submit_binary = "Crashlytics.framework/submit" if Helper.test?
|
|
35
43
|
|
|
36
44
|
command = []
|
|
@@ -10,7 +10,7 @@ module Fastlane
|
|
|
10
10
|
def initialize(path = nil, require_variable_prefix = true)
|
|
11
11
|
version_var_name = 'version'
|
|
12
12
|
variable_prefix = require_variable_prefix ? /\w\./ : //
|
|
13
|
-
@version_regex = /^(?<begin>[^#]*#{variable_prefix}#{version_var_name}\s*=\s*['"])(?<value>(?<major>[0-9]+)(\.(?<minor>[0-9]+))?(\.(?<patch>[0-9]+))?(?<appendix>(\.[0-9]+)*)?)(?<end>['"])/i
|
|
13
|
+
@version_regex = /^(?<begin>[^#]*#{variable_prefix}#{version_var_name}\s*=\s*['"])(?<value>(?<major>[0-9]+)(\.(?<minor>[0-9]+))?(\.(?<patch>[0-9]+))?(?<appendix>(\.[0-9]+)*)?(-(?<prerelease>(.+)))?)(?<end>['"])/i
|
|
14
14
|
|
|
15
15
|
return unless (path || '').length > 0
|
|
16
16
|
UI.user_error!("Could not find podspec file at path '#{path}'") unless File.exist?(path)
|
|
@@ -10,6 +10,10 @@ module Fastlane
|
|
|
10
10
|
UI.user_error!("lane must be a string") unless lane.kind_of?(String) || lane.nil?
|
|
11
11
|
UI.user_error!("parameters must be a hash") unless parameters.kind_of?(Hash) || parameters.nil?
|
|
12
12
|
|
|
13
|
+
# Sets environment variable and lane context for lane name
|
|
14
|
+
ENV["FASTLANE_LANE_NAME"] = lane
|
|
15
|
+
Actions.lane_context[Actions::SharedValues::LANE_NAME] = lane
|
|
16
|
+
|
|
13
17
|
# xcodeproj has a bug in certain versions that causes it to change directories
|
|
14
18
|
# and not return to the original working directory
|
|
15
19
|
# https://github.com/CocoaPods/Xcodeproj/issues/426
|
|
@@ -724,6 +724,7 @@ func captureIosScreenshots(workspace: String? = nil,
|
|
|
724
724
|
numberOfRetries: Int = 1,
|
|
725
725
|
stopAfterFirstError: Bool = false,
|
|
726
726
|
derivedDataPath: String? = nil,
|
|
727
|
+
resultBundle: Bool = false,
|
|
727
728
|
testTargetName: String? = nil,
|
|
728
729
|
namespaceLogFiles: String? = nil,
|
|
729
730
|
concurrentSimulators: Bool = true) {
|
|
@@ -756,6 +757,7 @@ func captureIosScreenshots(workspace: String? = nil,
|
|
|
756
757
|
RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries),
|
|
757
758
|
RubyCommand.Argument(name: "stop_after_first_error", value: stopAfterFirstError),
|
|
758
759
|
RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
|
|
760
|
+
RubyCommand.Argument(name: "result_bundle", value: resultBundle),
|
|
759
761
|
RubyCommand.Argument(name: "test_target_name", value: testTargetName),
|
|
760
762
|
RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles),
|
|
761
763
|
RubyCommand.Argument(name: "concurrent_simulators", value: concurrentSimulators)])
|
|
@@ -790,6 +792,7 @@ func captureScreenshots(workspace: String? = nil,
|
|
|
790
792
|
numberOfRetries: Int = 1,
|
|
791
793
|
stopAfterFirstError: Bool = false,
|
|
792
794
|
derivedDataPath: String? = nil,
|
|
795
|
+
resultBundle: Bool = false,
|
|
793
796
|
testTargetName: String? = nil,
|
|
794
797
|
namespaceLogFiles: String? = nil,
|
|
795
798
|
concurrentSimulators: Bool = true) {
|
|
@@ -822,6 +825,7 @@ func captureScreenshots(workspace: String? = nil,
|
|
|
822
825
|
RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries),
|
|
823
826
|
RubyCommand.Argument(name: "stop_after_first_error", value: stopAfterFirstError),
|
|
824
827
|
RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
|
|
828
|
+
RubyCommand.Argument(name: "result_bundle", value: resultBundle),
|
|
825
829
|
RubyCommand.Argument(name: "test_target_name", value: testTargetName),
|
|
826
830
|
RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles),
|
|
827
831
|
RubyCommand.Argument(name: "concurrent_simulators", value: concurrentSimulators)])
|
|
@@ -1968,11 +1972,13 @@ func jazzy(config: String? = nil) {
|
|
|
1968
1972
|
_ = runner.executeCommand(command)
|
|
1969
1973
|
}
|
|
1970
1974
|
func jira(url: String,
|
|
1975
|
+
contextPath: String = "",
|
|
1971
1976
|
username: String,
|
|
1972
1977
|
password: String,
|
|
1973
1978
|
ticketId: String,
|
|
1974
1979
|
commentText: String) {
|
|
1975
1980
|
let command = RubyCommand(commandID: "", methodName: "jira", className: nil, args: [RubyCommand.Argument(name: "url", value: url),
|
|
1981
|
+
RubyCommand.Argument(name: "context_path", value: contextPath),
|
|
1976
1982
|
RubyCommand.Argument(name: "username", value: username),
|
|
1977
1983
|
RubyCommand.Argument(name: "password", value: password),
|
|
1978
1984
|
RubyCommand.Argument(name: "ticket_id", value: ticketId),
|
|
@@ -2340,7 +2346,7 @@ func pluginScores(outputPath: String,
|
|
|
2340
2346
|
func podLibLint(useBundleExec: Bool = true,
|
|
2341
2347
|
verbose: String? = nil,
|
|
2342
2348
|
allowWarnings: String? = nil,
|
|
2343
|
-
sources: String? = nil,
|
|
2349
|
+
sources: [String]? = nil,
|
|
2344
2350
|
useLibraries: Bool = false,
|
|
2345
2351
|
failFast: Bool = false,
|
|
2346
2352
|
`private`: Bool = false,
|
|
@@ -2360,7 +2366,7 @@ func podPush(useBundleExec: Bool = false,
|
|
|
2360
2366
|
repo: String? = nil,
|
|
2361
2367
|
allowWarnings: String? = nil,
|
|
2362
2368
|
useLibraries: String? = nil,
|
|
2363
|
-
sources: String? = nil,
|
|
2369
|
+
sources: [String]? = nil,
|
|
2364
2370
|
swiftVersion: String? = nil,
|
|
2365
2371
|
verbose: Bool = false) {
|
|
2366
2372
|
let command = RubyCommand(commandID: "", methodName: "pod_push", className: nil, args: [RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec),
|
|
@@ -3134,6 +3140,7 @@ func snapshot(workspace: String? = snapshotfile.workspace,
|
|
|
3134
3140
|
numberOfRetries: Int = snapshotfile.numberOfRetries,
|
|
3135
3141
|
stopAfterFirstError: Bool = snapshotfile.stopAfterFirstError,
|
|
3136
3142
|
derivedDataPath: String? = snapshotfile.derivedDataPath,
|
|
3143
|
+
resultBundle: Bool = snapshotfile.resultBundle,
|
|
3137
3144
|
testTargetName: String? = snapshotfile.testTargetName,
|
|
3138
3145
|
namespaceLogFiles: String? = snapshotfile.namespaceLogFiles,
|
|
3139
3146
|
concurrentSimulators: Bool = snapshotfile.concurrentSimulators) {
|
|
@@ -3166,6 +3173,7 @@ func snapshot(workspace: String? = snapshotfile.workspace,
|
|
|
3166
3173
|
RubyCommand.Argument(name: "number_of_retries", value: numberOfRetries),
|
|
3167
3174
|
RubyCommand.Argument(name: "stop_after_first_error", value: stopAfterFirstError),
|
|
3168
3175
|
RubyCommand.Argument(name: "derived_data_path", value: derivedDataPath),
|
|
3176
|
+
RubyCommand.Argument(name: "result_bundle", value: resultBundle),
|
|
3169
3177
|
RubyCommand.Argument(name: "test_target_name", value: testTargetName),
|
|
3170
3178
|
RubyCommand.Argument(name: "namespace_log_files", value: namespaceLogFiles),
|
|
3171
3179
|
RubyCommand.Argument(name: "concurrent_simulators", value: concurrentSimulators)])
|
|
@@ -3179,7 +3187,8 @@ func sonar(projectConfigurationPath: String? = nil,
|
|
|
3179
3187
|
projectLanguage: String? = nil,
|
|
3180
3188
|
sourceEncoding: String? = nil,
|
|
3181
3189
|
sonarRunnerArgs: String? = nil,
|
|
3182
|
-
sonarLogin: String? = nil
|
|
3190
|
+
sonarLogin: String? = nil,
|
|
3191
|
+
sonarUrl: String? = nil) {
|
|
3183
3192
|
let command = RubyCommand(commandID: "", methodName: "sonar", className: nil, args: [RubyCommand.Argument(name: "project_configuration_path", value: projectConfigurationPath),
|
|
3184
3193
|
RubyCommand.Argument(name: "project_key", value: projectKey),
|
|
3185
3194
|
RubyCommand.Argument(name: "project_name", value: projectName),
|
|
@@ -3188,7 +3197,8 @@ func sonar(projectConfigurationPath: String? = nil,
|
|
|
3188
3197
|
RubyCommand.Argument(name: "project_language", value: projectLanguage),
|
|
3189
3198
|
RubyCommand.Argument(name: "source_encoding", value: sourceEncoding),
|
|
3190
3199
|
RubyCommand.Argument(name: "sonar_runner_args", value: sonarRunnerArgs),
|
|
3191
|
-
RubyCommand.Argument(name: "sonar_login", value: sonarLogin)
|
|
3200
|
+
RubyCommand.Argument(name: "sonar_login", value: sonarLogin),
|
|
3201
|
+
RubyCommand.Argument(name: "sonar_url", value: sonarUrl)])
|
|
3192
3202
|
_ = runner.executeCommand(command)
|
|
3193
3203
|
}
|
|
3194
3204
|
func splunkmint(dsym: String? = nil,
|
|
@@ -3581,13 +3591,15 @@ func updateUrlSchemes(path: String,
|
|
|
3581
3591
|
RubyCommand.Argument(name: "update_url_schemes", value: updateUrlSchemes)])
|
|
3582
3592
|
_ = runner.executeCommand(command)
|
|
3583
3593
|
}
|
|
3584
|
-
func uploadSymbolsToCrashlytics(dsymPath: String = "./spec/fixtures/dSYM/
|
|
3594
|
+
func uploadSymbolsToCrashlytics(dsymPath: String = "./spec/fixtures/dSYM/Themoji2.dSYM",
|
|
3595
|
+
dsymPaths: [String]? = nil,
|
|
3585
3596
|
apiToken: String? = nil,
|
|
3586
3597
|
gspPath: String? = nil,
|
|
3587
3598
|
binaryPath: String? = nil,
|
|
3588
3599
|
platform: String = "ios",
|
|
3589
3600
|
dsymWorkerThreads: Int = 1) {
|
|
3590
3601
|
let command = RubyCommand(commandID: "", methodName: "upload_symbols_to_crashlytics", className: nil, args: [RubyCommand.Argument(name: "dsym_path", value: dsymPath),
|
|
3602
|
+
RubyCommand.Argument(name: "dsym_paths", value: dsymPaths),
|
|
3591
3603
|
RubyCommand.Argument(name: "api_token", value: apiToken),
|
|
3592
3604
|
RubyCommand.Argument(name: "gsp_path", value: gspPath),
|
|
3593
3605
|
RubyCommand.Argument(name: "binary_path", value: binaryPath),
|
|
@@ -4051,4 +4063,4 @@ let screengrabfile: Screengrabfile = Screengrabfile()
|
|
|
4051
4063
|
let snapshotfile: Snapshotfile = Snapshotfile()
|
|
4052
4064
|
// Please don't remove the lines below
|
|
4053
4065
|
// They are used to detect outdated files
|
|
4054
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
4066
|
+
// FastlaneRunnerAPIVersion [0.9.23]
|
|
@@ -28,6 +28,7 @@ protocol SnapshotfileProtocol: class {
|
|
|
28
28
|
var numberOfRetries: Int { get }
|
|
29
29
|
var stopAfterFirstError: Bool { get }
|
|
30
30
|
var derivedDataPath: String? { get }
|
|
31
|
+
var resultBundle: Bool { get }
|
|
31
32
|
var testTargetName: String? { get }
|
|
32
33
|
var namespaceLogFiles: String? { get }
|
|
33
34
|
var concurrentSimulators: Bool { get }
|
|
@@ -63,6 +64,7 @@ extension SnapshotfileProtocol {
|
|
|
63
64
|
var numberOfRetries: Int { return 1 }
|
|
64
65
|
var stopAfterFirstError: Bool { return false }
|
|
65
66
|
var derivedDataPath: String? { return nil }
|
|
67
|
+
var resultBundle: Bool { return false }
|
|
66
68
|
var testTargetName: String? { return nil }
|
|
67
69
|
var namespaceLogFiles: String? { return nil }
|
|
68
70
|
var concurrentSimulators: Bool { return true }
|
|
@@ -70,4 +72,4 @@ extension SnapshotfileProtocol {
|
|
|
70
72
|
|
|
71
73
|
// Please don't remove the lines below
|
|
72
74
|
// They are used to detect outdated files
|
|
73
|
-
// FastlaneRunnerAPIVersion [0.9.
|
|
75
|
+
// FastlaneRunnerAPIVersion [0.9.4]
|
|
@@ -19,6 +19,10 @@ module FastlaneCore
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def action_launched(launch_context: nil)
|
|
22
|
+
unless did_show_message?
|
|
23
|
+
show_message
|
|
24
|
+
end
|
|
25
|
+
|
|
22
26
|
if @launch_event_sent || launch_context.p_hash.nil?
|
|
23
27
|
return
|
|
24
28
|
end
|
|
@@ -40,6 +44,25 @@ module FastlaneCore
|
|
|
40
44
|
def action_completed(completion_context: nil)
|
|
41
45
|
end
|
|
42
46
|
|
|
47
|
+
def show_message
|
|
48
|
+
UI.message("Sending anonymous analytics information")
|
|
49
|
+
UI.message("Learn more at https://docs.fastlane.tools/#metrics")
|
|
50
|
+
UI.message("No personal or sensitive data is sent.")
|
|
51
|
+
UI.message("You can disable this by adding `opt_out_usage` at the top of your Fastfile")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def did_show_message?
|
|
55
|
+
file_name = ".did_show_opt_info"
|
|
56
|
+
|
|
57
|
+
new_path = File.join(FastlaneCore.fastlane_user_dir, file_name)
|
|
58
|
+
did_show = File.exist?(new_path)
|
|
59
|
+
|
|
60
|
+
return did_show if did_show
|
|
61
|
+
|
|
62
|
+
File.write(new_path, '1')
|
|
63
|
+
false
|
|
64
|
+
end
|
|
65
|
+
|
|
43
66
|
def finalize_session
|
|
44
67
|
@threads.map(&:join)
|
|
45
68
|
end
|
|
@@ -43,7 +43,7 @@ module FastlaneCore
|
|
|
43
43
|
|
|
44
44
|
begin
|
|
45
45
|
# rubocop:disable Security/Eval
|
|
46
|
-
|
|
46
|
+
eval(content) # this is okay in this case
|
|
47
47
|
# rubocop:enable Security/Eval
|
|
48
48
|
|
|
49
49
|
print_resulting_config_values unless skip_printing_values # only on success
|
data/pilot/lib/pilot/options.rb
CHANGED
|
@@ -77,7 +77,7 @@ module Pilot
|
|
|
77
77
|
deprecated: true,
|
|
78
78
|
short_option: "-x",
|
|
79
79
|
env_name: "PILOT_UPDATE_BUILD_INFO_ON_UPLOAD",
|
|
80
|
-
description: "Update build info immediately after validation. This is deprecated and will be removed in a future release.
|
|
80
|
+
description: "Update build info immediately after validation. This is deprecated and will be removed in a future release. App Store Connect no longer supports setting build info until after build processing has completed, which is when build info is updated by default",
|
|
81
81
|
is_string: false,
|
|
82
82
|
default_value: false),
|
|
83
83
|
FastlaneCore::ConfigItem.new(key: :apple_id,
|
|
@@ -81,8 +81,8 @@ module Produce
|
|
|
81
81
|
app_service = Spaceship.app_service
|
|
82
82
|
enabled_clean_options = {}
|
|
83
83
|
|
|
84
|
-
# "
|
|
85
|
-
config_enabled_services = Produce.config[:enable_services] || Produce.config[:
|
|
84
|
+
# "enabled_features" was deprecated in favor of "enable_services"
|
|
85
|
+
config_enabled_services = Produce.config[:enable_services] || Produce.config[:enabled_features]
|
|
86
86
|
|
|
87
87
|
config_enabled_services.each do |k, v|
|
|
88
88
|
if k.to_sym == :data_protection
|
|
@@ -257,7 +257,7 @@ private extension XCUIElementQuery {
|
|
|
257
257
|
}
|
|
258
258
|
|
|
259
259
|
var deviceStatusBars: XCUIElementQuery {
|
|
260
|
-
let deviceWidth = XCUIApplication().frame.width
|
|
260
|
+
let deviceWidth = XCUIApplication().windows.firstMatch.frame.width
|
|
261
261
|
|
|
262
262
|
let isStatusBar = NSPredicate { (evaluatedObject, _) in
|
|
263
263
|
guard let element = evaluatedObject as? XCUIElementAttributes else { return false }
|
|
@@ -277,4 +277,4 @@ private extension CGFloat {
|
|
|
277
277
|
|
|
278
278
|
// Please don't remove the lines below
|
|
279
279
|
// They are used to detect outdated configuration files
|
|
280
|
-
// SnapshotHelperVersion [1.
|
|
280
|
+
// SnapshotHelperVersion [1.11]
|
|
@@ -10,6 +10,17 @@ module Snapshot
|
|
|
10
10
|
UI.verbose("Patching simulator to work with secure text fields")
|
|
11
11
|
|
|
12
12
|
Helper.backticks("defaults write com.apple.iphonesimulator ConnectHardwareKeyboard 0", print: FastlaneCore::Globals.verbose?)
|
|
13
|
+
|
|
14
|
+
# For > Xcode 9
|
|
15
|
+
# https://stackoverflow.com/questions/38010494/is-it-possible-to-toggle-software-keyboard-via-the-code-in-ui-test/47820883#47820883
|
|
16
|
+
Helper.backticks("/usr/libexec/PlistBuddy "\
|
|
17
|
+
"-c \"Print :DevicePreferences\" ~/Library/Preferences/com.apple.iphonesimulator.plist | "\
|
|
18
|
+
"perl -lne 'print $1 if /^ (\\S*) =/' | while read -r a; do /usr/libexec/PlistBuddy "\
|
|
19
|
+
"-c \"Set :DevicePreferences:$a:ConnectHardwareKeyboard false\" "\
|
|
20
|
+
"~/Library/Preferences/com.apple.iphonesimulator.plist "\
|
|
21
|
+
"|| /usr/libexec/PlistBuddy "\
|
|
22
|
+
"-c \"Add :DevicePreferences:$a:ConnectHardwareKeyboard bool false\" "\
|
|
23
|
+
"~/Library/Preferences/com.apple.iphonesimulator.plist; done", print: FastlaneCore::Globals.verbose?)
|
|
13
24
|
end
|
|
14
25
|
end
|
|
15
26
|
end
|
|
@@ -195,6 +195,13 @@ module Snapshot
|
|
|
195
195
|
env_name: "SNAPSHOT_DERIVED_DATA_PATH",
|
|
196
196
|
description: "The directory where build products and other derived data will go",
|
|
197
197
|
optional: true),
|
|
198
|
+
FastlaneCore::ConfigItem.new(key: :result_bundle,
|
|
199
|
+
short_option: "-z",
|
|
200
|
+
env_name: "SNAPSHOT_RESULT_BUNDLE",
|
|
201
|
+
is_string: false,
|
|
202
|
+
description: "Should an Xcode result bundle be generated in the output directory",
|
|
203
|
+
default_value: false,
|
|
204
|
+
optional: true),
|
|
198
205
|
FastlaneCore::ConfigItem.new(key: :test_target_name,
|
|
199
206
|
env_name: "SNAPSHOT_TEST_TARGET_NAME",
|
|
200
207
|
description: "The name of the target you want to test (if you desire to override the Target Application from Xcode)",
|
|
@@ -11,7 +11,7 @@ module Snapshot
|
|
|
11
11
|
def generate(devices: nil, language: nil, locale: nil, log_path: nil)
|
|
12
12
|
parts = prefix
|
|
13
13
|
parts << "xcodebuild"
|
|
14
|
-
parts += options
|
|
14
|
+
parts += options(language, locale)
|
|
15
15
|
parts += destination(devices)
|
|
16
16
|
parts += build_settings
|
|
17
17
|
parts += actions
|
|
@@ -17,12 +17,15 @@ module Snapshot
|
|
|
17
17
|
UI.user_error!("No project/workspace found")
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
-
def options
|
|
20
|
+
def options(language, locale)
|
|
21
21
|
config = Snapshot.config
|
|
22
|
+
result_bundle_path = resolve_result_bundle_path(language, locale) if config[:result_bundle]
|
|
23
|
+
|
|
22
24
|
options = []
|
|
23
25
|
options += project_path_array
|
|
24
26
|
options << "-sdk '#{config[:sdk]}'" if config[:sdk]
|
|
25
27
|
options << "-derivedDataPath '#{derived_data_path}'"
|
|
28
|
+
options << "-resultBundlePath '#{result_bundle_path}'" if result_bundle_path
|
|
26
29
|
options << config[:xcargs] if config[:xcargs]
|
|
27
30
|
return options
|
|
28
31
|
end
|
|
@@ -80,6 +83,20 @@ module Snapshot
|
|
|
80
83
|
Snapshot.cache[:derived_data_path] ||= (Snapshot.config[:derived_data_path] || Dir.mktmpdir("snapshot_derived"))
|
|
81
84
|
end
|
|
82
85
|
|
|
86
|
+
def resolve_result_bundle_path(language, locale)
|
|
87
|
+
Snapshot.cache[:result_bundle_path] = {}
|
|
88
|
+
language_key = locale || language
|
|
89
|
+
|
|
90
|
+
unless Snapshot.cache[:result_bundle_path][language_key]
|
|
91
|
+
path = File.join(Snapshot.config[:output_directory], "test_output", language_key, Snapshot.config[:scheme]) + ".test_result"
|
|
92
|
+
if File.directory?(path)
|
|
93
|
+
FileUtils.remove_dir(path)
|
|
94
|
+
end
|
|
95
|
+
Snapshot.cache[:result_bundle_path][language_key] = path
|
|
96
|
+
end
|
|
97
|
+
return Snapshot.cache[:result_bundle_path][language_key]
|
|
98
|
+
end
|
|
99
|
+
|
|
83
100
|
def initialize
|
|
84
101
|
not_implemented(__method__)
|
|
85
102
|
end
|
|
@@ -12,7 +12,7 @@ module Snapshot
|
|
|
12
12
|
def generate(device_type: nil, language: nil, locale: nil)
|
|
13
13
|
parts = prefix
|
|
14
14
|
parts << "xcodebuild"
|
|
15
|
-
parts += options
|
|
15
|
+
parts += options(language, locale)
|
|
16
16
|
parts += destination(device_type)
|
|
17
17
|
parts += build_settings
|
|
18
18
|
parts += actions
|
data/spaceship/README.md
CHANGED
|
@@ -109,7 +109,7 @@ This requires you to install `pry` using `sudo gem install pry`. `pry` is not in
|
|
|
109
109
|
|
|
110
110
|
## App Store Connect API
|
|
111
111
|
|
|
112
|
-
##### Open [
|
|
112
|
+
##### Open [AppStoreConnect.md](docs/AppStoreConnect.md) for code samples
|
|
113
113
|
|
|
114
114
|
## 2 Step Verification
|
|
115
115
|
|
|
@@ -63,7 +63,7 @@ module Spaceship
|
|
|
63
63
|
PushNotification = AppService.new_service("push")
|
|
64
64
|
SiriKit = AppService.new_service("SI015DKUHP")
|
|
65
65
|
VPNConfiguration = AppService.new_service("V66P55NK2I")
|
|
66
|
-
Wallet = AppService.new_service("
|
|
66
|
+
Wallet = AppService.new_service("pass")
|
|
67
67
|
WirelessAccessory = AppService.new_service("WC421J6T7P")
|
|
68
68
|
|
|
69
69
|
constants.each do |c|
|
|
@@ -2,7 +2,7 @@ require_relative 'app_review'
|
|
|
2
2
|
|
|
3
3
|
module Spaceship
|
|
4
4
|
module Tunes
|
|
5
|
-
# Represents app ratings from
|
|
5
|
+
# Represents app ratings from App Store Connect
|
|
6
6
|
class AppRatings < TunesBase
|
|
7
7
|
# @return (Spaceship::Tunes::Application) A reference to the application
|
|
8
8
|
# this version is for
|
|
@@ -29,8 +29,8 @@ module Spaceship
|
|
|
29
29
|
# If the user is in multiple teams, a team selection is shown.
|
|
30
30
|
# The user can then select a team by entering the number
|
|
31
31
|
#
|
|
32
|
-
# @param team_id (String) (optional): The ID of
|
|
33
|
-
# @param team_name (String) (optional): The name of
|
|
32
|
+
# @param team_id (String) (optional): The ID of an App Store Connect team
|
|
33
|
+
# @param team_name (String) (optional): The name of an App Store Connect team
|
|
34
34
|
def select_team(team_id: nil, team_name: nil)
|
|
35
35
|
@client.select_team(team_id: team_id, team_name: team_name)
|
|
36
36
|
end
|
|
@@ -56,8 +56,8 @@ module Spaceship
|
|
|
56
56
|
# Shows a team selection for the user in the terminal. This should not be
|
|
57
57
|
# called on CI systems
|
|
58
58
|
#
|
|
59
|
-
# @param team_id (String) (optional): The ID of
|
|
60
|
-
# @param team_name (String) (optional): The name of
|
|
59
|
+
# @param team_id (String) (optional): The ID of an App Store Connect team
|
|
60
|
+
# @param team_name (String) (optional): The name of an App Store Connect team
|
|
61
61
|
def select_team(team_id: nil, team_name: nil)
|
|
62
62
|
t_id = (team_id || ENV['FASTLANE_ITC_TEAM_ID'] || '').strip
|
|
63
63
|
t_name = (team_name || ENV['FASTLANE_ITC_TEAM_NAME'] || '').strip
|
data/supply/lib/supply/client.rb
CHANGED
|
@@ -156,7 +156,7 @@ module Supply
|
|
|
156
156
|
end
|
|
157
157
|
end
|
|
158
158
|
|
|
159
|
-
# Get a list of all
|
|
159
|
+
# Get a list of all APK version codes - returns the list of version codes
|
|
160
160
|
def apks_version_codes
|
|
161
161
|
ensure_active_edit!
|
|
162
162
|
|
|
@@ -165,6 +165,15 @@ module Supply
|
|
|
165
165
|
return Array(result.apks).map(&:version_code)
|
|
166
166
|
end
|
|
167
167
|
|
|
168
|
+
# Get a list of all AAB version codes - returns the list of version codes
|
|
169
|
+
def aab_version_codes
|
|
170
|
+
ensure_active_edit!
|
|
171
|
+
|
|
172
|
+
result = call_google_api { android_publisher.list_edit_bundles(current_package_name, current_edit.id) }
|
|
173
|
+
|
|
174
|
+
return Array(result.bundles).map(&:version_code)
|
|
175
|
+
end
|
|
176
|
+
|
|
168
177
|
# Get a list of all apk listings (changelogs) - returns the list
|
|
169
178
|
def apk_listings(apk_version_code)
|
|
170
179
|
ensure_active_edit!
|
|
@@ -66,13 +66,16 @@ module Supply
|
|
|
66
66
|
client.apks_version_codes.each do |apk_version_code|
|
|
67
67
|
upload_changelog(language, apk_version_code)
|
|
68
68
|
end
|
|
69
|
+
client.aab_version_codes.each do |aab_version_code|
|
|
70
|
+
upload_changelog(language, aab_version_code)
|
|
71
|
+
end
|
|
69
72
|
end
|
|
70
73
|
|
|
71
|
-
def upload_changelog(language,
|
|
72
|
-
path = File.join(metadata_path, language, Supply::CHANGELOGS_FOLDER_NAME, "#{
|
|
74
|
+
def upload_changelog(language, version_code)
|
|
75
|
+
path = File.join(metadata_path, language, Supply::CHANGELOGS_FOLDER_NAME, "#{version_code}.txt")
|
|
73
76
|
if File.exist?(path)
|
|
74
|
-
UI.message("Updating changelog for code version '#{
|
|
75
|
-
apk_listing = ApkListing.new(File.read(path, encoding: 'UTF-8'), language,
|
|
77
|
+
UI.message("Updating changelog for code version '#{version_code}' and language '#{language}'...")
|
|
78
|
+
apk_listing = ApkListing.new(File.read(path, encoding: 'UTF-8'), language, version_code)
|
|
76
79
|
client.update_apk_listing_for_language(apk_listing)
|
|
77
80
|
end
|
|
78
81
|
end
|
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.100.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
+
- Aaron Brager
|
|
8
|
+
- Jorge Revuelta H
|
|
9
|
+
- Joshua Liebowitz
|
|
10
|
+
- Maksym Grebenets
|
|
7
11
|
- Jimmy Dee
|
|
8
|
-
-
|
|
12
|
+
- Helmut Januschka
|
|
13
|
+
- Fumiya Nakamura
|
|
9
14
|
- Stefan Natchev
|
|
10
|
-
-
|
|
15
|
+
- Andrew McBurney
|
|
16
|
+
- Josh Holtz
|
|
17
|
+
- Luka Mirosevic
|
|
11
18
|
- Manu Wallner
|
|
12
|
-
-
|
|
19
|
+
- Kohki Miki
|
|
20
|
+
- Olivier Halligon
|
|
13
21
|
- Jan Piotrowski
|
|
14
|
-
- Aaron Brager
|
|
15
22
|
- Iulian Onofrei
|
|
16
|
-
- Danielle Tomlinson
|
|
17
|
-
- Fumiya Nakamura
|
|
18
|
-
- Olivier Halligon
|
|
19
|
-
- Helmut Januschka
|
|
20
|
-
- Luka Mirosevic
|
|
21
|
-
- Maksym Grebenets
|
|
22
|
-
- Jorge Revuelta H
|
|
23
23
|
- Matthew Ellis
|
|
24
|
+
- Danielle Tomlinson
|
|
25
|
+
- Felix Krause
|
|
24
26
|
- Jérôme Lacoste
|
|
25
|
-
- Andrew McBurney
|
|
26
|
-
- Kohki Miki
|
|
27
27
|
autorequire:
|
|
28
28
|
bindir: bin
|
|
29
29
|
cert_chain: []
|
|
30
|
-
date: 2018-07-
|
|
30
|
+
date: 2018-07-19 00:00:00.000000000 Z
|
|
31
31
|
dependencies:
|
|
32
32
|
- !ruby/object:Gem::Dependency
|
|
33
33
|
name: slack-notifier
|