fastlane 2.138.0 → 2.143.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +75 -62
  4. data/cert/lib/cert/options.rb +12 -5
  5. data/cert/lib/cert/runner.rb +13 -0
  6. data/deliver/lib/deliver/options.rb +2 -2
  7. data/deliver/lib/deliver/runner.rb +13 -2
  8. data/deliver/lib/deliver/submit_for_review.rb +7 -1
  9. data/fastlane/lib/fastlane/action.rb +2 -2
  10. data/fastlane/lib/fastlane/actions/.hockey.rb.swp +0 -0
  11. data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
  12. data/fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp +0 -0
  13. data/fastlane/lib/fastlane/actions/README.md +2 -0
  14. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +13 -5
  15. data/fastlane/lib/fastlane/actions/build_app.rb +157 -6
  16. data/fastlane/lib/fastlane/actions/build_ios_app.rb +28 -132
  17. data/fastlane/lib/fastlane/actions/build_mac_app.rb +46 -0
  18. data/fastlane/lib/fastlane/actions/cocoapods.rb +2 -2
  19. data/fastlane/lib/fastlane/actions/create_pull_request.rb +71 -2
  20. data/fastlane/lib/fastlane/actions/docs/{build_ios_app.md → build_app.md} +1 -1
  21. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +22 -6
  22. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +20 -4
  23. data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +10 -0
  24. data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +1 -1
  25. data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +35 -7
  26. data/fastlane/lib/fastlane/actions/frame_screenshots.rb +2 -1
  27. data/fastlane/lib/fastlane/actions/get_github_release.rb +3 -0
  28. data/fastlane/lib/fastlane/actions/gradle.rb +43 -2
  29. data/fastlane/lib/fastlane/actions/gym.rb +3 -7
  30. data/fastlane/lib/fastlane/actions/import_from_git.rb +4 -0
  31. data/fastlane/lib/fastlane/actions/last_git_tag.rb +14 -5
  32. data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +9 -3
  33. data/fastlane/lib/fastlane/actions/notarize.rb +183 -0
  34. data/fastlane/lib/fastlane/actions/run_tests.rb +5 -22
  35. data/fastlane/lib/fastlane/actions/s3.rb +5 -291
  36. data/fastlane/lib/fastlane/actions/set_github_release.rb +1 -1
  37. data/fastlane/lib/fastlane/actions/setup_ci.rb +14 -8
  38. data/fastlane/lib/fastlane/actions/spm.rb +8 -0
  39. data/fastlane/lib/fastlane/actions/swiftlint.rb +17 -2
  40. data/fastlane/lib/fastlane/actions/update_plist.rb +37 -2
  41. data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +13 -3
  42. data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +1 -0
  43. data/fastlane/lib/fastlane/actions/upload_to_play_store_internal_app_sharing.rb +78 -0
  44. data/fastlane/lib/fastlane/fast_file.rb +13 -3
  45. data/fastlane/lib/fastlane/helper/adb_helper.rb +1 -1
  46. data/fastlane/lib/fastlane/helper/s3_client_helper.rb +56 -0
  47. data/fastlane/lib/fastlane/plugins/plugin_manager.rb +1 -1
  48. data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +2 -0
  49. data/fastlane/lib/fastlane/runner.rb +23 -18
  50. data/fastlane/lib/fastlane/server/socket_server_action_command_executor.rb +1 -1
  51. data/fastlane/lib/fastlane/version.rb +1 -1
  52. data/fastlane/swift/Deliverfile.swift +1 -1
  53. data/fastlane/swift/DeliverfileProtocol.swift +3 -3
  54. data/fastlane/swift/Fastlane.swift +429 -50
  55. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  56. data/fastlane/swift/Gymfile.swift +1 -1
  57. data/fastlane/swift/GymfileProtocol.swift +17 -1
  58. data/fastlane/swift/Matchfile.swift +1 -1
  59. data/fastlane/swift/MatchfileProtocol.swift +23 -3
  60. data/fastlane/swift/Precheckfile.swift +1 -1
  61. data/fastlane/swift/RubyCommand.swift +1 -1
  62. data/fastlane/swift/Scanfile.swift +1 -1
  63. data/fastlane/swift/ScanfileProtocol.swift +21 -1
  64. data/fastlane/swift/Screengrabfile.swift +1 -1
  65. data/fastlane/swift/Snapshotfile.swift +1 -1
  66. data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
  67. data/fastlane_core/lib/fastlane_core/build_watcher.rb +6 -2
  68. data/fastlane_core/lib/fastlane_core/cert_checker.rb +28 -0
  69. data/fastlane_core/lib/fastlane_core/device_manager.rb +20 -0
  70. data/fastlane_core/lib/fastlane_core/helper.rb +7 -1
  71. data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +1 -0
  72. data/fastlane_core/lib/fastlane_core/keychain_importer.rb +2 -0
  73. data/fastlane_core/lib/fastlane_core/project.rb +27 -0
  74. data/frameit/lib/frameit/commands_generator.rb +25 -0
  75. data/frameit/lib/frameit/config_parser.rb +31 -9
  76. data/frameit/lib/frameit/device.rb +90 -0
  77. data/frameit/lib/frameit/device_types.rb +121 -5
  78. data/frameit/lib/frameit/editor.rb +31 -40
  79. data/frameit/lib/frameit/offsets.rb +8 -1
  80. data/frameit/lib/frameit/options.rb +81 -54
  81. data/frameit/lib/frameit/runner.rb +17 -7
  82. data/frameit/lib/frameit/screenshot.rb +35 -47
  83. data/frameit/lib/frameit/template_finder.rb +15 -12
  84. data/gym/lib/gym/code_signing_mapping.rb +32 -3
  85. data/gym/lib/gym/detect_values.rb +34 -2
  86. data/gym/lib/gym/generators/build_command_generator.rb +1 -0
  87. data/gym/lib/gym/generators/package_command_generator.rb +4 -0
  88. data/gym/lib/gym/generators/package_command_generator_xcode7.rb +47 -17
  89. data/gym/lib/gym/module.rb +8 -0
  90. data/gym/lib/gym/options.rb +25 -1
  91. data/gym/lib/gym/runner.rb +64 -24
  92. data/match/lib/match/change_password.rb +1 -1
  93. data/match/lib/match/encryption.rb +4 -0
  94. data/match/lib/match/encryption/openssl.rb +1 -1
  95. data/match/lib/match/generator.rb +17 -3
  96. data/match/lib/match/importer.rb +2 -2
  97. data/match/lib/match/module.rb +5 -2
  98. data/match/lib/match/nuke.rb +59 -17
  99. data/match/lib/match/options.rb +38 -15
  100. data/match/lib/match/runner.rb +24 -8
  101. data/match/lib/match/setup.rb +1 -1
  102. data/match/lib/match/spaceship_ensure.rb +19 -9
  103. data/match/lib/match/storage.rb +4 -0
  104. data/match/lib/match/storage/git_storage.rb +5 -2
  105. data/match/lib/match/storage/google_cloud_storage.rb +2 -2
  106. data/match/lib/match/storage/s3_storage.rb +162 -0
  107. data/pilot/lib/pilot/.manager.rb.swp +0 -0
  108. data/pilot/lib/pilot/build_manager.rb +55 -15
  109. data/pilot/lib/pilot/options.rb +3 -1
  110. data/scan/lib/scan/detect_values.rb +6 -1
  111. data/scan/lib/scan/manager.rb +18 -1
  112. data/scan/lib/scan/options.rb +28 -1
  113. data/scan/lib/scan/runner.rb +11 -3
  114. data/scan/lib/scan/slack_poster.rb +1 -1
  115. data/scan/lib/scan/test_command_generator.rb +9 -5
  116. data/screengrab/lib/screengrab/runner.rb +31 -18
  117. data/snapshot/lib/snapshot/fixes/simulator_shared_pasteboard.rb +16 -0
  118. data/snapshot/lib/snapshot/options.rb +12 -1
  119. data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
  120. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +13 -0
  121. data/spaceship/lib/spaceship/connect_api/.DS_Store +0 -0
  122. data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +4 -0
  123. data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
  124. data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +5 -0
  125. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +2 -0
  126. data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +6 -0
  127. data/spaceship/lib/spaceship/portal/.certificate.rb.swp +0 -0
  128. data/spaceship/lib/spaceship/portal/app.rb +11 -2
  129. data/spaceship/lib/spaceship/tunes/iap.rb +11 -11
  130. data/spaceship/lib/spaceship/tunes/iap_detail.rb +7 -3
  131. data/spaceship/lib/spaceship/tunes/iap_families.rb +12 -1
  132. data/spaceship/lib/spaceship/tunes/iap_family_details.rb +26 -17
  133. data/spaceship/lib/spaceship/tunes/iap_status.rb +5 -1
  134. data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -2
  135. data/supply/lib/supply/client.rb +26 -0
  136. data/supply/lib/supply/uploader.rb +28 -0
  137. metadata +64 -20
