fastlane 2.229.0 → 2.230.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 +100 -94
- data/deliver/lib/assets/summary.html.erb +3 -3
- data/deliver/lib/deliver/app_screenshot.rb +215 -347
- data/deliver/lib/deliver/app_screenshot_iterator.rb +4 -1
- data/deliver/lib/deliver/app_screenshot_validator.rb +5 -21
- data/deliver/lib/deliver/loader.rb +2 -9
- data/deliver/lib/deliver/upload_metadata.rb +5 -0
- data/deliver/lib/deliver/upload_screenshots.rb +4 -2
- data/fastlane/lib/fastlane/actions/docs/create_app_online.md +2 -1
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +3 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +34 -6
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +2 -0
- data/fastlane/lib/fastlane/actions/install_xcode_plugin.rb +3 -2
- data/fastlane/lib/fastlane/actions/modify_services.rb +1 -0
- data/fastlane/lib/fastlane/actions/notarize.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcov.rb +1 -7
- data/fastlane/lib/fastlane/documentation/markdown_docs_generator.rb +4 -4
- data/fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml +20 -20
- 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 +85 -13
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +9 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +1 -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 +5 -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 +5 -1
- data/fastlane_core/lib/fastlane_core/fastlane_pty.rb +5 -1
- data/fastlane_core/lib/fastlane_core/ipa_upload_package_builder.rb +14 -0
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +38 -8
- data/fastlane_core/lib/fastlane_core/project.rb +4 -0
- data/fastlane_core/lib/fastlane_core/provisioning_profile.rb +7 -1
- data/frameit/lib/frameit/device.rb +2 -2
- data/frameit/lib/frameit/device_types.rb +108 -70
- data/frameit/lib/frameit/template_finder.rb +1 -1
- data/gym/lib/gym/module.rb +9 -4
- data/gym/lib/gym/options.rb +14 -1
- data/gym/lib/gym/runner.rb +38 -3
- data/produce/lib/produce/developer_center.rb +1 -0
- data/produce/lib/produce/service.rb +6 -1
- data/scan/lib/scan/options.rb +5 -0
- data/scan/lib/scan/test_command_generator.rb +8 -0
- data/sigh/lib/sigh/local_manage.rb +6 -4
- data/sigh/lib/sigh/runner.rb +18 -1
- data/snapshot/lib/snapshot/options.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/age_rating_declaration.rb +62 -8
- data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +4 -4
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +7 -1
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +16 -16
- data/spaceship/lib/spaceship/connect_api/models/bundle_id_capability.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/provisioning/provisioning.rb +0 -6
- data/spaceship/lib/spaceship/errors.rb +8 -6
- data/supply/lib/supply/client.rb +18 -1
- metadata +75 -29
- data/fastlane/lib/fastlane/core_ext/bundler_monkey_patch.rb +0 -14
- data/fastlane/lib/fastlane/plugins/template/.circleci/config.yml +0 -43
- data/fastlane/lib/fastlane/plugins/template/.travis.yml +0 -4
|
@@ -57,7 +57,7 @@ module Produce
|
|
|
57
57
|
|
|
58
58
|
def valid_services_for(options)
|
|
59
59
|
allowed_keys = [:access_wifi, :app_attest, :app_group, :apple_pay, :associated_domains, :auto_fill_credential, :car_play_audio_app, :car_play_messaging_app,
|
|
60
|
-
:car_play_navigation_app, :car_play_voip_calling_app, :class_kit, :icloud, :critical_alerts, :custom_network_protocol, :data_protection,
|
|
60
|
+
:car_play_navigation_app, :car_play_voip_calling_app, :class_kit, :declared_age_range, :icloud, :critical_alerts, :custom_network_protocol, :data_protection,
|
|
61
61
|
:extended_virtual_address_space, :file_provider_testing_mode, :family_controls, :fonts, :game_center, :health_kit, :hls_interstitial_preview, :home_kit, :hotspot,
|
|
62
62
|
:hotspot_helper, :in_app_purchase, :inter_app_audio, :low_latency_hls, :managed_associated_domains, :maps, :multipath, :network_extension,
|
|
63
63
|
:nfc_tag_reading, :passbook, :personal_vpn, :push_notification, :sign_in_with_apple, :siri_kit, :system_extension, :user_management, :vpn_configuration, :wallet,
|
|
@@ -174,6 +174,11 @@ module Produce
|
|
|
174
174
|
bundle_id.update_capability(DATA_PROTECTION, enabled: on, settings: settings)
|
|
175
175
|
end
|
|
176
176
|
|
|
177
|
+
if options.declared_age_range
|
|
178
|
+
UI.message("\tDeclared Age Range")
|
|
179
|
+
bundle_id.update_capability(DECLARED_AGE_RANGE, enabled: on)
|
|
180
|
+
end
|
|
181
|
+
|
|
177
182
|
if options.extended_virtual_address_space
|
|
178
183
|
UI.message("\tExtended Virtual Address Space")
|
|
179
184
|
bundle_id.update_capability(EXTENDED_VIRTUAL_ADDRESSING, enabled: on)
|
data/scan/lib/scan/options.rb
CHANGED
|
@@ -512,6 +512,11 @@ module Scan
|
|
|
512
512
|
description: "Sets a custom path for Swift Package Manager dependencies",
|
|
513
513
|
type: String,
|
|
514
514
|
optional: true),
|
|
515
|
+
FastlaneCore::ConfigItem.new(key: :package_cache_path,
|
|
516
|
+
env_name: "SCAN_PACKAGE_CACHE_PATH",
|
|
517
|
+
description: "Sets a custom package cache path for Swift Package Manager dependencies",
|
|
518
|
+
type: String,
|
|
519
|
+
optional: true),
|
|
515
520
|
FastlaneCore::ConfigItem.new(key: :skip_package_dependencies_resolution,
|
|
516
521
|
env_name: "SCAN_SKIP_PACKAGE_DEPENDENCIES_RESOLUTION",
|
|
517
522
|
description: "Skips resolution of Swift Package Manager dependencies",
|
|
@@ -69,6 +69,14 @@ module Scan
|
|
|
69
69
|
options << "-enableAddressSanitizer #{config[:address_sanitizer] ? 'YES' : 'NO'}" unless config[:address_sanitizer].nil?
|
|
70
70
|
options << "-enableThreadSanitizer #{config[:thread_sanitizer] ? 'YES' : 'NO'}" unless config[:thread_sanitizer].nil?
|
|
71
71
|
if FastlaneCore::Helper.xcode_at_least?(11)
|
|
72
|
+
if config[:cloned_source_packages_path] && !options.include?("-clonedSourcePackagesDirPath #{config[:cloned_source_packages_path].shellescape}")
|
|
73
|
+
options << "-clonedSourcePackagesDirPath #{config[:cloned_source_packages_path].shellescape}"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
if config[:package_cache_path] && !options.include?("-packageCachePath #{config[:package_cache_path].shellescape}")
|
|
77
|
+
options << "-packageCachePath #{config[:package_cache_path].shellescape}"
|
|
78
|
+
end
|
|
79
|
+
|
|
72
80
|
options << "-testPlan '#{config[:testplan]}'" if config[:testplan]
|
|
73
81
|
|
|
74
82
|
# detect_values will ensure that these values are present as Arrays if
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'plist'
|
|
2
2
|
require 'fastlane_core/globals'
|
|
3
|
+
require 'fastlane_core/provisioning_profile'
|
|
3
4
|
|
|
4
5
|
require_relative 'module'
|
|
5
6
|
|
|
@@ -19,10 +20,10 @@ module Sigh
|
|
|
19
20
|
|
|
20
21
|
def self.install_profile(profile)
|
|
21
22
|
UI.message("Installing provisioning profile...")
|
|
22
|
-
profile_path =
|
|
23
|
+
profile_path = FastlaneCore::ProvisioningProfile.profiles_path
|
|
23
24
|
uuid = ENV["SIGH_UUID"] || ENV["SIGH_UDID"]
|
|
24
25
|
profile_filename = uuid + ".mobileprovision"
|
|
25
|
-
destination = profile_path
|
|
26
|
+
destination = File.join(profile_path, profile_filename)
|
|
26
27
|
|
|
27
28
|
# If the directory doesn't exist, make it first
|
|
28
29
|
unless File.directory?(profile_path)
|
|
@@ -126,8 +127,9 @@ module Sigh
|
|
|
126
127
|
end
|
|
127
128
|
|
|
128
129
|
def self.load_profiles
|
|
129
|
-
|
|
130
|
-
|
|
130
|
+
profiles_path = FastlaneCore::ProvisioningProfile.profiles_path
|
|
131
|
+
UI.message("Loading Provisioning profiles from #{profiles_path}")
|
|
132
|
+
profiles_path = File.join(profiles_path, "*.mobileprovision")
|
|
131
133
|
profile_paths = Dir[profiles_path]
|
|
132
134
|
|
|
133
135
|
profiles = []
|
data/sigh/lib/sigh/runner.rb
CHANGED
|
@@ -84,7 +84,7 @@ module Sigh
|
|
|
84
84
|
|
|
85
85
|
includes = 'bundleId'
|
|
86
86
|
|
|
87
|
-
unless Sigh.config[:skip_certificate_verification] || Sigh.config[:include_all_certificates]
|
|
87
|
+
unless (Sigh.config[:skip_certificate_verification] || Sigh.config[:include_all_certificates]) && Sigh.config[:cert_id].to_s.length == 0
|
|
88
88
|
includes += ',certificates'
|
|
89
89
|
end
|
|
90
90
|
|
|
@@ -105,6 +105,8 @@ module Sigh
|
|
|
105
105
|
|
|
106
106
|
# Take the provisioning profile name into account
|
|
107
107
|
results = filter_profiles_by_name(results) if Sigh.config[:provisioning_name].to_s.length > 0
|
|
108
|
+
# Take the cert_id into account
|
|
109
|
+
results = filter_profiles_by_cert_id(results) if Sigh.config[:cert_id].to_s.length > 0
|
|
108
110
|
return results if Sigh.config[:skip_certificate_verification] || Sigh.config[:include_all_certificates]
|
|
109
111
|
|
|
110
112
|
UI.message("Verifying certificates...")
|
|
@@ -199,6 +201,21 @@ module Sigh
|
|
|
199
201
|
profiles
|
|
200
202
|
end
|
|
201
203
|
|
|
204
|
+
def filter_profiles_by_cert_id(profiles)
|
|
205
|
+
filtered = profiles.find_all do |current_profile|
|
|
206
|
+
valid_cert_id = false
|
|
207
|
+
current_profile.certificates.each do |cert|
|
|
208
|
+
if cert.id == Sigh.config[:cert_id].to_s
|
|
209
|
+
valid_cert_id = true
|
|
210
|
+
else
|
|
211
|
+
UI.message("Provisioning Profile cert_id : '#{cert.id}' does not match given cert_id : '#{Sigh.config[:cert_id]}', skipping this one...")
|
|
212
|
+
end
|
|
213
|
+
end
|
|
214
|
+
valid_cert_id
|
|
215
|
+
end
|
|
216
|
+
filtered
|
|
217
|
+
end
|
|
218
|
+
|
|
202
219
|
def fetch_certificates(certificate_types)
|
|
203
220
|
filter = {
|
|
204
221
|
certificateType: certificate_types.join(',')
|
|
@@ -257,6 +257,11 @@ module Snapshot
|
|
|
257
257
|
description: "Sets a custom path for Swift Package Manager dependencies",
|
|
258
258
|
type: String,
|
|
259
259
|
optional: true),
|
|
260
|
+
FastlaneCore::ConfigItem.new(key: :package_cache_path,
|
|
261
|
+
env_name: "SNAPSHOT_PACKAGE_CACHE_PATH",
|
|
262
|
+
description: "Sets a custom package cache path for Swift Package Manager dependencies",
|
|
263
|
+
type: String,
|
|
264
|
+
optional: true),
|
|
260
265
|
FastlaneCore::ConfigItem.new(key: :skip_package_dependencies_resolution,
|
|
261
266
|
env_name: "SNAPSHOT_SKIP_PACKAGE_DEPENDENCIES_RESOLUTION",
|
|
262
267
|
description: "Skips resolution of Swift Package Manager dependencies",
|
|
@@ -8,34 +8,66 @@ module Spaceship
|
|
|
8
8
|
attr_accessor :alcohol_tobacco_or_drug_use_or_references
|
|
9
9
|
attr_accessor :contests
|
|
10
10
|
attr_accessor :gambling_simulated
|
|
11
|
-
attr_accessor :
|
|
11
|
+
attr_accessor :guns_or_other_weapons
|
|
12
|
+
attr_accessor :horror_or_fear_themes
|
|
13
|
+
attr_accessor :mature_or_suggestive_themes
|
|
12
14
|
attr_accessor :medical_or_treatment_information
|
|
13
15
|
attr_accessor :profanity_or_crude_humor
|
|
14
16
|
attr_accessor :sexual_content_graphic_and_nudity
|
|
15
17
|
attr_accessor :sexual_content_or_nudity
|
|
16
|
-
attr_accessor :horror_or_fear_themes
|
|
17
|
-
attr_accessor :mature_or_suggestive_themes
|
|
18
18
|
attr_accessor :violence_cartoon_or_fantasy
|
|
19
19
|
attr_accessor :violence_realistic_prolonged_graphic_or_sadistic
|
|
20
20
|
attr_accessor :violence_realistic
|
|
21
21
|
|
|
22
22
|
# Boolean
|
|
23
|
+
attr_accessor :advertising
|
|
24
|
+
attr_accessor :age_assurance
|
|
23
25
|
attr_accessor :gambling
|
|
26
|
+
attr_accessor :health_or_wellness_topics
|
|
24
27
|
attr_accessor :loot_box
|
|
28
|
+
attr_accessor :messaging_and_chat
|
|
29
|
+
attr_accessor :parental_controls
|
|
25
30
|
attr_accessor :unrestricted_web_access
|
|
31
|
+
attr_accessor :user_generated_content
|
|
32
|
+
|
|
33
|
+
# AgeRating
|
|
34
|
+
attr_accessor :age_rating_override_v2
|
|
35
|
+
|
|
36
|
+
# KoreaAgeRating
|
|
37
|
+
attr_accessor :korea_age_rating_override
|
|
26
38
|
|
|
27
39
|
# KidsAge
|
|
28
40
|
attr_accessor :kids_age_band
|
|
29
41
|
|
|
42
|
+
# URL
|
|
43
|
+
attr_accessor :developer_age_rating_info_url
|
|
44
|
+
|
|
30
45
|
# Deprecated as of App Store Connect API 1.3
|
|
31
46
|
attr_accessor :gambling_and_contests
|
|
32
47
|
|
|
33
48
|
module Rating
|
|
34
49
|
NONE = "NONE"
|
|
50
|
+
INFREQUENT = "INFREQUENT"
|
|
35
51
|
INFREQUENT_OR_MILD = "INFREQUENT_OR_MILD"
|
|
52
|
+
FREQUENT = "FREQUENT"
|
|
36
53
|
FREQUENT_OR_INTENSE = "FREQUENT_OR_INTENSE"
|
|
37
54
|
end
|
|
38
55
|
|
|
56
|
+
module AgeRating
|
|
57
|
+
NONE = "NONE"
|
|
58
|
+
NINE_PLUS = "NINE_PLUS"
|
|
59
|
+
THIRTEEN_PLUS = "THIRTEEN_PLUS"
|
|
60
|
+
SIXTEEN_PLUS = "SIXTEEN_PLUS"
|
|
61
|
+
EIGHTEEN_PLUS = "EIGHTEEN_PLUS"
|
|
62
|
+
UNRATED = "UNRATED"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
module KoreaAgeRating
|
|
66
|
+
NONE = "NONE"
|
|
67
|
+
FIFTEEN_PLUS = "FIFTEEN_PLUS"
|
|
68
|
+
NINETEEN_PLUS = "NINETEEN_PLUS"
|
|
69
|
+
end
|
|
70
|
+
|
|
39
71
|
module KidsAge
|
|
40
72
|
FIVE_AND_UNDER = "FIVE_AND_UNDER"
|
|
41
73
|
SIX_TO_EIGHT = "SIX_TO_EIGHT"
|
|
@@ -43,25 +75,34 @@ module Spaceship
|
|
|
43
75
|
end
|
|
44
76
|
|
|
45
77
|
attr_mapping({
|
|
78
|
+
"advertising" => "advertising",
|
|
79
|
+
"ageAssurance" => "age_assurance",
|
|
80
|
+
"ageRatingOverrideV2" => "age_rating_override_v2",
|
|
46
81
|
"alcoholTobaccoOrDrugUseOrReferences" => "alcohol_tobacco_or_drug_use_or_references",
|
|
47
82
|
"contests" => "contests",
|
|
83
|
+
"developerAgeRatingInfoUrl" => "developer_age_rating_info_url",
|
|
48
84
|
"gambling" => "gambling",
|
|
49
85
|
"gamblingSimulated" => "gambling_simulated",
|
|
86
|
+
"gunsOrOtherWeapons" => "guns_or_other_weapons",
|
|
87
|
+
"healthOrWellnessTopics" => "health_or_wellness_topics",
|
|
88
|
+
"horrorOrFearThemes" => "horror_or_fear_themes",
|
|
89
|
+
"kidsAgeBand" => "kids_age_band",
|
|
50
90
|
"koreaAgeRatingOverride" => "korea_age_rating_override",
|
|
51
91
|
"lootBox" => "loot_box",
|
|
92
|
+
"matureOrSuggestiveThemes" => "mature_or_suggestive_themes",
|
|
52
93
|
"medicalOrTreatmentInformation" => "medical_or_treatment_information",
|
|
94
|
+
"messagingAndChat" => "messaging_and_chat",
|
|
95
|
+
"parentalControls" => "parental_controls",
|
|
53
96
|
"profanityOrCrudeHumor" => "profanity_or_crude_humor",
|
|
54
97
|
"sexualContentGraphicAndNudity" => "sexual_content_graphic_and_nudity",
|
|
55
98
|
"sexualContentOrNudity" => "sexual_content_or_nudity",
|
|
56
|
-
"horrorOrFearThemes" => "horror_or_fear_themes",
|
|
57
|
-
"matureOrSuggestiveThemes" => "mature_or_suggestive_themes",
|
|
58
99
|
"unrestrictedWebAccess" => "unrestricted_web_access",
|
|
100
|
+
"userGeneratedContent" => "user_generated_content",
|
|
59
101
|
"violenceCartoonOrFantasy" => "violence_cartoon_or_fantasy",
|
|
60
102
|
"violenceRealisticProlongedGraphicOrSadistic" => "violence_realistic_prolonged_graphic_or_sadistic",
|
|
61
103
|
"violenceRealistic" => "violence_realistic",
|
|
62
|
-
"kidsAgeBand" => "kids_age_band",
|
|
63
104
|
|
|
64
|
-
# Deprecated as of App Store Connect API 1.3
|
|
105
|
+
# Deprecated as of App Store Connect API 1.3 - No longer accepted by API
|
|
65
106
|
"gamblingAndContests" => "gambling_and_contests",
|
|
66
107
|
})
|
|
67
108
|
|
|
@@ -124,7 +165,20 @@ module Spaceship
|
|
|
124
165
|
end
|
|
125
166
|
|
|
126
167
|
def self.map_value_from_itc(key, value)
|
|
127
|
-
|
|
168
|
+
boolean_keys = [
|
|
169
|
+
"advertising",
|
|
170
|
+
"ageAssurance",
|
|
171
|
+
"gambling",
|
|
172
|
+
"gamblingAndContests",
|
|
173
|
+
"healthOrWellnessTopics",
|
|
174
|
+
"lootBox",
|
|
175
|
+
"messagingAndChat",
|
|
176
|
+
"parentalControls",
|
|
177
|
+
"unrestrictedWebAccess",
|
|
178
|
+
"userGeneratedContent"
|
|
179
|
+
]
|
|
180
|
+
|
|
181
|
+
if boolean_keys.include?(key)
|
|
128
182
|
new_value = LEGACY_BOOLEAN_VALUE_ITC_MAP[value]
|
|
129
183
|
return value if new_value.nil?
|
|
130
184
|
return new_value
|
|
@@ -33,15 +33,15 @@ module Spaceship
|
|
|
33
33
|
client ||= Spaceship::ConnectAPI
|
|
34
34
|
attributes = reverse_attr_mapping(attributes)
|
|
35
35
|
client.patch_app_info_localization(app_info_localization_id: id, attributes: attributes)
|
|
36
|
-
rescue
|
|
37
|
-
raise Spaceship::AppStoreLocalizationError,
|
|
36
|
+
rescue => error
|
|
37
|
+
raise Spaceship::AppStoreLocalizationError.new(@locale, error)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def delete!(client: nil, filter: {}, includes: nil, limit: nil, sort: nil)
|
|
41
41
|
client ||= Spaceship::ConnectAPI
|
|
42
42
|
client.delete_app_info_localization(app_info_localization_id: id)
|
|
43
|
-
rescue
|
|
44
|
-
raise Spaceship::AppStoreLocalizationError,
|
|
43
|
+
rescue => error
|
|
44
|
+
raise Spaceship::AppStoreLocalizationError.new(@locale, error)
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
end
|
|
@@ -43,12 +43,15 @@ module Spaceship
|
|
|
43
43
|
APP_WATCH_SERIES_3 = "APP_WATCH_SERIES_3"
|
|
44
44
|
APP_WATCH_SERIES_4 = "APP_WATCH_SERIES_4"
|
|
45
45
|
APP_WATCH_SERIES_7 = "APP_WATCH_SERIES_7"
|
|
46
|
+
APP_WATCH_SERIES_10 = "APP_WATCH_SERIES_10"
|
|
46
47
|
APP_WATCH_ULTRA = "APP_WATCH_ULTRA"
|
|
47
48
|
|
|
48
49
|
APP_APPLE_TV = "APP_APPLE_TV"
|
|
49
50
|
|
|
50
51
|
APP_DESKTOP = "APP_DESKTOP"
|
|
51
52
|
|
|
53
|
+
APP_APPLE_VISION_PRO = "APP_APPLE_VISION_PRO"
|
|
54
|
+
|
|
52
55
|
ALL_IMESSAGE = [
|
|
53
56
|
IMESSAGE_APP_IPHONE_40,
|
|
54
57
|
IMESSAGE_APP_IPHONE_47,
|
|
@@ -98,9 +101,12 @@ module Spaceship
|
|
|
98
101
|
APP_WATCH_SERIES_3,
|
|
99
102
|
APP_WATCH_SERIES_4,
|
|
100
103
|
APP_WATCH_SERIES_7,
|
|
104
|
+
APP_WATCH_SERIES_10,
|
|
101
105
|
APP_WATCH_ULTRA,
|
|
102
106
|
|
|
103
|
-
APP_DESKTOP
|
|
107
|
+
APP_DESKTOP,
|
|
108
|
+
|
|
109
|
+
APP_APPLE_VISION_PRO
|
|
104
110
|
]
|
|
105
111
|
end
|
|
106
112
|
|
|
@@ -44,31 +44,31 @@ module Spaceship
|
|
|
44
44
|
client ||= Spaceship::ConnectAPI
|
|
45
45
|
resp = client.get_app_store_version_localization(app_store_version_localization_id: app_store_version_localization_id, filter: filter, includes: includes, limit: limit, sort: sort)
|
|
46
46
|
return resp.to_models
|
|
47
|
-
rescue
|
|
48
|
-
raise Spaceship::AppStoreLocalizationError,
|
|
47
|
+
rescue => error
|
|
48
|
+
raise Spaceship::AppStoreLocalizationError.new(@locale, error)
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
def self.all(client: nil, app_store_version_id: nil, filter: {}, includes: nil, limit: nil, sort: nil)
|
|
52
52
|
client ||= Spaceship::ConnectAPI
|
|
53
53
|
resp = client.get_app_store_version_localizations(app_store_version_id: app_store_version_id, filter: filter, includes: includes, limit: limit, sort: sort)
|
|
54
54
|
return resp.to_models
|
|
55
|
-
rescue
|
|
56
|
-
raise Spaceship::AppStoreLocalizationError,
|
|
55
|
+
rescue => error
|
|
56
|
+
raise Spaceship::AppStoreLocalizationError.new(@locale, error)
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
def update(client: nil, attributes: nil)
|
|
60
60
|
client ||= Spaceship::ConnectAPI
|
|
61
61
|
attributes = reverse_attr_mapping(attributes)
|
|
62
62
|
client.patch_app_store_version_localization(app_store_version_localization_id: id, attributes: attributes)
|
|
63
|
-
rescue
|
|
64
|
-
raise Spaceship::AppStoreLocalizationError,
|
|
63
|
+
rescue => error
|
|
64
|
+
raise Spaceship::AppStoreLocalizationError.new(@locale, error)
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def delete!(client: nil, filter: {}, includes: nil, limit: nil, sort: nil)
|
|
68
68
|
client ||= Spaceship::ConnectAPI
|
|
69
69
|
client.delete_app_store_version_localization(app_store_version_localization_id: id)
|
|
70
|
-
rescue
|
|
71
|
-
raise Spaceship::AppStoreLocalizationError,
|
|
70
|
+
rescue => error
|
|
71
|
+
raise Spaceship::AppStoreLocalizationError.new(@locale, error)
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
#
|
|
@@ -80,16 +80,16 @@ module Spaceship
|
|
|
80
80
|
filter ||= {}
|
|
81
81
|
filter["appStoreVersionLocalization"] = id
|
|
82
82
|
return Spaceship::ConnectAPI::AppPreviewSet.all(client: client, filter: filter, includes: includes, limit: limit, sort: sort)
|
|
83
|
-
rescue
|
|
84
|
-
raise Spaceship::AppStoreAppPreviewError,
|
|
83
|
+
rescue => error
|
|
84
|
+
raise Spaceship::AppStoreAppPreviewError.new(@locale, error)
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
def create_app_preview_set(client: nil, attributes: nil)
|
|
88
88
|
client ||= Spaceship::ConnectAPI
|
|
89
89
|
resp = client.post_app_preview_set(app_store_version_localization_id: id, attributes: attributes)
|
|
90
90
|
return resp.to_models.first
|
|
91
|
-
rescue
|
|
92
|
-
raise Spaceship::AppStoreAppPreviewError,
|
|
91
|
+
rescue => error
|
|
92
|
+
raise Spaceship::AppStoreAppPreviewError.new(@locale, error)
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
#
|
|
@@ -99,16 +99,16 @@ module Spaceship
|
|
|
99
99
|
def get_app_screenshot_sets(client: nil, filter: {}, includes: "appScreenshots", limit: nil, sort: nil)
|
|
100
100
|
client ||= Spaceship::ConnectAPI
|
|
101
101
|
return Spaceship::ConnectAPI::AppScreenshotSet.all(client: client, app_store_version_localization_id: id, filter: filter, includes: includes, limit: limit, sort: sort)
|
|
102
|
-
rescue
|
|
103
|
-
raise Spaceship::AppStoreScreenshotError,
|
|
102
|
+
rescue => error
|
|
103
|
+
raise Spaceship::AppStoreScreenshotError.new(@locale, error)
|
|
104
104
|
end
|
|
105
105
|
|
|
106
106
|
def create_app_screenshot_set(client: nil, attributes: nil)
|
|
107
107
|
client ||= Spaceship::ConnectAPI
|
|
108
108
|
resp = client.post_app_screenshot_set(app_store_version_localization_id: id, attributes: attributes)
|
|
109
109
|
return resp.to_models.first
|
|
110
|
-
rescue
|
|
111
|
-
raise Spaceship::AppStoreScreenshotError,
|
|
110
|
+
rescue => error
|
|
111
|
+
raise Spaceship::AppStoreScreenshotError.new(@locale, error)
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
end
|
|
@@ -116,9 +116,11 @@ module Spaceship
|
|
|
116
116
|
|
|
117
117
|
# Base class for errors coming from App Store Connect locale changes
|
|
118
118
|
class AppStoreLocaleError < BasicPreferredInfoError
|
|
119
|
-
def initialize(
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
def initialize(locale, error)
|
|
120
|
+
error_message = error.respond_to?(:message) ? error.message : error.to_s
|
|
121
|
+
locale_str = locale || "unknown"
|
|
122
|
+
@message = "An exception has occurred for locale: #{locale_str}.\nError: #{error_message}"
|
|
123
|
+
super(@message)
|
|
122
124
|
end
|
|
123
125
|
|
|
124
126
|
# no need to search github issues since the error is specific
|
|
@@ -130,21 +132,21 @@ module Spaceship
|
|
|
130
132
|
# Raised for localized text errors from App Store Connect
|
|
131
133
|
class AppStoreLocalizationError < AppStoreLocaleError
|
|
132
134
|
def preferred_error_info
|
|
133
|
-
"#{@message}
|
|
135
|
+
"#{@message}\nCheck the localization requirements here: https://developer.apple.com/help/app-store-connect/manage-app-information/localize-app-information"
|
|
134
136
|
end
|
|
135
137
|
end
|
|
136
138
|
|
|
137
139
|
# Raised for localized screenshots errors from App Store Connect
|
|
138
140
|
class AppStoreScreenshotError < AppStoreLocaleError
|
|
139
141
|
def preferred_error_info
|
|
140
|
-
"#{@message}
|
|
142
|
+
"#{@message}\nCheck the screenshot requirements here: https://developer.apple.com/help/app-store-connect/reference/screenshot-specifications"
|
|
141
143
|
end
|
|
142
144
|
end
|
|
143
145
|
|
|
144
146
|
# Raised for localized app preview errors from App Store Connect
|
|
145
147
|
class AppStoreAppPreviewError < AppStoreLocaleError
|
|
146
148
|
def preferred_error_info
|
|
147
|
-
"#{@message}
|
|
149
|
+
"#{@message}\nCheck the app preview requirements here: https://developer.apple.com/help/app-store-connect/reference/app-preview-specifications"
|
|
148
150
|
end
|
|
149
151
|
end
|
|
150
152
|
end
|
data/supply/lib/supply/client.rb
CHANGED
|
@@ -46,7 +46,24 @@ module Supply
|
|
|
46
46
|
# Initializes the service and its auth_client using the specified information
|
|
47
47
|
# @param service_account_json: The raw service account Json data
|
|
48
48
|
def initialize(service_account_json: nil, params: nil)
|
|
49
|
-
|
|
49
|
+
# decode the json and check its type
|
|
50
|
+
begin
|
|
51
|
+
json_content = service_account_json.read
|
|
52
|
+
google_credentials = JSON.parse(json_content)
|
|
53
|
+
service_account_json.rewind
|
|
54
|
+
rescue JSON::ParserError
|
|
55
|
+
UI.user_error!("Invalid Google Credentials file provided - unable to parse json.")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
# use correct credential class based on type
|
|
59
|
+
case google_credentials['type']
|
|
60
|
+
when "external_account"
|
|
61
|
+
auth_client = Google::Auth::ExternalAccount::Credentials.make_creds(json_key_io: service_account_json, scope: self.class::SCOPE)
|
|
62
|
+
when "service_account"
|
|
63
|
+
auth_client = Google::Auth::ServiceAccountCredentials.make_creds(json_key_io: service_account_json, scope: self.class::SCOPE)
|
|
64
|
+
else
|
|
65
|
+
UI.user_error!("Invalid Google Credentials file provided - no credential type found.")
|
|
66
|
+
end
|
|
50
67
|
|
|
51
68
|
UI.verbose("Fetching a new access token from Google...")
|
|
52
69
|
|
metadata
CHANGED
|
@@ -1,39 +1,40 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fastlane
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.230.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
+
- Aaron Brager
|
|
7
8
|
- Felix Krause
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
9
|
+
- Satoshi Namai
|
|
10
|
+
- Stefan Natchev
|
|
11
|
+
- Łukasz Grabowski
|
|
12
|
+
- Luka Mirosevic
|
|
13
|
+
- Connor Tumbleson
|
|
12
14
|
- Danielle Tomlinson
|
|
13
|
-
- Jérôme Lacoste
|
|
14
|
-
- Aaron Brager
|
|
15
|
-
- Maksym Grebenets
|
|
16
15
|
- Max Ott
|
|
17
|
-
-
|
|
18
|
-
- Łukasz Grabowski
|
|
19
|
-
- Jimmy Dee
|
|
20
|
-
- Manu Wallner
|
|
21
|
-
- Kohki Miki
|
|
22
|
-
- Josh Holtz
|
|
23
|
-
- Satoshi Namai
|
|
16
|
+
- Fumiya Nakamura
|
|
24
17
|
- Olivier Halligon
|
|
25
|
-
- Luka Mirosevic
|
|
26
18
|
- Matthew Ellis
|
|
27
|
-
-
|
|
19
|
+
- Jorge Revuelta H
|
|
20
|
+
- Jérôme Lacoste
|
|
21
|
+
- Jimmy Dee
|
|
22
|
+
- Daniel Jankowski
|
|
28
23
|
- Joshua Liebowitz
|
|
29
|
-
-
|
|
24
|
+
- Manu Wallner
|
|
30
25
|
- Jan Piotrowski
|
|
31
|
-
- Fumiya Nakamura
|
|
32
26
|
- Roger Oba
|
|
27
|
+
- Helmut Januschka
|
|
28
|
+
- Andrew McBurney
|
|
29
|
+
- Iulian Onofrei
|
|
30
|
+
- Josh Holtz
|
|
31
|
+
- Manish Rathi
|
|
32
|
+
- Kohki Miki
|
|
33
|
+
- Maksym Grebenets
|
|
33
34
|
autorequire:
|
|
34
35
|
bindir: bin
|
|
35
36
|
cert_chain: []
|
|
36
|
-
date: 2025-
|
|
37
|
+
date: 2025-12-18 00:00:00.000000000 Z
|
|
37
38
|
dependencies:
|
|
38
39
|
- !ruby/object:Gem::Dependency
|
|
39
40
|
name: addressable
|
|
@@ -736,19 +737,33 @@ dependencies:
|
|
|
736
737
|
- !ruby/object:Gem::Version
|
|
737
738
|
version: 0.4.1
|
|
738
739
|
- !ruby/object:Gem::Dependency
|
|
739
|
-
name:
|
|
740
|
+
name: abbrev
|
|
740
741
|
requirement: !ruby/object:Gem::Requirement
|
|
741
742
|
requirements:
|
|
742
743
|
- - "~>"
|
|
743
744
|
- !ruby/object:Gem::Version
|
|
744
|
-
version: 0.
|
|
745
|
+
version: 0.1.2
|
|
745
746
|
type: :runtime
|
|
746
747
|
prerelease: false
|
|
747
748
|
version_requirements: !ruby/object:Gem::Requirement
|
|
748
749
|
requirements:
|
|
749
750
|
- - "~>"
|
|
750
751
|
- !ruby/object:Gem::Version
|
|
751
|
-
version: 0.
|
|
752
|
+
version: 0.1.2
|
|
753
|
+
- !ruby/object:Gem::Dependency
|
|
754
|
+
name: base64
|
|
755
|
+
requirement: !ruby/object:Gem::Requirement
|
|
756
|
+
requirements:
|
|
757
|
+
- - "~>"
|
|
758
|
+
- !ruby/object:Gem::Version
|
|
759
|
+
version: 0.2.0
|
|
760
|
+
type: :runtime
|
|
761
|
+
prerelease: false
|
|
762
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
763
|
+
requirements:
|
|
764
|
+
- - "~>"
|
|
765
|
+
- !ruby/object:Gem::Version
|
|
766
|
+
version: 0.2.0
|
|
752
767
|
- !ruby/object:Gem::Dependency
|
|
753
768
|
name: csv
|
|
754
769
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -764,19 +779,53 @@ dependencies:
|
|
|
764
779
|
- !ruby/object:Gem::Version
|
|
765
780
|
version: '3.3'
|
|
766
781
|
- !ruby/object:Gem::Dependency
|
|
767
|
-
name:
|
|
782
|
+
name: mutex_m
|
|
768
783
|
requirement: !ruby/object:Gem::Requirement
|
|
769
784
|
requirements:
|
|
770
785
|
- - "~>"
|
|
771
786
|
- !ruby/object:Gem::Version
|
|
772
|
-
version: 0.
|
|
787
|
+
version: 0.3.0
|
|
773
788
|
type: :runtime
|
|
774
789
|
prerelease: false
|
|
775
790
|
version_requirements: !ruby/object:Gem::Requirement
|
|
776
791
|
requirements:
|
|
777
792
|
- - "~>"
|
|
778
793
|
- !ruby/object:Gem::Version
|
|
779
|
-
version: 0.
|
|
794
|
+
version: 0.3.0
|
|
795
|
+
- !ruby/object:Gem::Dependency
|
|
796
|
+
name: nkf
|
|
797
|
+
requirement: !ruby/object:Gem::Requirement
|
|
798
|
+
requirements:
|
|
799
|
+
- - "~>"
|
|
800
|
+
- !ruby/object:Gem::Version
|
|
801
|
+
version: 0.2.0
|
|
802
|
+
type: :runtime
|
|
803
|
+
prerelease: false
|
|
804
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
805
|
+
requirements:
|
|
806
|
+
- - "~>"
|
|
807
|
+
- !ruby/object:Gem::Version
|
|
808
|
+
version: 0.2.0
|
|
809
|
+
- !ruby/object:Gem::Dependency
|
|
810
|
+
name: logger
|
|
811
|
+
requirement: !ruby/object:Gem::Requirement
|
|
812
|
+
requirements:
|
|
813
|
+
- - ">="
|
|
814
|
+
- !ruby/object:Gem::Version
|
|
815
|
+
version: '1.6'
|
|
816
|
+
- - "<"
|
|
817
|
+
- !ruby/object:Gem::Version
|
|
818
|
+
version: '2.0'
|
|
819
|
+
type: :runtime
|
|
820
|
+
prerelease: false
|
|
821
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
822
|
+
requirements:
|
|
823
|
+
- - ">="
|
|
824
|
+
- !ruby/object:Gem::Version
|
|
825
|
+
version: '1.6'
|
|
826
|
+
- - "<"
|
|
827
|
+
- !ruby/object:Gem::Version
|
|
828
|
+
version: '2.0'
|
|
780
829
|
description: The easiest way to automate beta deployments and releases for your iOS
|
|
781
830
|
and Android apps
|
|
782
831
|
email:
|
|
@@ -1110,7 +1159,6 @@ files:
|
|
|
1110
1159
|
- fastlane/lib/fastlane/commands_generator.rb
|
|
1111
1160
|
- fastlane/lib/fastlane/configuration_helper.rb
|
|
1112
1161
|
- fastlane/lib/fastlane/console.rb
|
|
1113
|
-
- fastlane/lib/fastlane/core_ext/bundler_monkey_patch.rb
|
|
1114
1162
|
- fastlane/lib/fastlane/documentation/actions_list.rb
|
|
1115
1163
|
- fastlane/lib/fastlane/documentation/docs_generator.rb
|
|
1116
1164
|
- fastlane/lib/fastlane/documentation/markdown_docs_generator.rb
|
|
@@ -1153,12 +1201,10 @@ files:
|
|
|
1153
1201
|
- fastlane/lib/fastlane/plugins/plugin_update_manager.rb
|
|
1154
1202
|
- fastlane/lib/fastlane/plugins/plugins.rb
|
|
1155
1203
|
- fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb
|
|
1156
|
-
- fastlane/lib/fastlane/plugins/template/.circleci/config.yml
|
|
1157
1204
|
- fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml
|
|
1158
1205
|
- fastlane/lib/fastlane/plugins/template/.gitignore
|
|
1159
1206
|
- fastlane/lib/fastlane/plugins/template/.rspec
|
|
1160
1207
|
- fastlane/lib/fastlane/plugins/template/.rubocop.yml
|
|
1161
|
-
- fastlane/lib/fastlane/plugins/template/.travis.yml
|
|
1162
1208
|
- fastlane/lib/fastlane/plugins/template/Gemfile.erb
|
|
1163
1209
|
- fastlane/lib/fastlane/plugins/template/LICENSE.erb
|
|
1164
1210
|
- fastlane/lib/fastlane/plugins/template/README.md.erb
|