fastlane 2.101.1 β†’ 2.102.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +70 -70
  3. data/deliver/lib/deliver/loader.rb +4 -2
  4. data/fastlane/lib/assets/ActionDetails.md.erb +1 -1
  5. data/fastlane/lib/assets/Actions.md.erb +3 -3
  6. data/fastlane/lib/fastlane/actions/appaloosa.rb +1 -1
  7. data/fastlane/lib/fastlane/actions/appetize.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/apteligent.rb +1 -1
  9. data/fastlane/lib/fastlane/actions/chatwork.rb +1 -1
  10. data/fastlane/lib/fastlane/actions/cocoapods.rb +15 -11
  11. data/fastlane/lib/fastlane/actions/crashlytics.rb +1 -1
  12. data/fastlane/lib/fastlane/actions/create_pull_request.rb +1 -1
  13. data/fastlane/lib/fastlane/actions/docs/build_ios_app.md +1 -1
  14. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +2 -2
  15. data/fastlane/lib/fastlane/actions/docs/get_certificates.md +2 -2
  16. data/fastlane/lib/fastlane/actions/docs/get_push_certificate.md +1 -1
  17. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +15 -3
  18. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +2 -2
  19. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +1 -1
  20. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +1 -1
  21. data/fastlane/lib/fastlane/actions/flock.rb +1 -1
  22. data/fastlane/lib/fastlane/actions/git_add.rb +4 -3
  23. data/fastlane/lib/fastlane/actions/gradle.rb +1 -1
  24. data/fastlane/lib/fastlane/actions/hipchat.rb +1 -1
  25. data/fastlane/lib/fastlane/actions/hockey.rb +1 -1
  26. data/fastlane/lib/fastlane/actions/ifttt.rb +1 -1
  27. data/fastlane/lib/fastlane/actions/installr.rb +1 -1
  28. data/fastlane/lib/fastlane/actions/nexus_upload.rb +1 -1
  29. data/fastlane/lib/fastlane/actions/onesignal.rb +1 -1
  30. data/fastlane/lib/fastlane/actions/run_tests.rb +4 -0
  31. data/fastlane/lib/fastlane/actions/slack.rb +1 -1
  32. data/fastlane/lib/fastlane/actions/splunkmint.rb +1 -1
  33. data/fastlane/lib/fastlane/actions/testfairy.rb +1 -1
  34. data/fastlane/lib/fastlane/actions/tryouts.rb +1 -1
  35. data/fastlane/lib/fastlane/actions/twitter.rb +1 -1
  36. data/fastlane/lib/fastlane/actions/typetalk.rb +1 -1
  37. data/fastlane/lib/fastlane/actions/update_urban_airship_configuration.rb +1 -1
  38. data/fastlane/lib/fastlane/fast_file.rb +1 -1
  39. data/fastlane/lib/fastlane/version.rb +1 -1
  40. data/fastlane/swift/Deliverfile.swift +1 -1
  41. data/fastlane/swift/Fastlane.swift +13 -11
  42. data/fastlane/swift/Gymfile.swift +1 -1
  43. data/fastlane/swift/Matchfile.swift +1 -1
  44. data/fastlane/swift/Precheckfile.swift +1 -1
  45. data/fastlane/swift/Scanfile.swift +1 -1
  46. data/fastlane/swift/Screengrabfile.swift +1 -1
  47. data/fastlane/swift/Snapshotfile.swift +1 -1
  48. data/fastlane_core/lib/fastlane_core/command_executor.rb +1 -4
  49. data/fastlane_core/lib/fastlane_core/fastlane_pty.rb +6 -1
  50. data/pilot/lib/pilot/options.rb +1 -0
  51. data/pilot/lib/pilot/tester_manager.rb +1 -1
  52. data/scan/lib/scan/runner.rb +3 -0
  53. data/screengrab/lib/screengrab/runner.rb +5 -1
  54. data/snapshot/lib/snapshot/options.rb +1 -0
  55. data/spaceship/README.md +1 -1
  56. data/spaceship/lib/spaceship/test_flight/client.rb +4 -0
  57. data/spaceship/lib/spaceship/test_flight/tester.rb +1 -1
  58. data/supply/lib/supply/client.rb +1 -1
  59. data/supply/lib/supply/setup.rb +14 -4
  60. metadata +16 -17
  61. 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: 7675aa667ac8af5012c38fa488cc5b5f46111830
