fastlane 2.135.0 → 2.138.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +78 -78
  3. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
  4. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +38 -4
  5. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +19 -0
  6. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +4 -2
  7. data/fastlane/lib/fastlane/actions/ensure_bundle_exec.rb +3 -3
  8. data/fastlane/lib/fastlane/actions/get_version_number.rb +7 -2
  9. data/fastlane/lib/fastlane/actions/google_play_track_version_codes.rb +5 -1
  10. data/fastlane/lib/fastlane/actions/gradle.rb +11 -1
  11. data/fastlane/lib/fastlane/actions/increment_version_number.rb +6 -3
  12. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +2 -2
  13. data/fastlane/lib/fastlane/actions/register_devices.rb +5 -1
  14. data/fastlane/lib/fastlane/actions/ruby_version.rb +1 -1
  15. data/fastlane/lib/fastlane/actions/testfairy.rb +8 -1
  16. data/fastlane/lib/fastlane/actions/verify_build.rb +1 -1
  17. data/fastlane/lib/fastlane/actions/xcode_select.rb +6 -1
  18. data/fastlane/lib/fastlane/cli_tools_distributor.rb +2 -2
  19. data/fastlane/lib/fastlane/commands_generator.rb +1 -1
  20. data/fastlane/lib/fastlane/helper/adb_helper.rb +13 -4
  21. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -0
  22. data/fastlane/lib/fastlane/swift_fastlane_function.rb +9 -0
  23. data/fastlane/lib/fastlane/version.rb +1 -1
  24. data/fastlane/swift/Deliverfile.swift +1 -1
  25. data/fastlane/swift/Fastlane.swift +47 -17
  26. data/fastlane/swift/Gymfile.swift +1 -1
  27. data/fastlane/swift/Matchfile.swift +1 -1
  28. data/fastlane/swift/MatchfileProtocol.swift +6 -2
  29. data/fastlane/swift/Precheckfile.swift +1 -1
  30. data/fastlane/swift/Scanfile.swift +1 -1
  31. data/fastlane/swift/Screengrabfile.swift +1 -1
  32. data/fastlane/swift/ScreengrabfileProtocol.swift +14 -2
  33. data/fastlane/swift/Snapshotfile.swift +1 -1
  34. data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
  35. data/match/lib/match/options.rb +8 -0
  36. data/match/lib/match/runner.rb +1 -0
  37. data/match/lib/match/storage/git_storage.rb +7 -2
  38. data/screengrab/lib/screengrab/module.rb +2 -0
  39. data/screengrab/lib/screengrab/options.rb +24 -11
  40. data/screengrab/lib/screengrab/runner.rb +79 -42
  41. data/spaceship/lib/spaceship/client.rb +9 -4
  42. data/spaceship/lib/spaceship/connect_api.rb +2 -0
  43. data/spaceship/lib/spaceship/connect_api/models/app.rb +11 -0
  44. data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +71 -0
  45. data/spaceship/lib/spaceship/connect_api/models/beta_screenshot.rb +18 -0
  46. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +9 -0
  47. data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -5
  48. data/supply/lib/supply/client.rb +1 -0
  49. data/supply/lib/supply/options.rb +9 -2
  50. data/supply/lib/supply/uploader.rb +63 -39
  51. metadata +22 -24
  52. data/gym/lib/gym/.module.rb.swp +0 -0
  53. data/supply/lib/supply/.client.rb.swp +0 -0
  54. data/supply/lib/supply/.options.rb.swp +0 -0
  55. data/supply/lib/supply/.uploader.rb.swp +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 11ad4a66eed7e6f49928e1fe3672f975f70f7a0a70dec8d72297bffe8072abd6
4
- data.tar.gz: 07b35e9ee1d7051e2c60c87353e5def08c8956c5c7ca0e790dfe67493aa538e0
3
+ metadata.gz: fe11c3d8b7afcbbe9c3bc070c3455d220e64200ab52ce4f1322deac1026c1581
4
+ data.tar.gz: c9e3ddf13fa0cdd2e648151851986a404d3075e89bc1a7492cb7027fc68a1814
5
5
  SHA512:
