fastlane 2.136.0 → 2.141.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +85 -72
  3. data/cert/lib/cert/options.rb +12 -5
  4. data/cert/lib/cert/runner.rb +13 -0
  5. data/deliver/lib/deliver/options.rb +2 -2
  6. data/deliver/lib/deliver/runner.rb +13 -2
  7. data/deliver/lib/deliver/submit_for_review.rb +7 -1
  8. data/fastlane/lib/fastlane/action.rb +2 -2
  9. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
  10. data/fastlane/lib/fastlane/actions/build_app.rb +157 -6
  11. data/fastlane/lib/fastlane/actions/build_ios_app.rb +28 -132
  12. data/fastlane/lib/fastlane/actions/build_mac_app.rb +46 -0
  13. data/fastlane/lib/fastlane/actions/create_pull_request.rb +71 -2
  14. data/fastlane/lib/fastlane/actions/docs/{build_ios_app.md → build_app.md} +1 -1
  15. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +19 -0
  16. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +10 -0
  17. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +4 -2
  18. data/fastlane/lib/fastlane/actions/ensure_bundle_exec.rb +3 -3
  19. data/fastlane/lib/fastlane/actions/get_version_number.rb +7 -2
  20. data/fastlane/lib/fastlane/actions/gradle.rb +54 -3
  21. data/fastlane/lib/fastlane/actions/gym.rb +3 -7
  22. data/fastlane/lib/fastlane/actions/import_from_git.rb +4 -0
  23. data/fastlane/lib/fastlane/actions/increment_version_number.rb +6 -3
  24. data/fastlane/lib/fastlane/actions/last_git_tag.rb +14 -5
  25. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +2 -2
  26. data/fastlane/lib/fastlane/actions/register_devices.rb +5 -1
  27. data/fastlane/lib/fastlane/actions/ruby_version.rb +1 -1
  28. data/fastlane/lib/fastlane/actions/run_tests.rb +5 -22
  29. data/fastlane/lib/fastlane/actions/set_github_release.rb +1 -1
  30. data/fastlane/lib/fastlane/actions/setup_ci.rb +14 -8
  31. data/fastlane/lib/fastlane/actions/testfairy.rb +8 -1
  32. data/fastlane/lib/fastlane/actions/update_plist.rb +37 -2
  33. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +1 -0
  34. data/fastlane/lib/fastlane/actions/upload_to_play_store_internal_app_sharing.rb +78 -0
  35. data/fastlane/lib/fastlane/actions/verify_build.rb +1 -1
  36. data/fastlane/lib/fastlane/actions/xcode_select.rb +6 -1
  37. data/fastlane/lib/fastlane/cli_tools_distributor.rb +2 -2
  38. data/fastlane/lib/fastlane/commands_generator.rb +1 -1
  39. data/fastlane/lib/fastlane/fast_file.rb +13 -3
  40. data/fastlane/lib/fastlane/helper/adb_helper.rb +13 -4
  41. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +2 -0
  42. data/fastlane/lib/fastlane/runner.rb +23 -18
  43. data/fastlane/lib/fastlane/version.rb +1 -1
  44. data/fastlane/swift/Deliverfile.swift +1 -1
  45. data/fastlane/swift/DeliverfileProtocol.swift +3 -3
  46. data/fastlane/swift/Fastlane.swift +342 -66
  47. data/fastlane/swift/Gymfile.swift +1 -1
  48. data/fastlane/swift/GymfileProtocol.swift +17 -1
  49. data/fastlane/swift/Matchfile.swift +1 -1
  50. data/fastlane/swift/MatchfileProtocol.swift +12 -4
  51. data/fastlane/swift/Precheckfile.swift +1 -1
  52. data/fastlane/swift/Scanfile.swift +1 -1
  53. data/fastlane/swift/ScanfileProtocol.swift +17 -1
  54. data/fastlane/swift/Screengrabfile.swift +1 -1
  55. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -9
  56. data/fastlane/swift/Snapshotfile.swift +1 -1
  57. data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
  58. data/fastlane_core/lib/fastlane_core/build_watcher.rb +6 -2
  59. data/fastlane_core/lib/fastlane_core/cert_checker.rb +28 -0
  60. data/fastlane_core/lib/fastlane_core/device_manager.rb +20 -0
  61. data/fastlane_core/lib/fastlane_core/helper.rb +7 -1
  62. data/fastlane_core/lib/fastlane_core/project.rb +23 -0
  63. data/frameit/lib/frameit/editor.rb +3 -0
  64. data/gym/lib/gym/code_signing_mapping.rb +32 -3
  65. data/gym/lib/gym/detect_values.rb +34 -2
  66. data/gym/lib/gym/generators/build_command_generator.rb +1 -0
  67. data/gym/lib/gym/generators/package_command_generator.rb +4 -0
  68. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +47 -17
  69. data/gym/lib/gym/module.rb +8 -0
  70. data/gym/lib/gym/options.rb +25 -1
  71. data/gym/lib/gym/runner.rb +63 -23
  72. data/match/lib/match/encryption/openssl.rb +1 -1
  73. data/match/lib/match/generator.rb +17 -3
  74. data/match/lib/match/module.rb +4 -1
  75. data/match/lib/match/nuke.rb +54 -16
  76. data/match/lib/match/options.rb +28 -15
  77. data/match/lib/match/runner.rb +21 -8
  78. data/match/lib/match/spaceship_ensure.rb +19 -9
  79. data/match/lib/match/storage/git_storage.rb +11 -3
  80. data/pilot/lib/pilot/build_manager.rb +46 -12
  81. data/pilot/lib/pilot/options.rb +3 -1
  82. data/scan/lib/scan/detect_values.rb +6 -1
  83. data/scan/lib/scan/manager.rb +18 -1
  84. data/scan/lib/scan/options.rb +23 -1
  85. data/scan/lib/scan/runner.rb +6 -0
  86. data/scan/lib/scan/slack_poster.rb +1 -1
  87. data/scan/lib/scan/test_command_generator.rb +1 -1
  88. data/screengrab/lib/screengrab/options.rb +1 -10
  89. data/screengrab/lib/screengrab/runner.rb +16 -19
  90. data/snapshot/lib/snapshot/options.rb +12 -1
  91. data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
  92. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +11 -0
  93. data/spaceship/lib/spaceship/client.rb +9 -4
  94. data/spaceship/lib/spaceship/connect_api.rb +2 -0
  95. data/spaceship/lib/spaceship/connect_api/models/app.rb +11 -0
  96. data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +75 -0
  97. data/spaceship/lib/spaceship/connect_api/models/beta_screenshot.rb +18 -0
  98. data/spaceship/lib/spaceship/connect_api/models/build.rb +5 -0
  99. data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +5 -0
  100. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +15 -0
  101. data/spaceship/lib/spaceship/portal/app.rb +11 -2
  102. data/spaceship/lib/spaceship/tunes/iap.rb +11 -11
  103. data/spaceship/lib/spaceship/tunes/iap_detail.rb +7 -3
  104. data/spaceship/lib/spaceship/tunes/iap_families.rb +12 -1
  105. data/spaceship/lib/spaceship/tunes/iap_family_details.rb +26 -17
  106. data/spaceship/lib/spaceship/tunes/iap_status.rb +5 -1
  107. data/spaceship/lib/spaceship/tunes/tunes_client.rb +4 -7
  108. data/supply/lib/supply/client.rb +27 -0
  109. data/supply/lib/supply/options.rb +8 -2
  110. data/supply/lib/supply/uploader.rb +55 -26
  111. metadata +44 -25
  112. data/supply/lib/supply/.uploader.rb.swp +0 -0