4
- data.tar.gz: 39b728c2c2d2955569e5f1a21b4d1d1c7a494706
3
+ metadata.gz: d91692ae9b538be8c778211d301175472ee11ac1
4
+ data.tar.gz: 0abd168e6c72123dace0c10dd681ef8bc303a8cf
5
5
  SHA512:
6
- metadata.gz: b5f6ae75cb557fa9a06f3a47bdc33f397791a8658cb247aeb1941dbe5a467df0d0dbfac48e4d4ad5263768f3214d661b80095725fccc77e851f7944688cf21c7
7
- data.tar.gz: 2758c4d65297bc72f7638f82981b482c07c9ea40505809ce2e3da9402c41328e5a91aacd117f965f8b06fec5ab110414443434f05ba08f0058b1c221ae73cb90
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='iulian-onofrei'>
36
- <a href='https://github.com/revolter'>
37
- <img src='https://github.com/revolter.png?size=140'>
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/minuscorp'>Jorge Revuelta H</a></h4>
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
- </tr>
66
- <tr>
67
- <td id='helmut-januschka'>
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/hjanuschka'>Helmut Januschka</a></h4>
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
- <td id='felix-krause'>
80
- <a href='https://github.com/KrauseFx'>
81
- <img src='https://github.com/KrauseFx.png?size=140'>
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'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
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
- <td id='manu-wallner'>
106
- <a href='https://github.com/milch'>
107
- <img src='https://github.com/milch.png?size=140'>
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/acrooow'>Manu Wallner</a></h4>
103
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
110
104
  </td>
111
- <td id='josh-holtz'>
112
- <a href='https://github.com/joshdholtz'>
113
- <img src='https://github.com/joshdholtz.png?size=140'>
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/joshdholtz'>Josh Holtz</a></h4>
109
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
116
110
  </td>
117
- <td id='fumiya-nakamura'>
118
- <a href='https://github.com/nafu'>
119
- <img src='https://github.com/nafu.png?size=140'>
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/nafu003'>Fumiya Nakamura</a></h4>
115
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
122
116
  </td>
123
- <td id='jimmy-dee'>
124
- <a href='https://github.com/jdee'>
125
- <img src='https://github.com/jdee.png?size=140'>
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'>Jimmy Dee</h4>
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='andrew-mcburney'>
132
- <a href='https://github.com/AndrewMcBurney'>
133
- <img src='https://github.com/AndrewMcBurney.png?size=140'>
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/armcburney'>Andrew McBurney</a></h4>
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='olivier-halligon'>
150
- <a href='https://github.com/AliSoftware'>
151
- <img src='https://github.com/AliSoftware.png?size=140'>
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/lacostej'>JΓ©rΓ΄me Lacoste</a></h4>
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
- # If the user also uses `supply` in the same project, an 'android' folder might exist
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 = (UploadMetadata::ALL_META_SUB_DIRS.map(&:downcase) << SUPPLY_DIR_NAME).freeze
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, '*'))
@@ -59,4 +59,4 @@ fastlane action <%= action.action_name %>
59
59
 
60
60
  <hr />
61
61
 
62
- <a href="/actions"><b>Back to actions</b></a>
62
+ <a href="/actions/"><b>Back to actions</b></a>
@@ -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 the browser"
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
@@ -32,7 +32,7 @@ module Fastlane
32
32
  end
33
33
 
34
34
  def self.description
35
- "Send a success/error message to ChatWork"
35
+ "Send a success/error message to [ChatWork](https://go.chatwork.com/)"
36
36
  end
37
37
 
38
38
  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
@@ -58,7 +58,7 @@ module Fastlane
58
58
  end
59
59
 
60
60
  def self.description
61
- "Upload a new build to Crashlytics Beta"
61
+ "Upload a new build to [Crashlytics Beta](http://try.crashlytics.com/beta/)"
62
62
  end
63
63
 
64
64
  def self.available_options
@@ -111,7 +111,7 @@ module Fastlane
111
111
  def self.example_code