@@ -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
@@ -19,7 +19,7 @@ module Fastlane
19
19
 
20
20
  cmd << '--no-clean' unless params[:clean]
21
21
  cmd << '--no-integrate' unless params[:integrate]
22
- cmd << '--clean-install' if params[:clean_install] && pod_version.to_f >= 1.7
22
+ cmd << '--clean-install' if params[:clean_install] && pod_version(params).to_f >= 1.7
23
23
  cmd << '--repo-update' if params[:repo_update]
24
24
  cmd << '--silent' if params[:silent]
25
25
  cmd << '--verbose' if params[:verbose]
@@ -42,7 +42,7 @@ module Fastlane
42
42
  params[:use_bundle_exec] && shell_out_should_use_bundle_exec?
43
43
  end
44
44
 
45
- def self.pod_version
45
+ def self.pod_version(params)
46
46
  use_bundle_exec?(params) ? `bundle exec pod --version` : `pod --version`
47
47
  end
48
48
 
@@ -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",
@@ -4,7 +4,7 @@
4
4
 
5
5
  ###### Easily put your screenshots into the right device frames
6
6
 
7
- _frameit_ allows you to put a gorgeous device frame around your iOS and macOS screenshots just by running one simple command. Use _frameit_ to prepare perfect screenshots for the App Store, your website, QA or emails.
7
+ _frameit_ allows you to put a gorgeous device frame around your iOS, macOS and Android screenshots just by running one simple command. Use _frameit_ to prepare perfect screenshots for the App Store, your website, QA or emails.
8
8
 