@@ -1,150 +1,46 @@
1
1
  module Fastlane
2
2
  module Actions
3
- module SharedValues
4
- IPA_OUTPUT_PATH ||= :IPA_OUTPUT_PATH
5
- DSYM_OUTPUT_PATH ||= :DSYM_OUTPUT_PATH
6
- XCODEBUILD_ARCHIVE ||= :XCODEBUILD_ARCHIVE # originally defined in XcodebuildAction
7
- end
8
-
9
- class BuildIosAppAction < Action
10
- def self.run(values)
11
- require 'gym'
12
-
13
- unless Actions.lane_context[SharedValues::SIGH_PROFILE_TYPE].to_s == "development"
14
- values[:export_method] ||= Actions.lane_context[SharedValues::SIGH_PROFILE_TYPE]
15
- end
16
-
17
- if Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING]
18
- # Since Xcode 9 you need to explicitly provide the provisioning profile per app target
19
- # If the user is smart and uses match and gym together with fastlane, we can do all
20
- # the heavy lifting for them
21
- values[:export_options] ||= {}
22
- # It's not always a hash, because the user might have passed a string path to a ready plist file
23
- # If that's the case, we won't set the provisioning profiles
24
- # see https://github.com/fastlane/fastlane/issues/9490
25
- if values[:export_options].kind_of?(Hash)
26
- match_mapping = (Actions.lane_context[SharedValues::MATCH_PROVISIONING_PROFILE_MAPPING] || {}).dup
27
- existing_mapping = (values[:export_options][:provisioningProfiles] || {}).dup
28
-
29
- # Be smart about how we merge those mappings in case there are conflicts
30
- mapping_object = Gym::CodeSigningMapping.new
31
- hash_to_use = mapping_object.merge_profile_mapping(primary_mapping: existing_mapping,
32
- secondary_mapping: match_mapping,
33
- export_method: values[:export_method])
34
-
35
- values[:export_options][:provisioningProfiles] = hash_to_use
36
- else
37
- self.show_xcode_9_warning
38
- end
39
- elsif Actions.lane_context[SharedValues::SIGH_PROFILE_PATHS]
40
- # Since Xcode 9 you need to explicitly provide the provisioning profile per app target
41
- # If the user used sigh we can match the profiles from sigh
42
- values[:export_options] ||= {}
43
- if values[:export_options].kind_of?(Hash)
44
- # It's not always a hash, because the user might have passed a string path to a ready plist file
45
- # If that's the case, we won't set the provisioning profiles
46
- # see https://github.com/fastlane/fastlane/issues/9684
47
- values[:export_options][:provisioningProfiles] ||= {}
48
- Actions.lane_context[SharedValues::SIGH_PROFILE_PATHS].each do |profile_path|
49
- begin
50
- profile = FastlaneCore::ProvisioningProfile.parse(profile_path)
51
- app_id_prefix = profile["ApplicationIdentifierPrefix"].first
52
- bundle_id = profile["Entitlements"]["application-identifier"].gsub("#{app_id_prefix}.", "")
53
- values[:export_options][:provisioningProfiles][bundle_id] = profile["Name"]
54
- rescue => ex
55
- UI.error("Couldn't load profile at path: #{profile_path}")
56
- UI.error(ex)
57
- UI.verbose(ex.backtrace.join("\n"))
58
- end
59
- end
60
- else
61
- self.show_xcode_9_warning
62
- end
3
+ require 'fastlane/actions/build_app'
4
+ class BuildIosAppAction < BuildAppAction
5
+ # Gym::Options.available_options keys that don't apply to ios apps.
6
+ REJECT_OPTIONS = [
7
+ :pkg,
8
+ :skip_package_pkg,
9
+ :catalyst_platform,
10
+ :installer_cert_name
11
+ ]
12
+
13
+ def self.run(params)
14
+ # Adding reject options back in so gym has everything it needs
15
+ params.available_options += Gym::Options.available_options.select do |option|
16
+ REJECT_OPTIONS.include?(option.key)
63
17
  end
