fastlane 1.66.0 → 1.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +37 -38
- data/lib/assets/AppfileTemplate +1 -1
- data/lib/assets/DefaultFastfileTemplate +2 -2
- data/lib/assets/FastfileTemplateAndroid +2 -2
- data/lib/assets/custom_action_template.rb +1 -1
- data/lib/fastlane/actions/actions_helper.rb +2 -2
- data/lib/fastlane/actions/appetize.rb +15 -16
- data/lib/fastlane/actions/appium.rb +1 -1
- data/lib/fastlane/actions/appledoc.rb +3 -3
- data/lib/fastlane/actions/artifactory.rb +7 -7
- data/lib/fastlane/actions/backup_file.rb +1 -1
- data/lib/fastlane/actions/backup_xcarchive.rb +1 -1
- data/lib/fastlane/actions/bundle_install.rb +2 -2
- data/lib/fastlane/actions/cert.rb +1 -1
- data/lib/fastlane/actions/changelog_from_git_commits.rb +2 -2
- data/lib/fastlane/actions/chatwork.rb +2 -2
- data/lib/fastlane/actions/clean_build_artifacts.rb +3 -2
- data/lib/fastlane/actions/clean_cocoapods_cache.rb +1 -1
- data/lib/fastlane/actions/clear_derived_data.rb +2 -2
- data/lib/fastlane/actions/clipboard.rb +1 -1
- data/lib/fastlane/actions/commit_version_bump.rb +3 -3
- data/lib/fastlane/actions/copy_artifacts.rb +2 -2
- data/lib/fastlane/actions/crashlytics.rb +6 -6
- data/lib/fastlane/actions/create_pull_request.rb +3 -3
- data/lib/fastlane/actions/deploygate.rb +6 -6
- data/lib/fastlane/actions/dotgpg_environment.rb +1 -1
- data/lib/fastlane/actions/download.rb +1 -1
- data/lib/fastlane/actions/download_dsyms.rb +117 -0
- data/lib/fastlane/actions/ensure_git_branch.rb +1 -1
- data/lib/fastlane/actions/ensure_git_status_clean.rb +1 -1
- data/lib/fastlane/actions/ensure_no_debug_code.rb +26 -12
- data/lib/fastlane/actions/ensure_xcode_version.rb +3 -3
- data/lib/fastlane/actions/erb.rb +1 -1
- data/lib/fastlane/actions/fastlane_version.rb +1 -1
- data/lib/fastlane/actions/frameit.rb +1 -1
- data/lib/fastlane/actions/gcovr.rb +2 -2
- data/lib/fastlane/actions/get_build_number.rb +1 -1
- data/lib/fastlane/actions/get_github_release.rb +6 -6
- data/lib/fastlane/actions/get_info_plist_value.rb +2 -2
- data/lib/fastlane/actions/get_ipa_info_plist_value.rb +2 -2
- data/lib/fastlane/actions/get_version_number.rb +1 -1
- data/lib/fastlane/actions/git_add.rb +1 -1
- data/lib/fastlane/actions/git_commit.rb +1 -1
- data/lib/fastlane/actions/gradle.rb +2 -2
- data/lib/fastlane/actions/gym.rb +1 -1
- data/lib/fastlane/actions/hg_add_tag.rb +1 -1
- data/lib/fastlane/actions/hg_commit_version_bump.rb +3 -3
- data/lib/fastlane/actions/hg_ensure_clean_status.rb +1 -1
- data/lib/fastlane/actions/hg_push.rb +1 -1
- data/lib/fastlane/actions/hipchat.rb +4 -6
- data/lib/fastlane/actions/hockey.rb +4 -4
- data/lib/fastlane/actions/ifttt.rb +74 -0
- data/lib/fastlane/actions/increment_build_number.rb +1 -1
- data/lib/fastlane/actions/increment_version_number.rb +3 -3
- data/lib/fastlane/actions/install_on_device.rb +1 -1
- data/lib/fastlane/actions/install_xcode_plugin.rb +2 -2
- data/lib/fastlane/actions/installr.rb +2 -2
- data/lib/fastlane/actions/ipa.rb +8 -8
- data/lib/fastlane/actions/latest_testflight_build_number.rb +3 -3
- data/lib/fastlane/actions/lcov.rb +1 -1
- data/lib/fastlane/actions/mailgun.rb +1 -1
- data/lib/fastlane/actions/match.rb +2 -2
- data/lib/fastlane/actions/notify.rb +1 -1
- data/lib/fastlane/actions/oclint.rb +2 -2
- data/lib/fastlane/actions/onesignal.rb +3 -3
- data/lib/fastlane/actions/opt_out_usage.rb +1 -1
- data/lib/fastlane/actions/pilot.rb +1 -1
- data/lib/fastlane/actions/pod_push.rb +2 -2
- data/lib/fastlane/actions/produce.rb +1 -1
- data/lib/fastlane/actions/prompt.rb +3 -3
- data/lib/fastlane/actions/push_git_tags.rb +1 -1
- data/lib/fastlane/actions/push_to_git_remote.rb +1 -1
- data/lib/fastlane/actions/read_podspec.rb +1 -1
- data/lib/fastlane/actions/recreate_schemes.rb +1 -1
- data/lib/fastlane/actions/register_devices.rb +2 -2
- data/lib/fastlane/actions/reset_git_repo.rb +3 -3
- data/lib/fastlane/actions/resign.rb +7 -2
- data/lib/fastlane/actions/restore_file.rb +1 -1
- data/lib/fastlane/actions/rocket.rb +64 -0
- data/lib/fastlane/actions/s3.rb +33 -101
- data/lib/fastlane/actions/scan.rb +1 -1
- data/lib/fastlane/actions/scp.rb +2 -2
- data/lib/fastlane/actions/set_changelog.rb +12 -12
- data/lib/fastlane/actions/set_github_release.rb +14 -14
- data/lib/fastlane/actions/set_info_plist_value.rb +2 -2
- data/lib/fastlane/actions/sigh.rb +1 -1
- data/lib/fastlane/actions/slack.rb +2 -2
- data/lib/fastlane/actions/ssh.rb +4 -4
- data/lib/fastlane/actions/supply.rb +1 -1
- data/lib/fastlane/actions/team_id.rb +1 -1
- data/lib/fastlane/actions/team_name.rb +1 -1
- data/lib/fastlane/actions/testfairy.rb +4 -4
- data/lib/fastlane/actions/testmunk.rb +3 -3
- data/lib/fastlane/actions/tryouts.rb +3 -3
- data/lib/fastlane/actions/twitter.rb +1 -1
- data/lib/fastlane/actions/typetalk.rb +1 -1
- data/lib/fastlane/actions/update_app_group_identifiers.rb +4 -4
- data/lib/fastlane/actions/update_app_identifier.rb +4 -4
- data/lib/fastlane/actions/update_fastlane.rb +22 -13
- data/lib/fastlane/actions/update_info_plist.rb +4 -4
- data/lib/fastlane/actions/update_project_code_signing.rb +5 -5
- data/lib/fastlane/actions/update_project_provisioning.rb +10 -10
- data/lib/fastlane/actions/update_project_team.rb +2 -2
- data/lib/fastlane/actions/upload_symbols_to_crashlytics.rb +104 -0
- data/lib/fastlane/actions/upload_symbols_to_sentry.rb +119 -0
- data/lib/fastlane/actions/verify_pod_keys.rb +2 -2
- data/lib/fastlane/actions/verify_xcode.rb +10 -10
- data/lib/fastlane/actions/xcode_install.rb +2 -2
- data/lib/fastlane/actions/xcode_select.rb +1 -1
- data/lib/fastlane/actions/xcode_server_get_assets.rb +8 -8
- data/lib/fastlane/actions/xcodebuild.rb +7 -7
- data/lib/fastlane/actions/xcov.rb +6 -0
- data/lib/fastlane/actions/xctool.rb +2 -2
- data/lib/fastlane/command_line_handler.rb +1 -1
- data/lib/fastlane/configuration_helper.rb +2 -2
- data/lib/fastlane/core_ext/bundler_monkey_patch.rb +14 -0
- data/lib/fastlane/core_ext/string.rb +4 -4
- data/lib/fastlane/documentation/actions_list.rb +2 -2
- data/lib/fastlane/documentation/docs_generator.rb +3 -3
- data/lib/fastlane/fast_file.rb +6 -6
- data/lib/fastlane/helper/crashlytics_helper.rb +1 -1
- data/lib/fastlane/helper/git_helper.rb +2 -2
- data/lib/fastlane/one_off.rb +1 -1
- data/lib/fastlane/runner.rb +1 -1
- data/lib/fastlane/setup/setup.rb +7 -7
- data/lib/fastlane/setup/setup_android.rb +13 -13
- data/lib/fastlane/setup/setup_ios.rb +24 -27
- data/lib/fastlane/version.rb +1 -1
- metadata +66 -32
@@ -10,7 +10,7 @@ module Fastlane
|
|
10
10
|
# Check if parameters are set
|
11
11
|
if params[:app_identifier] or params[:display_name] or params[:block]
|
12
12
|
if (params[:app_identifier] or params[:display_name]) and params[:block]
|
13
|
-
|
13
|
+
UI.important("block parameter can not be specified with app_identifier or display_name")
|
14
14
|
return false
|
15
15
|
end
|
16
16
|
|
@@ -31,10 +31,10 @@ module Fastlane
|
|
31
31
|
plist_string = Plist::Emit.dump(plist)
|
32
32
|
File.write(info_plist_path, plist_string)
|
33
33
|
|
34
|
-
|
34
|
+
UI.success("Updated #{params[:plist_path]} 💾.")
|
35
35
|
plist_string
|
36
36
|
else
|
37
|
-
|
37
|
+
UI.important("You haven't specified any parameters to update your plist.")
|
38
38
|
false
|
39
39
|
end
|
40
40
|
end
|
@@ -66,7 +66,7 @@ module Fastlane
|
|
66
66
|
env_name: "FL_UPDATE_PLIST_PATH",
|
67
67
|
description: "Path to info plist",
|
68
68
|
verify_block: proc do |value|
|
69
|
-
raise "Invalid plist file".red unless value[-6..-1].
|
69
|
+
raise "Invalid plist file".red unless value[-6..-1].casecmp(".plist").zero?
|
70
70
|
end),
|
71
71
|
FastlaneCore::ConfigItem.new(key: :app_identifier,
|
72
72
|
env_name: 'FL_UPDATE_PLIST_APP_IDENTIFIER',
|
@@ -5,20 +5,20 @@ module Fastlane
|
|
5
5
|
|
6
6
|
class UpdateProjectCodeSigningAction < Action
|
7
7
|
def self.run(params)
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
UI.message("You shouldn't use update_project_code_signing")
|
9
|
+
UI.message("Have you considered using the recommended way to do code sining?")
|
10
|
+
UI.message("https://github.com/fastlane/fastlane/blob/master/docs/CodeSigning.md")
|
11
11
|
|
12
12
|
path = params[:path]
|
13
13
|
path = File.join(path, "project.pbxproj")
|
14
14
|
raise "Could not find path to project config '#{path}'. Pass the path to your project (not workspace)!".red unless File.exist?(path)
|
15
15
|
|
16
|
-
|
16
|
+
UI.message("Updating provisioning profile UDID (#{params[:udid]}) for the given project '#{path}'")
|
17
17
|
|
18
18
|
p = File.read(path)
|
19
19
|
File.write(path, p.gsub(/PROVISIONING_PROFILE = ".*";/, "PROVISIONING_PROFILE = \"#{params[:udid]}\";"))
|
20
20
|
|
21
|
-
|
21
|
+
UI.success("Successfully updated project settings to use UDID '#{params[:udid]}'")
|
22
22
|
end
|
23
23
|
|
24
24
|
def self.description
|
@@ -7,8 +7,8 @@ module Fastlane
|
|
7
7
|
class UpdateProjectProvisioningAction < Action
|
8
8
|
ROOT_CERTIFICATE_URL = "http://www.apple.com/appleca/AppleIncRootCertificate.cer"
|
9
9
|
def self.run(params)
|
10
|
-
|
11
|
-
|
10
|
+
UI.message("You’re updating provisioning profiles directly in your project, but have you considered easier ways to do code signing?")
|
11
|
+
UI.message("https://github.com/fastlane/fastlane/blob/master/docs/CodeSigning.md")
|
12
12
|
|
13
13
|
# assign folder from parameter or search for xcodeproj file
|
14
14
|
folder = params[:xcodeproj] || Dir["*.xcodeproj"].first
|
@@ -19,7 +19,7 @@ module Fastlane
|
|
19
19
|
|
20
20
|
# download certificate
|
21
21
|
unless File.exist?(params[:certificate])
|
22
|
-
|
22
|
+
UI.message("Downloading root certificate from (#{ROOT_CERTIFICATE_URL}) to path '#{params[:certificate]}'")
|
23
23
|
require 'open-uri'
|
24
24
|
File.open(params[:certificate], "w") do |file|
|
25
25
|
file.write(open(ROOT_CERTIFICATE_URL, "rb").read)
|
@@ -27,7 +27,7 @@ module Fastlane
|
|
27
27
|
end
|
28
28
|
|
29
29
|
# parsing mobileprovision file
|
30
|
-
|
30
|
+
UI.message("Parsing mobile provisioning profile from '#{params[:profile]}'")
|
31
31
|
profile = File.read(params[:profile])
|
32
32
|
p7 = OpenSSL::PKCS7.new(profile)
|
33
33
|
store = OpenSSL::X509::Store.new
|
@@ -41,24 +41,24 @@ module Fastlane
|
|
41
41
|
configuration = params[:build_configuration]
|
42
42
|
|
43
43
|
# manipulate project file
|
44
|
-
|
44
|
+
UI.success("Going to update project '#{folder}' with UUID")
|
45
45
|
require 'xcodeproj'
|
46
46
|
|
47
47
|
project = Xcodeproj::Project.open(folder)
|
48
48
|
project.targets.each do |target|
|
49
49
|
if !target_filter || target.product_name.match(target_filter) || (target.respond_to?(:product_type) && target.product_type.match(target_filter))
|
50
|
-
|
50
|
+
UI.success("Updating target #{target.product_name}...")
|
51
51
|
else
|
52
|
-
|
52
|
+
UI.important("Skipping target #{target.product_name} as it doesn't match the filter '#{target_filter}'")
|
53
53
|
next
|
54
54
|
end
|
55
55
|
|
56
56
|
target.build_configuration_list.build_configurations.each do |build_configuration|
|
57
57
|
config_name = build_configuration.name
|
58
58
|
if !configuration || config_name.match(configuration)
|
59
|
-
|
59
|
+
UI.success("Updating configuration #{config_name}...")
|
60
60
|
else
|
61
|
-
|
61
|
+
UI.important("Skipping configuration #{config_name} as it doesn't match the filter '#{configuration}'")
|
62
62
|
next
|
63
63
|
end
|
64
64
|
|
@@ -69,7 +69,7 @@ module Fastlane
|
|
69
69
|
project.save
|
70
70
|
|
71
71
|
# complete
|
72
|
-
|
72
|
+
UI.success("Successfully updated project settings in'#{params[:xcodeproj]}'")
|
73
73
|
end
|
74
74
|
|
75
75
|
def self.description
|
@@ -9,12 +9,12 @@ module Fastlane
|
|
9
9
|
path = File.join(path, "project.pbxproj")
|
10
10
|
raise "Could not find path to project config '#{path}'. Pass the path to your project (not workspace)!".red unless File.exist?(path)
|
11
11
|
|
12
|
-
|
12
|
+
UI.message("Updating development team (#{params[:teamid]}) for the given project '#{path}'")
|
13
13
|
|
14
14
|
p = File.read(path)
|
15
15
|
File.write(path, p.gsub(/DevelopmentTeam = .*;/, "DevelopmentTeam = #{params[:teamid]};"))
|
16
16
|
|
17
|
-
|
17
|
+
UI.success("Successfully updated project settings to use Developer Team ID '#{params[:teamid]}'")
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.description
|
@@ -0,0 +1,104 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class UploadSymbolsToCrashlyticsAction < Action
|
4
|
+
def self.run(params)
|
5
|
+
params[:binary_path] ||= (Dir["/Applications/Fabric.app/**/upload-symbols"] + Dir["./Pods/**/upload-symbols"]).last
|
6
|
+
UI.user_error!("Please provide a path to the binary using binary_path:") unless params[:binary_path]
|
7
|
+
|
8
|
+
unless params[:api_token].to_s.length > 0
|
9
|
+
Dir["./**/Info.plist"].each do |current|
|
10
|
+
result = Actions::GetInfoPlistValueAction.run(path: current, key: "Fabric")
|
11
|
+
next unless result
|
12
|
+
params[:api_token] ||= result["APIKey"]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
UI.user_error!("Please provide an api_token using api_token:") unless params[:api_token]
|
16
|
+
|
17
|
+
dsym_paths = []
|
18
|
+
dsym_paths << params[:dsym_path]
|
19
|
+
dsym_paths += Actions.lane_context[SharedValues::DSYM_PATHS] if Actions.lane_context[SharedValues::DSYM_PATHS]
|
20
|
+
|
21
|
+
UI.error("Couldn't find any dSYMs, please pass them using the dsym_path option") if dsym_paths.count == 0
|
22
|
+
|
23
|
+
dsym_paths.each do |current_path|
|
24
|
+
command = []
|
25
|
+
command << File.expand_path(params[:binary_path])
|
26
|
+
command << "-a #{params[:api_token]}"
|
27
|
+
command << "-p #{params[:platform]}"
|
28
|
+
command << File.expand_path(current_path)
|
29
|
+
Actions.sh(command.join(" "))
|
30
|
+
end
|
31
|
+
|
32
|
+
UI.success("Successfully uploaded dSYM files to Crashlytics 💯")
|
33
|
+
end
|
34
|
+
|
35
|
+
#####################################################
|
36
|
+
# @!group Documentation
|
37
|
+
#####################################################
|
38
|
+
|
39
|
+
def self.description
|
40
|
+
"Upload dSYM symbolication files to Crashlytics"
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.details
|
44
|
+
[
|
45
|
+
"This action allows you to upload symbolication files to Crashlytics.",
|
46
|
+
"It's extra useful if you use it to download the latest dSYM files from Apple when you",
|
47
|
+
"use Bitcode"
|
48
|
+
].join(" ")
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.available_options
|
52
|
+
[
|
53
|
+
FastlaneCore::ConfigItem.new(key: :dsym_path,
|
54
|
+
env_name: "FL_UPLOAD_SYMBOLS_TO_CRASHLYTICS_DSYM_PATH",
|
55
|
+
description: "Path to the DSYM file or zip to upload",
|
56
|
+
default_value: ENV[SharedValues::DSYM_OUTPUT_PATH.to_s] || (Dir["./**/*.dSYM"] + Dir["./**/*.dSYM.zip"]).first,
|
57
|
+
optional: true,
|
58
|
+
verify_block: proc do |value|
|
59
|
+
UI.user_error!("Couldn't find file at path '#{File.expand_path(value)}'") unless File.exist?(value)
|
60
|
+
UI.user_error!("Symbolication file needs to be dSYM or zip") unless value.end_with?("dSYM.zip", ".dSYM")
|
61
|
+
end),
|
62
|
+
FastlaneCore::ConfigItem.new(key: :api_token,
|
63
|
+
env_name: "CRASHLYTICS_API_TOKEN",
|
64
|
+
optional: true,
|
65
|
+
description: "Crashlytics Beta API Token",
|
66
|
+
verify_block: proc do |value|
|
67
|
+
UI.user_error!("No API token for Crashlytics given, pass using `api_token: 'token'`") if value.to_s.length == 0
|
68
|
+
end),
|
69
|
+
FastlaneCore::ConfigItem.new(key: :binary_path,
|
70
|
+
env_name: "FL_UPLOAD_SYMBOLS_TO_CRASHLYTICS_BINARY_PATH",
|
71
|
+
description: "The path to the upload-symbols file",
|
72
|
+
optional: true,
|
73
|
+
verify_block: proc do |value|
|
74
|
+
UI.user_error!("Couldn't find file at path '#{value}'") unless File.exist?(value)
|
75
|
+
end),
|
76
|
+
FastlaneCore::ConfigItem.new(key: :platform,
|
77
|
+
env_name: "FL_UPLOAD_SYMBOLS_TO_CRASHLYTICS_PLATFORM",
|
78
|
+
description: "The platform of the app (ios, tvos, mac)",
|
79
|
+
default_value: "ios",
|
80
|
+
verify_block: proc do |value|
|
81
|
+
available = ['ios', 'tvos', 'mac']
|
82
|
+
UI.user_error!("Invalid platform '#{value}', must be #{available.join(', ')}") unless available.include?(value)
|
83
|
+
end)
|
84
|
+
]
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.output
|
88
|
+
nil
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.return_value
|
92
|
+
nil
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.authors
|
96
|
+
["KrauseFx"]
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.is_supported?(platform)
|
100
|
+
platform == :ios
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class UploadSymbolsToSentryAction < Action
|
4
|
+
def self.run(params)
|
5
|
+
require 'rest-client'
|
6
|
+
|
7
|
+
# Params - API
|
8
|
+
host = params[:api_host]
|
9
|
+
api_key = params[:api_key]
|
10
|
+
org = params[:org_slug]
|
11
|
+
project = params[:project_slug]
|
12
|
+
|
13
|
+
# Params - dSYM
|
14
|
+
dsym_path = params[:dsym_path]
|
15
|
+
dsym_paths = params[:dsym_paths] || []
|
16
|
+
|
17
|
+
# Url to post dSYMs to
|
18
|
+
url = "#{host}/projects/#{org}/#{project}/files/dsyms/"
|
19
|
+
resource = RestClient::Resource.new( url, api_key, '' )
|
20
|
+
|
21
|
+
UI.message "Will upload dSYM(s) to #{url}"
|
22
|
+
|
23
|
+
# Upload dsym(s)
|
24
|
+
dsym_paths += [dsym_path]
|
25
|
+
uploaded_paths = dsym_paths.compact.map do |dsym|
|
26
|
+
upload_dsym(resource, dsym)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Return uplaoded dSYM paths
|
30
|
+
uploaded_paths
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.upload_dsym(resource, dsym)
|
34
|
+
UI.message "Uploading... #{dsym}"
|
35
|
+
resource.post(file: File.new(dsym, 'rb')) unless Helper.test?
|
36
|
+
UI.success 'dSYM successfully uploaded to Sentry!'
|
37
|
+
|
38
|
+
dsym
|
39
|
+
rescue
|
40
|
+
UI.user_error! 'Error while trying to upload dSYM to Sentry'
|
41
|
+
end
|
42
|
+
|
43
|
+
#####################################################
|
44
|
+
# @!group Documentation
|
45
|
+
#####################################################
|
46
|
+
|
47
|
+
def self.description
|
48
|
+
"Upload dSYM symbolication files to Sentry"
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.details
|
52
|
+
[
|
53
|
+
"This action allows you to upload symbolication files to Sentry.",
|
54
|
+
"It's extra useful if you use it to download the latest dSYM files from Apple when you",
|
55
|
+
"use Bitcode"
|
56
|
+
].join(" ")
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.available_options
|
60
|
+
[
|
61
|
+
FastlaneCore::ConfigItem.new(key: :api_host,
|
62
|
+
env_name: "SENTRY_HOST",
|
63
|
+
description: "API host url for Sentry",
|
64
|
+
is_string: true,
|
65
|
+
default_value: "https://app.getsentry.com/api/0",
|
66
|
+
optional: true
|
67
|
+
),
|
68
|
+
FastlaneCore::ConfigItem.new(key: :api_key,
|
69
|
+
env_name: "SENTRY_API_KEY",
|
70
|
+
description: "API Key for Sentry",
|
71
|
+
verify_block: proc do |value|
|
72
|
+
raise "No API token for SentryAction given, pass using `api_key: 'key'`".red unless value and !value.empty?
|
73
|
+
end),
|
74
|
+
FastlaneCore::ConfigItem.new(key: :org_slug,
|
75
|
+
env_name: "SENTRY_ORG_SLUG",
|
76
|
+
description: "Organization slug for Sentry project",
|
77
|
+
verify_block: proc do |value|
|
78
|
+
raise "No organization slug for SentryAction given, pass using `org_slug: 'org'`".red unless value and !value.empty?
|
79
|
+
end),
|
80
|
+
FastlaneCore::ConfigItem.new(key: :project_slug,
|
81
|
+
env_name: "SENTRY_PROJECT_SLUG",
|
82
|
+
description: "Prgoject slug for Sentry",
|
83
|
+
verify_block: proc do |value|
|
84
|
+
raise "No project slug for SentryAction given, pass using `project_slug: 'project'`".red unless value and !value.empty?
|
85
|
+
end),
|
86
|
+
FastlaneCore::ConfigItem.new(key: :dsym_path,
|
87
|
+
env_name: "SENTRY_DSYM_PATH",
|
88
|
+
description: "Path to your symbols file. For iOS and Mac provide path to app.dSYM.zip",
|
89
|
+
default_value: Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH],
|
90
|
+
optional: true,
|
91
|
+
verify_block: proc do |value|
|
92
|
+
# validation is done in the action
|
93
|
+
end),
|
94
|
+
FastlaneCore::ConfigItem.new(key: :dsym_paths,
|
95
|
+
env_name: "SENTRY_DSYM_PATHS",
|
96
|
+
description: "Path to an array of your symbols file. For iOS and Mac provide path to app.dSYM.zip",
|
97
|
+
default_value: Actions.lane_context[SharedValues::DSYM_PATHS],
|
98
|
+
is_string: false,
|
99
|
+
optional: true,
|
100
|
+
verify_block: proc do |value|
|
101
|
+
# validation is done in the action
|
102
|
+
end)
|
103
|
+
]
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.return_value
|
107
|
+
"The uploaded dSYM path(s)"
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.authors
|
111
|
+
["joshdholtz"]
|
112
|
+
end
|
113
|
+
|
114
|
+
def self.is_supported?(platform)
|
115
|
+
platform == :ios
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
@@ -2,13 +2,13 @@ module Fastlane
|
|
2
2
|
module Actions
|
3
3
|
class VerifyPodKeysAction < Action
|
4
4
|
def self.run(params)
|
5
|
-
|
5
|
+
UI.message("Validating CocoaPods Keys")
|
6
6
|
|
7
7
|
options = plugin_options
|
8
8
|
target = options["target"] || ""
|
9
9
|
|
10
10
|
options["keys"].each do |key|
|
11
|
-
|
11
|
+
UI.message(" - #{key}")
|
12
12
|
validate(key, target)
|
13
13
|
end
|
14
14
|
end
|
@@ -5,11 +5,11 @@ module Fastlane
|
|
5
5
|
|
6
6
|
class VerifyXcodeAction < Action
|
7
7
|
def self.run(params)
|
8
|
-
|
8
|
+
UI.success("Verifying your Xcode installation at path '#{params[:xcode_path]}'...")
|
9
9
|
|
10
10
|
# Check 1/2
|
11
11
|
|
12
|
-
|
12
|
+
UI.success("Verifying Xcode was signed by Apple Inc.")
|
13
13
|
command = "codesign --display --verbose=4 '#{params[:xcode_path]}'"
|
14
14
|
|
15
15
|
must_includes = [
|
@@ -22,12 +22,12 @@ module Fastlane
|
|
22
22
|
|
23
23
|
verify(command: command, must_includes: must_includes, params: params)
|
24
24
|
|
25
|
-
|
25
|
+
UI.success("Successfully verified the code signature")
|
26
26
|
|
27
27
|
# Check 2/2
|
28
28
|
# More information https://developer.apple.com/news/?id=09222015a
|
29
|
-
|
30
|
-
|
29
|
+
UI.message("Verifying Xcode using GateKeeper...")
|
30
|
+
UI.success("This will take up to a few minutes, now is a great time to go for a coffee ☕...")
|
31
31
|
|
32
32
|
command = "/usr/sbin/spctl --assess --verbose '#{params[:xcode_path]}'"
|
33
33
|
must_includes = ['accepted']
|
@@ -35,7 +35,7 @@ module Fastlane
|
|
35
35
|
output = verify(command: command, must_includes: must_includes, params: params)
|
36
36
|
|
37
37
|
if output.include?("source=Mac App Store") or output.include?("source=Apple") or output.include?("source=Apple System")
|
38
|
-
|
38
|
+
UI.success("Successfully verified Xcode installation at path '#{params[:xcode_path]}' 🎧")
|
39
39
|
else
|
40
40
|
show_and_raise_error("Invalid Download Source of Xcode: #{output}", params[:xcode_path])
|
41
41
|
end
|
@@ -60,10 +60,10 @@ module Fastlane
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def self.show_and_raise_error(error, xcode_path)
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
63
|
+
UI.error("Attention: Your Xcode Installation might be hacked.")
|
64
|
+
UI.error("This might be a false alarm, if so, please submit an issue on GitHub")
|
65
|
+
UI.error("The following information couldn't be found:")
|
66
|
+
UI.error(error)
|
67
67
|
raise "The Xcode installation at path '#{xcode_path}' might be compromised."
|
68
68
|
end
|
69
69
|
|
@@ -14,14 +14,14 @@ module Fastlane
|
|
14
14
|
installer = XcodeInstall::Installer.new
|
15
15
|
|
16
16
|
if installer.installed?(params[:version])
|
17
|
-
|
17
|
+
UI.success("Xcode #{params[:version]} is already installed ✨")
|
18
18
|
else
|
19
19
|
installer.install_version(params[:version], true, true, true, true)
|
20
20
|
end
|
21
21
|
|
22
22
|
xcode = installer.installed_versions.find { |x| x.version == params[:version] }
|
23
23
|
raise "Could not find Xcode with version '#{params[:version]}'" unless xcode
|
24
|
-
|
24
|
+
UI.message("Using Xcode #{params[:version]} on path '#{xcode.path}'")
|
25
25
|
xcode.approve_license
|
26
26
|
|
27
27
|
ENV["DEVELOPER_DIR"] = File.join(xcode.path, "/Contents/Developer")
|