6
- metadata.gz: aef0a8ad6b6504a50b04eeff619e261bccea0c1b0e80b89c385f9bc7561dc961763e1034a6c8c302eb131fee502ddcec348b42849e16daaf2266d8eca1723bfc
7
- data.tar.gz: 1577316c847c3cf3cb7473f8b69e1cede26b1e7f847a6c6d55c31431cba4e0a400425d43da3320cd69c5a5f8a348c8174204bfaac44c454c47f725aefb33f483
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='kohki-miki'>
38
- <a href='https://github.com/giginet'>
39
- <img src='https://github.com/giginet.png?size=140'>
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/giginet'>Kohki Miki</a></h4>
41
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
42
42
  </td>
43
- <td id='aaron-brager'>
44
- <a href='https://github.com/getaaron'>
45
- <img src='https://github.com/getaaron.png?size=140'>
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/getaaron'>Aaron Brager</a></h4>
47
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
48
48
  </td>
49
- <td id='jimmy-dee'>
50
- <a href='https://github.com/jdee'>
51
- <img src='https://github.com/jdee.png?size=140'>
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'>Jimmy Dee</h4>
53
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
54
54
  </td>
55
- <td id='jérôme-lacoste'>
56
- <a href='https://github.com/lacostej'>
57
- <img src='https://github.com/lacostej.png?size=140'>
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/lacostej'>Jérôme Lacoste</a></h4>
59
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
60
60
  </td>
61
- <td id='manu-wallner'>
62
- <a href='https://github.com/milch'>
63
- <img src='https://github.com/milch.png?size=140'>
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/acrooow'>Manu Wallner</a></h4>
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='luka-mirosevic'>
70
- <a href='https://github.com/lmirosevic'>
71
- <img src='https://github.com/lmirosevic.png?size=140'>
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/KrauseFx'>Felix Krause</a></h4>
73
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
80
74
  </td>
81
- <td id='josh-holtz'>
82
- <a href='https://github.com/joshdholtz'>
83
- <img src='https://github.com/joshdholtz.png?size=140'>
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/joshdholtz'>Josh Holtz</a></h4>
79
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
86
80
  </td>
87
- <td id='maksym-grebenets'>
88
- <a href='https://github.com/mgrebenets'>
89
- <img src='https://github.com/mgrebenets.png?size=140'>
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'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
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
- </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>
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/Sujan'>Jan Piotrowski</a></h4>
97
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
112
98
  </td>
113
- <td id='iulian-onofrei'>
114
- <a href='https://github.com/revolter'>
115
- <img src='https://github.com/revolter.png?size=140'>
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/Revolt666'>Iulian Onofrei</a></h4>
105
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
118
106
  </td>
119
- <td id='stefan-natchev'>
120
- <a href='https://github.com/snatchev'>
121
- <img src='https://github.com/snatchev.png?size=140'>
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/snatchev'>Stefan Natchev</a></h4>
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='jorge-revuelta-h'>
134
- <a href='https://github.com/minuscorp'>
135
- <img src='https://github.com/minuscorp.png?size=140'>
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/minuscorp'>Jorge Revuelta H</a></h4>
137
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
138
138
  </td>
139
- <td id='fumiya-nakamura'>
140
- <a href='https://github.com/nafu'>
141
- <img src='https://github.com/nafu.png?size=140'>
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/nafu003'>Fumiya Nakamura</a></h4>
143
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
144
144
  </td>
145
- <td id='joshua-liebowitz'>
146
- <a href='https://github.com/taquitos'>
147
- <img src='https://github.com/taquitos.png?size=140'>
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/taquitos'>Joshua Liebowitz</a></h4>
149
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
150
150
  </td>
151
- <td id='olivier-halligon'>
152
- <a href='https://github.com/AliSoftware'>
153
- <img src='https://github.com/AliSoftware.png?size=140'>
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/aligatr'>Olivier Halligon</a></h4>
155
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
156
156
  </td>
157
- <td id='helmut-januschka'>
158
- <a href='https://github.com/hjanuschka'>
159
- <img src='https://github.com/hjanuschka.png?size=140'>
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/hjanuschka'>Helmut Januschka</a></h4>
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
- androidTestCompile('tools.fastlane:screengrab:x.x.x')
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**, so it is not yet the default strategy. To enable it for all screenshots by default, make the following call before your tests run:
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 UiAutomatorScreenshotStrategy());
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
- You can use [QuickDemo](https://github.com/PSPDFKit-labs/QuickDemo) to clean up the status bar for your screenshots.
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 don't use `bundle exec`. Use `bundle exec fastlane #{ARGV.join(' ')}`")
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` and make sure that fastlane is run using `bundle exec fastlane` command."
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 = File.absolute_path(File.join(folder, 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
- Supply::Reader.new.track_version_codes
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