64
18
 
65
- gym_output_path = Gym::Manager.new.work(values)
66
- if gym_output_path.nil?
67
- UI.important("No output path received from gym")
68
- return nil
69
- end
70
-
71
- absolute_ipa_path = File.expand_path(gym_output_path)
72
- absolute_dsym_path = absolute_ipa_path.gsub(".ipa", ".app.dSYM.zip")
73
-
74
- # This might be the mac app path, so we don't want to set it here
75
- # https://github.com/fastlane/fastlane/issues/5757
76
- if absolute_ipa_path.include?(".ipa")
77
- Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] = absolute_ipa_path
78
- ENV[SharedValues::IPA_OUTPUT_PATH.to_s] = absolute_ipa_path # for deliver
79
- end
80
-
81
- Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH] = absolute_dsym_path if File.exist?(absolute_dsym_path)
82
- Actions.lane_context[SharedValues::XCODEBUILD_ARCHIVE] = Gym::BuildCommandGenerator.archive_path
83
- ENV[SharedValues::DSYM_OUTPUT_PATH.to_s] = absolute_dsym_path if File.exist?(absolute_dsym_path)
84
-
85
- return absolute_ipa_path
86
- end
87
-
88
- def self.description
89
- "Easily build and sign your app (via _gym_)"
90
- end
91
-
92
- def self.details
93
- "More information: https://fastlane.tools/gym"
94
- end
95
-
96
- def self.output
97
- [
98
- ['IPA_OUTPUT_PATH', 'The path to the newly generated ipa file'],
99
- ['DSYM_OUTPUT_PATH', 'The path to the dSYM files'],
100
- ['XCODEBUILD_ARCHIVE', 'The path to the xcodebuild archive']
101
- ]
102
- end
19
+ # Defaulting to ios specific values
20
+ params[:catalyst_platform] = "ios"
103
21
 
