fastlane 2.137.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 +66 -66
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
- 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/get_version_number.rb +7 -2
- 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/verify_build.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcode_select.rb +6 -1
- data/fastlane/lib/fastlane/helper/adb_helper.rb +13 -4
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +16 -7
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +5 -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_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/runner.rb +11 -19
- 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/uploader.rb +7 -1
- metadata +22 -28
- data/fastlane/lib/fastlane/actions/.hockey.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp +0 -0
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/pilot/lib/pilot/.manager.rb.swp +0 -0
- data/spaceship/lib/spaceship/connect_api/.DS_Store +0 -0
- data/spaceship/lib/spaceship/portal/.certificate.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,23 +34,23 @@ 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'><a href='https://twitter.com/
|
53
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
54
54
|
</td>
|
55
55
|
<td id='fumiya-nakamura'>
|
56
56
|
<a href='https://github.com/nafu'>
|
@@ -66,29 +66,23 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
66
66
|
</td>
|
67
67
|
</tr>
|
68
68
|
<tr>
|
69
|
-
<td id='iulian-onofrei'>
|
70
|
-
<a href='https://github.com/revolter'>
|
71
|
-
<img src='https://github.com/revolter.png?size=140'>
|
72
|
-
</a>
|
73
|
-
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
74
|
-
</td>
|
75
|
-
<td id='jérôme-lacoste'>
|
76
|
-
<a href='https://github.com/lacostej'>
|
77
|
-
<img src='https://github.com/lacostej.png?size=140'>
|
78
|
-
</a>
|
79
|
-
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
80
|
-
</td>
|
81
69
|
<td id='jorge-revuelta-h'>
|
82
70
|
<a href='https://github.com/minuscorp'>
|
83
71
|
<img src='https://github.com/minuscorp.png?size=140'>
|
84
72
|
</a>
|
85
73
|
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
86
74
|
</td>
|
87
|
-
<td id='
|
88
|
-
<a href='https://github.com/
|
89
|
-
<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'>
|
90
78
|
</a>
|
91
|
-
<h4 align='center'><a href='https://twitter.com/
|
79
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
80
|
+
</td>
|
81
|
+
<td id='jimmy-dee'>
|
82
|
+
<a href='https://github.com/jdee'>
|
83
|
+
<img src='https://github.com/jdee.png?size=140'>
|
84
|
+
</a>
|
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,51 +90,69 @@ 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>
|
93
|
+
<td id='josh-holtz'>
|
94
|
+
<a href='https://github.com/joshdholtz'>
|
95
|
+
<img src='https://github.com/joshdholtz.png?size=140'>
|
96
|
+
</a>
|
97
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
98
|
+
</td>
|
99
99
|
</tr>
|
100
100
|
<tr>
|
101
|
-
<td id='
|
102
|
-
<a href='https://github.com/
|
103
|
-
<img src='https://github.com/
|
101
|
+
<td id='joshua-liebowitz'>
|
102
|
+
<a href='https://github.com/taquitos'>
|
103
|
+
<img src='https://github.com/taquitos.png?size=140'>
|
104
104
|
</a>
|
105
|
-
<h4 align='center'><a href='https://twitter.com/
|
105
|
+
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
106
106
|
</td>
|
107
|
-
<td id='
|
108
|
-
<a href='https://github.com/
|
109
|
-
<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'>
|
110
110
|
</a>
|
111
|
-
<h4 align='center'><a href='https://twitter.com/
|
111
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
112
112
|
</td>
|
113
|
-
<td id='
|
114
|
-
<a href='https://github.com/
|
115
|
-
<img src='https://github.com/
|
113
|
+
<td id='danielle-tomlinson'>
|
114
|
+
<a href='https://github.com/endocrimes'>
|
115
|
+
<img src='https://github.com/endocrimes.png?size=140'>
|
116
116
|
</a>
|
117
|
-
<h4 align='center'>
|
117
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
118
118
|
</td>
|
119
|
-
<td id='
|
120
|
-
<a href='https://github.com/
|
121
|
-
<img src='https://github.com/
|
119
|
+
<td id='manu-wallner'>
|
120
|
+
<a href='https://github.com/milch'>
|
121
|
+
<img src='https://github.com/milch.png?size=140'>
|
122
122
|
</a>
|
123
|
-
<h4 align='center'><a href='https://twitter.com/
|
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>
|
124
130
|
</td>
|
131
|
+
</tr>
|
132
|
+
<tr>
|
125
133
|
<td id='maksym-grebenets'>
|
126
134
|
<a href='https://github.com/mgrebenets'>
|
127
135
|
<img src='https://github.com/mgrebenets.png?size=140'>
|
128
136
|
</a>
|
129
137
|
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
130
138
|
</td>
|
131
|
-
|
132
|
-
<
|
133
|
-
<
|
134
|
-
<a href='https://github.com/endocrimes'>
|
135
|
-
<img src='https://github.com/endocrimes.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'>
|
136
142
|
</a>
|
137
|
-
<h4 align='center'><a href='https://twitter.com/
|
143
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
138
144
|
</td>
|
139
|
-
<td id='
|
140
|
-
<a href='https://github.com/
|
141
|
-
<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'>
|
142
148
|
</a>
|
143
|
-
<h4 align='center'><a href='https://twitter.com/
|
149
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
150
|
+
</td>
|
151
|
+
<td id='kohki-miki'>
|
152
|
+
<a href='https://github.com/giginet'>
|
153
|
+
<img src='https://github.com/giginet.png?size=140'>
|
154
|
+
</a>
|
155
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
144
156
|
</td>
|
145
157
|
<td id='felix-krause'>
|
146
158
|
<a href='https://github.com/KrauseFx'>
|
@@ -148,18 +160,6 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
148
160
|
</a>
|
149
161
|
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
150
162
|
</td>
|
151
|
-
<td id='joshua-liebowitz'>
|
152
|
-
<a href='https://github.com/taquitos'>
|
153
|
-
<img src='https://github.com/taquitos.png?size=140'>
|
154
|
-
</a>
|
155
|
-
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
156
|
-
</td>
|
157
|
-
<td id='andrew-mcburney'>
|
158
|
-
<a href='https://github.com/armcburney'>
|
159
|
-
<img src='https://github.com/armcburney.png?size=140'>
|
160
|
-
</a>
|
161
|
-
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
162
|
-
</td>
|
163
163
|
</tr>
|
164
164
|
</table>
|
165
165
|
|
@@ -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")
|
@@ -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"
|
@@ -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
|
@@ -43,6 +43,9 @@ module Fastlane
|
|
43
43
|
version_array = current_version.split(".").map(&:to_i)
|
44
44
|
|
45
45
|
case params[:bump_type]
|
46
|
+
when "bump"
|
47
|
+
version_array[-1] = version_array[-1] + 1
|
48
|
+
next_version_number = version_array.join(".")
|
46
49
|
when "patch"
|
47
50
|
UI.user_error!(version_token_error) if version_array.count < 3
|
48
51
|
version_array[2] = version_array[2] + 1
|
@@ -109,9 +112,9 @@ module Fastlane
|
|
109
112
|
FastlaneCore::ConfigItem.new(key: :bump_type,
|
110
113
|
env_name: "FL_VERSION_NUMBER_BUMP_TYPE",
|
111
114
|
description: "The type of this version bump. Available: patch, minor, major",
|
112
|
-
default_value: "
|
115
|
+
default_value: "bump",
|
113
116
|
verify_block: proc do |value|
|
114
|
-
UI.user_error!("Available values are 'patch', 'minor' and 'major'") unless ['patch', 'minor', 'major'].include?(value)
|
117
|
+
UI.user_error!("Available values are 'patch', 'minor' and 'major'") unless ['bump', 'patch', 'minor', 'major'].include?(value)
|
115
118
|
end),
|
116
119
|
FastlaneCore::ConfigItem.new(key: :version_number,
|
117
120
|
env_name: "FL_VERSION_NUMBER_VERSION_NUMBER",
|
@@ -148,7 +151,7 @@ module Fastlane
|
|
148
151
|
|
149
152
|
def self.example_code
|
150
153
|
[
|
151
|
-
'increment_version_number # Automatically increment
|
154
|
+
'increment_version_number # Automatically increment version number',
|
152
155
|
'increment_version_number(
|
153
156
|
bump_type: "patch" # Automatically increment patch version number
|
154
157
|
)',
|
@@ -64,7 +64,7 @@ module Fastlane
|
|
64
64
|
is_string: true,
|
65
65
|
default_value: "ios",
|
66
66
|
verify_block: proc do |value|
|
67
|
-
UI.user_error!("The platform can only be ios, or appletvos") unless %('ios', 'appletvos').include?(value)
|
67
|
+
UI.user_error!("The platform can only be ios, osx, or appletvos") unless %('osx', ios', 'appletvos').include?(value)
|
68
68
|
end),
|
69
69
|
FastlaneCore::ConfigItem.new(key: :initial_build_number,
|
70
70
|
env_name: "INITIAL_BUILD_NUMBER",
|
@@ -110,7 +110,7 @@ module Fastlane
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def self.is_supported?(platform)
|
113
|
-
|
113
|
+
[:ios, :mac].include?(platform)
|
114
114
|
end
|
115
115
|
|
116
116
|
def self.example_code
|
@@ -25,7 +25,11 @@ module Fastlane
|
|
25
25
|
end
|
26
26
|
|
27
27
|
new_devices = devices_file.drop(1).map do |row|
|
28
|
-
|
28
|
+
if row.count == 1
|
29
|
+
UI.user_error!("Invalid device line, ensure you are using tabs (NOT spaces). See Apple's sample/spec here: https://developer.apple.com/account/resources/downloads/Multiple-Upload-Samples.zip")
|
30
|
+
elsif !(2..3).cover?(row.count)
|
31
|
+
UI.user_error!("Invalid device line, please provide a file according to the Apple Sample UDID file (https://developer.apple.com/account/resources/downloads/Multiple-Upload-Samples.zip)")
|
32
|
+
end
|
29
33
|
row
|
30
34
|
end
|
31
35
|
else
|
@@ -92,7 +92,7 @@ module Fastlane
|
|
92
92
|
|
93
93
|
def self.evaulate(params, values)
|
94
94
|
if params[:provisioning_type]
|
95
|
-
UI.user_error!("Mismatched provisioning_type. Required: '#{params[:provisioning_type]}'
|
95
|
+
UI.user_error!("Mismatched provisioning_type. Required: '#{params[:provisioning_type]}'; Found: '#{values['provisioning_type']}'") unless params[:provisioning_type] == values['provisioning_type']
|
96
96
|
end
|
97
97
|
if params[:provisioning_uuid]
|
98
98
|
UI.user_error!("Mismatched provisioning_uuid. Required: '#{params[:provisioning_uuid]}'; Found: '#{values['provisioning_uuid']}'") unless params[:provisioning_uuid] == values['provisioning_uuid']
|
@@ -38,7 +38,12 @@ module Fastlane
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def self.details
|
41
|
-
|
41
|
+
[
|
42
|
+
"Select and build with the Xcode installed at the provided path.",
|
43
|
+
"Use the `xcversion` action if you want to select an Xcode:",
|
44
|
+
"- Based on a version specifier or",
|
45
|
+
"- You don't have known, stable paths, as may happen in a CI environment."
|
46
|
+
].join("\n")
|
42
47
|
end
|
43
48
|
|
44
49
|
def self.author
|
@@ -12,21 +12,30 @@ module Fastlane
|
|
12
12
|
# Path to the adb binary
|
13
13
|
attr_accessor :adb_path
|
14
14
|
|
15
|
+
# Path to the adb binary
|
16
|
+
attr_accessor :adb_host
|
17
|
+
|
15
18
|
# All available devices
|
16
19
|
attr_accessor :devices
|
17
20
|
|
18
|
-
def initialize(adb_path: nil)
|
21
|
+
def initialize(adb_path: nil, adb_host: nil)
|
19
22
|
android_home = ENV['ANDROID_HOME'] || ENV['ANDROID_SDK_ROOT'] || ENV['ANDROID_SDK']
|
20
23
|
if (adb_path.nil? || adb_path == "adb") && android_home
|
21
24
|
adb_path = File.join(android_home, "platform-tools", "adb")
|
22
25
|
end
|
26
|
+
|
23
27
|
self.adb_path = adb_path
|
28
|
+
self.adb_host = adb_host
|
29
|
+
end
|
30
|
+
|
31
|
+
def host_option
|
32
|
+
return self.adb_host ? "-H #{adb_host}" : nil
|
24
33
|
end
|
25
34
|
|
26
35
|
# Run a certain action
|
27
36
|
def trigger(command: nil, serial: nil)
|
28
37
|
android_serial = serial != "" ? "ANDROID_SERIAL=#{serial}" : nil
|
29
|
-
command = [android_serial, adb_path.shellescape, command].join(" ").strip
|
38
|
+
command = [android_serial, adb_path.shellescape, host_option, command].compact.join(" ").strip
|
30
39
|
Action.sh(command)
|
31
40
|
end
|
32
41
|
|
@@ -43,10 +52,10 @@ module Fastlane
|
|
43
52
|
def load_all_devices
|
44
53
|
self.devices = []
|
45
54
|
|
46
|
-
command = [adb_path.shellescape, "devices"].join(" ")
|
55
|
+
command = [adb_path.shellescape, host_option, "devices -l"].compact.join(" ")
|
47
56
|
output = Actions.sh(command, log: false)
|
48
57
|
output.split("\n").each do |line|
|
49
|
-
if (result = line.match(
|
58
|
+
if (result = line.match(/^(\S+)(\s+)(device )/))
|
50
59
|
self.devices << AdbDevice.new(serial: result[1])
|
51
60
|
end
|
52
61
|
end
|
@@ -2577,7 +2577,7 @@ func downloadDsyms(username: String,
|
|
2577
2577
|
func downloadFromPlayStore(packageName: String,
|
2578
2578
|
versionName: String? = nil,
|
2579
2579
|
track: String = "production",
|
2580
|
-
metadataPath: String =
|
2580
|
+
metadataPath: String? = nil,
|
2581
2581
|
key: String? = nil,
|
2582
2582
|
issuer: String? = nil,
|
2583
2583
|
jsonKey: String? = nil,
|
@@ -3878,7 +3878,7 @@ func importCertificate(certificatePath: String,
|
|
3878
3878
|
This action will increment the version number.
|
3879
3879
|
You first have to set up your Xcode project, if you haven't done it already: [https://developer.apple.com/library/ios/qa/qa1827/_index.html](https://developer.apple.com/library/ios/qa/qa1827/_index.html).
|
3880
3880
|
*/
|
3881
|
-
@discardableResult func incrementVersionNumber(bumpType: String = "
|
3881
|
+
@discardableResult func incrementVersionNumber(bumpType: String = "bump",
|
3882
3882
|
versionNumber: String? = nil,
|
3883
3883
|
xcodeproj: String? = nil) -> String {
|
3884
3884
|
let command = RubyCommand(commandID: "", methodName: "increment_version_number", className: nil, args: [RubyCommand.Argument(name: "bump_type", value: bumpType),
|
@@ -4233,6 +4233,7 @@ func makeChangelogFromJenkins(fallbackChangelog: String = "",
|
|
4233
4233
|
- shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
|
4234
4234
|
- cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
|
4235
4235
|
- gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
|
4236
|
+
- gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
|
4236
4237
|
- googleCloudBucketName: Name of the Google Cloud Storage bucket to use
|
4237
4238
|
- googleCloudKeysFile: Path to the gc_keys.json file
|
4238
4239
|
- googleCloudProjectId: ID of the Google Cloud project to use for authentication
|
@@ -4265,6 +4266,7 @@ func match(type: Any = matchfile.type,
|
|
4265
4266
|
shallowClone: Bool = matchfile.shallowClone,
|
4266
4267
|
cloneBranchDirectly: Bool = matchfile.cloneBranchDirectly,
|
4267
4268
|
gitBasicAuthorization: Any? = matchfile.gitBasicAuthorization,
|
4269
|
+
gitBearerAuthorization: Any? = matchfile.gitBearerAuthorization,
|
4268
4270
|
googleCloudBucketName: Any? = matchfile.googleCloudBucketName,
|
4269
4271
|
googleCloudKeysFile: Any? = matchfile.googleCloudKeysFile,
|
4270
4272
|
googleCloudProjectId: Any? = matchfile.googleCloudProjectId,
|
@@ -4294,6 +4296,7 @@ func match(type: Any = matchfile.type,
|
|
4294
4296
|
RubyCommand.Argument(name: "shallow_clone", value: shallowClone),
|
4295
4297
|
RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly),
|
4296
4298
|
RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization),
|
4299
|
+
RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization),
|
4297
4300
|
RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
|
4298
4301
|
RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
|
4299
4302
|
RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
|
@@ -6720,7 +6723,7 @@ func supply(packageName: String,
|
|
6720
6723
|
releaseStatus: String = "completed",
|
6721
6724
|
track: String = "production",
|
6722
6725
|
rollout: String? = nil,
|
6723
|
-
metadataPath: String =
|
6726
|
+
metadataPath: String? = nil,
|
6724
6727
|
key: String? = nil,
|
6725
6728
|
issuer: String? = nil,
|
6726
6729
|
jsonKey: String? = nil,
|
@@ -6849,6 +6852,7 @@ func swiftlint(mode: Any = "lint",
|
|
6849
6852
|
- shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
|
6850
6853
|
- cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
|
6851
6854
|
- gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
|
6855
|
+
- gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
|
6852
6856
|
- googleCloudBucketName: Name of the Google Cloud Storage bucket to use
|
6853
6857
|
- googleCloudKeysFile: Path to the gc_keys.json file
|
6854
6858
|
- googleCloudProjectId: ID of the Google Cloud project to use for authentication
|
@@ -6881,6 +6885,7 @@ func syncCodeSigning(type: String = "development",
|
|
6881
6885
|
shallowClone: Bool = false,
|
6882
6886
|
cloneBranchDirectly: Bool = false,
|
6883
6887
|
gitBasicAuthorization: String? = nil,
|
6888
|
+
gitBearerAuthorization: String? = nil,
|
6884
6889
|
googleCloudBucketName: String? = nil,
|
6885
6890
|
googleCloudKeysFile: String? = nil,
|
6886
6891
|
googleCloudProjectId: String? = nil,
|
@@ -6910,6 +6915,7 @@ func syncCodeSigning(type: String = "development",
|
|
6910
6915
|
RubyCommand.Argument(name: "shallow_clone", value: shallowClone),
|
6911
6916
|
RubyCommand.Argument(name: "clone_branch_directly", value: cloneBranchDirectly),
|
6912
6917
|
RubyCommand.Argument(name: "git_basic_authorization", value: gitBasicAuthorization),
|
6918
|
+
RubyCommand.Argument(name: "git_bearer_authorization", value: gitBearerAuthorization),
|
6913
6919
|
RubyCommand.Argument(name: "google_cloud_bucket_name", value: googleCloudBucketName),
|
6914
6920
|
RubyCommand.Argument(name: "google_cloud_keys_file", value: googleCloudKeysFile),
|
6915
6921
|
RubyCommand.Argument(name: "google_cloud_project_id", value: googleCloudProjectId),
|
@@ -7745,7 +7751,7 @@ func uploadToPlayStore(packageName: String,
|
|
7745
7751
|
releaseStatus: String = "completed",
|
7746
7752
|
track: String = "production",
|
7747
7753
|
rollout: String? = nil,
|
7748
|
-
metadataPath: String =
|
7754
|
+
metadataPath: String? = nil,
|
7749
7755
|
key: String? = nil,
|
7750
7756
|
issuer: String? = nil,
|
7751
7757
|
jsonKey: String? = nil,
|
@@ -8087,7 +8093,10 @@ func xcexport() {
|
|
8087
8093
|
/**
|
8088
8094
|
Change the xcode-path to use. Useful for beta versions of Xcode
|
8089
8095
|
|
8090
|
-
Select and build with the Xcode installed at the provided path.
|
8096
|
+
Select and build with the Xcode installed at the provided path.
|
8097
|
+
Use the `xcversion` action if you want to select an Xcode:
|
8098
|
+
- Based on a version specifier or
|
8099
|
+
- You don't have known, stable paths, as may happen in a CI environment.
|
8091
8100
|
*/
|
8092
8101
|
func xcodeSelect() {
|
8093
8102
|
let command = RubyCommand(commandID: "", methodName: "xcode_select", className: nil, args: [])
|
@@ -8202,7 +8211,7 @@ func xcov(workspace: String? = nil,
|
|
8202
8211
|
coverallsServiceJobId: String? = nil,
|
8203
8212
|
coverallsRepoToken: String? = nil,
|
8204
8213
|
xcconfig: String? = nil,
|
8205
|
-
ideFoundationPath: String = "/Applications/Xcode-11.2.
|
8214
|
+
ideFoundationPath: String = "/Applications/Xcode-11.2.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
|
8206
8215
|
legacySupport: Bool = false) {
|
8207
8216
|
let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
|
8208
8217
|
RubyCommand.Argument(name: "project", value: project),
|
@@ -8347,4 +8356,4 @@ let snapshotfile: Snapshotfile = Snapshotfile()
|
|
8347
8356
|
|
8348
8357
|
// Please don't remove the lines below
|
8349
8358
|
// They are used to detect outdated files
|
8350
|
-
// FastlaneRunnerAPIVersion [0.9.
|
8359
|
+
// FastlaneRunnerAPIVersion [0.9.66]
|
@@ -48,6 +48,9 @@ protocol MatchfileProtocol: class {
|
|
48
48
|
/// Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
|
49
49
|
var gitBasicAuthorization: String? { get }
|
50
50
|
|
51
|
+
/// Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
|
52
|
+
var gitBearerAuthorization: String? { get }
|
53
|
+
|
51
54
|
/// Name of the Google Cloud Storage bucket to use
|
52
55
|
var googleCloudBucketName: String? { get }
|
53
56
|
|
@@ -105,6 +108,7 @@ extension MatchfileProtocol {
|
|
105
108
|
var shallowClone: Bool { return false }
|
106
109
|
var cloneBranchDirectly: Bool { return false }
|
107
110
|
var gitBasicAuthorization: String? { return nil }
|
111
|
+
var gitBearerAuthorization: String? { return nil }
|
108
112
|
var googleCloudBucketName: String? { return nil }
|
109
113
|
var googleCloudKeysFile: String? { return nil }
|
110
114
|
var googleCloudProjectId: String? { return nil }
|
@@ -122,4 +126,4 @@ extension MatchfileProtocol {
|
|
122
126
|
|
123
127
|
// Please don't remove the lines below
|
124
128
|
// They are used to detect outdated files
|
125
|
-
// FastlaneRunnerAPIVersion [0.9.
|
129
|
+
// FastlaneRunnerAPIVersion [0.9.12]
|
@@ -72,7 +72,7 @@ module FastlaneCore
|
|
72
72
|
# @return [boolean] true if building in a known CI environment
|
73
73
|
def self.ci?
|
74
74
|
# Check for Jenkins, Travis CI, ... environment variables
|
75
|
-
['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CIRCLECI', 'CI', 'APPCENTER_BUILD_ID', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS', 'TF_BUILD', 'GITHUB_ACTION', 'GITHUB_ACTIONS'].each do |current|
|
75
|
+
['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CIRCLECI', 'CI', 'APPCENTER_BUILD_ID', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS', 'TF_BUILD', 'GITHUB_ACTION', 'GITHUB_ACTIONS', 'BITRISE_IO'].each do |current|
|
76
76
|
return true if ENV.key?(current)
|
77
77
|
end
|
78
78
|
return false
|
data/match/lib/match/options.rb
CHANGED
@@ -125,6 +125,14 @@ module Match
|
|
125
125
|
env_name: "MATCH_GIT_BASIC_AUTHORIZATION",
|
126
126
|
sensitive: true,
|
127
127
|
description: "Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64",
|
128
|
+
conflicting_options: [:git_bearer_authorization],
|
129
|
+
optional: true,
|
130
|
+
default_value: nil),
|
131
|
+
FastlaneCore::ConfigItem.new(key: :git_bearer_authorization,
|
132
|
+
env_name: "MATCH_GIT_BEARER_AUTHORIZATION",
|
133
|
+
sensitive: true,
|
134
|
+
description: "Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64",
|
135
|
+
conflicting_options: [:git_basic_authorization],
|
128
136
|
optional: true,
|
129
137
|
default_value: nil),
|
130
138
|
|
data/match/lib/match/runner.rb
CHANGED
@@ -38,6 +38,7 @@ module Match
|
|
38
38
|
git_user_email: params[:git_user_email],
|
39
39
|
clone_branch_directly: params[:clone_branch_directly],
|
40
40
|
git_basic_authorization: params[:git_basic_authorization],
|
41
|
+
git_bearer_authorization: params[:git_bearer_authorization],
|
41
42
|
type: params[:type].to_s,
|
42
43
|
generate_apple_certs: params[:generate_apple_certs],
|
43
44
|
platform: params[:platform].to_s,
|
@@ -18,6 +18,7 @@ module Match
|
|
18
18
|
attr_accessor :type
|
19
19
|
attr_accessor :platform
|
20
20
|
attr_accessor :git_basic_authorization
|
21
|
+
attr_accessor :git_bearer_authorization
|
21
22
|
|
22
23
|
def self.configure(params)
|
23
24
|
return self.new(
|
@@ -30,7 +31,8 @@ module Match
|
|
30
31
|
git_full_name: params[:git_full_name],
|
31
32
|
git_user_email: params[:git_user_email],
|
32
33
|
clone_branch_directly: params[:clone_branch_directly],
|
33
|
-
git_basic_authorization: params[:git_basic_authorization]
|
34
|
+
git_basic_authorization: params[:git_basic_authorization],
|
35
|
+
git_bearer_authorization: params[:git_bearer_authorization]
|
34
36
|
)
|
35
37
|
end
|
36
38
|
|
@@ -43,7 +45,8 @@ module Match
|
|
43
45
|
git_full_name: nil,
|
44
46
|
git_user_email: nil,
|
45
47
|
clone_branch_directly: false,
|
46
|
-
git_basic_authorization: nil
|
48
|
+
git_basic_authorization: nil,
|
49
|
+
git_bearer_authorization: nil)
|
47
50
|
self.git_url = git_url
|
48
51
|
self.shallow_clone = shallow_clone
|
49
52
|
self.skip_docs = skip_docs
|
@@ -52,6 +55,7 @@ module Match
|
|
52
55
|
self.git_user_email = git_user_email
|
53
56
|
self.clone_branch_directly = clone_branch_directly
|
54
57
|
self.git_basic_authorization = git_basic_authorization
|
58
|
+
self.git_bearer_authorization = git_bearer_authorization
|
55
59
|
|
56
60
|
self.type = type if type
|
57
61
|
self.platform = platform if platform
|
@@ -70,6 +74,7 @@ module Match
|
|
70
74
|
|
71
75
|
command = "git clone #{self.git_url.shellescape} #{self.working_directory.shellescape}"
|
72
76
|
command << " -c http.extraheader='AUTHORIZATION: basic #{self.git_basic_authorization}'" unless self.git_basic_authorization.nil?
|
77
|
+
command << " -c http.extraheader='AUTHORIZATION: bearer #{self.git_bearer_authorization}'" unless self.git_bearer_authorization.nil?
|
73
78
|
|
74
79
|
if self.shallow_clone
|
75
80
|
command << " --depth 1 --no-single-branch"
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'fastlane_core/print_table'
|
2
2
|
require 'fastlane_core/command_executor'
|
3
|
+
require 'fastlane/helper/adb_helper'
|
3
4
|
require_relative 'reports_generator'
|
4
5
|
require_relative 'module'
|
5
6
|
|
@@ -84,35 +85,26 @@ module Screengrab
|
|
84
85
|
end
|
85
86
|
|
86
87
|
def select_device
|
87
|
-
|
88
|
-
|
89
|
-
devices.reject! do |device|
|
90
|
-
[
|
91
|
-
'server is out of date', # The adb server is out of date and must be restarted
|
92
|
-
'unauthorized', # The device has not yet accepted ADB control
|
93
|
-
'offline', # The device is offline, skip it
|
94
|
-
'* daemon', # Messages printed when the daemon is starting up
|
95
|
-
'List of devices attached', # Header of table for data we want
|
96
|
-
"doesn't match this client" # Message printed when there is an ADB client/server version mismatch
|
97
|
-
].any? { |status| device.include?(status) }
|
98
|
-
end
|
88
|
+
adb = Fastlane::Helper::AdbHelper.new(adb_host: @config[:adb_host])
|
89
|
+
devices = adb.load_all_devices
|
99
90
|
|
100
91
|
UI.user_error!('There are no connected and authorized devices or emulators') if devices.empty?
|
101
92
|
|
102
|
-
|
93
|
+
specific_device = @config[:specific_device]
|
94
|
+
if specific_device
|
95
|
+
devices.select! do |d|
|
96
|
+
d.serial.include?(specific_device)
|
97
|
+
end
|
98
|
+
end
|
103
99
|
|
104
|
-
UI.user_error!("No connected devices matched your criteria: #{
|
100
|
+
UI.user_error!("No connected devices matched your criteria: #{specific_device}") if devices.empty?
|
105
101
|
|
106
102
|
if devices.length > 1
|
107
103
|
UI.important("Multiple connected devices, selecting the first one")
|
108
104
|
UI.important("To specify which connected device to use, use the -s (specific_device) config option")
|
109
105
|
end
|
110
106
|
|
111
|
-
|
112
|
-
# 00c22d4d84aec525 device usb:2148663295X product:bullhead model:Nexus_5X device:bullhead
|
113
|
-
# 192.168.1.100:5555 device usb:2148663295X product:bullhead model:Nexus_5X device:genymotion
|
114
|
-
# emulator-5554 device usb:2148663295X product:bullhead model:Nexus_5X device:emulator
|
115
|
-
devices[0].match(/^\S+/)[0]
|
107
|
+
devices.first.serial
|
116
108
|
end
|
117
109
|
|
118
110
|
def select_app_apk(discovered_apk_paths)
|
@@ -563,10 +563,15 @@ module Spaceship
|
|
563
563
|
#####################################################
|
564
564
|
|
565
565
|
def load_session_from_file
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
566
|
+
begin
|
567
|
+
if File.exist?(persistent_cookie_path)
|
568
|
+
puts("Loading session from '#{persistent_cookie_path}'") if Spaceship::Globals.verbose?
|
569
|
+
@cookie.load(persistent_cookie_path)
|
570
|
+
return true
|
571
|
+
end
|
572
|
+
rescue => ex
|
573
|
+
puts(ex.to_s)
|
574
|
+
puts("Continuing with normal login.")
|
570
575
|
end
|
571
576
|
return false
|
572
577
|
end
|
@@ -20,7 +20,9 @@ require 'spaceship/connect_api/models/beta_build_localization'
|
|
20
20
|
require 'spaceship/connect_api/models/beta_build_metric'
|
21
21
|
require 'spaceship/connect_api/models/beta_app_review_detail'
|
22
22
|
require 'spaceship/connect_api/models/beta_app_review_submission'
|
23
|
+
require 'spaceship/connect_api/models/beta_feedback'
|
23
24
|
require 'spaceship/connect_api/models/beta_group'
|
25
|
+
require 'spaceship/connect_api/models/beta_screenshot'
|
24
26
|
require 'spaceship/connect_api/models/beta_tester'
|
25
27
|
require 'spaceship/connect_api/models/beta_tester_metric'
|
26
28
|
require 'spaceship/connect_api/models/build'
|
@@ -45,6 +45,17 @@ module Spaceship
|
|
45
45
|
return Spaceship::ConnectAPI.get_app(app_id: app_id, includes: includes).first
|
46
46
|
end
|
47
47
|
|
48
|
+
#
|
49
|
+
# Beta Feedback
|
50
|
+
|
51
|
+
def get_beta_feedback(filter: {}, includes: "tester,build,screenshots", limit: nil, sort: nil)
|
52
|
+
filter ||= {}
|
53
|
+
filter["build.app"] = id
|
54
|
+
|
55
|
+
resps = Spaceship::ConnectAPI.get_beta_feedback(filter: filter, includes: includes, limit: limit, sort: sort).all_pages
|
56
|
+
return resps.flat_map(&:to_models)
|
57
|
+
end
|
58
|
+
|
48
59
|
#
|
49
60
|
# Beta Testers
|
50
61
|
#
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require_relative '../model'
|
2
|
+
module Spaceship
|
3
|
+
class ConnectAPI
|
4
|
+
class BetaFeedback
|
5
|
+
include Spaceship::ConnectAPI::Model
|
6
|
+
|
7
|
+
attr_accessor :timestamp
|
8
|
+
attr_accessor :comment
|
9
|
+
attr_accessor :email_address
|
10
|
+
attr_accessor :device_model
|
11
|
+
attr_accessor :os_version
|
12
|
+
attr_accessor :bookmarked
|
13
|
+
attr_accessor :locale
|
14
|
+
attr_accessor :carrier
|
15
|
+
attr_accessor :timezone
|
16
|
+
attr_accessor :architecture
|
17
|
+
attr_accessor :connection_status
|
18
|
+
attr_accessor :paired_apple_watch
|
19
|
+
attr_accessor :app_up_time_millis
|
20
|
+
attr_accessor :available_disk_bytes
|
21
|
+
attr_accessor :total_disk_bytes
|
22
|
+
attr_accessor :network_type
|
23
|
+
attr_accessor :battery_percentage
|
24
|
+
attr_accessor :screen_width
|
25
|
+
attr_accessor :screen_height
|
26
|
+
|
27
|
+
attr_accessor :build
|
28
|
+
attr_accessor :tester
|
29
|
+
attr_accessor :screenshots
|
30
|
+
|
31
|
+
attr_mapping({
|
32
|
+
"timestamp" => "timestamp",
|
33
|
+
"comment" => "comment",
|
34
|
+
"emailAddress" => "email_address",
|
35
|
+
"contactEmail" => "contact_email",
|
36
|
+
"deviceModel" => "device_model",
|
37
|
+
"osVersion" => "os_version",
|
38
|
+
"bookmarked" => "bookmarked",
|
39
|
+
"locale" => "locale",
|
40
|
+
"carrier" => "carrier",
|
41
|
+
"timezone" => "timezone",
|
42
|
+
"architecture" => "architecture",
|
43
|
+
"connectionStatus" => "connection_status",
|
44
|
+
"pairedAppleWatch" => "paired_apple_watch",
|
45
|
+
"appUpTimeMillis" => "app_up_time_millis",
|
46
|
+
"availableDiskBytes" => "available_disk_bytes",
|
47
|
+
"totalDiskBytes" => "total_disk_bytes",
|
48
|
+
"networkType" => "network_type",
|
49
|
+
"batteryPercentage" => "battery_percentage",
|
50
|
+
"screenWidth" => "screen_width",
|
51
|
+
"screenHeight" => "screen_height",
|
52
|
+
|
53
|
+
"build" => "build",
|
54
|
+
"tester" => "tester",
|
55
|
+
"screenshots" => "screenshots"
|
56
|
+
})
|
57
|
+
|
58
|
+
def self.type
|
59
|
+
return "betaFeedbacks"
|
60
|
+
end
|
61
|
+
|
62
|
+
#
|
63
|
+
# API
|
64
|
+
#
|
65
|
+
|
66
|
+
def self.all(filter: {}, includes: "tester,build,screenshots", limit: nil, sort: nil)
|
67
|
+
return Spaceship::ConnectAPI.get_beta_feedback(filter: filter, includes: includes, limit: limit, sort: sort)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative '../model'
|
2
|
+
module Spaceship
|
3
|
+
class ConnectAPI
|
4
|
+
class BetaScreenshot
|
5
|
+
include Spaceship::ConnectAPI::Model
|
6
|
+
|
7
|
+
attr_accessor :image_assets
|
8
|
+
|
9
|
+
attr_mapping({
|
10
|
+
"imageAssets" => "image_assets"
|
11
|
+
})
|
12
|
+
|
13
|
+
def self.type
|
14
|
+
return "betaScreenshots"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -317,6 +317,15 @@ module Spaceship
|
|
317
317
|
params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
|
318
318
|
Client.instance.get("preReleaseVersions", params)
|
319
319
|
end
|
320
|
+
|
321
|
+
#
|
322
|
+
# betaFeedbacks (private API as of end 2019)
|
323
|
+
#
|
324
|
+
|
325
|
+
def get_beta_feedback(filter: {}, includes: nil, limit: nil, sort: nil)
|
326
|
+
params = Client.instance.build_params(filter: filter, includes: includes, limit: limit, sort: sort)
|
327
|
+
Client.instance.get("betaFeedbacks", params)
|
328
|
+
end
|
320
329
|
end
|
321
330
|
end
|
322
331
|
end
|
@@ -784,11 +784,8 @@ module Spaceship
|
|
784
784
|
end
|
785
785
|
|
786
786
|
def available_languages
|
787
|
-
r = request(:get, "ra/
|
788
|
-
|
789
|
-
response.flat_map { |region| region["storeFronts"] }
|
790
|
-
.flat_map { |storefront| storefront["supportedLocaleCodes"] }
|
791
|
-
.uniq
|
787
|
+
r = request(:get, "ra/ref")
|
788
|
+
parse_response(r, 'data')['detailLocales']
|
792
789
|
end
|
793
790
|
|
794
791
|
#####################################################
|
data/supply/lib/supply/client.rb
CHANGED
@@ -345,6 +345,7 @@ module Supply
|
|
345
345
|
ensure_active_edit!
|
346
346
|
|
347
347
|
all_tracks = call_google_api { client.list_edit_tracks(current_package_name, current_edit.id) }.tracks
|
348
|
+
all_tracks = [] unless all_tracks
|
348
349
|
|
349
350
|
if tracknames.length > 0
|
350
351
|
all_tracks = all_tracks.select { |track| tracknames.include?(track.track) }
|
@@ -195,7 +195,13 @@ module Supply
|
|
195
195
|
UI.message("Updating changelog for '#{version_code}' and language '#{language}'...")
|
196
196
|
changelog_text = File.read(path, encoding: 'UTF-8')
|
197
197
|
else
|
198
|
-
|
198
|
+
default_changelog_path = File.join(Supply.config[:metadata_path], language, Supply::CHANGELOGS_FOLDER_NAME, "default.txt")
|
199
|
+
if File.exist?(default_changelog_path)
|
200
|
+
UI.message("Updating changelog for '#{version_code}' and language '#{language}' to default changelog...")
|
201
|
+
changelog_text = File.read(default_changelog_path, encoding: 'UTF-8')
|
202
|
+
else
|
203
|
+
UI.message("Could not find changelog for '#{version_code}' and language '#{language}' at path #{path}...")
|
204
|
+
end
|
199
205
|
end
|
200
206
|
|
201
207
|
AndroidPublisher::LocalizedText.new({
|
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.138.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
- Olivier Halligon
|
7
|
+
- Jorge Revuelta H
|
9
8
|
- Joshua Liebowitz
|
10
|
-
-
|
11
|
-
-
|
9
|
+
- Josh Holtz
|
10
|
+
- Danielle Tomlinson
|
12
11
|
- Kohki Miki
|
13
|
-
- Manu Wallner
|
14
|
-
- Felix Krause
|
15
12
|
- Luka Mirosevic
|
16
|
-
- Stefan Natchev
|
17
13
|
- Iulian Onofrei
|
18
|
-
-
|
19
|
-
-
|
20
|
-
-
|
21
|
-
-
|
14
|
+
- Stefan Natchev
|
15
|
+
- Maksym Grebenets
|
16
|
+
- Manu Wallner
|
17
|
+
- Aaron Brager
|
22
18
|
- Matthew Ellis
|
19
|
+
- Felix Krause
|
20
|
+
- Jan Piotrowski
|
21
|
+
- Jérôme Lacoste
|
23
22
|
- Helmut Januschka
|
24
23
|
- Fumiya Nakamura
|
25
|
-
-
|
26
|
-
-
|
24
|
+
- Andrew McBurney
|
25
|
+
- Olivier Halligon
|
26
|
+
- Jimmy Dee
|
27
27
|
autorequire:
|
28
28
|
bindir: bin
|
29
29
|
cert_chain: []
|
30
|
-
date: 2019-
|
30
|
+
date: 2019-12-19 00:00:00.000000000 Z
|
31
31
|
dependencies:
|
32
32
|
- !ruby/object:Gem::Dependency
|
33
33
|
name: slack-notifier
|
@@ -55,7 +55,7 @@ dependencies:
|
|
55
55
|
requirements:
|
56
56
|
- - ">="
|
57
57
|
- !ruby/object:Gem::Version
|
58
|
-
version: 1.
|
58
|
+
version: 1.13.0
|
59
59
|
- - "<"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 2.0.0
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.
|
68
|
+
version: 1.13.0
|
69
69
|
- - "<"
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: 2.0.0
|
@@ -325,7 +325,7 @@ dependencies:
|
|
325
325
|
requirements:
|
326
326
|
- - ">="
|
327
327
|
- !ruby/object:Gem::Version
|
328
|
-
version: 0.
|
328
|
+
version: 0.71.0
|
329
329
|
- - "<"
|
330
330
|
- !ruby/object:Gem::Version
|
331
331
|
version: 1.0.0
|
@@ -335,7 +335,7 @@ dependencies:
|
|
335
335
|
requirements:
|
336
336
|
- - ">="
|
337
337
|
- !ruby/object:Gem::Version
|
338
|
-
version: 0.
|
338
|
+
version: 0.71.0
|
339
339
|
- - "<"
|
340
340
|
- !ruby/object:Gem::Version
|
341
341
|
version: 1.0.0
|
@@ -986,9 +986,6 @@ files:
|
|
986
986
|
- fastlane/lib/fastlane.rb
|
987
987
|
- fastlane/lib/fastlane/action.rb
|
988
988
|
- fastlane/lib/fastlane/action_collector.rb
|
989
|
-
- fastlane/lib/fastlane/actions/.hockey.rb.swp
|
990
|
-
- fastlane/lib/fastlane/actions/.slack.rb.swp
|
991
|
-
- fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp
|
992
989
|
- fastlane/lib/fastlane/actions/README.md
|
993
990
|
- fastlane/lib/fastlane/actions/actions_helper.rb
|
994
991
|
- fastlane/lib/fastlane/actions/adb.rb
|
@@ -1317,7 +1314,6 @@ files:
|
|
1317
1314
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj
|
1318
1315
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
|
1319
1316
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
|
1320
|
-
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate
|
1321
1317
|
- fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme
|
1322
1318
|
- fastlane/swift/FastlaneSwiftRunner/README.txt
|
1323
1319
|
- fastlane/swift/Gymfile.swift
|
@@ -1472,7 +1468,6 @@ files:
|
|
1472
1468
|
- pem/lib/pem/options.rb
|
1473
1469
|
- pilot/README.md
|
1474
1470
|
- pilot/lib/pilot.rb
|
1475
|
-
- pilot/lib/pilot/.manager.rb.swp
|
1476
1471
|
- pilot/lib/pilot/build_manager.rb
|
1477
1472
|
- pilot/lib/pilot/commands_generator.rb
|
1478
1473
|
- pilot/lib/pilot/features.rb
|
@@ -1604,7 +1599,6 @@ files:
|
|
1604
1599
|
- spaceship/lib/spaceship/client.rb
|
1605
1600
|
- spaceship/lib/spaceship/commands_generator.rb
|
1606
1601
|
- spaceship/lib/spaceship/connect_api.rb
|
1607
|
-
- spaceship/lib/spaceship/connect_api/.DS_Store
|
1608
1602
|
- spaceship/lib/spaceship/connect_api/client.rb
|
1609
1603
|
- spaceship/lib/spaceship/connect_api/model.rb
|
1610
1604
|
- spaceship/lib/spaceship/connect_api/models/app.rb
|
@@ -1613,7 +1607,9 @@ files:
|
|
1613
1607
|
- spaceship/lib/spaceship/connect_api/models/beta_app_review_submission.rb
|
1614
1608
|
- spaceship/lib/spaceship/connect_api/models/beta_build_localization.rb
|
1615
1609
|
- spaceship/lib/spaceship/connect_api/models/beta_build_metric.rb
|
1610
|
+
- spaceship/lib/spaceship/connect_api/models/beta_feedback.rb
|
1616
1611
|
- spaceship/lib/spaceship/connect_api/models/beta_group.rb
|
1612
|
+
- spaceship/lib/spaceship/connect_api/models/beta_screenshot.rb
|
1617
1613
|
- spaceship/lib/spaceship/connect_api/models/beta_tester.rb
|
1618
1614
|
- spaceship/lib/spaceship/connect_api/models/beta_tester_metric.rb
|
1619
1615
|
- spaceship/lib/spaceship/connect_api/models/build.rb
|
@@ -1645,7 +1641,6 @@ files:
|
|
1645
1641
|
- spaceship/lib/spaceship/launcher.rb
|
1646
1642
|
- spaceship/lib/spaceship/module.rb
|
1647
1643
|
- spaceship/lib/spaceship/playground.rb
|
1648
|
-
- spaceship/lib/spaceship/portal/.certificate.rb.swp
|
1649
1644
|
- spaceship/lib/spaceship/portal/app.rb
|
1650
1645
|
- spaceship/lib/spaceship/portal/app_group.rb
|
1651
1646
|
- spaceship/lib/spaceship/portal/app_service.rb
|
@@ -1738,7 +1733,6 @@ files:
|
|
1738
1733
|
- spaceship/lib/spaceship/ui.rb
|
1739
1734
|
- supply/README.md
|
1740
1735
|
- supply/lib/supply.rb
|
1741
|
-
- supply/lib/supply/.uploader.rb.swp
|
1742
1736
|
- supply/lib/supply/apk_listing.rb
|
1743
1737
|
- supply/lib/supply/client.rb
|
1744
1738
|
- supply/lib/supply/commands_generator.rb
|
@@ -1786,7 +1780,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1786
1780
|
- !ruby/object:Gem::Version
|
1787
1781
|
version: '0'
|
1788
1782
|
requirements: []
|
1789
|
-
rubygems_version: 3.0.
|
1783
|
+
rubygems_version: 3.0.6
|
1790
1784
|
signing_key:
|
1791
1785
|
specification_version: 4
|
1792
1786
|
summary: The easiest way to automate beta deployments and releases for your iOS and
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|