fastlane 2.101.1 β 2.102.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 +70 -70
- data/deliver/lib/deliver/loader.rb +4 -2
- data/fastlane/lib/assets/ActionDetails.md.erb +1 -1
- data/fastlane/lib/assets/Actions.md.erb +3 -3
- data/fastlane/lib/fastlane/actions/appaloosa.rb +1 -1
- data/fastlane/lib/fastlane/actions/appetize.rb +1 -1
- data/fastlane/lib/fastlane/actions/apteligent.rb +1 -1
- data/fastlane/lib/fastlane/actions/chatwork.rb +1 -1
- data/fastlane/lib/fastlane/actions/cocoapods.rb +15 -11
- data/fastlane/lib/fastlane/actions/crashlytics.rb +1 -1
- data/fastlane/lib/fastlane/actions/create_pull_request.rb +1 -1
- data/fastlane/lib/fastlane/actions/docs/build_ios_app.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/get_certificates.md +2 -2
- data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +15 -3
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +2 -2
- data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +1 -1
- data/fastlane/lib/fastlane/actions/flock.rb +1 -1
- data/fastlane/lib/fastlane/actions/git_add.rb +4 -3
- data/fastlane/lib/fastlane/actions/gradle.rb +1 -1
- data/fastlane/lib/fastlane/actions/hipchat.rb +1 -1
- data/fastlane/lib/fastlane/actions/hockey.rb +1 -1
- data/fastlane/lib/fastlane/actions/ifttt.rb +1 -1
- data/fastlane/lib/fastlane/actions/installr.rb +1 -1
- data/fastlane/lib/fastlane/actions/nexus_upload.rb +1 -1
- data/fastlane/lib/fastlane/actions/onesignal.rb +1 -1
- data/fastlane/lib/fastlane/actions/run_tests.rb +4 -0
- data/fastlane/lib/fastlane/actions/slack.rb +1 -1
- data/fastlane/lib/fastlane/actions/splunkmint.rb +1 -1
- data/fastlane/lib/fastlane/actions/testfairy.rb +1 -1
- data/fastlane/lib/fastlane/actions/tryouts.rb +1 -1
- data/fastlane/lib/fastlane/actions/twitter.rb +1 -1
- data/fastlane/lib/fastlane/actions/typetalk.rb +1 -1
- data/fastlane/lib/fastlane/actions/update_urban_airship_configuration.rb +1 -1
- data/fastlane/lib/fastlane/fast_file.rb +1 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/Fastlane.swift +13 -11
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane_core/lib/fastlane_core/command_executor.rb +1 -4
- data/fastlane_core/lib/fastlane_core/fastlane_pty.rb +6 -1
- data/pilot/lib/pilot/options.rb +1 -0
- data/pilot/lib/pilot/tester_manager.rb +1 -1
- data/scan/lib/scan/runner.rb +3 -0
- data/screengrab/lib/screengrab/runner.rb +5 -1
- data/snapshot/lib/snapshot/options.rb +1 -0
- data/spaceship/README.md +1 -1
- data/spaceship/lib/spaceship/test_flight/client.rb +4 -0
- data/spaceship/lib/spaceship/test_flight/tester.rb +1 -1
- data/supply/lib/supply/client.rb +1 -1
- data/supply/lib/supply/setup.rb +14 -4
- metadata +16 -17
- data/fastlane/lib/fastlane/actions/.google_play_track_version_codes.rb.swp +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d91692ae9b538be8c778211d301175472ee11ac1
|
4
|
+
data.tar.gz: 0abd168e6c72123dace0c10dd681ef8bc303a8cf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de17c43a5234fda93caf06a0568b840ff13eba6d0b9a4edc6ad46e9ac64d579767dee7b53ff09eb5d229b672761e936ab592283a5b73412ad93eadf6e3f4bfa3
|
7
|
+
data.tar.gz: be5ae50297529093037da1e7ecf14fab30f0e2675cfe2174d86ce520d4e3dd3e94416af11193a3f9249ad06fab7fa4e66d0ab85104867f560be9aa979f45d70a
|
data/README.md
CHANGED
@@ -32,29 +32,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
32
32
|
|
33
33
|
<table id='team'>
|
34
34
|
<tr>
|
35
|
-
<td id='
|
36
|
-
<a href='https://github.com/
|
37
|
-
<img src='https://github.com/
|
38
|
-
</a>
|
39
|
-
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
40
|
-
</td>
|
41
|
-
<td id='jan-piotrowski'>
|
42
|
-
<a href='https://github.com/janpio'>
|
43
|
-
<img src='https://github.com/janpio.png?size=140'>
|
44
|
-
</a>
|
45
|
-
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
46
|
-
</td>
|
47
|
-
<td id='danielle-tomlinson'>
|
48
|
-
<a href='https://github.com/DanToml'>
|
49
|
-
<img src='https://github.com/DanToml.png?size=140'>
|
50
|
-
</a>
|
51
|
-
<h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
|
52
|
-
</td>
|
53
|
-
<td id='jorge-revuelta-h'>
|
54
|
-
<a href='https://github.com/minuscorp'>
|
55
|
-
<img src='https://github.com/minuscorp.png?size=140'>
|
35
|
+
<td id='kohki-miki'>
|
36
|
+
<a href='https://github.com/giginet'>
|
37
|
+
<img src='https://github.com/giginet.png?size=140'>
|
56
38
|
</a>
|
57
|
-
<h4 align='center'><a href='https://twitter.com/
|
39
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
58
40
|
</td>
|
59
41
|
<td id='maksym-grebenets'>
|
60
42
|
<a href='https://github.com/mgrebenets'>
|
@@ -62,13 +44,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
62
44
|
</a>
|
63
45
|
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
64
46
|
</td>
|
65
|
-
|
66
|
-
<
|
67
|
-
<
|
68
|
-
<a href='https://github.com/hjanuschka'>
|
69
|
-
<img src='https://github.com/hjanuschka.png?size=140'>
|
47
|
+
<td id='iulian-onofrei'>
|
48
|
+
<a href='https://github.com/revolter'>
|
49
|
+
<img src='https://github.com/revolter.png?size=140'>
|
70
50
|
</a>
|
71
|
-
<h4 align='center'><a href='https://twitter.com/
|
51
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
52
|
+
</td>
|
53
|
+
<td id='jΓ©rΓ΄me-lacoste'>
|
54
|
+
<a href='https://github.com/lacostej'>
|
55
|
+
<img src='https://github.com/lacostej.png?size=140'>
|
56
|
+
</a>
|
57
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>JΓ©rΓ΄me Lacoste</a></h4>
|
72
58
|
</td>
|
73
59
|
<td id='joshua-liebowitz'>
|
74
60
|
<a href='https://github.com/taquitos'>
|
@@ -76,11 +62,25 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
76
62
|
</a>
|
77
63
|
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
78
64
|
</td>
|
79
|
-
|
80
|
-
<
|
81
|
-
<
|
65
|
+
</tr>
|
66
|
+
<tr>
|
67
|
+
<td id='jimmy-dee'>
|
68
|
+
<a href='https://github.com/jdee'>
|
69
|
+
<img src='https://github.com/jdee.png?size=140'>
|
82
70
|
</a>
|
83
|
-
<h4 align='center'
|
71
|
+
<h4 align='center'>Jimmy Dee</h4>
|
72
|
+
</td>
|
73
|
+
<td id='manu-wallner'>
|
74
|
+
<a href='https://github.com/milch'>
|
75
|
+
<img src='https://github.com/milch.png?size=140'>
|
76
|
+
</a>
|
77
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
78
|
+
</td>
|
79
|
+
<td id='andrew-mcburney'>
|
80
|
+
<a href='https://github.com/AndrewMcBurney'>
|
81
|
+
<img src='https://github.com/AndrewMcBurney.png?size=140'>
|
82
|
+
</a>
|
83
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
84
84
|
</td>
|
85
85
|
<td id='aaron-brager'>
|
86
86
|
<a href='https://github.com/getaaron'>
|
@@ -88,51 +88,57 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
88
88
|
</a>
|
89
89
|
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
90
90
|
</td>
|
91
|
-
<td id='kohki-miki'>
|
92
|
-
<a href='https://github.com/giginet'>
|
93
|
-
<img src='https://github.com/giginet.png?size=140'>
|
94
|
-
</a>
|
95
|
-
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
96
|
-
</td>
|
97
|
-
</tr>
|
98
|
-
<tr>
|
99
91
|
<td id='stefan-natchev'>
|
100
92
|
<a href='https://github.com/snatchev'>
|
101
93
|
<img src='https://github.com/snatchev.png?size=140'>
|
102
94
|
</a>
|
103
95
|
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
104
96
|
</td>
|
105
|
-
|
106
|
-
<
|
107
|
-
<
|
97
|
+
</tr>
|
98
|
+
<tr>
|
99
|
+
<td id='olivier-halligon'>
|
100
|
+
<a href='https://github.com/AliSoftware'>
|
101
|
+
<img src='https://github.com/AliSoftware.png?size=140'>
|
108
102
|
</a>
|
109
|
-
<h4 align='center'><a href='https://twitter.com/
|
103
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
110
104
|
</td>
|
111
|
-
<td id='
|
112
|
-
<a href='https://github.com/
|
113
|
-
<img src='https://github.com/
|
105
|
+
<td id='helmut-januschka'>
|
106
|
+
<a href='https://github.com/hjanuschka'>
|
107
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
114
108
|
</a>
|
115
|
-
<h4 align='center'><a href='https://twitter.com/
|
109
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
116
110
|
</td>
|
117
|
-
<td id='
|
118
|
-
<a href='https://github.com/
|
119
|
-
<img src='https://github.com/
|
111
|
+
<td id='felix-krause'>
|
112
|
+
<a href='https://github.com/KrauseFx'>
|
113
|
+
<img src='https://github.com/KrauseFx.png?size=140'>
|
120
114
|
</a>
|
121
|
-
<h4 align='center'><a href='https://twitter.com/
|
115
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
122
116
|
</td>
|
123
|
-
<td id='
|
124
|
-
<a href='https://github.com/
|
125
|
-
<img src='https://github.com/
|
117
|
+
<td id='danielle-tomlinson'>
|
118
|
+
<a href='https://github.com/DanToml'>
|
119
|
+
<img src='https://github.com/DanToml.png?size=140'>
|
126
120
|
</a>
|
127
|
-
<h4 align='center'>
|
121
|
+
<h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
|
122
|
+
</td>
|
123
|
+
<td id='jan-piotrowski'>
|
124
|
+
<a href='https://github.com/janpio'>
|
125
|
+
<img src='https://github.com/janpio.png?size=140'>
|
126
|
+
</a>
|
127
|
+
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
128
128
|
</td>
|
129
129
|
</tr>
|
130
130
|
<tr>
|
131
|
-
<td id='
|
132
|
-
<a href='https://github.com/
|
133
|
-
<img src='https://github.com/
|
131
|
+
<td id='josh-holtz'>
|
132
|
+
<a href='https://github.com/joshdholtz'>
|
133
|
+
<img src='https://github.com/joshdholtz.png?size=140'>
|
134
134
|
</a>
|
135
|
-
<h4 align='center'><a href='https://twitter.com/
|
135
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
136
|
+
</td>
|
137
|
+
<td id='jorge-revuelta-h'>
|
138
|
+
<a href='https://github.com/minuscorp'>
|
139
|
+
<img src='https://github.com/minuscorp.png?size=140'>
|
140
|
+
</a>
|
141
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
136
142
|
</td>
|
137
143
|
<td id='matthew-ellis'>
|
138
144
|
<a href='https://github.com/matthewellis'>
|
@@ -146,17 +152,11 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
146
152
|
</a>
|
147
153
|
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
148
154
|
</td>
|
149
|
-
<td id='
|
150
|
-
<a href='https://github.com/
|
151
|
-
<img src='https://github.com/
|
152
|
-
</a>
|
153
|
-
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
154
|
-
</td>
|
155
|
-
<td id='jΓ©rΓ΄me-lacoste'>
|
156
|
-
<a href='https://github.com/lacostej'>
|
157
|
-
<img src='https://github.com/lacostej.png?size=140'>
|
155
|
+
<td id='fumiya-nakamura'>
|
156
|
+
<a href='https://github.com/nafu'>
|
157
|
+
<img src='https://github.com/nafu.png?size=140'>
|
158
158
|
</a>
|
159
|
-
<h4 align='center'><a href='https://twitter.com/
|
159
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
160
160
|
</td>
|
161
161
|
</tr>
|
162
162
|
</table>
|
@@ -14,10 +14,12 @@ module Deliver
|
|
14
14
|
|
15
15
|
SPECIAL_DIR_NAMES = [APPLE_TV_DIR_NAME, IMESSAGE_DIR_NAME, DEFAULT_DIR_NAME].freeze
|
16
16
|
|
17
|
-
#
|
17
|
+
# Some exception directories may exist from other actions that should not be iterated through
|
18
18
|
SUPPLY_DIR_NAME = "android".freeze
|
19
|
+
FRAMEIT_FONTS_DIR_NAME = "fonts".freeze
|
20
|
+
META_DIR_NAMES = UploadMetadata::ALL_META_SUB_DIRS.map(&:downcase)
|
19
21
|
|
20
|
-
EXCEPTION_DIRECTORIES =
|
22
|
+
EXCEPTION_DIRECTORIES = (META_DIR_NAMES << SUPPLY_DIR_NAME << FRAMEIT_FONTS_DIR_NAME).freeze
|
21
23
|
|
22
24
|
def self.language_folders(root, ignore_validation)
|
23
25
|
folders = Dir.glob(File.join(root, '*'))
|
@@ -32,11 +32,11 @@ For _fastlane_ plugins, check out the [available plugins](https://docs.fastlane.
|
|
32
32
|
<%- @categories.each do |category, actions| %>
|
33
33
|
# <%= category %>
|
34
34
|
|
35
|
-
Action | Description
|
36
|
-
|
35
|
+
Action | Description | Supported Platforms
|
36
|
+
---|---|---
|
37
37
|
<%- actions.sort.to_h.each do |_number_of_launches, action| -%>
|
38
38
|
<%- link = "/actions/#{action.action_name}/" -%>
|
39
|
-
<a href="<%= link %>"><%= action.action_name %></a> | <%= action.description %>
|
39
|
+
<a href="<%= link %>"><%= action.action_name %></a> | <%= action.description %> | <%= [:ios, :android, :mac].find_all { |a| action.is_supported?(a) }.join(", ") %>
|
40
40
|
<%- end %><%# End of actions.sort... %>
|
41
41
|
|
42
42
|
<%- end %><%# End of categories.each %>
|
@@ -168,7 +168,7 @@ module Fastlane
|
|
168
168
|
#####################################################
|
169
169
|
|
170
170
|
def self.description
|
171
|
-
'Upload your app to Appaloosa Store'
|
171
|
+
'Upload your app to [Appaloosa Store](https://www.appaloosa-store.com/)'
|
172
172
|
end
|
173
173
|
|
174
174
|
def self.details
|
@@ -87,7 +87,7 @@ module Fastlane
|
|
87
87
|
private_class_method :parse_response
|
88
88
|
|
89
89
|
def self.description
|
90
|
-
"Upload your app to Appetize.io to stream it in
|
90
|
+
"Upload your app to [Appetize.io](https://appetize.io/) to stream it in browser"
|
91
91
|
end
|
92
92
|
|
93
93
|
def self.details
|
@@ -59,7 +59,7 @@ module Fastlane
|
|
59
59
|
#####################################################
|
60
60
|
|
61
61
|
def self.description
|
62
|
-
"Upload dSYM file to Apteligent (Crittercism)"
|
62
|
+
"Upload dSYM file to [Apteligent (Crittercism)](http://www.apteligent.com/)"
|
63
63
|
end
|
64
64
|
|
65
65
|
def self.available_options
|
@@ -52,16 +52,6 @@ module Fastlane
|
|
52
52
|
|
53
53
|
def self.available_options
|
54
54
|
[
|
55
|
-
FastlaneCore::ConfigItem.new(key: :clean,
|
56
|
-
env_name: "FL_COCOAPODS_CLEAN",
|
57
|
-
description: "Remove SCM directories",
|
58
|
-
is_string: false,
|
59
|
-
default_value: true),
|
60
|
-
FastlaneCore::ConfigItem.new(key: :integrate,
|
61
|
-
env_name: "FL_COCOAPODS_INTEGRATE",
|
62
|
-
description: "Integrate the Pods libraries into the Xcode project(s)",
|
63
|
-
is_string: false,
|
64
|
-
default_value: true),
|
65
55
|
FastlaneCore::ConfigItem.new(key: :repo_update,
|
66
56
|
env_name: "FL_COCOAPODS_REPO_UPDATE",
|
67
57
|
description: "Add `--repo-update` flag to `pod install` command",
|
@@ -107,7 +97,21 @@ module Fastlane
|
|
107
97
|
optional: true,
|
108
98
|
is_string: false,
|
109
99
|
default_value: false,
|
110
|
-
type: Boolean)
|
100
|
+
type: Boolean),
|
101
|
+
|
102
|
+
# Deprecated
|
103
|
+
FastlaneCore::ConfigItem.new(key: :clean,
|
104
|
+
env_name: "FL_COCOAPODS_CLEAN",
|
105
|
+
description: "(Option removed from cocoapods) Remove SCM directories",
|
106
|
+
deprecated: true,
|
107
|
+
is_string: false,
|
108
|
+
default_value: true),
|
109
|
+
FastlaneCore::ConfigItem.new(key: :integrate,
|
110
|
+
env_name: "FL_COCOAPODS_INTEGRATE",
|
111
|
+
description: "(Option removed from cocoapods) Integrate the Pods libraries into the Xcode project(s)",
|
112
|
+
deprecated: true,
|
113
|
+
is_string: false,
|
114
|
+
default_value: true)
|
111
115
|
]
|
112
116
|
# Please don't add a version parameter to the `cocoapods` action. If you need to specify a version when running
|
113
117
|
# `cocoapods`, please start using a Gemfile and lock the version there
|
@@ -111,7 +111,7 @@ module Fastlane
|
|
111
111
|
def self.example_code
|
112
112
|
[
|
113
113
|
'create_pull_request(
|
114
|
-
api_token: ENV["
|
114
|
+
api_token: "secret", # optional, defaults to ENV["GITHUB_API_TOKEN"]
|
115
115
|
repo: "fastlane/fastlane",
|
116
116
|
title: "Amazing new feature",
|
117
117
|
head: "my-feature", # optional, defaults to current branch name
|
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
-------
|
14
14
|
|
15
|
-
<h5 align="center"><
|
15
|
+
<h5 align="center"><em>gym</em> is part of <a href="https://fastlane.tools">fastlane</a>: The easiest way to automate beta deployments and releases for your iOS and Android apps.</h5>
|
16
16
|
|
17
17
|
# What's gym?
|
18
18
|
|
@@ -16,7 +16,7 @@ _frameit_ allows you to put a gorgeous device frame around your iOS and macOS sc
|
|
16
16
|
|
17
17
|
-------
|
18
18
|
|
19
|
-
<h5 align="center"><
|
19
|
+
<h5 align="center"><em>frameit</em> is part of <a href="https://fastlane.tools">fastlane</a>: The easiest way to automate beta deployments and releases for your iOS and Android apps.</h5>
|
20
20
|
|
21
21
|
|
22
22
|
# Features
|
@@ -56,7 +56,7 @@ Here is a nice gif, that shows _frameit_ in action:
|
|
56
56
|
|
57
57
|
![img/actions/MacExample.png](/img/actions/MacExample.png?raw=1)
|
58
58
|
|
59
|
-
<h5 align="center">The <
|
59
|
+
<h5 align="center">The <em>frameit</em> 2.0 update was kindly sponsored by <a href="https://mindnode.com/">MindNode</a>, seen in the screenshots above.</h5>
|
60
60
|
|
61
61
|
|
62
62
|
The first time that _frameit_ is executed the frames will be downloaded automatically. Originally the frames are coming from [Facebook frameset](http://facebook.design/devices) and they are kept on [this repo](https://github.com/fastlane/frameit-frames).
|
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
-------
|
14
14
|
|
15
|
-
<h5 align="center"><
|
15
|
+
<h5 align="center"><em>cert</em> is part of <a href="https://fastlane.tools">fastlane</a>: The easiest way to automate beta deployments and releases for your iOS and Android apps.</h5>
|
16
16
|
|
17
17
|
![/img/actions/cert.gif](/img/actions/cert.gif)
|
18
18
|
|
@@ -20,7 +20,7 @@ In the gif we used `cert && sigh`, which will first create an iOS code signing c
|
|
20
20
|
|
21
21
|
# Usage
|
22
22
|
|
23
|
-
**Note**: It is recommended to use [_match_](/actions/match) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your certificates. Use _cert_ directly only if you want full control over what's going on and know more about codesigning.
|
23
|
+
**Note**: It is recommended to use [_match_](/actions/match/) according to the [codesigning.guide](https://codesigning.guide) for generating and maintaining your certificates. Use _cert_ directly only if you want full control over what's going on and know more about codesigning.
|
24
24
|
|
25
25
|
```no-highlight
|
26
26
|
fastlane cert
|
@@ -24,7 +24,7 @@ To automate iOS Provisioning profiles you can use [_match_](https://docs.fastlan
|
|
24
24
|
|
25
25
|
-------
|
26
26
|
|
27
|
-
<h5 align="center"><
|
27
|
+
<h5 align="center"><em>pem</em> is part of <a href="https://fastlane.tools">fastlane</a>: The easiest way to automate beta deployments and releases for your iOS and Android apps.</h5>
|
28
28
|
|
29
29
|
# Features
|
30
30
|
Well, it's actually just one: Generate the _pem_ file for your server.
|
@@ -20,7 +20,7 @@ _match_ is the implementation of the https://codesigning.guide concept. _match_
|
|
20
20
|
|
21
21
|
-------
|
22
22
|
|
23
|
-
<h5 align="center"><
|
23
|
+
<h5 align="center"><em>match</em> is part of <a href="https://fastlane.tools">fastlane</a>: The easiest way to automate beta deployments and releases for your iOS and Android apps.</h5>
|
24
24
|
|
25
25
|
## Why match?
|
26
26
|
|
@@ -146,6 +146,18 @@ end
|
|
146
146
|
|
147
147
|
Then all your team has to do is `fastlane certificates` and keys, certs and profiles for all targets will be synced.
|
148
148
|
|
149
|
+
#### Handle multiple apps per developer/distribution certificate
|
150
|
+
If you want to use a single developer and/or distribution certificate for multiple apps belonging to the same development team, you may use the same signing identities repository and branch to store the signing identities for your apps:
|
151
|
+
|
152
|
+
Matchfile for both App #1 and #2:
|
153
|
+
|
154
|
+
```ruby-skip-tests
|
155
|
+
git_url("https://github.com/example/example-repo.git")
|
156
|
+
git_branch("master")
|
157
|
+
```
|
158
|
+
|
159
|
+
_match_ will reuse certificates and will create separate provisioning profiles for each app.
|
160
|
+
|
149
161
|
#### Passphrase
|
150
162
|
|
151
163
|
When running _match_ for the first time on a new machine, it will ask you for the passphrase for the Git repository. This is an additional layer of security: each of the files will be encrypted using `openssl`. Make sure to remember the password, as you'll need it when you run match on a different machine.
|
@@ -332,7 +344,7 @@ _match_ stores the certificate (`.cer`) and the private key (`.p12`) files separ
|
|
332
344
|
Decrypt your cert found in `certs/<type>/<unique-id>.cer` as a pem file:
|
333
345
|
|
334
346
|
```no-highlight
|
335
|
-
openssl aes-256-cbc -k "<password>" -in "certs/<type>/<unique-id>.cer" -out "cert.
|
347
|
+
openssl aes-256-cbc -k "<password>" -in "certs/<type>/<unique-id>.cer" -out "cert.der" -a -d
|
336
348
|
openssl x509 -inform der -in cert.der -out cert.pem
|
337
349
|
```
|
338
350
|
|
@@ -345,7 +357,7 @@ openssl aes-256-cbc -k "<password>" -in "certs/distribution/<unique-id>.p12" -ou
|
|
345
357
|
Generate an encrypted p12 file with the same or new password:
|
346
358
|
|
347
359
|
```no-highlight
|
348
|
-
openssl pkcs12 -export -out "cert.p12" -inkey "key.pem
|
360
|
+
openssl pkcs12 -export -out "cert.p12" -inkey "key.pem" -in "cert.pem" -password pass:<password>
|
349
361
|
```
|
350
362
|
|
351
363
|
## Is this secure?
|
@@ -24,9 +24,9 @@ _deliver_ uploads screenshots, metadata and binaries to App Store Connect. Use _
|
|
24
24
|
- Easily implement a real Continuous Deployment process using [_fastlane_](https://fastlane.tools)
|
25
25
|
- Store the configuration in git to easily deploy from **any** Mac, including your Continuous Integration server
|
26
26
|
- Get a HTML preview of the fetched metadata before uploading the app metadata and screenshots to iTC
|
27
|
-
- Automatically uses [_precheck_](/actions/precheck) to ensure your app has the highest chances of passing app review the first time
|
27
|
+
- Automatically uses [_precheck_](/actions/precheck/) to ensure your app has the highest chances of passing app review the first time
|
28
28
|
|
29
|
-
To upload builds to TestFlight check out [_pilot_](/actions/pilot).
|
29
|
+
To upload builds to TestFlight check out [_pilot_](/actions/pilot/).
|
30
30
|
|
31
31
|
# Quick Start
|
32
32
|
|
@@ -65,7 +65,7 @@ The previous p12 configuration is still currently supported.
|
|
65
65
|
- `cd [your_project_folder]`
|
66
66
|
- `fastlane supply init`
|
67
67
|
- Make changes to the downloaded metadata, add images, screenshots and/or an APK
|
68
|
-
- `fastlane supply
|
68
|
+
- `fastlane supply`
|
69
69
|
|
70
70
|
## Available Commands
|
71
71
|
|
@@ -22,7 +22,7 @@ _pilot_ uses [spaceship.airforce](https://spaceship.airforce) to interact with A
|
|
22
22
|
|
23
23
|
-------
|
24
24
|
|
25
|
-
<h5 align="center"><
|
25
|
+
<h5 align="center"><em>pilot</em> is part of <a href="https://fastlane.tools">fastlane</a>: The easiest way to automate beta deployments and releases for your iOS and Android apps.</h5>
|
26
26
|
|
27
27
|
# Usage
|
28
28
|
|
@@ -6,7 +6,7 @@ module Fastlane
|
|
6
6
|
|
7
7
|
if params[:pathspec]
|
8
8
|
paths = params[:pathspec]
|
9
|
-
|
9
|
+
success_message = "Successfully added from \"#{paths}\" πΎ."
|
10
10
|
elsif params[:path]
|
11
11
|
if params[:path].kind_of?(String)
|
12
12
|
paths = shell_escape(params[:path], should_escape)
|
@@ -15,13 +15,14 @@ module Fastlane
|
|
15
15
|
shell_escape(p, should_escape)
|
16
16
|
end.join(' ')
|
17
17
|
end
|
18
|
-
|
18
|
+
success_message = "Successfully added \"#{paths}\" πΎ."
|
19
19
|
else
|
20
20
|
paths = "."
|
21
|
-
|
21
|
+
success_message = "Successfully added all files πΎ."
|
22
22
|
end
|
23
23
|
|
24
24
|
result = Actions.sh("git add #{paths}", log: FastlaneCore::Globals.verbose?).chomp
|
25
|
+
UI.success(success_message)
|
25
26
|
return result
|
26
27
|
end
|
27
28
|
|
@@ -107,7 +107,7 @@ module Fastlane
|
|
107
107
|
is_string: true),
|
108
108
|
FastlaneCore::ConfigItem.new(key: :flavor,
|
109
109
|
env_name: 'FL_GRADLE_FLAVOR',
|
110
|
-
description: 'The flavor that you want the task for, e.g. `MyFlavor`. If you are running the `assemble` task in a multi-flavor project, and you rely on Actions.lane_context[
|
110
|
+
description: 'The flavor that you want the task for, e.g. `MyFlavor`. If you are running the `assemble` task in a multi-flavor project, and you rely on Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] then you must specify a flavor here or else this value will be undefined',
|
111
111
|
optional: true,
|
112
112
|
is_string: true),
|
113
113
|
FastlaneCore::ConfigItem.new(key: :build_type,
|
@@ -28,7 +28,7 @@ module Fastlane
|
|
28
28
|
#####################################################
|
29
29
|
|
30
30
|
def self.description
|
31
|
-
"Connect to the IFTTT Maker Channel
|
31
|
+
"Connect to the [IFTTT Maker Channel](https://ifttt.com/maker)"
|
32
32
|
end
|
33
33
|
|
34
34
|
def self.details
|
@@ -4,6 +4,7 @@ module Fastlane
|
|
4
4
|
SCAN_DERIVED_DATA_PATH = :SCAN_DERIVED_DATA_PATH
|
5
5
|
SCAN_GENERATED_PLIST_FILE = :SCAN_GENERATED_PLIST_FILE
|
6
6
|
SCAN_GENERATED_PLIST_FILES = :SCAN_GENERATED_PLIST_FILES
|
7
|
+
SCAN_ZIP_BUILD_PRODUCTS_PATH = :SCAN_ZIP_BUILD_PRODUCTS_PATH
|
7
8
|
end
|
8
9
|
|
9
10
|
class RunTestsAction < Action
|
@@ -21,6 +22,9 @@ module Fastlane
|
|
21
22
|
values[:destination] = destination # restore destination value
|
22
23
|
Scan::Manager.new.work(values)
|
23
24
|
|
25
|
+
zip_build_products_path = Scan.cache[:zip_build_products_path]
|
26
|
+
Actions.lane_context[SharedValues::SCAN_ZIP_BUILD_PRODUCTS_PATH] = zip_build_products_path if zip_build_products_path
|
27
|
+
|
24
28
|
return true
|
25
29
|
rescue FastlaneCore::Interface::FastlaneBuildFailure => ex
|
26
30
|
# Specifically catching FastlaneBuildFailure to prevent build/compile errors from being
|
@@ -29,7 +29,7 @@ module Fastlane
|
|
29
29
|
content.scan(/^\s*require (.*)/).each do |current|
|
30
30
|
gem_name = current.last
|
31
31
|
next if gem_name.include?(".") # these are local gems
|
32
|
-
UI.important("You have
|
32
|
+
UI.important("You have required a gem, if this is a third party gem, please use `fastlane_require #{gem_name}` to ensure the gem is installed locally.")
|
33
33
|
end
|
34
34
|
|
35
35
|
parse(content, @path)
|
@@ -991,26 +991,26 @@ func clubmate() {
|
|
991
991
|
let command = RubyCommand(commandID: "", methodName: "clubmate", className: nil, args: [])
|
992
992
|
_ = runner.executeCommand(command)
|
993
993
|
}
|
994
|
-
func cocoapods(
|
995
|
-
integrate: Bool = true,
|
996
|
-
repoUpdate: Bool = false,
|
994
|
+
func cocoapods(repoUpdate: Bool = false,
|
997
995
|
silent: Bool = false,
|
998
996
|
verbose: Bool = false,
|
999
997
|
ansi: Bool = true,
|
1000
998
|
useBundleExec: Bool = true,
|
1001
999
|
podfile: String? = nil,
|
1002
1000
|
errorCallback: String? = nil,
|
1003
|
-
tryRepoUpdateOnError: Bool = false
|
1004
|
-
|
1005
|
-
|
1006
|
-
|
1001
|
+
tryRepoUpdateOnError: Bool = false,
|
1002
|
+
clean: Bool = true,
|
1003
|
+
integrate: Bool = true) {
|
1004
|
+
let command = RubyCommand(commandID: "", methodName: "cocoapods", className: nil, args: [RubyCommand.Argument(name: "repo_update", value: repoUpdate),
|
1007
1005
|
RubyCommand.Argument(name: "silent", value: silent),
|
1008
1006
|
RubyCommand.Argument(name: "verbose", value: verbose),
|
1009
1007
|
RubyCommand.Argument(name: "ansi", value: ansi),
|
1010
1008
|
RubyCommand.Argument(name: "use_bundle_exec", value: useBundleExec),
|
1011
1009
|
RubyCommand.Argument(name: "podfile", value: podfile),
|
1012
1010
|
RubyCommand.Argument(name: "error_callback", value: errorCallback),
|
1013
|
-
RubyCommand.Argument(name: "try_repo_update_on_error", value: tryRepoUpdateOnError)
|
1011
|
+
RubyCommand.Argument(name: "try_repo_update_on_error", value: tryRepoUpdateOnError),
|
1012
|
+
RubyCommand.Argument(name: "clean", value: clean),
|
1013
|
+
RubyCommand.Argument(name: "integrate", value: integrate)])
|
1014
1014
|
_ = runner.executeCommand(command)
|
1015
1015
|
}
|
1016
1016
|
@discardableResult func commitGithubFile(repositoryName: String,
|
@@ -1651,14 +1651,16 @@ func googlePlayTrackVersionCodes(packageName: String,
|
|
1651
1651
|
issuer: String? = nil,
|
1652
1652
|
jsonKey: String? = nil,
|
1653
1653
|
jsonKeyData: String? = nil,
|
1654
|
-
rootUrl: String? = nil
|
1654
|
+
rootUrl: String? = nil,
|
1655
|
+
timeout: Int = 300) {
|
1655
1656
|
let command = RubyCommand(commandID: "", methodName: "google_play_track_version_codes", className: nil, args: [RubyCommand.Argument(name: "package_name", value: packageName),
|
1656
1657
|
RubyCommand.Argument(name: "track", value: track),
|
1657
1658
|
RubyCommand.Argument(name: "key", value: key),
|
1658
1659
|
RubyCommand.Argument(name: "issuer", value: issuer),
|
1659
1660
|
RubyCommand.Argument(name: "json_key", value: jsonKey),
|
1660
1661
|
RubyCommand.Argument(name: "json_key_data", value: jsonKeyData),
|
1661
|
-
RubyCommand.Argument(name: "root_url", value: rootUrl)
|
1662
|
+
RubyCommand.Argument(name: "root_url", value: rootUrl),
|
1663
|
+
RubyCommand.Argument(name: "timeout", value: timeout)])
|
1662
1664
|
_ = runner.executeCommand(command)
|
1663
1665
|
}
|
1664
1666
|
func gradle(task: String,
|
@@ -4069,4 +4071,4 @@ let screengrabfile: Screengrabfile = Screengrabfile()
|
|
4069
4071
|
let snapshotfile: Snapshotfile = Snapshotfile()
|
4070
4072
|
// Please don't remove the lines below
|
4071
4073
|
// They are used to detect outdated files
|
4072
|
-
// FastlaneRunnerAPIVersion [0.9.
|
4074
|
+
// FastlaneRunnerAPIVersion [0.9.26]
|
@@ -48,7 +48,7 @@ module FastlaneCore
|
|
48
48
|
end
|
49
49
|
|
50
50
|
begin
|
51
|
-
FastlaneCore::FastlanePty.spawn(command) do |command_stdout, command_stdin, pid|
|
51
|
+
status = FastlaneCore::FastlanePty.spawn(command) do |command_stdout, command_stdin, pid|
|
52
52
|
begin
|
53
53
|
command_stdout.each do |l|
|
54
54
|
line = l.strip # strip so that \n gets removed
|
@@ -66,8 +66,6 @@ module FastlaneCore
|
|
66
66
|
rescue Errno::EIO
|
67
67
|
# This is expected on some linux systems, that indicates that the subcommand finished
|
68
68
|
# and we kept trying to read, ignore it
|
69
|
-
ensure
|
70
|
-
Process.wait(pid)
|
71
69
|
end
|
72
70
|
end
|
73
71
|
rescue => ex
|
@@ -84,7 +82,6 @@ module FastlaneCore
|
|
84
82
|
end
|
85
83
|
|
86
84
|
# Exit status for build command, should be 0 if build succeeded
|
87
|
-
status = $?.exitstatus
|
88
85
|
if status != 0
|
89
86
|
o = output.join("\n")
|
90
87
|
puts(o) # the user has the right to see the raw output
|
@@ -6,8 +6,13 @@ module FastlaneCore
|
|
6
6
|
def self.spawn(command, &block)
|
7
7
|
require 'pty'
|
8
8
|
PTY.spawn(command) do |command_stdout, command_stdin, pid|
|
9
|
-
|
9
|
+
begin
|
10
|
+
block.call(command_stdout, command_stdin, pid)
|
11
|
+
ensure
|
12
|
+
Process.wait(pid)
|
13
|
+
end
|
10
14
|
end
|
15
|
+
$?.exitstatus
|
11
16
|
rescue LoadError
|
12
17
|
require 'open3'
|
13
18
|
Open3.popen2e(command) do |command_stdin, command_stdout, p| # note the inversion
|
data/pilot/lib/pilot/options.rb
CHANGED
@@ -22,6 +22,7 @@ module Pilot
|
|
22
22
|
description: "The bundle identifier of the app to upload or manage testers (optional)",
|
23
23
|
optional: true,
|
24
24
|
code_gen_sensitive: true,
|
25
|
+
# This incorrect env name is here for backwards compatibility
|
25
26
|
default_value: ENV["TESTFLIGHT_APP_IDENTITIFER"] || CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier),
|
26
27
|
default_value_dynamic: true),
|
27
28
|
FastlaneCore::ConfigItem.new(key: :app_platform,
|
@@ -205,7 +205,7 @@ module Pilot
|
|
205
205
|
end
|
206
206
|
|
207
207
|
if tester.latest_installed_date
|
208
|
-
rows << ["Latest Version", tester.
|
208
|
+
rows << ["Latest Version", "#{tester.latest_install_info['latestInstalledShortVersion']} (#{tester.latest_install_info['latestInstalledVersion']})"]
|
209
209
|
rows << ["Latest Install Date", tester.pretty_install_date]
|
210
210
|
end
|
211
211
|
|
data/scan/lib/scan/runner.rb
CHANGED
@@ -105,6 +105,9 @@ module Scan
|
|
105
105
|
output_directory = File.absolute_path(Scan.config[:output_directory])
|
106
106
|
output_path = File.join(output_directory, "build_products.zip")
|
107
107
|
|
108
|
+
# Caching path for action to put into lane_context
|
109
|
+
Scan.cache[:zip_build_products_path] = output_path
|
110
|
+
|
108
111
|
# Zips build products and moves it to output directory
|
109
112
|
UI.message("Zipping build products")
|
110
113
|
FastlaneCore::Helper.zip_directory(path, output_path, contents_only: true, print: false)
|
@@ -136,9 +136,13 @@ module Screengrab
|
|
136
136
|
end
|
137
137
|
|
138
138
|
def determine_external_screenshots_path(device_serial)
|
139
|
-
|
139
|
+
# macOS evaluates $foo in `echo $foo` before executing the command,
|
140
|
+
# Windows doesn't - hence the double backslash vs. single backslash
|
141
|
+
command = Helper.windows? ? "shell echo \$EXTERNAL_STORAGE " : "shell echo \\$EXTERNAL_STORAGE"
|
142
|
+
device_ext_storage = run_adb_command("adb -s #{device_serial} #{command}",
|
140
143
|
print_all: true,
|
141
144
|
print_command: true)
|
145
|
+
device_ext_storage = device_ext_storage.strip
|
142
146
|
File.join(device_ext_storage, @config[:app_package_name], 'screengrab')
|
143
147
|
end
|
144
148
|
|
@@ -122,6 +122,7 @@ module Snapshot
|
|
122
122
|
optional: true,
|
123
123
|
description: "The bundle identifier of the app to uninstall (only needed when enabling reinstall_app)",
|
124
124
|
code_gen_sensitive: true,
|
125
|
+
# This incorrect env name is here for backwards compatibility
|
125
126
|
default_value: ENV["SNAPSHOT_APP_IDENTITIFER"] || CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier),
|
126
127
|
default_value_dynamic: true),
|
127
128
|
FastlaneCore::ConfigItem.new(key: :add_photos,
|
data/spaceship/README.md
CHANGED
@@ -49,7 +49,7 @@ Get in contact with the creators on Twitter: [@FastlaneTools](https://twitter.co
|
|
49
49
|
|
50
50
|
-------
|
51
51
|
|
52
|
-
<h5 align="center"><
|
52
|
+
<h5 align="center"><em>spaceship</em> is part of <a href="https://fastlane.tools">fastlane</a>: The easiest way to automate beta deployments and releases for your iOS and Android apps.</h5>
|
53
53
|
|
54
54
|
# What's spaceship?
|
55
55
|
|
@@ -74,7 +74,7 @@ module Spaceship
|
|
74
74
|
def pretty_install_date
|
75
75
|
return nil unless latest_installed_date
|
76
76
|
|
77
|
-
Time.at((latest_installed_date / 1000)).strftime("%m
|
77
|
+
Time.at((latest_installed_date / 1000)).strftime("%Y-%m-%d %H:%M")
|
78
78
|
end
|
79
79
|
|
80
80
|
# @return (Array) Returns all beta testers available for this account
|
data/supply/lib/supply/client.rb
CHANGED
data/supply/lib/supply/setup.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
module Supply
|
2
2
|
class Setup
|
3
3
|
def perform_download
|
4
|
+
UI.message("π Downloading metadata, images, screenshots...")
|
5
|
+
|
4
6
|
if File.exist?(metadata_path)
|
5
7
|
UI.important("Metadata already exists at path '#{metadata_path}'")
|
6
8
|
return
|
@@ -22,10 +24,12 @@ module Supply
|
|
22
24
|
|
23
25
|
client.abort_current_edit
|
24
26
|
|
25
|
-
UI.success("Successfully stored metadata in '#{metadata_path}'")
|
27
|
+
UI.success("β
Successfully stored metadata in '#{metadata_path}'")
|
26
28
|
end
|
27
29
|
|
28
30
|
def store_metadata(listing)
|
31
|
+
UI.message("π Downloading metadata (#{listing.language})")
|
32
|
+
|
29
33
|
containing = File.join(metadata_path, listing.language)
|
30
34
|
FileUtils.mkdir_p(containing)
|
31
35
|
|
@@ -37,6 +41,8 @@ module Supply
|
|
37
41
|
end
|
38
42
|
|
39
43
|
def download_images(listing)
|
44
|
+
UI.message("πΌοΈ Downloading images (#{listing.language})")
|
45
|
+
|
40
46
|
# We cannot download existing screenshots as they are compressed
|
41
47
|
# But we can at least download the images
|
42
48
|
require 'net/http'
|
@@ -44,12 +50,12 @@ module Supply
|
|
44
50
|
IMAGES_TYPES.each do |image_type|
|
45
51
|
if ['featureGraphic'].include?(image_type)
|
46
52
|
# we don't get all files in full resolution :(
|
47
|
-
UI.message("Due to a limitation of the Google Play API, there is no way for `supply` to download your existing feature graphic. Please copy your feature graphic to `metadata/android/#{listing.language}/images/featureGraphic.png`")
|
53
|
+
UI.message("π΅ Due to a limitation of the Google Play API, there is no way for `supply` to download your existing feature graphic. Please copy your feature graphic to `metadata/android/#{listing.language}/images/featureGraphic.png`")
|
48
54
|
next
|
49
55
|
end
|
50
56
|
|
51
57
|
begin
|
52
|
-
UI.message("Downloading
|
58
|
+
UI.message("Downloading `#{image_type}` for #{listing.language}...")
|
53
59
|
|
54
60
|
url = client.fetch_images(image_type: image_type, language: listing.language).last
|
55
61
|
next unless url
|
@@ -64,6 +70,8 @@ module Supply
|
|
64
70
|
end
|
65
71
|
|
66
72
|
def create_screenshots_folder(listing)
|
73
|
+
UI.message("π± Downloading screenshots (#{listing.language})")
|
74
|
+
|
67
75
|
containing = File.join(metadata_path, listing.language)
|
68
76
|
|
69
77
|
FileUtils.mkdir_p(File.join(containing, IMAGES_FOLDER_NAME))
|
@@ -71,10 +79,12 @@ module Supply
|
|
71
79
|
FileUtils.mkdir_p(File.join(containing, IMAGES_FOLDER_NAME, screenshot_type))
|
72
80
|
end
|
73
81
|
|
74
|
-
UI.message("Due to a limitation of the Google Play API, there is no way for `supply` to download your existing screenshots. Please copy your screenshots into `metadata/android/#{listing.language}/images/`")
|
82
|
+
UI.message("π΅ Due to a limitation of the Google Play API, there is no way for `supply` to download your existing screenshots. Please copy your screenshots into `metadata/android/#{listing.language}/images/`")
|
75
83
|
end
|
76
84
|
|
77
85
|
def store_apk_listing(apk_listing)
|
86
|
+
UI.message("π¨ Downloading changelogs (#{apk_listing.language}, #{apk_listing.apk_version_code})")
|
87
|
+
|
78
88
|
containing = File.join(metadata_path, apk_listing.language, CHANGELOGS_FOLDER_NAME)
|
79
89
|
unless File.exist?(containing)
|
80
90
|
FileUtils.mkdir_p(containing)
|
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.102.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Stefan Natchev
|
8
7
|
- JΓ©rΓ΄me Lacoste
|
9
|
-
-
|
10
|
-
- Joshua Liebowitz
|
11
|
-
- Maksym Grebenets
|
12
|
-
- Manu Wallner
|
8
|
+
- Matthew Ellis
|
13
9
|
- Jorge Revuelta H
|
10
|
+
- Helmut Januschka
|
14
11
|
- Aaron Brager
|
15
|
-
-
|
16
|
-
- Josh Holtz
|
17
|
-
- Luka Mirosevic
|
18
|
-
- Olivier Halligon
|
19
|
-
- Matthew Ellis
|
12
|
+
- Andrew McBurney
|
20
13
|
- Danielle Tomlinson
|
21
|
-
- Iulian Onofrei
|
22
|
-
- Fumiya Nakamura
|
23
|
-
- Felix Krause
|
24
14
|
- Jimmy Dee
|
25
|
-
-
|
15
|
+
- Luka Mirosevic
|
16
|
+
- Felix Krause
|
26
17
|
- Jan Piotrowski
|
18
|
+
- Josh Holtz
|
19
|
+
- Kohki Miki
|
20
|
+
- Fumiya Nakamura
|
21
|
+
- Joshua Liebowitz
|
22
|
+
- Maksym Grebenets
|
23
|
+
- Stefan Natchev
|
24
|
+
- Iulian Onofrei
|
25
|
+
- Manu Wallner
|
26
|
+
- Olivier Halligon
|
27
27
|
autorequire:
|
28
28
|
bindir: bin
|
29
29
|
cert_chain: []
|
30
|
-
date: 2018-08-
|
30
|
+
date: 2018-08-16 00:00:00.000000000 Z
|
31
31
|
dependencies:
|
32
32
|
- !ruby/object:Gem::Dependency
|
33
33
|
name: slack-notifier
|
@@ -940,7 +940,6 @@ files:
|
|
940
940
|
- fastlane/lib/fastlane.rb
|
941
941
|
- fastlane/lib/fastlane/action.rb
|
942
942
|
- fastlane/lib/fastlane/action_collector.rb
|
943
|
-
- fastlane/lib/fastlane/actions/.google_play_track_version_codes.rb.swp
|
944
943
|
- fastlane/lib/fastlane/actions/README.md
|
945
944
|
- fastlane/lib/fastlane/actions/actions_helper.rb
|
946
945
|
- fastlane/lib/fastlane/actions/adb.rb
|
Binary file
|