104
- def self.return_value
105
- "The absolute path to the generated ipa file"
22
+ super(params)
106
23
  end
107
24
 
108
- def self.author
109
- "KrauseFx"
110
- end
25
+ #####################################################
26
+ # @!group Documentation
27
+ #####################################################
111
28
 
112
29
  def self.available_options
113
30
  require 'gym'
114
- Gym::Options.available_options
115
- end
116
-
117
- def self.is_supported?(platform)
118
- [:ios, :mac].include?(platform)
119
- end
31
+ require 'gym/options'
120
32
 
121
- def self.example_code
122
- [
123
- 'build_ios_app(scheme: "MyApp", workspace: "MyApp.xcworkspace")',
124
- 'build_ios_app(
125
- workspace: "MyApp.xcworkspace",
126
- configuration: "Debug",
127
- scheme: "MyApp",
128
- silent: true,
129
- clean: true,
130
- output_directory: "path/to/dir", # Destination directory. Defaults to current directory.
131
- output_name: "my-app.ipa", # specify the name of the .ipa file to generate (including file extension)
132
- sdk: "iOS 11.1" # use SDK as the name or path of the base SDK when building the project.
133
- )',
134
- 'gym # alias for "build_ios_app"',
135
- 'build_app # alias for "build_ios_app"'
136
- ]
33
+ Gym::Options.available_options.reject do |option|
34
+ REJECT_OPTIONS.include?(option.key)
35
+ end
137
36
  end
138
37
 
139
- def self.category
140
- :building
38
+ def self.is_supported?(platform)
39
+ [:ios].include?(platform)
141
40
  end
142
41
 
143
- def self.show_xcode_9_warning
144
- return unless Helper.xcode_at_least?("9.0")
145
- UI.message("You passed a path to a custom plist file for exporting the binary.")
146
- UI.message("Make sure to include information about what provisioning profiles to use with Xcode 9")
147
- UI.message("More information: https://docs.fastlane.tools/codesigning/xcode-project/#xcode-9-and-up")
42
+ def self.description
43
+ "Alias for the `build_app` action but only for iOS"
148
44
  end
149
45
  end
150
46
  end
