fastlane 2.229.1 → 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 +102 -96
- 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 +43 -25
- 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
|
-
-
|
|
8
|
-
-
|
|
7
|
+
- Aaron Brager
|
|
8
|
+
- Felix Krause
|
|
9
|
+
- Satoshi Namai
|
|
9
10
|
- Stefan Natchev
|
|
10
|
-
-
|
|
11
|
-
- Olivier Halligon
|
|
11
|
+
- Łukasz Grabowski
|
|
12
12
|
- Luka Mirosevic
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
- Helmut Januschka
|
|
16
|
-
- Manu Wallner
|
|
17
|
-
- Josh Holtz
|
|
18
|
-
- Iulian Onofrei
|
|
13
|
+
- Connor Tumbleson
|
|
14
|
+
- Danielle Tomlinson
|
|
19
15
|
- Max Ott
|
|
20
|
-
- Łukasz Grabowski
|
|
21
|
-
- Daniel Jankowski
|
|
22
|
-
- Maksym Grebenets
|
|
23
|
-
- Roger Oba
|
|
24
|
-
- Andrew McBurney
|
|
25
|
-
- Jorge Revuelta H
|
|
26
|
-
- Satoshi Namai
|
|
27
|
-
- Felix Krause
|
|
28
|
-
- Jan Piotrowski
|
|
29
16
|
- Fumiya Nakamura
|
|
30
|
-
-
|
|
17
|
+
- Olivier Halligon
|
|
31
18
|
- Matthew Ellis
|
|
19
|
+
- Jorge Revuelta H
|
|
20
|
+
- Jérôme Lacoste
|
|
21
|
+
- Jimmy Dee
|
|
22
|
+
- Daniel Jankowski
|
|
32
23
|
- Joshua Liebowitz
|
|
24
|
+
- Manu Wallner
|
|
25
|
+
- Jan Piotrowski
|
|
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
|
|
@@ -805,6 +806,26 @@ dependencies:
|
|
|
805
806
|
- - "~>"
|
|
806
807
|
- !ruby/object:Gem::Version
|
|
807
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'
|
|
808
829
|
description: The easiest way to automate beta deployments and releases for your iOS
|
|
809
830
|
and Android apps
|
|
810
831
|
email:
|
|
@@ -1138,7 +1159,6 @@ files:
|
|
|
1138
1159
|
- fastlane/lib/fastlane/commands_generator.rb
|
|
1139
1160
|
- fastlane/lib/fastlane/configuration_helper.rb
|
|
1140
1161
|
- fastlane/lib/fastlane/console.rb
|
|
1141
|
-
- fastlane/lib/fastlane/core_ext/bundler_monkey_patch.rb
|
|
1142
1162
|
- fastlane/lib/fastlane/documentation/actions_list.rb
|
|
1143
1163
|
- fastlane/lib/fastlane/documentation/docs_generator.rb
|
|
1144
1164
|
- fastlane/lib/fastlane/documentation/markdown_docs_generator.rb
|
|
@@ -1181,12 +1201,10 @@ files:
|
|
|
1181
1201
|
- fastlane/lib/fastlane/plugins/plugin_update_manager.rb
|
|
1182
1202
|
- fastlane/lib/fastlane/plugins/plugins.rb
|
|
1183
1203
|
- fastlane/lib/fastlane/plugins/template/%gem_name%.gemspec.erb
|
|
1184
|
-
- fastlane/lib/fastlane/plugins/template/.circleci/config.yml
|
|
1185
1204
|
- fastlane/lib/fastlane/plugins/template/.github/workflows/test.yml
|
|
1186
1205
|
- fastlane/lib/fastlane/plugins/template/.gitignore
|
|
1187
1206
|
- fastlane/lib/fastlane/plugins/template/.rspec
|
|
1188
1207
|
- fastlane/lib/fastlane/plugins/template/.rubocop.yml
|
|
1189
|
-
- fastlane/lib/fastlane/plugins/template/.travis.yml
|
|
1190
1208
|
- fastlane/lib/fastlane/plugins/template/Gemfile.erb
|
|
1191
1209
|
- fastlane/lib/fastlane/plugins/template/LICENSE.erb
|
|
1192
1210
|
- fastlane/lib/fastlane/plugins/template/README.md.erb
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# https://github.com/bundler/bundler/issues/4368
|
|
2
|
-
#
|
|
3
|
-
# There is an issue with RubyGems 2.6.2 where it attempts to call Bundler::SpecSet#size, which doesn't exist.
|
|
4
|
-
# If a gem is not installed, a `Gem::Specification.find_by_name` call will trigger this problem.
|
|
5
|
-
if Object.const_defined?(:Bundler) &&
|
|
6
|
-
Bundler.const_defined?(:SpecSet) &&
|
|
7
|
-
Bundler::SpecSet.instance_methods.include?(:length) &&
|
|
8
|
-
!Bundler::SpecSet.instance_methods.include?(:size)
|
|
9
|
-
module Bundler
|
|
10
|
-
class SpecSet
|
|
11
|
-
alias size length
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
# Ruby CircleCI 2.0 configuration file
|
|
2
|
-
#
|
|
3
|
-
# Check https://circleci.com/docs/2.0/language-ruby/ for more details
|
|
4
|
-
#
|
|
5
|
-
version: 2
|
|
6
|
-
jobs:
|
|
7
|
-
build:
|
|
8
|
-
docker:
|
|
9
|
-
# specify the version you desire here
|
|
10
|
-
- image: circleci/ruby:2.5
|
|
11
|
-
|
|
12
|
-
working_directory: ~/repo
|
|
13
|
-
|
|
14
|
-
steps:
|
|
15
|
-
- checkout
|
|
16
|
-
|
|
17
|
-
# Download and cache dependencies
|
|
18
|
-
- restore_cache:
|
|
19
|
-
keys:
|
|
20
|
-
- v1-dependencies-{{ checksum "Gemfile" }}
|
|
21
|
-
# fallback to using the latest cache if no exact match is found
|
|
22
|
-
- v1-dependencies-
|
|
23
|
-
|
|
24
|
-
- run:
|
|
25
|
-
name: install dependencies
|
|
26
|
-
command: bundle check || bundle install --jobs=4 --retry=3 --path vendor/bundle
|
|
27
|
-
|
|
28
|
-
- save_cache:
|
|
29
|
-
paths:
|
|
30
|
-
- ./vendor
|
|
31
|
-
key: v1-dependencies-{{ checksum "Gemfile" }}
|
|
32
|
-
|
|
33
|
-
# run tests!
|
|
34
|
-
- run:
|
|
35
|
-
name: run tests
|
|
36
|
-
command: bundle exec rake
|
|
37
|
-
|
|
38
|
-
# collect reports
|
|
39
|
-
- store_test_results:
|
|
40
|
-
path: ~/repo/test-results
|
|
41
|
-
- store_artifacts:
|
|
42
|
-
path: ~/repo/test-results
|
|
43
|
-
destination: test-results
|