fastlane 2.138.0 → 2.143.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +75 -62
- data/cert/lib/cert/options.rb +12 -5
- data/cert/lib/cert/runner.rb +13 -0
- data/deliver/lib/deliver/options.rb +2 -2
- data/deliver/lib/deliver/runner.rb +13 -2
- data/deliver/lib/deliver/submit_for_review.rb +7 -1
- data/fastlane/lib/fastlane/action.rb +2 -2
- data/fastlane/lib/fastlane/actions/.hockey.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.slack.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.update_project_provisioning.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/README.md +2 -0
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +13 -5
- data/fastlane/lib/fastlane/actions/build_app.rb +157 -6
- data/fastlane/lib/fastlane/actions/build_ios_app.rb +28 -132
- data/fastlane/lib/fastlane/actions/build_mac_app.rb +46 -0
- data/fastlane/lib/fastlane/actions/cocoapods.rb +2 -2
- data/fastlane/lib/fastlane/actions/create_pull_request.rb +71 -2
- data/fastlane/lib/fastlane/actions/docs/{build_ios_app.md → build_app.md} +1 -1
- data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +22 -6
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +20 -4
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +10 -0
- data/fastlane/lib/fastlane/actions/ensure_git_branch.rb +1 -1
- data/fastlane/lib/fastlane/actions/ensure_xcode_version.rb +35 -7
- data/fastlane/lib/fastlane/actions/frame_screenshots.rb +2 -1
- data/fastlane/lib/fastlane/actions/get_github_release.rb +3 -0
- data/fastlane/lib/fastlane/actions/gradle.rb +43 -2
- data/fastlane/lib/fastlane/actions/gym.rb +3 -7
- data/fastlane/lib/fastlane/actions/import_from_git.rb +4 -0
- data/fastlane/lib/fastlane/actions/last_git_tag.rb +14 -5
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +9 -3
- data/fastlane/lib/fastlane/actions/notarize.rb +183 -0
- data/fastlane/lib/fastlane/actions/run_tests.rb +5 -22
- data/fastlane/lib/fastlane/actions/s3.rb +5 -291
- data/fastlane/lib/fastlane/actions/set_github_release.rb +1 -1
- data/fastlane/lib/fastlane/actions/setup_ci.rb +14 -8
- data/fastlane/lib/fastlane/actions/spm.rb +8 -0
- data/fastlane/lib/fastlane/actions/swiftlint.rb +17 -2
- data/fastlane/lib/fastlane/actions/update_plist.rb +37 -2
- data/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +13 -3
- data/fastlane/lib/fastlane/actions/upload_to_app_store.rb +1 -0
- data/fastlane/lib/fastlane/actions/upload_to_play_store_internal_app_sharing.rb +78 -0
- data/fastlane/lib/fastlane/fast_file.rb +13 -3
- data/fastlane/lib/fastlane/helper/adb_helper.rb +1 -1
- data/fastlane/lib/fastlane/helper/s3_client_helper.rb +56 -0
- data/fastlane/lib/fastlane/plugins/plugin_manager.rb +1 -1
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +2 -0
- data/fastlane/lib/fastlane/runner.rb +23 -18
- data/fastlane/lib/fastlane/server/socket_server_action_command_executor.rb +1 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +3 -3
- data/fastlane/swift/Fastlane.swift +429 -50
- data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/josh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +17 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +23 -3
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/RubyCommand.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +21 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +9 -1
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +6 -2
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +28 -0
- data/fastlane_core/lib/fastlane_core/device_manager.rb +20 -0
- data/fastlane_core/lib/fastlane_core/helper.rb +7 -1
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +1 -0
- data/fastlane_core/lib/fastlane_core/keychain_importer.rb +2 -0
- data/fastlane_core/lib/fastlane_core/project.rb +27 -0
- data/frameit/lib/frameit/commands_generator.rb +25 -0
- data/frameit/lib/frameit/config_parser.rb +31 -9
- data/frameit/lib/frameit/device.rb +90 -0
- data/frameit/lib/frameit/device_types.rb +121 -5
- data/frameit/lib/frameit/editor.rb +31 -40
- data/frameit/lib/frameit/offsets.rb +8 -1
- data/frameit/lib/frameit/options.rb +81 -54
- data/frameit/lib/frameit/runner.rb +17 -7
- data/frameit/lib/frameit/screenshot.rb +35 -47
- data/frameit/lib/frameit/template_finder.rb +15 -12
- data/gym/lib/gym/code_signing_mapping.rb +32 -3
- data/gym/lib/gym/detect_values.rb +34 -2
- data/gym/lib/gym/generators/build_command_generator.rb +1 -0
- data/gym/lib/gym/generators/package_command_generator.rb +4 -0
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +47 -17
- data/gym/lib/gym/module.rb +8 -0
- data/gym/lib/gym/options.rb +25 -1
- data/gym/lib/gym/runner.rb +64 -24
- data/match/lib/match/change_password.rb +1 -1
- data/match/lib/match/encryption.rb +4 -0
- data/match/lib/match/encryption/openssl.rb +1 -1
- data/match/lib/match/generator.rb +17 -3
- data/match/lib/match/importer.rb +2 -2
- data/match/lib/match/module.rb +5 -2
- data/match/lib/match/nuke.rb +59 -17
- data/match/lib/match/options.rb +38 -15
- data/match/lib/match/runner.rb +24 -8
- data/match/lib/match/setup.rb +1 -1
- data/match/lib/match/spaceship_ensure.rb +19 -9
- data/match/lib/match/storage.rb +4 -0
- data/match/lib/match/storage/git_storage.rb +5 -2
- data/match/lib/match/storage/google_cloud_storage.rb +2 -2
- data/match/lib/match/storage/s3_storage.rb +162 -0
- data/pilot/lib/pilot/.manager.rb.swp +0 -0
- data/pilot/lib/pilot/build_manager.rb +55 -15
- data/pilot/lib/pilot/options.rb +3 -1
- data/scan/lib/scan/detect_values.rb +6 -1
- data/scan/lib/scan/manager.rb +18 -1
- data/scan/lib/scan/options.rb +28 -1
- data/scan/lib/scan/runner.rb +11 -3
- data/scan/lib/scan/slack_poster.rb +1 -1
- data/scan/lib/scan/test_command_generator.rb +9 -5
- data/screengrab/lib/screengrab/runner.rb +31 -18
- data/snapshot/lib/snapshot/fixes/simulator_shared_pasteboard.rb +16 -0
- data/snapshot/lib/snapshot/options.rb +12 -1
- data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +13 -0
- data/spaceship/lib/spaceship/connect_api/.DS_Store +0 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +6 -0
- data/spaceship/lib/spaceship/portal/.certificate.rb.swp +0 -0
- data/spaceship/lib/spaceship/portal/app.rb +11 -2
- data/spaceship/lib/spaceship/tunes/iap.rb +11 -11
- data/spaceship/lib/spaceship/tunes/iap_detail.rb +7 -3
- data/spaceship/lib/spaceship/tunes/iap_families.rb +12 -1
- data/spaceship/lib/spaceship/tunes/iap_family_details.rb +26 -17
- data/spaceship/lib/spaceship/tunes/iap_status.rb +5 -1
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +2 -2
- data/supply/lib/supply/client.rb +26 -0
- data/supply/lib/supply/uploader.rb +28 -0
- metadata +64 -20
@@ -1,150 +1,46 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
66
|
-
|
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
|
-
|
105
|
-
"The absolute path to the generated ipa file"
|
22
|
+
super(params)
|
106
23
|
end
|
107
24
|
|
108
|
-
|
109
|
-
|
110
|
-
|
25
|
+
#####################################################
|
26
|
+
# @!group Documentation
|
27
|
+
#####################################################
|
111
28
|
|
112
29
|
def self.available_options
|
113
30
|
require 'gym'
|
114
|
-
|
115
|
-
end
|
116
|
-
|
117
|
-
def self.is_supported?(platform)
|
118
|
-
[:ios, :mac].include?(platform)
|
119
|
-
end
|
31
|
+
require 'gym/options'
|
120
32
|
|
121
|
-
|
122
|
-
|
123
|
-
|
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.
|
140
|
-
:
|
38
|
+
def self.is_supported?(platform)
|
39
|
+
[:ios].include?(platform)
|
141
40
|
end
|
142
41
|
|
143
|
-
def self.
|
144
|
-
|
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
|
-
|
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
|
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
|
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
|
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
|
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
|
}
|