@@ -0,0 +1,46 @@
1
+ module Fastlane
2
+ module Actions
3
+ require 'fastlane/actions/build_app'
4
+ class BuildMacAppAction < BuildAppAction
5
+ # Gym::Options.available_options keys that don't apply to mac apps.
6
+ REJECT_OPTIONS = [
7
+ :ipa,
8
+ :skip_package_ipa,
9
+ :catalyst_platform
10
+ ]
11
+
12
+ def self.run(params)
13
+ # Adding reject options back in so gym has everything it needs
14
+ params.available_options += Gym::Options.available_options.select do |option|
15
+ REJECT_OPTIONS.include?(option.key)
16
+ end
17
+
18
+ # Defaulting to mac specific values
19
+ params[:catalyst_platform] = "macos"
20
+
21
+ super(params)
22
+ end
23
+
24
+ #####################################################
25
+ # @!group Documentation
26
+ #####################################################
27
+
28
+ def self.available_options
29
+ require 'gym'
30
+ require 'gym/options'
31
+
32
+ Gym::Options.available_options.reject do |option|
33
+ REJECT_OPTIONS.include?(option.key)
34
+ end
35
+ end
36
+
37
+ def self.is_supported?(platform)
38
+ [:mac].include?(platform)
39
+ end
40
+
41
+ def self.description
42
+ "Alias for the `build_app` action but only for macOS"
43
+ end
44
+ end
45
+ end
46
+ end
@@ -2,6 +2,7 @@ module Fastlane
2
2
  module Actions
3
3
  module SharedValues
4
4
  CREATE_PULL_REQUEST_HTML_URL = :CREATE_PULL_REQUEST_HTML_URL
5
+ CREATE_PULL_REQUEST_NUMBER = :CREATE_PULL_REQUEST_NUMBER
5
6
  end
6
7
 
7
8
  class CreatePullRequestAction < Action
@@ -39,7 +40,14 @@ module Fastlane
39
40
  # Add assignees to pull request
40
41
  add_assignees(params, number) if params[:assignees]
41
42
 
43
+ # Add reviewers to pull request
44
+ add_reviewers(params, number) if params[:reviewers] || params[:team_reviewers]
45
+
46
+ # Add a milestone to pull request
47
+ add_milestone(params, number) if params[:milestone]
48
+
42
49
  Actions.lane_context[SharedValues::CREATE_PULL_REQUEST_HTML_URL] = html_url
50
+ Actions.lane_context[SharedValues::CREATE_PULL_REQUEST_NUMBER] = number
43
51
  return html_url
44
52
  end
45
53
  end
@@ -82,6 +90,51 @@ module Fastlane
82
90
  )
83
91
  end
84
92
 
93
+ def self.add_reviewers(params, number)
94
+ payload = {}
95
+ if params[:reviewers]
96
+ payload["reviewers"] = params[:reviewers]
97
+ end
98
+
99
+ if params[:team_reviewers]
100
+ payload["team_reviewers"] = params[:team_reviewers]
101
+ end
102
+ GithubApiAction.run(
103
+ server_url: params[:api_url],
104
+ api_token: params[:api_token],
105
+ http_method: 'POST',
106
+ path: "repos/#{params[:repo]}/pulls/#{number}/requested_reviewers",
107
+ body: payload,
108
+ error_handlers: {
109
+ '*' => proc do |result|
110
+ UI.error("GitHub responded with #{result[:status]}: #{result[:body]}")
111
+ return nil
112
+ end
113
+ }
114
+ )
115
+ end
116
+
117
+ def self.add_milestone(params, number)
118
+ payload = {}
119
+ if params[:milestone]
120
+ payload["milestone"] = params[:milestone]
121
+ end
122
+
123
+ GithubApiAction.run(
124
+ server_url: params[:api_url],
125
+ api_token: params[:api_token],
126
+ http_method: 'PATCH',
127
+ path: "repos/#{params[:repo]}/issues/#{number}",
128
+ body: payload,
129
+ error_handlers: {
130
+ '*' => proc do |result|
131
+ UI.error("GitHub responded with #{result[:status]}: #{result[:body]}")
132
+ return nil
133
+ end
134
+ }
135
+ )
136
+ end
137
+
85
138
  #####################################################
86
139
  # @!group Documentation
87
140
  #####################################################
@@ -92,7 +145,8 @@ module Fastlane
92
145
 
93
146
  def self.output
