fastlane 2.193.1 → 2.197.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +88 -88
- data/cert/lib/cert/options.rb +1 -1
- data/deliver/lib/assets/ScreenshotsHelp +29 -6
- data/deliver/lib/deliver/app_screenshot.rb +4 -4
- data/deliver/lib/deliver/options.rb +1 -1
- data/deliver/lib/deliver/upload_screenshots.rb +1 -1
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +13 -7
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +1 -1
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +47 -30
- 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/latest_testflight_build_number.rb +3 -4
- data/fastlane/lib/fastlane/actions/notarize.rb +27 -18
- data/fastlane/lib/fastlane/actions/prompt.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
- data/fastlane/lib/fastlane/actions/set_changelog.rb +1 -1
- data/fastlane/lib/fastlane/actions/slather.rb +6 -0
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +11 -5
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +2 -2
- data/fastlane/swift/Fastlane.swift +86 -99
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/LaneFileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +10 -2
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
- data/fastlane/swift/Runner.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 +3 -3
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +2 -2
- data/fastlane/swift/formatting/Brewfile.lock.json +16 -16
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +1 -1
- data/frameit/lib/frameit/editor.rb +16 -18
- data/frameit/lib/frameit/trim_box.rb +6 -0
- data/match/lib/match/generator.rb +2 -1
- data/match/lib/match/options.rb +11 -1
- data/match/lib/match/runner.rb +94 -10
- data/pem/lib/pem/manager.rb +2 -1
- data/pem/lib/pem/options.rb +1 -1
- data/pilot/lib/pilot/options.rb +1 -1
- data/precheck/lib/precheck/options.rb +1 -1
- data/screengrab/lib/screengrab/options.rb +2 -2
- data/sigh/lib/assets/resign.sh +9 -6
- data/sigh/lib/sigh/options.rb +6 -1
- data/sigh/lib/sigh/runner.rb +2 -2
- data/snapshot/lib/snapshot/options.rb +1 -1
- data/snapshot/lib/snapshot/reports_generator.rb +8 -0
- data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +9 -1
- data/spaceship/lib/spaceship/connect_api/models/.build.rb.swp +0 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/build.rb +4 -2
- data/spaceship/lib/spaceship/connect_api/models/build_bundle.rb +59 -0
- data/spaceship/lib/spaceship/connect_api/token.rb +1 -1
- data/spaceship/lib/spaceship/connect_api.rb +1 -0
- data/supply/lib/supply/client.rb +3 -3
- data/supply/lib/supply/uploader.rb +10 -7
- metadata +39 -35
- data/fastlane/lib/fastlane/actions/crashlytics.rb +0 -207
- data/fastlane/lib/fastlane/helper/crashlytics_helper.rb +0 -157
data/sigh/lib/sigh/runner.rb
CHANGED
@@ -114,7 +114,7 @@ module Sigh
|
|
114
114
|
|
115
115
|
# Take the provisioning profile name into account
|
116
116
|
results = filter_profiles_by_name(results) if Sigh.config[:provisioning_name].to_s.length > 0
|
117
|
-
return results if Sigh.config[:skip_certificate_verification]
|
117
|
+
return results if Sigh.config[:skip_certificate_verification] || Sigh.config[:include_all_certificates]
|
118
118
|
|
119
119
|
UI.message("Verifying certificates...")
|
120
120
|
return results.find_all do |current_profile|
|
@@ -311,7 +311,7 @@ module Sigh
|
|
311
311
|
|
312
312
|
# verify certificates
|
313
313
|
if Helper.mac?
|
314
|
-
unless Sigh.config[:skip_certificate_verification]
|
314
|
+
unless Sigh.config[:skip_certificate_verification] || Sigh.config[:include_all_certificates]
|
315
315
|
certificates = certificates.find_all do |c|
|
316
316
|
file = Tempfile.new('cert')
|
317
317
|
raw_data = Base64.decode64(c.certificate_content)
|
@@ -123,7 +123,7 @@ module Snapshot
|
|
123
123
|
type: Boolean),
|
124
124
|
FastlaneCore::ConfigItem.new(key: :override_status_bar,
|
125
125
|
env_name: 'SNAPSHOT_OVERRIDE_STATUS_BAR',
|
126
|
-
description: "Enabling this option will automatically override the status bar to show 9:41 AM, full battery, and full reception",
|
126
|
+
description: "Enabling this option will automatically override the status bar to show 9:41 AM, full battery, and full reception (Adjust 'SNAPSHOT_SIMULATOR_WAIT_FOR_BOOT_TIMEOUT' environment variable if override status bar is not working. Might be because simulator is not fully booted. Defaults to 10 seconds)",
|
127
127
|
default_value: false,
|
128
128
|
is_string: false),
|
129
129
|
FastlaneCore::ConfigItem.new(key: :override_status_bar_arguments,
|
@@ -84,6 +84,10 @@ module Snapshot
|
|
84
84
|
{
|
85
85
|
# snapshot in Xcode 9 saves screenshots with the SIMULATOR_DEVICE_NAME
|
86
86
|
# which includes spaces
|
87
|
+
'iPhone 13 Pro Max' => "iPhone 13 Pro Max",
|
88
|
+
'iPhone 13 Pro' => "iPhone 13 Pro",
|
89
|
+
'iPhone 13 mini' => "iPhone 13 mini",
|
90
|
+
'iPhone 13' => "iPhone 13",
|
87
91
|
'iPhone 12 Pro Max' => "iPhone 12 Pro Max",
|
88
92
|
'iPhone 12 Pro' => "iPhone 12 Pro",
|
89
93
|
'iPhone 12 mini' => "iPhone 12 mini",
|
@@ -113,6 +117,10 @@ module Snapshot
|
|
113
117
|
'iPad Air' => 'iPad Air',
|
114
118
|
'iPad (5th generation)' => 'iPad (5th generation)',
|
115
119
|
'iPad (7th generation)' => 'iPad (7th generation)',
|
120
|
+
'iPad mini 2' => 'iPad mini 2',
|
121
|
+
'iPad mini 3' => 'iPad mini 3',
|
122
|
+
'iPad mini 4' => 'iPad mini 4',
|
123
|
+
'iPad mini (6th generation)' => 'iPad mini (6th generation)',
|
116
124
|
'iPad Pro (9.7-inch)' => 'iPad Pro (9.7-inch)',
|
117
125
|
'iPad Pro (9.7 inch)' => 'iPad Pro (9.7-inch)', # iOS 10.3.1 simulator
|
118
126
|
'iPad Pro (10.5-inch)' => 'iPad Pro (10.5-inch)',
|
@@ -116,7 +116,15 @@ module Snapshot
|
|
116
116
|
device_udid = TestCommandGenerator.device_udid(device_type)
|
117
117
|
|
118
118
|
UI.message("Launch Simulator #{device_type}")
|
119
|
-
|
119
|
+
# Boot the simulator and wait for it to finish booting
|
120
|
+
Helper.backticks("xcrun simctl bootstatus #{device_udid} -b &> /dev/null")
|
121
|
+
|
122
|
+
# "Booted" status is not enough for to adjust the status bar
|
123
|
+
# Simulator could stil be booting with Apple logo
|
124
|
+
# Need to wait "some amount of time" until home screen shows
|
125
|
+
boot_sleep = ENV["SNAPSHOT_SIMULATOR_WAIT_FOR_BOOT_TIMEOUT"].to_i || 10
|
126
|
+
UI.message("Waiting #{boot_sleep} seconds for device to fully boot before overriding status bar... Set 'SNAPSHOT_SIMULATOR_WAIT_FOR_BOOT_TIMEOUT' environemnt variable to adjust timeout")
|
127
|
+
sleep(boot_sleep) if boot_sleep > 0
|
120
128
|
|
121
129
|
UI.message("Overriding Status Bar")
|
122
130
|
|
Binary file
|
@@ -112,7 +112,7 @@ module Spaceship
|
|
112
112
|
|
113
113
|
# @deprecated
|
114
114
|
def fetch_age_rating_declaration(client: nil)
|
115
|
-
raise 'AppStoreVersion no longer as
|
115
|
+
raise 'AppStoreVersion no longer as AgeRatingDeclaration as of App Store Connect API 1.3 - Use AppInfo instead'
|
116
116
|
end
|
117
117
|
|
118
118
|
#
|
@@ -19,6 +19,7 @@ module Spaceship
|
|
19
19
|
attr_accessor :beta_build_metrics
|
20
20
|
attr_accessor :beta_build_localizations
|
21
21
|
attr_accessor :build_beta_detail
|
22
|
+
attr_accessor :build_bundles
|
22
23
|
attr_accessor :pre_release_version
|
23
24
|
attr_accessor :individual_testers
|
24
25
|
|
@@ -38,10 +39,11 @@ module Spaceship
|
|
38
39
|
"betaBuildLocalizations" => "beta_build_localizations",
|
39
40
|
"buildBetaDetail" => "build_beta_detail",
|
40
41
|
"preReleaseVersion" => "pre_release_version",
|
41
|
-
"individualTesters" => "individual_testers"
|
42
|
+
"individualTesters" => "individual_testers",
|
43
|
+
"buildBundles" => "build_bundles"
|
42
44
|
})
|
43
45
|
|
44
|
-
ESSENTIAL_INCLUDES = "app,buildBetaDetail,preReleaseVersion"
|
46
|
+
ESSENTIAL_INCLUDES = "app,buildBetaDetail,preReleaseVersion,buildBundles"
|
45
47
|
|
46
48
|
module ProcessingState
|
47
49
|
PROCESSING = "PROCESSING"
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require_relative '../model'
|
2
|
+
module Spaceship
|
3
|
+
class ConnectAPI
|
4
|
+
class BuildBundle
|
5
|
+
include Spaceship::ConnectAPI::Model
|
6
|
+
|
7
|
+
attr_accessor :bundle_id
|
8
|
+
attr_accessor :bundle_type
|
9
|
+
attr_accessor :sdk_build
|
10
|
+
attr_accessor :platform_build
|
11
|
+
attr_accessor :file_name
|
12
|
+
attr_accessor :has_siri_kit
|
13
|
+
attr_accessor :has_on_demand_resources
|
14
|
+
attr_accessor :is_newsstand
|
15
|
+
attr_accessor :has_prerendered_icon
|
16
|
+
attr_accessor :uses_location_services
|
17
|
+
attr_accessor :is_ios_build_mac_app_store_compatible
|
18
|
+
attr_accessor :includes_symbols
|
19
|
+
attr_accessor :dsym_url
|
20
|
+
attr_accessor :supported_architectures
|
21
|
+
attr_accessor :required_capabilities
|
22
|
+
attr_accessor :device_protocols
|
23
|
+
attr_accessor :locales
|
24
|
+
attr_accessor :entitlements
|
25
|
+
attr_accessor :tracks_users
|
26
|
+
|
27
|
+
module BundleType
|
28
|
+
APP = "APP"
|
29
|
+
# APP_CLIP might be in here as well
|
30
|
+
end
|
31
|
+
|
32
|
+
attr_mapping({
|
33
|
+
"bundleId" => "bundle_id",
|
34
|
+
"bundleType" => "bundle_type",
|
35
|
+
"sdkBuild" => "sdk_build",
|
36
|
+
"platformBuild" => "platform_build",
|
37
|
+
"fileName" => "file_name",
|
38
|
+
"hasSirikit" => "has_siri_kit",
|
39
|
+
"hasOnDemandResources" => "has_on_demand_resources",
|
40
|
+
"isNewsstand" => "is_newsstand",
|
41
|
+
"hasPrerenderedIcon" => "has_prerendered_icon",
|
42
|
+
"usesLocationServices" => "uses_location_services",
|
43
|
+
"isIosBuildMacAppStoreCompatible" => "is_ios_build_mac_app_store_compatible",
|
44
|
+
"includesSymbols" => "includes_symbols",
|
45
|
+
"dSYMUrl" => "dsym_url",
|
46
|
+
"supportedArchitectures" => "supported_architectures",
|
47
|
+
"requiredCapabilities" => "required_capabilities",
|
48
|
+
"deviceProtocols" => "device_protocols",
|
49
|
+
"locales" => "locales",
|
50
|
+
"entitlements" => "entitlements",
|
51
|
+
"tracksUsers" => "tracks_users"
|
52
|
+
})
|
53
|
+
|
54
|
+
def self.type
|
55
|
+
return "buildBundles"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -29,7 +29,7 @@ module Spaceship
|
|
29
29
|
attr_accessor :in_house
|
30
30
|
|
31
31
|
def self.from(hash: nil, filepath: nil)
|
32
|
-
api_token ||= self.create(**hash) if hash
|
32
|
+
api_token ||= self.create(**hash.transform_keys(&:to_sym)) if hash
|
33
33
|
api_token ||= self.from_json_file(filepath) if filepath
|
34
34
|
return api_token
|
35
35
|
end
|
@@ -32,6 +32,7 @@ require 'spaceship/connect_api/models/beta_tester_metric'
|
|
32
32
|
require 'spaceship/connect_api/models/build'
|
33
33
|
require 'spaceship/connect_api/models/build_delivery'
|
34
34
|
require 'spaceship/connect_api/models/build_beta_detail'
|
35
|
+
require 'spaceship/connect_api/models/build_bundle'
|
35
36
|
require 'spaceship/connect_api/models/custom_app_organization'
|
36
37
|
require 'spaceship/connect_api/models/custom_app_user'
|
37
38
|
require 'spaceship/connect_api/models/pre_release_version'
|
data/supply/lib/supply/client.rb
CHANGED
@@ -286,10 +286,10 @@ module Supply
|
|
286
286
|
|
287
287
|
filtered_release = filtered_track.releases.first { |r| !r.name.nil? && r.name == version }
|
288
288
|
|
289
|
-
# Since we can release on Alpha/Beta without release notes.
|
289
|
+
# Since we can release on Internal/Alpha/Beta without release notes.
|
290
290
|
if filtered_release.release_notes.nil?
|
291
|
-
UI.
|
292
|
-
return
|
291
|
+
UI.message("Version '#{version}' for '#{current_package_name}' does not seem to have any release notes. Nothing to download.")
|
292
|
+
return []
|
293
293
|
end
|
294
294
|
|
295
295
|
return filtered_release.release_notes.map do |row|
|
@@ -13,6 +13,8 @@ module Supply
|
|
13
13
|
apk_version_codes.concat(upload_bundles) unless Supply.config[:skip_upload_aab]
|
14
14
|
upload_mapping(apk_version_codes)
|
15
15
|
|
16
|
+
track_to_update = Supply.config[:track]
|
17
|
+
|
16
18
|
apk_version_codes.concat(Supply.config[:version_codes_to_retain]) if Supply.config[:version_codes_to_retain]
|
17
19
|
|
18
20
|
if !apk_version_codes.empty?
|
@@ -23,13 +25,14 @@ module Supply
|
|
23
25
|
else
|
24
26
|
# Only promote or rollout if we don't have version codes
|
25
27
|
if Supply.config[:track_promote_to]
|
28
|
+
track_to_update = Supply.config[:track_promote_to]
|
26
29
|
promote_track
|
27
30
|
elsif !Supply.config[:rollout].nil? && Supply.config[:track].to_s != ""
|
28
31
|
update_rollout
|
29
32
|
end
|
30
33
|
end
|
31
34
|
|
32
|
-
perform_upload_meta(apk_version_codes)
|
35
|
+
perform_upload_meta(apk_version_codes, track_to_update)
|
33
36
|
|
34
37
|
if Supply.config[:validate_only]
|
35
38
|
UI.message("Validating all changes with Google Play...")
|
@@ -70,7 +73,7 @@ module Supply
|
|
70
73
|
end
|
71
74
|
end
|
72
75
|
|
73
|
-
def perform_upload_meta(version_codes)
|
76
|
+
def perform_upload_meta(version_codes, track_name)
|
74
77
|
if (!Supply.config[:skip_upload_metadata] || !Supply.config[:skip_upload_images] || !Supply.config[:skip_upload_changelogs] || !Supply.config[:skip_upload_screenshots]) && metadata_path
|
75
78
|
# Use version code from config if version codes is empty and no nil or empty string
|
76
79
|
version_codes = [Supply.config[:version_code]] if version_codes.empty?
|
@@ -81,7 +84,7 @@ module Supply
|
|
81
84
|
version_codes.each do |version_code|
|
82
85
|
UI.user_error!("Could not find folder #{metadata_path}") unless File.directory?(metadata_path)
|
83
86
|
|
84
|
-
track, release = fetch_track_and_release!(
|
87
|
+
track, release = fetch_track_and_release!(track_name, version_code)
|
85
88
|
UI.user_error!("Unable to find the requested track - '#{Supply.config[:track]}'") unless track
|
86
89
|
UI.user_error!("Could not find release for version code '#{version_code}' to update changelog") unless release
|
87
90
|
|
@@ -98,7 +101,7 @@ module Supply
|
|
98
101
|
release_notes << upload_changelog(language, version_code) unless Supply.config[:skip_upload_changelogs]
|
99
102
|
end
|
100
103
|
|
101
|
-
upload_changelogs(release_notes, release, track) unless release_notes.empty?
|
104
|
+
upload_changelogs(release_notes, release, track, track_name) unless release_notes.empty?
|
102
105
|
end
|
103
106
|
end
|
104
107
|
end
|
@@ -144,7 +147,7 @@ module Supply
|
|
144
147
|
end
|
145
148
|
|
146
149
|
def verify_config!
|
147
|
-
unless metadata_path || Supply.config[:apk] || Supply.config[:apk_paths] || Supply.config[:aab] || Supply.config[:aab_paths] || (Supply.config[:track] && Supply.config[:track_promote_to])
|
150
|
+
unless metadata_path || Supply.config[:apk] || Supply.config[:apk_paths] || Supply.config[:aab] || Supply.config[:aab_paths] || (Supply.config[:track] && Supply.config[:track_promote_to]) || (Supply.config[:track] && Supply.config[:rollout])
|
148
151
|
UI.user_error!("No local metadata, apks, aab, or track to promote were found, make sure to run `fastlane supply init` to setup supply")
|
149
152
|
end
|
150
153
|
|
@@ -239,9 +242,9 @@ module Supply
|
|
239
242
|
)
|
240
243
|
end
|
241
244
|
|
242
|
-
def upload_changelogs(release_notes, release, track)
|
245
|
+
def upload_changelogs(release_notes, release, track, track_name)
|
243
246
|
release.release_notes = release_notes
|
244
|
-
client.upload_changelogs(track,
|
247
|
+
client.upload_changelogs(track, track_name)
|
245
248
|
end
|
246
249
|
|
247
250
|
def upload_metadata(language, listing)
|
metadata
CHANGED
@@ -1,38 +1,38 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.197.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
-
|
9
|
-
- Fumiya Nakamura
|
10
|
-
- Olivier Halligon
|
11
|
-
- Daniel Jankowski
|
12
|
-
- Kohki Miki
|
7
|
+
- Max Ott
|
8
|
+
- Danielle Tomlinson
|
13
9
|
- Jimmy Dee
|
14
|
-
- Jan Piotrowski
|
15
10
|
- Manish Rathi
|
16
11
|
- Manu Wallner
|
17
|
-
-
|
18
|
-
-
|
19
|
-
- Helmut Januschka
|
20
|
-
- Aaron Brager
|
21
|
-
- Josh Holtz
|
22
|
-
- Danielle Tomlinson
|
12
|
+
- Maksym Grebenets
|
13
|
+
- Iulian Onofrei
|
23
14
|
- Felix Krause
|
15
|
+
- Helmut Januschka
|
16
|
+
- Jan Piotrowski
|
17
|
+
- Stefan Natchev
|
24
18
|
- Luka Mirosevic
|
19
|
+
- Joshua Liebowitz
|
20
|
+
- Fumiya Nakamura
|
21
|
+
- Kohki Miki
|
22
|
+
- Satoshi Namai
|
23
|
+
- Jérôme Lacoste
|
24
|
+
- Daniel Jankowski
|
25
|
+
- Aaron Brager
|
26
|
+
- Olivier Halligon
|
27
|
+
- Matthew Ellis
|
25
28
|
- Roger Oba
|
26
29
|
- Andrew McBurney
|
27
|
-
-
|
28
|
-
-
|
29
|
-
- Satoshi Namai
|
30
|
-
- Max Ott
|
31
|
-
- Stefan Natchev
|
30
|
+
- Josh Holtz
|
31
|
+
- Jorge Revuelta H
|
32
32
|
autorequire:
|
33
33
|
bindir: bin
|
34
34
|
cert_chain: []
|
35
|
-
date: 2021-
|
35
|
+
date: 2021-10-22 00:00:00.000000000 Z
|
36
36
|
dependencies:
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: xcodeproj
|
@@ -1056,7 +1056,6 @@ files:
|
|
1056
1056
|
- fastlane/lib/fastlane/actions/commit_github_file.rb
|
1057
1057
|
- fastlane/lib/fastlane/actions/commit_version_bump.rb
|
1058
1058
|
- fastlane/lib/fastlane/actions/copy_artifacts.rb
|
1059
|
-
- fastlane/lib/fastlane/actions/crashlytics.rb
|
1060
1059
|
- fastlane/lib/fastlane/actions/create_app_on_managed_play_store.rb
|
1061
1060
|
- fastlane/lib/fastlane/actions/create_app_online.rb
|
1062
1061
|
- fastlane/lib/fastlane/actions/create_keychain.rb
|
@@ -1278,7 +1277,6 @@ files:
|
|
1278
1277
|
- fastlane/lib/fastlane/features.rb
|
1279
1278
|
- fastlane/lib/fastlane/helper/README.md
|
1280
1279
|
- fastlane/lib/fastlane/helper/adb_helper.rb
|
1281
|
-
- fastlane/lib/fastlane/helper/crashlytics_helper.rb
|
1282
1280
|
- fastlane/lib/fastlane/helper/dotenv_helper.rb
|
1283
1281
|
- fastlane/lib/fastlane/helper/gem_helper.rb
|
1284
1282
|
- fastlane/lib/fastlane/helper/git_helper.rb
|
@@ -1656,6 +1654,7 @@ files:
|
|
1656
1654
|
- spaceship/lib/spaceship/connect_api/client.rb
|
1657
1655
|
- spaceship/lib/spaceship/connect_api/file_uploader.rb
|
1658
1656
|
- spaceship/lib/spaceship/connect_api/model.rb
|
1657
|
+
- spaceship/lib/spaceship/connect_api/models/.build.rb.swp
|
1659
1658
|
- spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb
|
1660
1659
|
- spaceship/lib/spaceship/connect_api/models/app.rb
|
1661
1660
|
- spaceship/lib/spaceship/connect_api/models/app_category.rb
|
@@ -1693,6 +1692,7 @@ files:
|
|
1693
1692
|
- spaceship/lib/spaceship/connect_api/models/beta_tester_metric.rb
|
1694
1693
|
- spaceship/lib/spaceship/connect_api/models/build.rb
|
1695
1694
|
- spaceship/lib/spaceship/connect_api/models/build_beta_detail.rb
|
1695
|
+
- spaceship/lib/spaceship/connect_api/models/build_bundle.rb
|
1696
1696
|
- spaceship/lib/spaceship/connect_api/models/build_delivery.rb
|
1697
1697
|
- spaceship/lib/spaceship/connect_api/models/bundle_id.rb
|
1698
1698
|
- spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb
|
@@ -1841,28 +1841,32 @@ homepage: https://fastlane.tools
|
|
1841
1841
|
licenses:
|
1842
1842
|
- MIT
|
1843
1843
|
metadata:
|
1844
|
-
|
1844
|
+
bug_tracker_uri: https://github.com/fastlane/fastlane/issues
|
1845
|
+
changelog_uri: https://github.com/fastlane/fastlane/releases
|
1846
|
+
documentation_uri: https://docs.fastlane.tools/
|
1847
|
+
homepage_uri: https://fastlane.tools
|
1848
|
+
source_code_uri: https://github.com/fastlane/fastlane
|
1845
1849
|
post_install_message:
|
1846
1850
|
rdoc_options: []
|
1847
1851
|
require_paths:
|
1852
|
+
- cert/lib
|
1848
1853
|
- credentials_manager/lib
|
1849
|
-
- pem/lib
|
1850
|
-
- snapshot/lib
|
1851
|
-
- frameit/lib
|
1852
|
-
- match/lib
|
1853
|
-
- fastlane_core/lib
|
1854
1854
|
- deliver/lib
|
1855
|
-
- scan/lib
|
1856
|
-
- supply/lib
|
1857
|
-
- cert/lib
|
1858
1855
|
- fastlane/lib
|
1859
|
-
-
|
1860
|
-
-
|
1856
|
+
- fastlane_core/lib
|
1857
|
+
- frameit/lib
|
1861
1858
|
- gym/lib
|
1859
|
+
- match/lib
|
1860
|
+
- pem/lib
|
1861
|
+
- pilot/lib
|
1862
1862
|
- precheck/lib
|
1863
|
+
- produce/lib
|
1864
|
+
- scan/lib
|
1863
1865
|
- screengrab/lib
|
1864
1866
|
- sigh/lib
|
1865
|
-
-
|
1867
|
+
- snapshot/lib
|
1868
|
+
- spaceship/lib
|
1869
|
+
- supply/lib
|
1866
1870
|
required_ruby_version: !ruby/object:Gem::Requirement
|
1867
1871
|
requirements:
|
1868
1872
|
- - ">="
|
@@ -1874,7 +1878,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1874
1878
|
- !ruby/object:Gem::Version
|
1875
1879
|
version: '0'
|
1876
1880
|
requirements: []
|
1877
|
-
rubygems_version: 3.
|
1881
|
+
rubygems_version: 3.2.3
|
1878
1882
|
signing_key:
|
1879
1883
|
specification_version: 4
|
1880
1884
|
summary: The easiest way to automate beta deployments and releases for your iOS and
|
@@ -1,207 +0,0 @@
|
|
1
|
-
module Fastlane
|
2
|
-
module Actions
|
3
|
-
class CrashlyticsAction < Action
|
4
|
-
def self.run(params)
|
5
|
-
params.values # to validate all inputs before looking for the ipa/apk
|
6
|
-
tempfiles = []
|
7
|
-
|
8
|
-
# We need to store notes in a file, because the crashlytics CLI (iOS) says so
|
9
|
-
if params[:notes]
|
10
|
-
UI.error("Overwriting :notes_path, because you specified :notes") if params[:notes_path]
|
11
|
-
|
12
|
-
changelog = Helper::CrashlyticsHelper.write_to_tempfile(params[:notes], 'changelog')
|
13
|
-
tempfiles << changelog
|
14
|
-
params[:notes_path] = changelog.path
|
15
|
-
elsif Actions.lane_context[SharedValues::FL_CHANGELOG] && !params[:notes_path]
|
16
|
-
UI.message("Sending FL_CHANGELOG as release notes to Beta by Crashlytics")
|
17
|
-
|
18
|
-
changelog = Helper::CrashlyticsHelper.write_to_tempfile(
|
19
|
-
Actions.lane_context[SharedValues::FL_CHANGELOG], 'changelog'
|
20
|
-
)
|
21
|
-
tempfiles << changelog
|
22
|
-
params[:notes_path] = changelog.path
|
23
|
-
end
|
24
|
-
|
25
|
-
if params[:ipa_path]
|
26
|
-
command = Helper::CrashlyticsHelper.generate_ios_command(params)
|
27
|
-
elsif params[:apk_path]
|
28
|
-
android_manifest = Helper::CrashlyticsHelper.generate_android_manifest_tempfile
|
29
|
-
tempfiles << android_manifest
|
30
|
-
command = Helper::CrashlyticsHelper.generate_android_command(params, android_manifest.path)
|
31
|
-
else
|
32
|
-
UI.user_error!("You have to either pass an ipa or an apk file to the Crashlytics action")
|
33
|
-
end
|
34
|
-
|
35
|
-
UI.success('Uploading the build to Crashlytics Beta. Time for some ☕️.')
|
36
|
-
|
37
|
-
sanitizer = proc do |message|
|
38
|
-
message.gsub(params[:api_token], '[[API_TOKEN]]')
|
39
|
-
.gsub(params[:build_secret], '[[BUILD_SECRET]]')
|
40
|
-
end
|
41
|
-
|
42
|
-
UI.verbose(sanitizer.call(command.join(' '))) if FastlaneCore::Globals.verbose?
|
43
|
-
|
44
|
-
error_callback = proc do |error|
|
45
|
-
clean_error = sanitizer.call(error)
|
46
|
-
UI.user_error!(clean_error)
|
47
|
-
end
|
48
|
-
|
49
|
-
result = Actions.sh_control_output(
|
50
|
-
command.join(" "),
|
51
|
-
print_command: false,
|
52
|
-
print_command_output: false,
|
53
|
-
error_callback: error_callback
|
54
|
-
)
|
55
|
-
|
56
|
-
tempfiles.each(&:unlink)
|
57
|
-
return command if Helper.test?
|
58
|
-
|
59
|
-
UI.verbose(sanitizer.call(result)) if FastlaneCore::Globals.verbose?
|
60
|
-
|
61
|
-
UI.success('Build successfully uploaded to Crashlytics Beta 🌷')
|
62
|
-
UI.success('Visit https://fabric.io/_/beta to add release notes and notify testers.')
|
63
|
-
end
|
64
|
-
|
65
|
-
def self.description
|
66
|
-
"Refer to [Firebase App Distribution](https://appdistro.page.link/fastlane-repo)"
|
67
|
-
end
|
68
|
-
|
69
|
-
def self.available_options
|
70
|
-
platform = Actions.lane_context[Actions::SharedValues::PLATFORM_NAME]
|
71
|
-
|
72
|
-
if platform == :ios || platform.nil?
|
73
|
-
ipa_path_default = Dir["*.ipa"].sort_by { |x| File.mtime(x) }.last
|
74
|
-
end
|
75
|
-
|
76
|
-
if platform == :android
|
77
|
-
apk_path_default = Dir["*.apk"].last || Dir[File.join("app", "build", "outputs", "apk", "app-release.apk")].last
|
78
|
-
end
|
79
|
-
|
80
|
-
[
|
81
|
-
# iOS Specific
|
82
|
-
FastlaneCore::ConfigItem.new(key: :ipa_path,
|
83
|
-
env_name: "CRASHLYTICS_IPA_PATH",
|
84
|
-
description: "Path to your IPA file. Optional if you use the _gym_ or _xcodebuild_ action",
|
85
|
-
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] || ipa_path_default,
|
86
|
-
default_value_dynamic: true,
|
87
|
-
optional: true,
|
88
|
-
verify_block: proc do |value|
|
89
|
-
UI.user_error!("Couldn't find ipa file at path '#{value}'") unless File.exist?(value)
|
90
|
-
end),
|
91
|
-
# Android Specific
|
92
|
-
FastlaneCore::ConfigItem.new(key: :apk_path,
|
93
|
-
env_name: "CRASHLYTICS_APK_PATH",
|
94
|
-
description: "Path to your APK file",
|
95
|
-
default_value: Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH] || apk_path_default,
|
96
|
-
default_value_dynamic: true,
|
97
|
-
optional: true,
|
98
|
-
verify_block: proc do |value|
|
99
|
-
UI.user_error!("Couldn't find apk file at path '#{value}'") unless File.exist?(value)
|
100
|
-
end),
|
101
|
-
# General
|
102
|
-
FastlaneCore::ConfigItem.new(key: :crashlytics_path,
|
103
|
-
env_name: "CRASHLYTICS_FRAMEWORK_PATH",
|
104
|
-
description: "Path to the submit binary in the Crashlytics bundle (iOS) or `crashlytics-devtools.jar` file (Android)",
|
105
|
-
optional: true,
|
106
|
-
verify_block: proc do |value|
|
107
|
-
UI.user_error!("Couldn't find crashlytics at path '#{File.expand_path(value)}'`") unless File.exist?(File.expand_path(value))
|
108
|
-
end),
|
109
|
-
FastlaneCore::ConfigItem.new(key: :api_token,
|
110
|
-
env_name: "CRASHLYTICS_API_TOKEN",
|
111
|
-
description: "Crashlytics API Key",
|
112
|
-
sensitive: true,
|
113
|
-
verify_block: proc do |value|
|
114
|
-
UI.user_error!("No API token for Crashlytics given, pass using `api_token: 'token'`") unless value && !value.empty?
|
115
|
-
end),
|
116
|
-
FastlaneCore::ConfigItem.new(key: :build_secret,
|
117
|
-
env_name: "CRASHLYTICS_BUILD_SECRET",
|
118
|
-
description: "Crashlytics Build Secret",
|
119
|
-
sensitive: true,
|
120
|
-
verify_block: proc do |value|
|
121
|
-
UI.user_error!("No build secret for Crashlytics given, pass using `build_secret: 'secret'`") unless value && !value.empty?
|
122
|
-
end),
|
123
|
-
FastlaneCore::ConfigItem.new(key: :notes_path,
|
124
|
-
env_name: "CRASHLYTICS_NOTES_PATH",
|
125
|
-
description: "Path to the release notes",
|
126
|
-
optional: true,
|
127
|
-
verify_block: proc do |value|
|
128
|
-
UI.user_error!("Path '#{value}' not found") unless File.exist?(value)
|
129
|
-
end),
|
130
|
-
FastlaneCore::ConfigItem.new(key: :notes,
|
131
|
-
env_name: "CRASHLYTICS_NOTES",
|
132
|
-
description: "The release notes as string - uses :notes_path under the hood",
|
133
|
-
optional: true),
|
134
|
-
FastlaneCore::ConfigItem.new(key: :groups,
|
135
|
-
env_name: "CRASHLYTICS_GROUPS",
|
136
|
-
description: "The groups used for distribution, separated by commas",
|
137
|
-
type: Array,
|
138
|
-
optional: true),
|
139
|
-
FastlaneCore::ConfigItem.new(key: :emails,
|
140
|
-
env_name: "CRASHLYTICS_EMAILS",
|
141
|
-
description: "Pass email addresses of testers, separated by commas",
|
142
|
-
type: Array,
|
143
|
-
optional: true),
|
144
|
-
FastlaneCore::ConfigItem.new(key: :notifications,
|
145
|
-
env_name: "CRASHLYTICS_NOTIFICATIONS",
|
146
|
-
description: "Crashlytics notification option (true/false)",
|
147
|
-
default_value: true,
|
148
|
-
type: Boolean),
|
149
|
-
FastlaneCore::ConfigItem.new(key: :debug,
|
150
|
-
env_name: "CRASHLYTICS_DEBUG",
|
151
|
-
description: "Crashlytics debug option (true/false)",
|
152
|
-
default_value: false,
|
153
|
-
type: Boolean)
|
154
|
-
|
155
|
-
]
|
156
|
-
end
|
157
|
-
|
158
|
-
def self.is_supported?(platform)
|
159
|
-
[:ios, :mac, :android].include?(platform)
|
160
|
-
end
|
161
|
-
|
162
|
-
def self.author
|
163
|
-
["KrauseFx", "pedrogimenez"]
|
164
|
-
end
|
165
|
-
|
166
|
-
def self.details
|
167
|
-
[
|
168
|
-
"Additionally, you can specify `notes`, `emails`, `groups` and `notifications`.",
|
169
|
-
"Distributing to Groups: When using the `groups` parameter, it's important to use the group **alias** names for each group you'd like to distribute to. A group's alias can be found in the web UI. If you're viewing the Beta page, you can open the groups dialog by clicking the 'Manage Groups' button.",
|
170
|
-
"This action uses the `submit` binary provided by the Crashlytics framework. If the binary is not found in its usual path, you'll need to specify the path manually by using the `crashlytics_path` option."
|
171
|
-
].join("\n")
|
172
|
-
end
|
173
|
-
|
174
|
-
def self.example_code
|
175
|
-
[
|
176
|
-
'crashlytics',
|
177
|
-
'# If you installed Crashlytics via CocoaPods
|
178
|
-
crashlytics(
|
179
|
-
crashlytics_path: "./Pods/Crashlytics/submit", # path to your Crashlytics submit binary.
|
180
|
-
api_token: "...",
|
181
|
-
build_secret: "...",
|
182
|
-
ipa_path: "./app.ipa"
|
183
|
-
)',
|
184
|
-
'# If you installed Crashlytics via Carthage for iOS platform
|
185
|
-
crashlytics(
|
186
|
-
crashlytics_path: "./Carthage/Build/iOS/Crashlytics.framework/submit", # path to your Crashlytics submit binary.
|
187
|
-
api_token: "...",
|
188
|
-
build_secret: "...",
|
189
|
-
ipa_path: "./app.ipa"
|
190
|
-
)'
|
191
|
-
]
|
192
|
-
end
|
193
|
-
|
194
|
-
def self.category
|
195
|
-
:deprecated
|
196
|
-
end
|
197
|
-
|
198
|
-
def self.deprecated_notes
|
199
|
-
[
|
200
|
-
"Crashlytics Beta has been deprecated and replaced with Firebase App Distribution.",
|
201
|
-
"Beta will continue working until May 4, 2020.",
|
202
|
-
"Check out the [Firebase App Distribution docs](https://github.com/fastlane/fastlane-plugin-firebase_app_distribution) to get started."
|
203
|
-
].join("\n")
|
204
|
-
end
|
205
|
-
end
|
206
|
-
end
|
207
|
-
end
|