9
9
  -------
10
10
 
@@ -23,9 +23,10 @@ _frameit_ allows you to put a gorgeous device frame around your iOS and macOS sc
23
23
 
24
24
  ## Frame screenshot
25
25
 
26
- Put a gorgeous device frame around your iOS and macOS screenshots just by running one simple command. Support for:
26
+ Put a gorgeous device frame around your iOS, macOS and Android screenshots just by running one simple command. Support for:
27
27
 
28
28
  - iPhone, iPad and Mac
29
+ - Set of Android devices
29
30
  - Portrait and Landscape modes
30
31
  - Several device frame colors
31
32
 
@@ -69,12 +70,18 @@ More information about this process and how to update the frames can be found [h
69
70
 
70
71
  Why should you have to use Photoshop, just to add a frame around your screenshots?
71
72
 
72
- Just navigate to your folder of screenshots and use the following command:
73
+ Just navigate to your folder of screenshots and use the following command (iOS and Mac OS are default platforms for backward compatibility):
73
74
 
74
75
  ```no-highlight
75
76
  fastlane frameit
76
77
  ```
77
78
 
79
+ To frame Android screenshots:
80
+
81
+ ```no-highlight
82
+ fastlane frameit android
83
+ ```
84
+
78
85
  To use the silver version of the frames:
79
86
 
80
87
  ```no-highlight
@@ -129,8 +136,10 @@ The general parameters are defined in the `default` key and can be:
129
136
  | `padding` | The content of the framed screenshot will be resized to match the specified `padding` around all edges. The vertical padding is also applied between the text and the top or bottom (depending on `title_below_image`) of the device frame. <p> There are 3 different options of specyfying the padding: <p> 1. Default: An integer value that defines both horizontal and vertical padding in pixels. <br> 2. A string that defines (different) padding values in pixels for horizontal and vertical padding. The syntax is `"<horizontal>x<vertical>"`, e.g. `"30x60"`. <br> 3. A string that defines (different) padding values in percentage for horizontal and vertical padding. The syntax is `"<horizontal>%x<vertical>%"`, e.g. `"5%x10%"`. <br> **Note:** The percentage is calculated from the smallest image dimension (height or width). <p> A combination of option 2 and 3 is possible, e.g. `"5%x40"`. | `50` |
130
137
  | `interline_spacing` | Specifies whether _frameit_ should add or subtract this many pixels between the individual lines of text. This only applies to a multi-line `title` and/or `keyword` to expand or squash together the individual lines of text. | `0` |
131
138
  | `font_scale_factor` | Specifies whether _frameit_ should increase or decrease the font size of the text. | `0.1` |
132
- | `frame` | Overrides the color of the frame to be used. (Valid values are `BLACK, `WHITE`, `GOLD` and `ROSE_GOLD`) | NA |
139
+ | `frame` | Overrides the color of the frame to be used. (Valid values are `BLACK`, `WHITE`, `GOLD` and `ROSE_GOLD`) | NA |
133
140
  | `title_min_height` | Specifies a height always reserved for the title. Value can be a percentage of the height or an absolute value. The device will be placed below (or above) this area. Convenient to ensure the device top (or bottom) will be consistently placed at the same height on the different screenshots. | NA |