94
147
  [
95
- ['CREATE_PULL_REQUEST_HTML_URL', 'The HTML URL to the created pull request']
148
+ ['CREATE_PULL_REQUEST_HTML_URL', 'The HTML URL to the created pull request'],
149
+ ['CREATE_PULL_REQUEST_NUMBER', 'The identifier number of the created pull request']
96
150
  ]
97
151
  end
98
152
 
@@ -127,6 +181,11 @@ module Fastlane
127
181
  description: "The labels for the pull request",
128
182
  type: Array,
129
183
  optional: true),
184
+ FastlaneCore::ConfigItem.new(key: :milestone,
185
+ env_name: "GITHUB_PULL_REQUEST_MILESTONE",
186
+ description: "The milestone ID (Integer) for the pull request",
187
+ type: Numeric,
188
+ optional: true),
130
189
  FastlaneCore::ConfigItem.new(key: :head,
131
190
  env_name: "GITHUB_PULL_REQUEST_HEAD",
132
191
  description: "The name of the branch where your changes are implemented (defaults to the current branch name)",
@@ -152,12 +211,22 @@ module Fastlane
152
211
  env_name: "GITHUB_PULL_REQUEST_ASSIGNEES",
153
212
  description: "The assignees for the pull request",
154
213
  type: Array,
214
+ optional: true),
215
+ FastlaneCore::ConfigItem.new(key: :reviewers,
216
+ env_name: "GITHUB_PULL_REQUEST_REVIEWERS",
217
+ description: "The reviewers (slug) for the pull request",
218
+ type: Array,
219
+ optional: true),
220
+ FastlaneCore::ConfigItem.new(key: :team_reviewers,
221
+ env_name: "GITHUB_PULL_REQUEST_TEAM_REVIEWERS",
222
+ description: "The team reviewers (slug) for the pull request",
223
+ type: Array,
155
224
  optional: true)
156
225
  ]
157
226
  end
158
227
 
159
228
  def self.author
160
- ["seei", "tommeier", "marumemomo"]
229
+ ["seei", "tommeier", "marumemomo", "elneruda"]
161
230
  end
162
231
 
163
232
  def self.is_supported?(platform)