112
112
  [
113
113
  'create_pull_request(
114
- api_token: ENV["GITHUB_TOKEN"],
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"><code>gym</code> 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>
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"><code>frameit</code> 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>
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 <code>frameit</code> 2.0 update was kindly sponsored by <a href="https://mindnode.com/">MindNode</a>, seen in the screenshots above.</h5>
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"><code>cert</code> 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>
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"><code>pem</code> 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>
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"><code>match</code> 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>
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.dem" -a -d
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' -in "cert.pem" -password pass:<password>
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 run`
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"><code>pilot</code> 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>
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
 
@@ -30,7 +30,7 @@ module Fastlane
30
30
  end
31
31
 
32
32
  def self.description
33
- "Send a message to a Flock group"
33
+ "Send a message to a [Flock](https://flock.com/) group"
34
34
  end
35
35
 
36
36
  def self.details
@@ -6,7 +6,7 @@ module Fastlane
6
6
 
7
7
  if params[:pathspec]
8
8
  paths = params[:pathspec]
9
- UI.success("Successfully added from \"#{paths}\" πŸ’Ύ.")
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
- UI.success("Successfully added \"#{paths}\" πŸ’Ύ.")
18
+ success_message = "Successfully added \"#{paths}\" πŸ’Ύ."
19
19
  else
20
20
  paths = "."
21
- UI.success("Successfully added all files πŸ’Ύ.")
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[Actions.SharedValues::GRADLE_APK_OUTPUT_PATH] then you must specify a flavor here or else this value will be undefined',
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,
@@ -91,7 +91,7 @@ module Fastlane
91
91
  end
92
92
 
93
93
  def self.description
94
- "Send a error/success message to HipChat"
94
+ "Send a error/success message to [HipChat](https://www.hipchat.com/)"
95
95
  end
96
96
 
97
97
  def self.available_options
@@ -183,7 +183,7 @@ module Fastlane
183
183
  end
184
184
 
185
185
  def self.description
186
- "Upload a new build to HockeyApp"
186
+ "Upload a new build to [HockeyApp](https://hockeyapp.net/)"
187
187
  end
188
188
 
189
189
  def self.available_options
@@ -28,7 +28,7 @@ module Fastlane
28
28
  #####################################################
29
29
 
30
30
  def self.description
31
- "Connect to the IFTTT Maker Channel. https://ifttt.com/maker"
31
+ "Connect to the [IFTTT Maker Channel](https://ifttt.com/maker)"
32
32
  end
33
33
 
34
34
  def self.details
@@ -60,7 +60,7 @@ module Fastlane
60
60
  end
61
61
 
62
62
  def self.description
63
- "Upload a new build to Installr"
63
+ "Upload a new build to [Installr](http://installrapp.com/)"
64
64
  end
65
65
 
66
66
  def self.available_options
@@ -89,7 +89,7 @@ module Fastlane
89
89
  #####################################################
90
90
 
91
91
  def self.description
92
- "Upload a file to Sonatype Nexus platform"
92
+ "Upload a file to [Sonatype Nexus platform](https://www.sonatype.com)"
93
93
  end
94
94
 
95
95
  def self.available_options
@@ -58,7 +58,7 @@ module Fastlane
58
58
  end
59
59
 
60
60
  def self.description
61
- "Create a new OneSignal application"
61
+ "Create a new [OneSignal](https://onesignal.com/) application"
62
62
  end
63
63
 
64
64
  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
@@ -62,7 +62,7 @@ module Fastlane
62
62
  end
63
63
 
64
64
  def self.description
65
- "Send a success/error message to your Slack group"
65
+ "Send a success/error message to your [Slack](https://slack.com) group"
66
66
  end
67
67
 
68
68
  def self.available_options
@@ -79,7 +79,7 @@ module Fastlane
79
79
  #####################################################
80
80
 
81
81
  def self.description
82
- "Upload dSYM file to Splunk MINT"
82
+ "Upload dSYM file to [Splunk MINT](https://mint.splunk.com/)"
83
83
  end
84
84
 
85
85
  def self.available_options
@@ -130,7 +130,7 @@ module Fastlane
130
130
  private_class_method :parse_response
131
131
 
132
132
  def self.description
133
- 'Upload a new build to TestFairy'
133
+ 'Upload a new build to [TestFairy](https://www.testfairy.com/)'
134
134
  end
135
135
 
136
136
  def self.details
@@ -58,7 +58,7 @@ module Fastlane
58
58
  end
59
59
 
60
60
  def self.description
61
- "Upload a new build to Tryouts"
61
+ "Upload a new build to [Tryouts](https://tryouts.io/)"
62
62
  end
63
63
 
64
64
  def self.details
@@ -19,7 +19,7 @@ module Fastlane
19
19
  #####################################################
20
20
 
21
21
  def self.description
22
- "Post a tweet on Twitter.com"
22
+ "Post a tweet on [Twitter.com](https://twitter.com)"
23
23
  end
24
24
 
25
25
  def self.details
@@ -52,7 +52,7 @@ module Fastlane
52
52
  end
53
53
 
54
54
  def self.description
55
- "Post a message to Typetalk"
55
+ "Post a message to [Typetalk](https://www.typetalk.com/)"
56
56
  end
57
57
 
58
58
  def self.available_options
@@ -21,7 +21,7 @@ module Fastlane
21
21
  end
22
22
 
23
23
  def self.description
24
- "Set the Urban Airship plist configuration values"
24
+ "Set [Urban Airship](https://www.urbanairship.com/) plist configuration values"
25
25
  end
26
26
 
27
27
  def self.details
@@ -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 require'd a gem, if this is a third party gem, please use `fastlane_require #{gem_name}` to ensure the gem is installed locally.")
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)
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.101.1'.freeze
2
+ VERSION = '2.102.0'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.101.1
21
+ // Generated with fastlane 2.102.0
@@ -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(clean: Bool = true,
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
- let command = RubyCommand(commandID: "", methodName: "cocoapods", className: nil, args: [RubyCommand.Argument(name: "clean", value: clean),
1005
- RubyCommand.Argument(name: "integrate", value: integrate),
1006
- RubyCommand.Argument(name: "repo_update", value: repoUpdate),
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.25]
4074
+ // FastlaneRunnerAPIVersion [0.9.26]
@@ -18,4 +18,4 @@ class Gymfile: GymfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.101.1
21
+ // Generated with fastlane 2.102.0
@@ -18,4 +18,4 @@ class Matchfile: MatchfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.101.1
21
+ // Generated with fastlane 2.102.0
@@ -18,4 +18,4 @@ class Precheckfile: PrecheckfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.101.1
21
+ // Generated with fastlane 2.102.0
@@ -18,4 +18,4 @@ class Scanfile: ScanfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.101.1
21
+ // Generated with fastlane 2.102.0
@@ -18,4 +18,4 @@ class Screengrabfile: ScreengrabfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.101.1
21
+ // Generated with fastlane 2.102.0
@@ -18,4 +18,4 @@ class Snapshotfile: SnapshotfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.101.1
21
+ // Generated with fastlane 2.102.0
@@ -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
- block.call(command_stdout, command_stdin, pid)
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
@@ -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.latest_build]
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
 
@@ -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
- device_ext_storage = run_adb_command("adb -s #{device_serial} shell echo \\$EXTERNAL_STORAGE",
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,
@@ -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"><code>spaceship</code> 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>
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
 
@@ -112,6 +112,10 @@ module Spaceship
112
112
  req.body = body.to_json
113
113
  req.headers['Content-Type'] = 'application/json'
114
114
  end
115
+
116
+ # This is invalid now.
117
+ @cached_groups.delete(app_id) if @cached_groups
118
+
115
119
  handle_response(response)
116
120
  end
117
121
 
@@ -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/%d/%y %H:%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
@@ -298,7 +298,7 @@ module Supply
298
298
  current_edit.id,
299
299
  track
300
300
  )
301
- return result.version_codes
301
+ return result.version_codes || []
302
302
  rescue Google::Apis::ClientError => e
303
303
  return [] if e.status_code == 404 && e.to_s.include?("trackEmpty")
304
304
  raise
@@ -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 #{image_type} for #{listing.language}...")
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.101.1
4
+ version: 2.102.0
5
5
  platform: ruby
6
6
  authors:
7
- - Stefan Natchev
8
7
  - JΓ©rΓ΄me Lacoste
9
- - Andrew McBurney
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
- - Kohki Miki
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
- - Helmut Januschka
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-01 00:00:00.000000000 Z
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