fastlane 2.101.1 β†’ 2.102.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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