fastlane 2.139.0 → 2.144.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 +85 -72
- data/cert/lib/cert/options.rb +12 -5
- data/cert/lib/cert/runner.rb +13 -0
- data/deliver/lib/deliver/options.rb +28 -2
- data/deliver/lib/deliver/runner.rb +13 -2
- data/fastlane/lib/fastlane/action.rb +1 -1
- 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/automatic_code_signing.rb +7 -1
- 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/clean_build_artifacts.rb +3 -0
- data/fastlane/lib/fastlane/actions/cocoapods.rb +2 -2
- data/fastlane/lib/fastlane/actions/crashlytics.rb +14 -2
- data/fastlane/lib/fastlane/actions/create_pull_request.rb +29 -0
- 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 +22 -6
- 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/latest_testflight_build_number.rb +9 -3
- data/fastlane/lib/fastlane/actions/notarize.rb +183 -0
- data/fastlane/lib/fastlane/actions/pod_lib_lint.rb +7 -1
- 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/spm.rb +8 -0
- data/fastlane/lib/fastlane/actions/swiftlint.rb +45 -9
- data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +190 -0
- 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/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 +422 -45
- 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/cert_checker.rb +28 -0
- data/fastlane_core/lib/fastlane_core/device_manager.rb +1 -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/fastlane_core/lib/fastlane_core/provisioning_profile.rb +15 -2
- 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 +28 -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/package_command_generator.rb +8 -0
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +52 -17
- data/gym/lib/gym/module.rb +8 -0
- data/gym/lib/gym/options.rb +25 -1
- data/gym/lib/gym/runner.rb +70 -21
- 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 +35 -20
- 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 +24 -9
- 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 +9 -7
- data/scan/lib/scan/slack_poster.rb +1 -1
- data/scan/lib/scan/test_command_generator.rb +12 -5
- data/screengrab/lib/screengrab/runner.rb +31 -18
- data/sigh/lib/sigh/.runner.rb.swp +0 -0
- 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/.bundle_id.rb.swp +0 -0
- data/{gym/lib/gym/.runner.rb.swp → spaceship/lib/spaceship/connect_api/models/.bundle_id_capability.rb.swp} +0 -0
- data/spaceship/lib/spaceship/connect_api/models/app.rb +11 -0
- data/spaceship/lib/spaceship/connect_api/models/beta_feedback.rb +4 -0
- data/spaceship/lib/spaceship/connect_api/models/build.rb +1 -2
- data/spaceship/lib/spaceship/connect_api/models/certificate.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +29 -0
- data/spaceship/lib/spaceship/portal/app.rb +11 -2
- data/spaceship/lib/spaceship/tunes/app_version.rb +6 -1
- 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 +1 -1
- metadata +63 -18
@@ -15,6 +15,9 @@ module Fastlane
|
|
15
15
|
end
|
16
16
|
if params[:xcpretty_output]
|
17
17
|
cmd += ["2>&1", "|", "xcpretty", "--#{params[:xcpretty_output]}"]
|
18
|
+
if params[:xcpretty_args]
|
19
|
+
cmd << (params[:xcpretty_args]).to_s
|
20
|
+
end
|
18
21
|
cmd = %w(set -o pipefail &&) + cmd
|
19
22
|
end
|
20
23
|
|
@@ -67,6 +70,11 @@ module Fastlane
|
|
67
70
|
verify_block: proc do |value|
|
68
71
|
UI.user_error!("Please pass a valid xcpretty output type: (#{xcpretty_output_types.join('|')})") unless xcpretty_output_types.include?(value)
|
69
72
|
end),
|
73
|
+
FastlaneCore::ConfigItem.new(key: :xcpretty_args,
|
74
|
+
env_name: "FL_SPM_XCPRETTY_ARGS",
|
75
|
+
description: "Pass in xcpretty additional command line arguments (e.g. '--test --no-color' or '--tap --no-utf'), requires xcpretty_output to be specified also",
|
76
|
+
type: String,
|
77
|
+
optional: true),
|
70
78
|
FastlaneCore::ConfigItem.new(key: :verbose,
|
71
79
|
short_option: "-v",
|
72
80
|
env_name: "FL_SPM_VERBOSE",
|
@@ -13,13 +13,7 @@ module Fastlane
|
|
13
13
|
|
14
14
|
command = (params[:executable] || "swiftlint").dup
|
15
15
|
command << " #{params[:mode]}"
|
16
|
-
command <<
|
17
|
-
command << supported_option_switch(params, :strict, "0.9.2", true)
|
18
|
-
command << " --config #{params[:config_file].shellescape}" if params[:config_file]
|
19
|
-
command << " --reporter #{params[:reporter]}" if params[:reporter]
|
20
|
-
command << supported_option_switch(params, :quiet, "0.9.0", true)
|
21
|
-
command << supported_option_switch(params, :format, "0.11.0", true) if params[:mode] == :autocorrect
|
22
|
-
command << " --compiler-log-path #{params[:compiler_log_path].shellescape}" if params[:compiler_log_path]
|
16
|
+
command << optional_flags(params)
|
23
17
|
|
24
18
|
if params[:files]
|
25
19
|
if version < Gem::Version.new('0.5.1')
|
@@ -37,15 +31,37 @@ module Fastlane
|
|
37
31
|
Actions.sh(command)
|
38
32
|
rescue
|
39
33
|
handle_swiftlint_error(params[:ignore_exit_status], $?.exitstatus)
|
34
|
+
raise if params[:raise_if_swiftlint_error]
|
40
35
|
end
|
41
36
|
end
|
42
37
|
|
38
|
+
def self.optional_flags(params)
|
39
|
+
command = ""
|
40
|
+
command << " --path #{params[:path].shellescape}" if params[:path]
|
41
|
+
command << supported_option_switch(params, :strict, "0.9.2", true)
|
42
|
+
command << " --config #{params[:config_file].shellescape}" if params[:config_file]
|
43
|
+
command << " --reporter #{params[:reporter]}" if params[:reporter]
|
44
|
+
command << supported_option_switch(params, :quiet, "0.9.0", true)
|
45
|
+
command << supported_option_switch(params, :format, "0.11.0", true) if params[:mode] == :autocorrect
|
46
|
+
command << supported_no_cache_option(params) if params[:no_cache]
|
47
|
+
command << " --compiler-log-path #{params[:compiler_log_path].shellescape}" if params[:compiler_log_path]
|
48
|
+
return command
|
49
|
+
end
|
50
|
+
|
43
51
|
# Get current SwiftLint version
|
44
52
|
def self.swiftlint_version(executable: nil)
|
45
53
|
binary = executable || 'swiftlint'
|
46
54
|
Gem::Version.new(`#{binary} version`.chomp)
|
47
55
|
end
|
48
56
|
|
57
|
+
def self.supported_no_cache_option(params)
|
58
|
+
if params[:mode] == :autocorrect || params[:mode] == :lint
|
59
|
+
return " --no-cache"
|
60
|
+
else
|
61
|
+
return ""
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
49
65
|
# Return "--option" switch if option is on and current SwiftLint version is greater or equal than min version.
|
50
66
|
# Return "" otherwise.
|
51
67
|
def self.supported_option_switch(params, option, min_version, can_ignore = false)
|
@@ -106,10 +122,22 @@ module Fastlane
|
|
106
122
|
is_string: false,
|
107
123
|
type: Boolean,
|
108
124
|
optional: true),
|
125
|
+
FastlaneCore::ConfigItem.new(key: :raise_if_swiftlint_error,
|
126
|
+
description: "Raises an error if swiftlint fails, so you can fail CI/CD jobs if necessary \
|
127
|
+
(true/false)",
|
128
|
+
default_value: false,
|
129
|
+
is_string: false,
|
130
|
+
type: Boolean,
|
131
|
+
optional: true),
|
109
132
|
FastlaneCore::ConfigItem.new(key: :reporter,
|
110
|
-
description:
|
133
|
+
description: "Choose output reporter. Available: xcode, json, csv, checkstyle, junit, html, \
|
134
|
+
emoji, sonarqube, markdown, github-actions-logging",
|
111
135
|
is_string: true,
|
112
|
-
optional: true
|
136
|
+
optional: true,
|
137
|
+
verify_block: proc do |value|
|
138
|
+
available = ['xcode', 'json', 'csv', 'checkstyle', 'junit', 'html', 'emoji', 'sonarqube', 'markdown', 'github-actions-logging']
|
139
|
+
UI.user_error!("Available values are '#{available.join("', '")}'") unless available.include?(value)
|
140
|
+
end),
|
113
141
|
FastlaneCore::ConfigItem.new(key: :quiet,
|
114
142
|
description: "Don't print status logs like 'Linting <file>' & 'Done linting'",
|
115
143
|
default_value: false,
|
@@ -126,6 +154,12 @@ module Fastlane
|
|
126
154
|
is_string: false,
|
127
155
|
type: Boolean,
|
128
156
|
optional: true),
|
157
|
+
FastlaneCore::ConfigItem.new(key: :no_cache,
|
158
|
+
description: "Ignore the cache when mode is :autocorrect or :lint",
|
159
|
+
default_value: false,
|
160
|
+
is_string: false,
|
161
|
+
type: Boolean,
|
162
|
+
optional: true),
|
129
163
|
FastlaneCore::ConfigItem.new(key: :compiler_log_path,
|
130
164
|
description: "Compiler log path when mode is :analyze",
|
131
165
|
is_string: true,
|
@@ -161,7 +195,9 @@ module Fastlane
|
|
161
195
|
"AppDelegate.swift",
|
162
196
|
"path/to/project/Model.swift"
|
163
197
|
],
|
198
|
+
raise_if_swiftlint_error: true, # Allow fastlane to raise an error if swiftlint fails
|
164
199
|
ignore_exit_status: true # Allow fastlane to continue even if SwiftLint returns a non-zero exit status
|
200
|
+
|
165
201
|
)'
|
166
202
|
]
|
167
203
|
end
|
@@ -0,0 +1,190 @@
|
|
1
|
+
require 'xcodeproj'
|
2
|
+
module Fastlane
|
3
|
+
module Actions
|
4
|
+
class UpdateCodeSigningSettingsAction < Action
|
5
|
+
def self.run(params)
|
6
|
+
FastlaneCore::PrintTable.print_values(config: params, title: "Summary for code signing settings")
|
7
|
+
path = params[:path]
|
8
|
+
path = File.join(File.expand_path(path), "project.pbxproj")
|
9
|
+
|
10
|
+
project = Xcodeproj::Project.open(params[:path])
|
11
|
+
UI.user_error!("Could not find path to project config '#{path}'. Pass the path to your project (not workspace)!") unless File.exist?(path)
|
12
|
+
UI.message("Updating the Automatic Codesigning flag to #{params[:use_automatic_signing] ? 'enabled' : 'disabled'} for the given project '#{path}'")
|
13
|
+
|
14
|
+
unless project.root_object.attributes["TargetAttributes"]
|
15
|
+
UI.user_error!("Seems to be a very old project file format - please open your project file in a more recent version of Xcode")
|
16
|
+
return false
|
17
|
+
end
|
18
|
+
|
19
|
+
target_dictionary = project.targets.map { |f| { name: f.name, uuid: f.uuid, build_configuration_list: f.build_configuration_list } }
|
20
|
+
target_attributes = project.root_object.attributes["TargetAttributes"]
|
21
|
+
changed_targets = []
|
22
|
+
|
23
|
+
# make sure TargetAttributes exist for all targets
|
24
|
+
target_dictionary.each do |props|
|
25
|
+
unless target_attributes.key?(props[:uuid])
|
26
|
+
target_attributes[props[:uuid]] = {}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
target_attributes.each do |target, sett|
|
31
|
+
found_target = target_dictionary.detect { |h| h[:uuid] == target }
|
32
|
+
if params[:targets]
|
33
|
+
# get target name
|
34
|
+
unless params[:targets].include?(found_target[:name])
|
35
|
+
UI.important("Skipping #{found_target[:name]} not selected (#{params[:targets].join(',')})")
|
36
|
+
next
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
style_value = params[:use_automatic_signing] ? 'Automatic' : 'Manual'
|
41
|
+
build_configuration_list = found_target[:build_configuration_list]
|
42
|
+
build_configuration_list.set_setting("CODE_SIGN_STYLE", style_value)
|
43
|
+
sett["ProvisioningStyle"] = style_value
|
44
|
+
|
45
|
+
if params[:team_id]
|
46
|
+
sett["DevelopmentTeam"] = params[:team_id]
|
47
|
+
build_configuration_list.set_setting("DEVELOPMENT_TEAM", params[:team_id])
|
48
|
+
UI.important("Set Team id to: #{params[:team_id]} for target: #{found_target[:name]}")
|
49
|
+
end
|
50
|
+
if params[:code_sign_identity]
|
51
|
+
build_configuration_list.set_setting("CODE_SIGN_IDENTITY", params[:code_sign_identity])
|
52
|
+
|
53
|
+
# We also need to update the value if it was overridden for a specific SDK
|
54
|
+
build_configuration_list.build_configurations.each do |build_configuration|
|
55
|
+
codesign_build_settings_keys = build_configuration.build_settings.keys.select { |key| key.to_s.match(/CODE_SIGN_IDENTITY.*/) }
|
56
|
+
codesign_build_settings_keys.each do |setting|
|
57
|
+
build_configuration_list.set_setting(setting, params[:code_sign_identity])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
UI.important("Set Code Sign identity to: #{params[:code_sign_identity]} for target: #{found_target[:name]}")
|
61
|
+
end
|
62
|
+
if params[:profile_name]
|
63
|
+
build_configuration_list.set_setting("PROVISIONING_PROFILE_SPECIFIER", params[:profile_name])
|
64
|
+
UI.important("Set Provisioning Profile name to: #{params[:profile_name]} for target: #{found_target[:name]}")
|
65
|
+
end
|
66
|
+
# Since Xcode 8, this is no longer needed, you simply use PROVISIONING_PROFILE_SPECIFIER
|
67
|
+
if params[:profile_uuid]
|
68
|
+
build_configuration_list.set_setting("PROVISIONING_PROFILE", params[:profile_uuid])
|
69
|
+
UI.important("Set Provisioning Profile UUID to: #{params[:profile_uuid]} for target: #{found_target[:name]}")
|
70
|
+
end
|
71
|
+
if params[:bundle_identifier]
|
72
|
+
build_configuration_list.set_setting("PRODUCT_BUNDLE_IDENTIFIER", params[:bundle_identifier])
|
73
|
+
UI.important("Set Bundle identifier to: #{params[:bundle_identifier]} for target: #{found_target[:name]}")
|
74
|
+
end
|
75
|
+
|
76
|
+
changed_targets << found_target[:name]
|
77
|
+
end
|
78
|
+
project.save
|
79
|
+
|
80
|
+
if changed_targets.empty?
|
81
|
+
UI.important("None of the specified targets has been modified")
|
82
|
+
UI.important("available targets:")
|
83
|
+
target_dictionary.each do |target|
|
84
|
+
UI.important("\t* #{target[:name]}")
|
85
|
+
end
|
86
|
+
else
|
87
|
+
UI.success("Successfully updated project settings to use Code Sign Style = '#{params[:use_automatic_signing] ? 'Automatic' : 'Manual'}'")
|
88
|
+
UI.success("Modified Targets:")
|
89
|
+
changed_targets.each do |target|
|
90
|
+
UI.success("\t * #{target}")
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
params[:use_automatic_signing]
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.description
|
98
|
+
"Configures Xcode's Codesigning options"
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.details
|
102
|
+
"Configures Xcode's Codesigning options of all targets in the project"
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.available_options
|
106
|
+
[
|
107
|
+
FastlaneCore::ConfigItem.new(key: :path,
|
108
|
+
env_name: "FL_PROJECT_SIGNING_PROJECT_PATH",
|
109
|
+
description: "Path to your Xcode project",
|
110
|
+
code_gen_sensitive: true,
|
111
|
+
default_value: Dir['*.xcodeproj'].first,
|
112
|
+
default_value_dynamic: true,
|
113
|
+
verify_block: proc do |value|
|
114
|
+
UI.user_error!("Path is invalid") unless File.exist?(File.expand_path(value))
|
115
|
+
end),
|
116
|
+
FastlaneCore::ConfigItem.new(key: :use_automatic_signing,
|
117
|
+
env_name: "FL_PROJECT_USE_AUTOMATIC_SIGNING",
|
118
|
+
description: "Defines if project should use automatic signing",
|
119
|
+
is_string: false,
|
120
|
+
default_value: false),
|
121
|
+
FastlaneCore::ConfigItem.new(key: :team_id,
|
122
|
+
env_name: "FASTLANE_TEAM_ID",
|
123
|
+
optional: true,
|
124
|
+
description: "Team ID, is used when upgrading project",
|
125
|
+
is_string: true),
|
126
|
+
FastlaneCore::ConfigItem.new(key: :targets,
|
127
|
+
env_name: "FL_PROJECT_SIGNING_TARGETS",
|
128
|
+
optional: true,
|
129
|
+
type: Array,
|
130
|
+
description: "Specify targets you want to toggle the signing mech. (default to all targets)",
|
131
|
+
is_string: false),
|
132
|
+
FastlaneCore::ConfigItem.new(key: :code_sign_identity,
|
133
|
+
env_name: "FL_CODE_SIGN_IDENTITY",
|
134
|
+
description: "Code signing identity type (iPhone Developer, iPhone Distribution)",
|
135
|
+
optional: true,
|
136
|
+
is_string: true),
|
137
|
+
FastlaneCore::ConfigItem.new(key: :profile_name,
|
138
|
+
env_name: "FL_PROVISIONING_PROFILE_SPECIFIER",
|
139
|
+
description: "Provisioning profile name to use for code signing",
|
140
|
+
optional: true,
|
141
|
+
is_string: true),
|
142
|
+
FastlaneCore::ConfigItem.new(key: :profile_uuid,
|
143
|
+
env_name: "FL_PROVISIONING_PROFILE",
|
144
|
+
description: "Provisioning profile UUID to use for code signing",
|
145
|
+
optional: true,
|
146
|
+
is_string: true),
|
147
|
+
FastlaneCore::ConfigItem.new(key: :bundle_identifier,
|
148
|
+
env_name: "FL_APP_IDENTIFIER",
|
149
|
+
description: "Application Product Bundle Identifier",
|
150
|
+
optional: true,
|
151
|
+
is_string: true)
|
152
|
+
]
|
153
|
+
end
|
154
|
+
|
155
|
+
def self.output
|
156
|
+
end
|
157
|
+
|
158
|
+
def self.example_code
|
159
|
+
[
|
160
|
+
' # manual code signing
|
161
|
+
update_code_signing_settings(
|
162
|
+
use_automatic_signing: false,
|
163
|
+
path: "demo-project/demo/demo.xcodeproj"
|
164
|
+
)',
|
165
|
+
' # automatic code signing
|
166
|
+
update_code_signing_settings(
|
167
|
+
use_automatic_signing: true,
|
168
|
+
path: "demo-project/demo/demo.xcodeproj"
|
169
|
+
)'
|
170
|
+
]
|
171
|
+
end
|
172
|
+
|
173
|
+
def self.category
|
174
|
+
:code_signing
|
175
|
+
end
|
176
|
+
|
177
|
+
def self.return_value
|
178
|
+
"The current status (boolean) of codesigning after modification"
|
179
|
+
end
|
180
|
+
|
181
|
+
def self.authors
|
182
|
+
["mathiasAichinger", "hjanuschka", "p4checo", "portellaa", "aeons", "att55"]
|
183
|
+
end
|
184
|
+
|
185
|
+
def self.is_supported?(platform)
|
186
|
+
[:ios, :mac].include?(platform)
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
@@ -39,7 +39,7 @@ module Fastlane
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def self.details
|
42
|
-
"This action allows you to modify any `plist` file."
|
42
|
+
"This action allows you to modify any value inside any `plist` file."
|
43
43
|
end
|
44
44
|
|
45
45
|
def self.available_options
|
@@ -57,11 +57,46 @@ module Fastlane
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def self.author
|
60
|
-
|
60
|
+
["rishabhtayal", "matthiaszarzecki"]
|
61
61
|
end
|
62
62
|
|
63
63
|
def self.example_code
|
64
64
|
[
|
65
|
+
'update_plist( # Updates the CLIENT_ID and GOOGLE_APP_ID string entries in the plist-file
|
66
|
+
plist_path: "path/to/your_plist_file.plist",
|
67
|
+
block: proc do |plist|
|
68
|
+
plist[:CLIENT_ID] = "new_client_id"
|
69
|
+
plist[:GOOGLE_APP_ID] = "new_google_app_id"
|
70
|
+
end
|
71
|
+
)',
|
72
|
+
'update_plist( # Sets a boolean entry
|
73
|
+
plist_path: "path/to/your_plist_file.plist",
|
74
|
+
block: proc do |plist|
|
75
|
+
plist[:boolean_entry] = true
|
76
|
+
end
|
77
|
+
)',
|
78
|
+
'update_plist( # Sets a number entry
|
79
|
+
plist_path: "path/to/your_plist_file.plist",
|
80
|
+
block: proc do |plist|
|
81
|
+
plist[:number_entry] = 13
|
82
|
+
end
|
83
|
+
)',
|
84
|
+
'update_plist( # Sets an array-entry with multiple sub-types
|
85
|
+
plist_path: "path/to/your_plist_file.plist",
|
86
|
+
block: proc do |plist|
|
87
|
+
plist[:array_entry] = ["entry_01", true, 1243]
|
88
|
+
end
|
89
|
+
)',
|
90
|
+
'update_plist( # The block can contain logic too
|
91
|
+
plist_path: "path/to/your_plist_file.plist",
|
92
|
+
block: proc do |plist|
|
93
|
+
if options[:environment] == "production"
|
94
|
+
plist[:CLIENT_ID] = "new_client_id_production"
|
95
|
+
else
|
96
|
+
plist[:CLIENT_ID] = "new_client_id_development"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
)',
|
65
100
|
'update_plist( # Advanced processing: find URL scheme for particular key and replace value
|
66
101
|
plist_path: "path/to/Info.plist",
|
67
102
|
block: proc do |plist|
|
@@ -10,8 +10,8 @@ module Fastlane
|
|
10
10
|
find_gsp_path(params)
|
11
11
|
find_api_token(params)
|
12
12
|
|
13
|
-
if !params[:
|
14
|
-
UI.user_error!('Either
|
13
|
+
if !params[:app_id] && !params[:gsp_path] && !params[:api_token]
|
14
|
+
UI.user_error!('Either Firebase Crashlytics App ID, path to GoogleService-Info.plist or legacy Fabric API key must be given.')
|
15
15
|
end
|
16
16
|
|
17
17
|
dsym_paths = []
|
@@ -87,7 +87,9 @@ module Fastlane
|
|
87
87
|
UI.message("Uploading '#{path}'...")
|
88
88
|
command = []
|
89
89
|
command << File.expand_path(params[:binary_path]).shellescape
|
90
|
-
if params[:
|
90
|
+
if params[:app_id]
|
91
|
+
command << "-ai #{params[:app_id].shellescape}"
|
92
|
+
elsif params[:gsp_path]
|
91
93
|
command << "-gsp #{params[:gsp_path].shellescape}"
|
92
94
|
elsif params[:api_token]
|
93
95
|
command << "-a #{params[:api_token]}"
|
@@ -186,6 +188,14 @@ module Fastlane
|
|
186
188
|
UI.user_error!("Couldn't find file at path '#{File.expand_path(value)}'") unless File.exist?(value)
|
187
189
|
UI.user_error!("No Path to GoogleService-Info.plist for Firebase Crashlytics given, pass using `gsp_path: 'path'`") if value.to_s.length == 0
|
188
190
|
end),
|
191
|
+
FastlaneCore::ConfigItem.new(key: :app_id,
|
192
|
+
env_name: "CRASHLYTICS_APP_ID",
|
193
|
+
sensitive: true,
|
194
|
+
optional: true,
|
195
|
+
description: "Firebase Crashlytics APP ID",
|
196
|
+
verify_block: proc do |value|
|
197
|
+
UI.user_error!("No App ID for Firebase Crashlytics given, pass using `app_id: 'appId'`") if value.to_s.length == 0
|
198
|
+
end),
|
189
199
|
FastlaneCore::ConfigItem.new(key: :binary_path,
|
190
200
|
env_name: "FL_UPLOAD_SYMBOLS_TO_CRASHLYTICS_BINARY_PATH",
|
191
201
|
description: "The path to the upload-symbols file of the Fabric app",
|
@@ -11,6 +11,7 @@ module Fastlane
|
|
11
11
|
config.load_configuration_file("Deliverfile")
|
12
12
|
config[:screenshots_path] = Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH] if Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH]
|
13
13
|
config[:ipa] = Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] if Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]
|
14
|
+
config[:pkg] = Actions.lane_context[SharedValues::PKG_OUTPUT_PATH] if Actions.lane_context[SharedValues::PKG_OUTPUT_PATH]
|
14
15
|
|
15
16
|
return config if Helper.test?
|
16
17
|
Deliver::Runner.new(config).run
|
@@ -263,7 +263,7 @@ module Fastlane
|
|
263
263
|
# @param branch [String] The branch to checkout in the repository
|
264
264
|
# @param path [String] The path to the Fastfile
|
265
265
|
# @param version [String, Array] Version requirement for repo tags
|
266
|
-
def import_from_git(url: nil, branch: 'HEAD', path: 'fastlane/Fastfile', version: nil)
|
266
|
+
def import_from_git(url: nil, branch: 'HEAD', path: 'fastlane/Fastfile', version: nil, dependencies: [])
|
267
267
|
UI.user_error!("Please pass a path to the `import_from_git` action") if url.to_s.length == 0
|
268
268
|
|
269
269
|
Actions.execute_action('import_from_git') do
|
@@ -280,6 +280,10 @@ module Fastlane
|
|
280
280
|
|
281
281
|
branch_option = "--branch #{branch}" if branch != 'HEAD'
|
282
282
|
|
283
|
+
checkout_dependencies = dependencies.map(&:shellescape).join(" ")
|
284
|
+
|
285
|
+
checkout_path = "#{path.shellescape} #{checkout_dependencies}"
|
286
|
+
|
283
287
|
UI.message("Cloning remote git repo...")
|
284
288
|
Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
|
285
289
|
Actions.sh("git clone #{url.shellescape} #{clone_folder.shellescape} --depth 1 -n #{branch_option}")
|
@@ -292,7 +296,7 @@ module Fastlane
|
|
292
296
|
UI.user_error!("No tag found matching #{version.inspect}") if checkout_param.nil?
|
293
297
|
end
|
294
298
|
|
295
|
-
Actions.sh("cd #{clone_folder.shellescape} && git checkout #{checkout_param.shellescape} #{
|
299
|
+
Actions.sh("cd #{clone_folder.shellescape} && git checkout #{checkout_param.shellescape} #{checkout_path}")
|
296
300
|
|
297
301
|
# We also want to check out all the local actions of this fastlane setup
|
298
302
|
containing = path.split(File::SEPARATOR)[0..-2]
|
@@ -304,7 +308,13 @@ module Fastlane
|
|
304
308
|
# We don't care about a failure here, as local actions are optional
|
305
309
|
end
|
306
310
|
|
307
|
-
return_value =
|
311
|
+
return_value = nil
|
312
|
+
if dependencies.any?
|
313
|
+
return_value = [import(File.join(clone_folder, path))]
|
314
|
+
return_value += dependencies.map { |file_path| import(File.join(clone_folder, file_path)) }
|
315
|
+
else
|
316
|
+
return_value = import(File.join(clone_folder, path))
|
317
|
+
end
|
308
318
|
|
309
319
|
action_completed('import_from_git', status: FastlaneCore::ActionCompletionStatus::SUCCESS)
|
310
320
|
|