@@ -146,7 +146,7 @@ export_options({
146
146
  Optional: If _gym_ can't automatically detect the provisioning profiles to use, you can pass a mapping of bundle identifiers to provisioning profiles:
147
147
 
148
148
  ```ruby
149
- build_ios_app(
149
+ build_app(
150
150
  scheme: "Release",
151
151
  export_options: {
152
152
  method: "app-store",
@@ -111,6 +111,25 @@ match
111
111
 
112
112
  You can find more information about GitHub basic authentication and personal token generation here: [https://developer.github.com/v3/auth/#basic-authentication](https://developer.github.com/v3/auth/#basic-authentication)
113
113
 
114
+ ##### Git Storage on Azure Devops
115
+
116
+ If you're running a pipeline on Azure Devops and using git storage in a another repository on the same project, you might want to use `bearer` token authentication.
117
+
118
+ Using parameter:
119
+
120
+ ```
121
+ match(git_bearer_authorization: '<YOUR TOKEN>')
122
+ ```
123
+
124
+ Using environment variable:
125
+
126
+ ```
127
+ ENV['MATCH_GIT_BEARER_AUTHORIZATION'] = '<YOUR TOKEN>'
128
+ match
129
+ ```
130
+
131
+ You can find more information about this use case here: [https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/azure-repos-git?view=azure-devops&tabs=yaml#authorize-access-to-your-repositories](https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/azure-repos-git?view=azure-devops&tabs=yaml#authorize-access-to-your-repositories)
132
+
114
133
  #### Google Cloud Storage
115
134
 
116
135
  Use [Google Cloud Storage](https://cloud.google.com/storage/) for a fully hosted solution for your code signing identities. Certificates are stored on Google Cloud, encrypted using Google managed keys. Everything will be stored on your Google account, inside a storage bucket you provide. You can also directly access the files using the web console.
@@ -706,6 +706,16 @@ DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t DAV" fastlane deliver
706
706
  ## HTTP Proxy
707
707
  iTunes Transporter is a Java application bundled with Xcode. In addition to utilizing the `DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t DAV"`, you need to configure the transporter application to use the proxy independently from the system proxy or any environment proxy settings. You can find the configuration file within Xcode:
708
708
 
709
+ **for Xcode11 and later**
710
+
711
+ ```no-highlight
712
+ TOOLS_PATH=$( xcode-select -p )
713
+ REL_PATH='../SharedFrameworks/ContentDeliveryServices.framework/Versions/A/itms/java/lib/net.properties'
714
+ echo "$TOOLS_PATH/$REL_PATH"
715
+ ```
716
+
717
+ **for Xcode10 or earlier**
718
+
709
719
  ```no-highlight
710
720
  TOOLS_PATH=$( xcode-select -p )
711
721
  REL_PATH='../Applications/Application Loader.app/Contents/itms/java/lib/net.properties'
@@ -136,7 +136,7 @@ Note that these will replace the current images and screenshots on the play stor
136
136
 
137
137
  ## Changelogs (What's new)
138
138
 
139
- You can add changelog files under the `changelogs/` directory for each locale. The filename should exactly match the [version code](https://developer.android.com/studio/publish/versioning#appversioning) of the APK that it represents. `fastlane supply init` will populate changelog files from existing data on Google Play if no `metadata/` directory exists when it is run.
139
+ You can add changelog files under the `changelogs/` directory for each locale. The filename should exactly match the [version code](https://developer.android.com/studio/publish/versioning#appversioning) of the APK that it represents. You can also provide default notes that will be used if no files match the version code by adding a `default.txt` file. `fastlane supply init` will populate changelog files from existing data on Google Play if no `metadata/` directory exists when it is run.
140
140
 
141
141
  ```no-highlight
142
142
  └── fastlane
@@ -144,10 +144,12 @@ You can add changelog files under the `changelogs/` directory for each locale. T
144
144
  └── android
145
145
  ├── en-US
146
146
  │ └── changelogs
147
+ │ ├── default.txt
147
148
  │ ├── 100000.txt
148
149
  │ └── 100100.txt
149
150
  └── fr-FR
150
151
  └── changelogs
152
+ ├── default.txt
151
153
  └── 100100.txt
152
154
  ```
153
155
 
@@ -168,7 +170,7 @@ Before performing a new APK upload you may want to check existing track version
168
170
  - Used when uploading with `:apk_path`, `:apk_paths`, `:aab_path`, and `:aab_paths`
169
171
  - Can be any string such (example: "October Release" or "Awesome New Feature")
170
172
  - Defaults to the version name in app/build.gradle or AndroidManifest.xml
171
- - `:release_status`
173
+ - `:release_status`
172
174
  - Used when uploading with `:apk_path`, `:apk_paths`, `:aab_path`, and `:aab_paths`
173
175
  - Can set as "draft" to complete the release at some other time
174
176
  - Defaults to "completed"
@@ -10,7 +10,7 @@ module Fastlane
10
10
  if FastlaneCore::Helper.bundler?
11
11
  UI.success("Using bundled fastlane ✅")
12
12
  else
13
- UI.user_error!("fastlane detected a Gemfile in the current directory. However it seems like you don't use `bundle exec`. Use `bundle exec fastlane #{ARGV.join(' ')}`")
13
+ UI.user_error!("fastlane detected a Gemfile in the current directory. However, it seems like you didn't use `bundle exec`. Use `bundle exec fastlane #{ARGV.join(' ')}` instead.")
14
14
  end
15
15
  end
16
16
 
@@ -24,8 +24,8 @@ module Fastlane
24
24
 
25
25
  def self.details
26
26
  [
27
- "This action will check if you are using bundle exec to run fastlane.",
28
- "You can put it into `before_all` and make sure that fastlane is run using `bundle exec fastlane` command."
27
+ "This action will check if you are using `bundle exec` to run fastlane.",
28
+ "You can put it into `before_all` to make sure that fastlane is ran using the `bundle exec fastlane` command."
29
29
  ].join("\n")
30
30
  end
31
31