fastlane 2.194.0 → 2.195.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 +84 -84
- data/fastlane/lib/fastlane/actions/gradle.rb +15 -2
- data/fastlane/lib/fastlane/actions/last_git_commit.rb +1 -1
- data/fastlane/lib/fastlane/actions/prompt.rb +1 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +1 -1
- data/fastlane/swift/Fastlane.swift +38 -67
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +9 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
- data/fastlane/swift/formatting/Brewfile.lock.json +3 -3
- data/match/lib/match/generator.rb +2 -1
- data/match/lib/match/options.rb +10 -0
- data/match/lib/match/runner.rb +94 -10
- data/sigh/lib/sigh/options.rb +5 -0
- data/sigh/lib/sigh/runner.rb +2 -2
- data/snapshot/lib/snapshot/options.rb +1 -1
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +7 -0
- metadata +21 -24
- data/fastlane/lib/fastlane/actions/.notarize.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/crashlytics.rb +0 -207
- data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +0 -157
@@ -1,157 +0,0 @@
|
|
1
|
-
require 'shellwords'
|
2
|
-
|
3
|
-
module Fastlane
|
4
|
-
module Helper
|
5
|
-
class CrashlyticsHelper
|
6
|
-
class << self
|
7
|
-
def discover_crashlytics_path(params)
|
8
|
-
path = params[:crashlytics_path]
|
9
|
-
|
10
|
-
# Finding submit binary inside of given Crashlytics path (for backwards compatibility)
|
11
|
-
if path
|
12
|
-
if File.basename(path) != "submit"
|
13
|
-
path = Dir[File.join(path, '**', 'submit')].last
|
14
|
-
UI.verbose(":crashlytics_path passed through parameters did not point to a submit binary. Using this submit binary on that path instead: '#{path}'")
|
15
|
-
else
|
16
|
-
UI.verbose("Using :crashlytics_path passed in through parameters: '#{path}'")
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
# Check for submit binary outside of Crashlytics.framework (for Crashlytics 3.4.1 and over)
|
21
|
-
path ||= Dir["./Pods/Crashlytics/submit"].first
|
22
|
-
|
23
|
-
# Check for submit binary in Crashlytics.framework (for Crashlytics 3.4.1 and under)
|
24
|
-
path ||= Dir["./Pods/iOS/Crashlytics/Crashlytics.framework/submit"].last
|
25
|
-
path ||= Dir["./**/Crashlytics.framework/submit"].last
|
26
|
-
|
27
|
-
downcase_path = path ? path.downcase : nil
|
28
|
-
if downcase_path && downcase_path.include?("pods") && downcase_path.include?("crashlytics.framework")
|
29
|
-
UI.deprecated("Crashlytics has moved the submit binary outside of Crashlytics.framework directory as of 3.4.1. Please change :crashlytics_path to `<PODS_ROOT>/Crashlytics/submit`")
|
30
|
-
end
|
31
|
-
|
32
|
-
return path
|
33
|
-
end
|
34
|
-
|
35
|
-
def generate_ios_command(params)
|
36
|
-
submit_binary = discover_crashlytics_path(params)
|
37
|
-
unless submit_binary
|
38
|
-
UI.user_error!("Couldn't find Crashlytics' submit binary in current directory. Make sure to add the 'Crashlytics' pod to your 'Podfile' and run `pod update`")
|
39
|
-
end
|
40
|
-
if File.basename(submit_binary) != "submit"
|
41
|
-
UI.user_error!("Invalid crashlytics path was detected with '#{submit_binary}'. Path must point to the `submit` binary (example: './Pods/Crashlytics/submit')")
|
42
|
-
end
|
43
|
-
submit_binary = "Crashlytics.framework/submit" if Helper.test?
|
44
|
-
|
45
|
-
command = []
|
46
|
-
command << submit_binary.shellescape
|
47
|
-
command << params[:api_token]
|
48
|
-
command << params[:build_secret]
|
49
|
-
command << "-ipaPath '#{params[:ipa_path]}'"
|
50
|
-
command << "-emails '#{params[:emails].join(',')}'" if params[:emails]
|
51
|
-
command << "-notesPath '#{params[:notes_path]}'" if params[:notes_path]
|
52
|
-
command << "-groupAliases '#{params[:groups].join(',')}'" if params[:groups]
|
53
|
-
command << "-notifications #{(params[:notifications] ? 'YES' : 'NO')}"
|
54
|
-
command << "-debug #{(params[:debug] ? 'YES' : 'NO')}"
|
55
|
-
|
56
|
-
return command
|
57
|
-
end
|
58
|
-
|
59
|
-
def generate_android_command(params, android_manifest_path)
|
60
|
-
params[:crashlytics_path] = download_android_tools unless params[:crashlytics_path]
|
61
|
-
|
62
|
-
UI.user_error!("The `crashlytics_path` must be a jar file for Android") unless params[:crashlytics_path].end_with?(".jar") || Helper.test?
|
63
|
-
|
64
|
-
if ENV['JAVA_HOME'].nil?
|
65
|
-
command = ["java"]
|
66
|
-
else
|
67
|
-
command = [File.join(ENV['JAVA_HOME'], "/bin/java").shellescape]
|
68
|
-
end
|
69
|
-
command << "-jar #{File.expand_path(params[:crashlytics_path])}"
|
70
|
-
command << "-androidRes ."
|
71
|
-
command << "-apiKey #{params[:api_token]}"
|
72
|
-
command << "-apiSecret #{params[:build_secret]}"
|
73
|
-
command << "-uploadDist #{File.expand_path(params[:apk_path]).shellescape}"
|
74
|
-
command << "-androidManifest #{File.expand_path(android_manifest_path).shellescape}"
|
75
|
-
|
76
|
-
# Optional
|
77
|
-
command << "-betaDistributionEmails #{params[:emails].join(',').shellescape}" if params[:emails]
|
78
|
-
command << "-betaDistributionReleaseNotesFilePath #{File.expand_path(params[:notes_path]).shellescape}" if params[:notes_path]
|
79
|
-
command << "-betaDistributionGroupAliases #{params[:groups].join(',').shellescape}" if params[:groups]
|
80
|
-
command << "-betaDistributionNotifications #{(params[:notifications] ? 'true' : 'false')}"
|
81
|
-
|
82
|
-
return command
|
83
|
-
end
|
84
|
-
|
85
|
-
def download_android_tools
|
86
|
-
containing = File.join(File.expand_path("~/Library"), "CrashlyticsAndroid")
|
87
|
-
zip_path = File.join(containing, "crashlytics-devtools.zip")
|
88
|
-
jar_path = File.join(containing, "crashlytics-devtools.jar")
|
89
|
-
|
90
|
-
url = "https://ssl-download-crashlytics-com.s3.amazonaws.com/android/ant/crashlytics.zip"
|
91
|
-
require 'net/http'
|
92
|
-
|
93
|
-
FileUtils.mkdir_p(containing)
|
94
|
-
|
95
|
-
begin
|
96
|
-
# Work around ruby defect, where HTTP#get_response and HTTP#post_form don't use ENV proxy settings
|
97
|
-
# https://bugs.ruby-lang.org/issues/12724
|
98
|
-
uri = URI(url)
|
99
|
-
http_conn = Net::HTTP.new(uri.host, uri.port)
|
100
|
-
http_conn.use_ssl = true
|
101
|
-
result = http_conn.request_head(uri.path)
|
102
|
-
|
103
|
-
# ETag is returned with quotes, which net/http does not handle. Clean that up
|
104
|
-
etag = result['ETag'] && result['ETag'].tr('"', '')
|
105
|
-
|
106
|
-
# This is a no-op if the current version on disk matches the file on S3
|
107
|
-
return jar_path if File.exist?(zip_path) && etag == Digest::MD5.file(zip_path).hexdigest
|
108
|
-
|
109
|
-
UI.important("Downloading Crashlytics Support Library - this might take a minute...")
|
110
|
-
result = http_conn.request_get(uri.path)
|
111
|
-
UI.error("#{result.message} (#{result.code})") unless result.kind_of?(Net::HTTPSuccess)
|
112
|
-
File.write(zip_path, result.body)
|
113
|
-
|
114
|
-
# Now unzip the file
|
115
|
-
Action.sh("unzip -o '#{zip_path}' -d '#{containing}'")
|
116
|
-
|
117
|
-
UI.user_error!("Couldn't find 'crashlytics-devtools.jar'") unless File.exist?(jar_path)
|
118
|
-
|
119
|
-
UI.success("Successfully downloaded Crashlytics Support Library to '#{jar_path}'")
|
120
|
-
rescue => ex
|
121
|
-
UI.user_error!("Error fetching remote file: #{ex}")
|
122
|
-
end
|
123
|
-
|
124
|
-
return jar_path
|
125
|
-
end
|
126
|
-
|
127
|
-
def generate_android_manifest_tempfile
|
128
|
-
# We have to generate an empty XML file to make the crashlytics CLI happy :)
|
129
|
-
write_to_tempfile('<?xml version="1.0" encoding="utf-8"?><manifest></manifest>', 'xml')
|
130
|
-
end
|
131
|
-
|
132
|
-
def write_to_tempfile(value, tempfilename)
|
133
|
-
require 'tempfile'
|
134
|
-
|
135
|
-
Tempfile.new(tempfilename).tap do |t|
|
136
|
-
t.write(value)
|
137
|
-
t.close
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
# java \
|
146
|
-
# -jar ~/Desktop/crashlytics-devtools.jar \
|
147
|
-
# -androidRes . \
|
148
|
-
# -uploadDist /Users/fkrause/AndroidStudioProjects/AppName/app/build/outputs/apk/app-release.apk \
|
149
|
-
# -androidManifest /Users/fkrause/Downloads/manifest.xml \
|
150
|
-
# -apiKey api_key \
|
151
|
-
# -apiSecret secret_key \
|
152
|
-
|
153
|
-
# -betaDistributionReleaseNotes "Yeah" \
|
154
|
-
# -betaDistributionEmails "something11@krausefx.com" \
|
155
|
-
# -betaDistributionGroupAliases "testgroup" \
|
156
|
-
# -betaDistributionNotifications false
|
157
|
-
# -projectPath . \
|