141
+ | `use_platform` | Overrides the platform used for the screenshot. Valid values are `IOS`, `ANDROID` and `ANY`. | `IOS` |
142
+ | `force_device_type` | Forces a specific device. Valid values are: Huawei P8, Motorola Moto E, Motorola Moto G, Nexus 4, Nexus 5X, Nexus 6P, Nexus 9, Samsung Galaxy Grand Prime, Samsung Galaxy Note 5, Samsung Galaxy S Duos, Samsung Galaxy S3, Samsung Galaxy S5, Samsung Galaxy S7, Samsung Galaxy S8, Samsung Galaxy S9, iPhone 5s, iPhone 5c, iPhone SE, iPhone 6s, iPhone 6s Plus, iPhone 7, iPhone 7 Plus, iPhone 8, iPhone 8 Plus, iPhone X, iPhone XS, iPhone XR, iPhone XS Max, iPad Air 2, iPad Mini 4, iPad Pro, MacBook, Google Pixel 3, Google Pixel 3 XL, HTC One A9, HTC One M8 | NA |
134
143
 
135
144
  ### Specific parameters
136
145
 
@@ -142,7 +151,9 @@ These are defined in the `data` key. This is an array with the following keys fo
142
151
  | `filter` | This is mandatory to link the individual configuration to the screenshot, based on part of the file name. <p>Example:<br>If a screenshot is named `iPhone 8-Brainstorming.png` you can use value `Brainstorming` for `filter`. If there are more than one `filter` matching an entry, they will all be applied in order (which means that the last one has the highest precedence). All other keys from that array element will only be applied on this specific screenshot. |
143
152
  | `keyword` | Similar use as in `default`, except that parameter `text` can be used here because it is screenshot specific. |
144
153
  | `title` | Similar use as in `default`, except that parameter `text` can be used here because it is screenshot specific. |
145
- | `frame` | Overrides the color of the frame to be used. (Valid values are `BLACK, `WHITE`, `GOLD` and `ROSE_GOLD`) | NA |
154
+ | `frame` | Overrides the color of the frame to be used. (Valid values are `BLACK`, `WHITE`, `GOLD` and `ROSE_GOLD`) | NA |
155
+ | `use_platform` | Overrides the platform used for the screenshot. Valid values are `IOS`, `ANDROID` and `ANY`. | `IOS` |
156
+ | `force_device_type` | Forces a specific device. Valid values are the same as for the general parameter. | NA |
146
157
 
147
158
  ### <a name="keyword-and-title-parameters"></a>Framefile `keyword` and `title` parameters
148
159
 
@@ -172,7 +183,8 @@ The `keyword` and `title` parameters are both used in `default` and `data`. They
172
183
  "show_complete_frame": false,
173
184
  "stack_title" : false,
174
185
  "title_below_image": true,
175
- "frame": "WHITE"
186
+ "frame": "WHITE",
187
+ "use_platform": "IOS"
176
188
  },
177
189
 
178
190
  "data": [
@@ -200,6 +212,10 @@ The `keyword` and `title` parameters are both used in `default` and `data`. They
200
212
  "keyword": {
201
213
  "color": "#31bb48"
202
214
  }
215
+ },
216
+ {
217
+ "filter": "Android",
218
+ "use_platform": "ANDROID"
203
219
  }
204
220
  ]
205
221
  }