fastlane 2.135.0 → 2.138.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +78 -78
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +38 -4
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +19 -0
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +4 -2
- data/fastlane/lib/fastlane/actions/ensure_bundle_exec.rb +3 -3
- data/fastlane/lib/fastlane/actions/get_version_number.rb +7 -2
- data/fastlane/lib/fastlane/actions/google_play_track_version_codes.rb +5 -1
- data/fastlane/lib/fastlane/actions/gradle.rb +11 -1
- data/fastlane/lib/fastlane/actions/increment_version_number.rb +6 -3
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +2 -2
- data/fastlane/lib/fastlane/actions/register_devices.rb +5 -1
- data/fastlane/lib/fastlane/actions/ruby_version.rb +1 -1
- data/fastlane/lib/fastlane/actions/testfairy.rb +8 -1
- data/fastlane/lib/fastlane/actions/verify_build.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcode_select.rb +6 -1
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +2 -2
- data/fastlane/lib/fastlane/commands_generator.rb +1 -1
- data/fastlane/lib/fastlane/helper/adb_helper.rb +13 -4
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -0
- data/fastlane/lib/fastlane/swift_fastlane_function.rb +9 -0
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +47 -17
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +6 -2
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +14 -2
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
- data/match/lib/match/options.rb +8 -0
- data/match/lib/match/runner.rb +1 -0
- data/match/lib/match/storage/git_storage.rb +7 -2
- data/screengrab/lib/screengrab/module.rb +2 -0
- data/screengrab/lib/screengrab/options.rb +24 -11
- data/screengrab/lib/screengrab/runner.rb +79 -42
- data/spaceship/lib/spaceship/client.rb +9 -4
- data/spaceship/lib/spaceship/connect_api.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/models/app.rb +11 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +71 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_screenshot.rb +18 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +9 -0
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -5
- data/supply/lib/supply/client.rb +1 -0
- data/supply/lib/supply/options.rb +9 -2
- data/supply/lib/supply/uploader.rb +63 -39
- metadata +22 -24
- data/gym/lib/gym/.module.rb.swp +0 -0
- data/supply/lib/supply/.client.rb.swp +0 -0
- data/supply/lib/supply/.options.rb.swp +0 -0
- data/supply/lib/supply/.uploader.rb.swp +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe11c3d8b7afcbbe9c3bc070c3455d220e64200ab52ce4f1322deac1026c1581
|
4
|
+
data.tar.gz: c9e3ddf13fa0cdd2e648151851986a404d3075e89bc1a7492cb7027fc68a1814
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0b6291a3720ff53673da4c7c9091e2cd4688dbc4322ba48892abae02e3db40c6f6a1b19dd66cb927cd8d8fdffb750a4a196c6a813bb133beefdca97316433ee
|
7
|
+
data.tar.gz: 41bb5e5b8faa0bbf5f9126b7a8cd73a74309cc1fd68affaedda41b12d87e5994de45e90206c30a7047d20c05d3165490c9e9f9faeab9f94736ad4428084cf50f
|
data/README.md
CHANGED
@@ -34,61 +34,55 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
34
34
|
<!-- This table is regenerated and resorted on each release -->
|
35
35
|
<table id='team'>
|
36
36
|
<tr>
|
37
|
-
<td id='
|
38
|
-
<a href='https://github.com/
|
39
|
-
<img src='https://github.com/
|
37
|
+
<td id='jérôme-lacoste'>
|
38
|
+
<a href='https://github.com/lacostej'>
|
39
|
+
<img src='https://github.com/lacostej.png?size=140'>
|
40
40
|
</a>
|
41
|
-
<h4 align='center'><a href='https://twitter.com/
|
41
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
42
42
|
</td>
|
43
|
-
<td id='
|
44
|
-
<a href='https://github.com/
|
45
|
-
<img src='https://github.com/
|
43
|
+
<td id='olivier-halligon'>
|
44
|
+
<a href='https://github.com/AliSoftware'>
|
45
|
+
<img src='https://github.com/AliSoftware.png?size=140'>
|
46
46
|
</a>
|
47
|
-
<h4 align='center'><a href='https://twitter.com/
|
47
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
48
48
|
</td>
|
49
|
-
<td id='
|
50
|
-
<a href='https://github.com/
|
51
|
-
<img src='https://github.com/
|
49
|
+
<td id='andrew-mcburney'>
|
50
|
+
<a href='https://github.com/armcburney'>
|
51
|
+
<img src='https://github.com/armcburney.png?size=140'>
|
52
52
|
</a>
|
53
|
-
<h4 align='center'>
|
53
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
54
54
|
</td>
|
55
|
-
<td id='
|
56
|
-
<a href='https://github.com/
|
57
|
-
<img src='https://github.com/
|
55
|
+
<td id='fumiya-nakamura'>
|
56
|
+
<a href='https://github.com/nafu'>
|
57
|
+
<img src='https://github.com/nafu.png?size=140'>
|
58
58
|
</a>
|
59
|
-
<h4 align='center'><a href='https://twitter.com/
|
59
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
60
60
|
</td>
|
61
|
-
<td id='
|
62
|
-
<a href='https://github.com/
|
63
|
-
<img src='https://github.com/
|
61
|
+
<td id='stefan-natchev'>
|
62
|
+
<a href='https://github.com/snatchev'>
|
63
|
+
<img src='https://github.com/snatchev.png?size=140'>
|
64
64
|
</a>
|
65
|
-
<h4 align='center'><a href='https://twitter.com/
|
65
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
66
66
|
</td>
|
67
67
|
</tr>
|
68
68
|
<tr>
|
69
|
-
<td id='
|
70
|
-
<a href='https://github.com/
|
71
|
-
<img src='https://github.com/
|
72
|
-
</a>
|
73
|
-
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
74
|
-
</td>
|
75
|
-
<td id='felix-krause'>
|
76
|
-
<a href='https://github.com/KrauseFx'>
|
77
|
-
<img src='https://github.com/KrauseFx.png?size=140'>
|
69
|
+
<td id='jorge-revuelta-h'>
|
70
|
+
<a href='https://github.com/minuscorp'>
|
71
|
+
<img src='https://github.com/minuscorp.png?size=140'>
|
78
72
|
</a>
|
79
|
-
<h4 align='center'><a href='https://twitter.com/
|
73
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
80
74
|
</td>
|
81
|
-
<td id='
|
82
|
-
<a href='https://github.com/
|
83
|
-
<img src='https://github.com/
|
75
|
+
<td id='jan-piotrowski'>
|
76
|
+
<a href='https://github.com/janpio'>
|
77
|
+
<img src='https://github.com/janpio.png?size=140'>
|
84
78
|
</a>
|
85
|
-
<h4 align='center'><a href='https://twitter.com/
|
79
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
86
80
|
</td>
|
87
|
-
<td id='
|
88
|
-
<a href='https://github.com/
|
89
|
-
<img src='https://github.com/
|
81
|
+
<td id='jimmy-dee'>
|
82
|
+
<a href='https://github.com/jdee'>
|
83
|
+
<img src='https://github.com/jdee.png?size=140'>
|
90
84
|
</a>
|
91
|
-
<h4 align='center'
|
85
|
+
<h4 align='center'>Jimmy Dee</h4>
|
92
86
|
</td>
|
93
87
|
<td id='matthew-ellis'>
|
94
88
|
<a href='https://github.com/matthewellis'>
|
@@ -96,31 +90,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
96
90
|
</a>
|
97
91
|
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
98
92
|
</td>
|
99
|
-
|
100
|
-
<
|
101
|
-
<
|
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>
|
107
|
-
<td id='jan-piotrowski'>
|
108
|
-
<a href='https://github.com/janpio'>
|
109
|
-
<img src='https://github.com/janpio.png?size=140'>
|
93
|
+
<td id='josh-holtz'>
|
94
|
+
<a href='https://github.com/joshdholtz'>
|
95
|
+
<img src='https://github.com/joshdholtz.png?size=140'>
|
110
96
|
</a>
|
111
|
-
<h4 align='center'><a href='https://twitter.com/
|
97
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
112
98
|
</td>
|
113
|
-
|
114
|
-
<
|
115
|
-
<
|
99
|
+
</tr>
|
100
|
+
<tr>
|
101
|
+
<td id='joshua-liebowitz'>
|
102
|
+
<a href='https://github.com/taquitos'>
|
103
|
+
<img src='https://github.com/taquitos.png?size=140'>
|
116
104
|
</a>
|
117
|
-
<h4 align='center'><a href='https://twitter.com/
|
105
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
118
106
|
</td>
|
119
|
-
<td id='
|
120
|
-
<a href='https://github.com/
|
121
|
-
<img src='https://github.com/
|
107
|
+
<td id='helmut-januschka'>
|
108
|
+
<a href='https://github.com/hjanuschka'>
|
109
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
122
110
|
</a>
|
123
|
-
<h4 align='center'><a href='https://twitter.com/
|
111
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
124
112
|
</td>
|
125
113
|
<td id='danielle-tomlinson'>
|
126
114
|
<a href='https://github.com/endocrimes'>
|
@@ -128,37 +116,49 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
128
116
|
</a>
|
129
117
|
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
130
118
|
</td>
|
119
|
+
<td id='manu-wallner'>
|
120
|
+
<a href='https://github.com/milch'>
|
121
|
+
<img src='https://github.com/milch.png?size=140'>
|
122
|
+
</a>
|
123
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
124
|
+
</td>
|
125
|
+
<td id='aaron-brager'>
|
126
|
+
<a href='https://github.com/getaaron'>
|
127
|
+
<img src='https://github.com/getaaron.png?size=140'>
|
128
|
+
</a>
|
129
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
130
|
+
</td>
|
131
131
|
</tr>
|
132
132
|
<tr>
|
133
|
-
<td id='
|
134
|
-
<a href='https://github.com/
|
135
|
-
<img src='https://github.com/
|
133
|
+
<td id='maksym-grebenets'>
|
134
|
+
<a href='https://github.com/mgrebenets'>
|
135
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
136
136
|
</a>
|
137
|
-
<h4 align='center'><a href='https://twitter.com/
|
137
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
138
138
|
</td>
|
139
|
-
<td id='
|
140
|
-
<a href='https://github.com/
|
141
|
-
<img src='https://github.com/
|
139
|
+
<td id='luka-mirosevic'>
|
140
|
+
<a href='https://github.com/lmirosevic'>
|
141
|
+
<img src='https://github.com/lmirosevic.png?size=140'>
|
142
142
|
</a>
|
143
|
-
<h4 align='center'><a href='https://twitter.com/
|
143
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
144
144
|
</td>
|
145
|
-
<td id='
|
146
|
-
<a href='https://github.com/
|
147
|
-
<img src='https://github.com/
|
145
|
+
<td id='iulian-onofrei'>
|
146
|
+
<a href='https://github.com/revolter'>
|
147
|
+
<img src='https://github.com/revolter.png?size=140'>
|
148
148
|
</a>
|
149
|
-
<h4 align='center'><a href='https://twitter.com/
|
149
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
150
150
|
</td>
|
151
|
-
<td id='
|
152
|
-
<a href='https://github.com/
|
153
|
-
<img src='https://github.com/
|
151
|
+
<td id='kohki-miki'>
|
152
|
+
<a href='https://github.com/giginet'>
|
153
|
+
<img src='https://github.com/giginet.png?size=140'>
|
154
154
|
</a>
|
155
|
-
<h4 align='center'><a href='https://twitter.com/
|
155
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
156
156
|
</td>
|
157
|
-
<td id='
|
158
|
-
<a href='https://github.com/
|
159
|
-
<img src='https://github.com/
|
157
|
+
<td id='felix-krause'>
|
158
|
+
<a href='https://github.com/KrauseFx'>
|
159
|
+
<img src='https://github.com/KrauseFx.png?size=140'>
|
160
160
|
</a>
|
161
|
-
<h4 align='center'><a href='https://twitter.com/
|
161
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
162
162
|
</td>
|
163
163
|
</tr>
|
164
164
|
</table>
|
@@ -24,7 +24,7 @@ module Fastlane
|
|
24
24
|
Spaceship::Tunes.select_team(team_id: params[:team_id], team_name: params[:team_name])
|
25
25
|
UI.message("Login successful")
|
26
26
|
|
27
|
-
app = Spaceship::Tunes::Application.find(params[:app_identifier])
|
27
|
+
app = Spaceship::Tunes::Application.find(params[:app_identifier], mac: params[:platform] == "osx")
|
28
28
|
UI.user_error!("Could not find an app on App Store Connect with app_identifier: #{params[:app_identifier]}") unless app
|
29
29
|
if params[:live]
|
30
30
|
UI.message("Fetching the latest build number for live-version")
|
@@ -26,11 +26,13 @@ sudo gem install fastlane
|
|
26
26
|
|
27
27
|
##### Gradle dependency
|
28
28
|
```java
|
29
|
-
|
29
|
+
androidTestImplementation 'tools.fastlane:screengrab:x.x.x'
|
30
30
|
```
|
31
31
|
|
32
32
|
The latest version is [ ![Download](https://api.bintray.com/packages/fastlane/fastlane/screengrab/images/download.svg) ](https://bintray.com/fastlane/fastlane/screengrab/_latestVersion)
|
33
33
|
|
34
|
+
As of Screengrab version 2.0.0, all Android test dependencies are AndroidX dependencies. This means a device with API 18+, Android 4.3 or greater is required. If you wish to capture screenshots with an older Android OS, then you must use a 1.x.x version.
|
35
|
+
|
34
36
|
##### Configuring your Manifest Permissions
|
35
37
|
|
36
38
|
Ensure that the following permissions exist in your **src/debug/AndroidManifest.xml**
|
@@ -82,10 +84,10 @@ As of _screengrab_ 0.5.0, you can specify different strategies to control the wa
|
|
82
84
|
* Multi-window situations are correctly captured (dialogs, etc.)
|
83
85
|
* Works on Android N
|
84
86
|
|
85
|
-
However, UI Automator requires a device with **API level >= 18
|
87
|
+
UI Automator is the default strategy. However, UI Automator requires a device with **API level >= 18**. If you need to grab screenshots on an older Android version, use the latest 1.x.x version of this library and set the DecorView ScreenshotStrategy.
|
86
88
|
|
87
89
|
```java
|
88
|
-
Screengrab.setDefaultScreenshotStrategy(new
|
90
|
+
Screengrab.setDefaultScreenshotStrategy(new DecorViewScreenshotStrategy());
|
89
91
|
```
|
90
92
|
|
91
93
|
## Improved screenshot capture with Falcon
|
@@ -169,7 +171,39 @@ If you're having trouble getting your device unlocked and the screen activated t
|
|
169
171
|
|
170
172
|
## Clean Status Bar
|
171
173
|
|
172
|
-
|
174
|
+
Screengrab can clean your status bar to make your screenshots even more beautiful.
|
175
|
+
Note: the clean status bar feature is only supported on devices with *API level >= 23*.
|
176
|
+
|
177
|
+
To use the clean status bar feature add the following lines to your src/debug/AndroidManifest.xml
|
178
|
+
```xml
|
179
|
+
<!-- Indicates the use of the clean status bar feature -->
|
180
|
+
<uses-feature android:name="tools.fastlane.screengrab.cleanstatusbar"/>
|
181
|
+
<!-- Allows for changing the status bar -->
|
182
|
+
<uses-permission android:name="android.permission.DUMP"/>
|
183
|
+
```
|
184
|
+
|
185
|
+
After that you can enable and disable the clean status bar at any moment during your tests.
|
186
|
+
In most cases you probably want to do this in the @BeforeClass and @AfterClass methods.
|
187
|
+
```java
|
188
|
+
@BeforeClass
|
189
|
+
public static void beforeAll() {
|
190
|
+
CleanStatusBar.enableWithDefaults();
|
191
|
+
}
|
192
|
+
|
193
|
+
@AfterClass
|
194
|
+
public static void afterAll() {
|
195
|
+
CleanStatusBar.disable();
|
196
|
+
}
|
197
|
+
```
|
198
|
+
|
199
|
+
Have a look at the methods of the `CleanStatusBar` class to customize the status bar even more.
|
200
|
+
You could for example show the Bluetooth icon and the LTE text.
|
201
|
+
```java
|
202
|
+
new CleanStatusBar()
|
203
|
+
.setBluetoothState(BluetoothState.DISCONNECTED)
|
204
|
+
.setMobileNetworkDataType(MobileDataType.LTE)
|
205
|
+
.enable();
|
206
|
+
```
|
173
207
|
|
174
208
|
# Advanced _screengrab_
|
175
209
|
|
@@ -111,6 +111,25 @@ match
|
|
111
111
|
|
112
112
|
You can find more information about GitHub basic authentication and personal token generation here: [https://developer.github.com/v3/auth/#basic-authentication](https://developer.github.com/v3/auth/#basic-authentication)
|
113
113
|
|
114
|
+
##### Git Storage on Azure Devops
|
115
|
+
|
116
|
+
If you're running a pipeline on Azure Devops and using git storage in a another repository on the same project, you might want to use `bearer` token authentication.
|
117
|
+
|
118
|
+
Using parameter:
|
119
|
+
|
120
|
+
```
|
121
|
+
match(git_bearer_authorization: '<YOUR TOKEN>')
|
122
|
+
```
|
123
|
+
|
124
|
+
Using environment variable:
|
125
|
+
|
126
|
+
```
|
127
|
+
ENV['MATCH_GIT_BEARER_AUTHORIZATION'] = '<YOUR TOKEN>'
|
128
|
+
match
|
129
|
+
```
|
130
|
+
|
131
|
+
You can find more information about this use case here: [https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/azure-repos-git?view=azure-devops&tabs=yaml#authorize-access-to-your-repositories](https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/azure-repos-git?view=azure-devops&tabs=yaml#authorize-access-to-your-repositories)
|
132
|
+
|
114
133
|
#### Google Cloud Storage
|
115
134
|
|
116
135
|
Use [Google Cloud Storage](https://cloud.google.com/storage/) for a fully hosted solution for your code signing identities. Certificates are stored on Google Cloud, encrypted using Google managed keys. Everything will be stored on your Google account, inside a storage bucket you provide. You can also directly access the files using the web console.
|
@@ -136,7 +136,7 @@ Note that these will replace the current images and screenshots on the play stor
|
|
136
136
|
|
137
137
|
## Changelogs (What's new)
|
138
138
|
|
139
|
-
You can add changelog files under the `changelogs/` directory for each locale. The filename should exactly match the [version code](https://developer.android.com/studio/publish/versioning#appversioning) of the APK that it represents. `fastlane supply init` will populate changelog files from existing data on Google Play if no `metadata/` directory exists when it is run.
|
139
|
+
You can add changelog files under the `changelogs/` directory for each locale. The filename should exactly match the [version code](https://developer.android.com/studio/publish/versioning#appversioning) of the APK that it represents. You can also provide default notes that will be used if no files match the version code by adding a `default.txt` file. `fastlane supply init` will populate changelog files from existing data on Google Play if no `metadata/` directory exists when it is run.
|
140
140
|
|
141
141
|
```no-highlight
|
142
142
|
└── fastlane
|
@@ -144,10 +144,12 @@ You can add changelog files under the `changelogs/` directory for each locale. T
|
|
144
144
|
└── android
|
145
145
|
├── en-US
|
146
146
|
│ └── changelogs
|
147
|
+
│ ├── default.txt
|
147
148
|
│ ├── 100000.txt
|
148
149
|
│ └── 100100.txt
|
149
150
|
└── fr-FR
|
150
151
|
└── changelogs
|
152
|
+
├── default.txt
|
151
153
|
└── 100100.txt
|
152
154
|
```
|
153
155
|
|
@@ -168,7 +170,7 @@ Before performing a new APK upload you may want to check existing track version
|
|
168
170
|
- Used when uploading with `:apk_path`, `:apk_paths`, `:aab_path`, and `:aab_paths`
|
169
171
|
- Can be any string such (example: "October Release" or "Awesome New Feature")
|
170
172
|
- Defaults to the version name in app/build.gradle or AndroidManifest.xml
|
171
|
-
- `:release_status`
|
173
|
+
- `:release_status`
|
172
174
|
- Used when uploading with `:apk_path`, `:apk_paths`, `:aab_path`, and `:aab_paths`
|
173
175
|
- Can set as "draft" to complete the release at some other time
|
174
176
|
- Defaults to "completed"
|
@@ -10,7 +10,7 @@ module Fastlane
|
|
10
10
|
if FastlaneCore::Helper.bundler?
|
11
11
|
UI.success("Using bundled fastlane ✅")
|
12
12
|
else
|
13
|
-
UI.user_error!("fastlane detected a Gemfile in the current directory. However it seems like you
|
13
|
+
UI.user_error!("fastlane detected a Gemfile in the current directory. However, it seems like you didn't use `bundle exec`. Use `bundle exec fastlane #{ARGV.join(' ')}` instead.")
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -24,8 +24,8 @@ module Fastlane
|
|
24
24
|
|
25
25
|
def self.details
|
26
26
|
[
|
27
|
-
"This action will check if you are using bundle exec to run fastlane.",
|
28
|
-
"You can put it into `before_all`
|
27
|
+
"This action will check if you are using `bundle exec` to run fastlane.",
|
28
|
+
"You can put it into `before_all` to make sure that fastlane is ran using the `bundle exec fastlane` command."
|
29
29
|
].join("\n")
|
30
30
|
end
|
31
31
|
|
@@ -91,7 +91,7 @@ module Fastlane
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def self.get_plist!(folder, target, configuration = nil)
|
94
|
-
plist_files = target.resolved_build_setting("INFOPLIST_FILE")
|
94
|
+
plist_files = target.resolved_build_setting("INFOPLIST_FILE", true)
|
95
95
|
plist_files_count = plist_files.values.compact.uniq.count
|
96
96
|
|
97
97
|
# Get plist file for specified configuration
|
@@ -113,7 +113,12 @@ module Fastlane
|
|
113
113
|
plist_file.gsub!("$(SRCROOT)/", "")
|
114
114
|
end
|
115
115
|
|
116
|
-
plist_file
|
116
|
+
# plist_file can be `Relative` or `Absolute` path.
|
117
|
+
# Make to `Absolute` path when plist_file is `Relative` path
|
118
|
+
unless File.exist?(plist_file)
|
119
|
+
plist_file = File.absolute_path(File.join(folder, plist_file))
|
120
|
+
end
|
121
|
+
|
117
122
|
UI.user_error!("Cannot find plist file: #{plist_file}") unless File.exist?(plist_file)
|
118
123
|
|
119
124
|
plist_file
|
@@ -20,7 +20,11 @@ module Fastlane
|
|
20
20
|
|
21
21
|
Supply.config = params
|
22
22
|
|
23
|
-
|
23
|
+
# AndroidpublisherV3 returns version codes as array of strings
|
24
|
+
# even though version codes need to be integers
|
25
|
+
# https://github.com/fastlane/fastlane/issues/15622
|
26
|
+
version_codes = Supply::Reader.new.track_version_codes || []
|
27
|
+
return version_codes.compact.map(&:to_i)
|
24
28
|
end
|
25
29
|
|
26
30
|
#####################################################
|
@@ -10,6 +10,8 @@ module Fastlane
|
|
10
10
|
GRADLE_ALL_AAB_OUTPUT_PATHS = :GRADLE_ALL_AAB_OUTPUT_PATHS
|
11
11
|
GRADLE_OUTPUT_JSON_OUTPUT_PATH = :GRADLE_OUTPUT_JSON_OUTPUT_PATH
|
12
12
|
GRADLE_ALL_OUTPUT_JSON_OUTPUT_PATHS = :GRADLE_ALL_OUTPUT_JSON_OUTPUT_PATHS
|
13
|
+
GRADLE_MAPPING_TXT_OUTPUT_PATH = :GRADLE_MAPPING_TXT_OUTPUT_PATH
|
14
|
+
GRADLE_ALL_MAPPING_TXT_OUTPUT_PATHS = :GRADLE_ALL_MAPPING_TXT_OUTPUT_PATHS
|
13
15
|
GRADLE_FLAVOR = :GRADLE_FLAVOR
|
14
16
|
GRADLE_BUILD_TYPE = :GRADLE_BUILD_TYPE
|
15
17
|
end
|
@@ -63,6 +65,7 @@ module Fastlane
|
|
63
65
|
apk_search_path = File.join(project_dir, '**', 'build', 'outputs', 'apk', '**', '*.apk')
|
64
66
|
aab_search_path = File.join(project_dir, '**', 'build', 'outputs', 'bundle', '**', '*.aab')
|
65
67
|
output_json_search_path = File.join(project_dir, '**', 'build', 'outputs', 'apk', '**', 'output.json')
|
68
|
+
mapping_txt_search_path = File.join(project_dir, '**', 'build', 'outputs', 'mapping', '**', 'mapping.txt')
|
66
69
|
|
67
70
|
# Our apk/aab is now built, but there might actually be multiple ones that were built if a flavor was not specified in a multi-flavor project (e.g. `assembleRelease`)
|
68
71
|
# However, we're not interested in unaligned apk's...
|
@@ -72,11 +75,14 @@ module Fastlane
|
|
72
75
|
new_aabs = new_aabs.map { |path| File.expand_path(path) }
|
73
76
|
new_output_jsons = Dir[output_json_search_path]
|
74
77
|
new_output_jsons = new_output_jsons.map { |path| File.expand_path(path) }
|
78
|
+
new_mapping_txts = Dir[mapping_txt_search_path]
|
79
|
+
new_mapping_txts = new_mapping_txts.map { |path| File.expand_path(path) }
|
75
80
|
|
76
81
|
# We expose all of these new apks and aabs
|
77
82
|
Actions.lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS] = new_apks
|
78
83
|
Actions.lane_context[SharedValues::GRADLE_ALL_AAB_OUTPUT_PATHS] = new_aabs
|
79
84
|
Actions.lane_context[SharedValues::GRADLE_ALL_OUTPUT_JSON_OUTPUT_PATHS] = new_output_jsons
|
85
|
+
Actions.lane_context[SharedValues::GRADLE_ALL_MAPPING_TXT_OUTPUT_PATHS] = new_mapping_txts
|
80
86
|
|
81
87
|
# We also take the most recent apk and aab to return as SharedValues::GRADLE_APK_OUTPUT_PATH and SharedValues::GRADLE_AAB_OUTPUT_PATH
|
82
88
|
# This is the one that will be relevant for most projects that just build a single build variant (flavor + build type combo).
|
@@ -84,9 +90,11 @@ module Fastlane
|
|
84
90
|
last_apk_path = new_apks.sort_by(&File.method(:mtime)).last
|
85
91
|
last_aab_path = new_aabs.sort_by(&File.method(:mtime)).last
|
86
92
|
last_output_json_path = new_output_jsons.sort_by(&File.method(:mtime)).last
|
93
|
+
last_mapping_txt_path = new_mapping_txts.sort_by(&File.method(:mtime)).last
|
87
94
|
Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] = File.expand_path(last_apk_path) if last_apk_path
|
88
95
|
Actions.lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH] = File.expand_path(last_aab_path) if last_aab_path
|
89
96
|
Actions.lane_context[SharedValues::GRADLE_OUTPUT_JSON_OUTPUT_PATH] = File.expand_path(last_output_json_path) if last_output_json_path
|
97
|
+
Actions.lane_context[SharedValues::GRADLE_MAPPING_TXT_OUTPUT_PATH] = File.expand_path(last_mapping_txt_path) if last_mapping_txt_path
|
90
98
|
|
91
99
|
# Give a helpful message in case there were no new apks or aabs. Remember we're only running this code when assembling, in which case we certainly expect there to be an apk or aab
|
92
100
|
UI.message('Couldn\'t find any new signed apk files...') if new_apks.empty? && new_aabs.empty?
|
@@ -175,7 +183,9 @@ module Fastlane
|
|
175
183
|
['GRADLE_AAB_OUTPUT_PATH', 'The path to the most recent Android app bundle'],
|
176
184
|
['GRADLE_ALL_AAB_OUTPUT_PATHS', 'The paths to the most recent Android app bundles'],
|
177
185
|
['GRADLE_OUTPUT_JSON_OUTPUT_PATH', 'The path to the most recent output.json file'],
|
178
|
-
['GRADLE_ALL_OUTPUT_JSON_OUTPUT_PATHS', 'The path to the newly generated output.json files']
|
186
|
+
['GRADLE_ALL_OUTPUT_JSON_OUTPUT_PATHS', 'The path to the newly generated output.json files'],
|
187
|
+
['GRADLE_MAPPING_TXT_OUTPUT_PATH', 'The path to the most recent mapping.txt file'],
|
188
|
+
['GRADLE_ALL_MAPPING_TXT_OUTPUT_PATHS', 'The path to the newly generated mapping.txt files']
|
179
189
|
]
|
180
190
|
end
|
181
191
|
|