fastlane 2.210.0 → 2.211.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 +100 -100
- data/deliver/lib/deliver/app_screenshot.rb +17 -0
- data/deliver/lib/deliver/runner.rb +5 -2
- data/fastlane/lib/fastlane/actions/docs/build_app.md +5 -5
- data/fastlane/lib/fastlane/actions/docs/run_tests.md +1 -1
- data/fastlane/lib/fastlane/actions/update_code_signing_settings.rb +14 -4
- data/fastlane/lib/fastlane/actions/xcode_install.rb +5 -1
- data/fastlane/lib/fastlane/actions/xcode_select.rb +1 -1
- data/fastlane/lib/fastlane/actions/xcodes.rb +137 -0
- data/fastlane/lib/fastlane/actions/xcversion.rb +10 -15
- data/fastlane/lib/fastlane/helper/xcodes_helper.rb +28 -0
- data/fastlane/lib/fastlane/helper/xcversion_helper.rb +0 -9
- 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 +66 -3
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +5 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
- data/fastlane/swift/formatting/Brewfile.lock.json +20 -15
- data/fastlane_core/lib/fastlane_core/cert_checker.rb +2 -2
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +2 -3
- data/frameit/lib/frameit/device.rb +1 -1
- data/match/lib/match/change_password.rb +2 -0
- data/match/lib/match/commands_generator.rb +2 -1
- data/match/lib/match/generator.rb +1 -0
- data/match/lib/match/importer.rb +2 -0
- data/match/lib/match/migrate.rb +4 -3
- data/match/lib/match/nuke.rb +2 -0
- data/match/lib/match/options.rb +5 -0
- data/match/lib/match/runner.rb +5 -2
- data/pilot/lib/pilot/build_manager.rb +5 -2
- data/sigh/lib/sigh/options.rb +5 -0
- data/sigh/lib/sigh/runner.rb +3 -1
- data/snapshot/lib/assets/SnapshotHelper.swift +2 -2
- data/spaceship/lib/spaceship/connect_api/models/actor.rb +26 -0
- data/spaceship/lib/spaceship/connect_api/models/app_screenshot_set.rb +5 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/app_store_version_localization.rb +10 -10
- data/spaceship/lib/spaceship/connect_api/models/device.rb +3 -0
- data/spaceship/lib/spaceship/connect_api/models/resolution_center_message.rb +29 -0
- data/spaceship/lib/spaceship/connect_api/models/resolution_center_thread.rb +67 -0
- data/spaceship/lib/spaceship/connect_api/models/review_rejection.rb +19 -0
- data/spaceship/lib/spaceship/connect_api/models/review_submission.rb +12 -0
- data/spaceship/lib/spaceship/connect_api/token.rb +2 -5
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +23 -0
- data/spaceship/lib/spaceship/connect_api.rb +5 -0
- metadata +25 -19
@@ -2,40 +2,45 @@
|
|
2
2
|
"entries": {
|
3
3
|
"brew": {
|
4
4
|
"swiftformat": {
|
5
|
-
"version": "0.
|
5
|
+
"version": "0.50.3",
|
6
6
|
"bottle": {
|
7
7
|
"rebuild": 0,
|
8
8
|
"root_url": "https://ghcr.io/v2/homebrew/core",
|
9
9
|
"files": {
|
10
|
+
"arm64_ventura": {
|
11
|
+
"cellar": ":any_skip_relocation",
|
12
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:fca75bfe7fda2151c2972e7e9262e9ca6ce2f50e3fc562e0688dd817550813c2",
|
13
|
+
"sha256": "fca75bfe7fda2151c2972e7e9262e9ca6ce2f50e3fc562e0688dd817550813c2"
|
14
|
+
},
|
10
15
|
"arm64_monterey": {
|
11
16
|
"cellar": ":any_skip_relocation",
|
12
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
13
|
-
"sha256": "
|
17
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:f03398746b42c97a4057eb74c740a842b96b7fbb49b003057daf114d72db74b4",
|
18
|
+
"sha256": "f03398746b42c97a4057eb74c740a842b96b7fbb49b003057daf114d72db74b4"
|
14
19
|
},
|
15
20
|
"arm64_big_sur": {
|
16
21
|
"cellar": ":any_skip_relocation",
|
17
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
18
|
-
"sha256": "
|
22
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:ff1b0f20ebaaa03a580817e8f4c670e54227c86c3c53d813899c276d03415461",
|
23
|
+
"sha256": "ff1b0f20ebaaa03a580817e8f4c670e54227c86c3c53d813899c276d03415461"
|
19
24
|
},
|
20
25
|
"monterey": {
|
21
26
|
"cellar": ":any_skip_relocation",
|
22
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
23
|
-
"sha256": "
|
27
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:5dddca5459af2ad28f1a9ef1e664da40ed664ae907c0351dc92b3cd0af52c29e",
|
28
|
+
"sha256": "5dddca5459af2ad28f1a9ef1e664da40ed664ae907c0351dc92b3cd0af52c29e"
|
24
29
|
},
|
25
30
|
"big_sur": {
|
26
31
|
"cellar": ":any_skip_relocation",
|
27
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
28
|
-
"sha256": "
|
32
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:7427e072a246141371df90135c5cea00c832bf2c511b62ef1cf49c1148b5bf23",
|
33
|
+
"sha256": "7427e072a246141371df90135c5cea00c832bf2c511b62ef1cf49c1148b5bf23"
|
29
34
|
},
|
30
35
|
"catalina": {
|
31
36
|
"cellar": ":any_skip_relocation",
|
32
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
33
|
-
"sha256": "
|
37
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:a3de195f76316795eb6a56e240265a8fd41c042c7d515ae1df254aa3f577b540",
|
38
|
+
"sha256": "a3de195f76316795eb6a56e240265a8fd41c042c7d515ae1df254aa3f577b540"
|
34
39
|
},
|
35
40
|
"x86_64_linux": {
|
36
41
|
"cellar": "/home/linuxbrew/.linuxbrew/Cellar",
|
37
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
38
|
-
"sha256": "
|
42
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:8557726207a8ce0871b950bf44ae9f2b8e95973ba026a77cf728d31cefc3ac00",
|
43
|
+
"sha256": "8557726207a8ce0871b950bf44ae9f2b8e95973ba026a77cf728d31cefc3ac00"
|
39
44
|
}
|
40
45
|
}
|
41
46
|
}
|
@@ -61,9 +66,9 @@
|
|
61
66
|
"macOS": "11.0.1"
|
62
67
|
},
|
63
68
|
"monterey": {
|
64
|
-
"HOMEBREW_VERSION": "3.6.
|
69
|
+
"HOMEBREW_VERSION": "3.6.10-11-gb683beb",
|
65
70
|
"HOMEBREW_PREFIX": "/opt/homebrew",
|
66
|
-
"Homebrew/homebrew-core": "
|
71
|
+
"Homebrew/homebrew-core": "0bc04af3657134103a6f2b48b31e278e2537e85f",
|
67
72
|
"CLT": "13.4.0.0.1.1651278267",
|
68
73
|
"Xcode": "13.4.1",
|
69
74
|
"macOS": "12.5"
|
@@ -160,13 +160,13 @@ module FastlaneCore
|
|
160
160
|
import_command = "curl -f -o #{filename} #{url} && security import #{filename} #{keychain}"
|
161
161
|
UI.verbose("Installing WWDR Cert: #{import_command}")
|
162
162
|
|
163
|
-
stdout, stderr,
|
163
|
+
stdout, stderr, status = Open3.capture3(import_command)
|
164
164
|
if FastlaneCore::Globals.verbose?
|
165
165
|
UI.command_output(stdout)
|
166
166
|
UI.command_output(stderr)
|
167
167
|
end
|
168
168
|
|
169
|
-
unless
|
169
|
+
unless status.success?
|
170
170
|
UI.verbose("Failed to install WWDR Certificate, checking output to see why")
|
171
171
|
# Check the command output, WWDR might already exist
|
172
172
|
unless /The specified item already exists in the keychain./ =~ stderr
|
@@ -873,12 +873,11 @@ module FastlaneCore
|
|
873
873
|
|
874
874
|
# Create .p8 file from api_key and provide api key info which contains .p8 file path
|
875
875
|
def api_key_with_p8_file_path(original_api_key)
|
876
|
-
api_key = original_api_key.
|
876
|
+
api_key = original_api_key.dup
|
877
877
|
api_key[:key_dir] = Dir.mktmpdir("deliver-")
|
878
878
|
# Specified p8 needs to be generated to call altool
|
879
879
|
File.open(File.join(api_key[:key_dir], "AuthKey_#{api_key[:key_id]}.p8"), "wb") do |p8|
|
880
|
-
|
881
|
-
p8.write(key_content)
|
880
|
+
p8.write(api_key[:key])
|
882
881
|
end
|
883
882
|
api_key
|
884
883
|
end
|
@@ -51,7 +51,7 @@ module Frameit
|
|
51
51
|
found_device = nil
|
52
52
|
filename_device = nil
|
53
53
|
filename = Pathname.new(path).basename.to_s
|
54
|
-
Devices.constants.
|
54
|
+
Devices.constants.sort_by(&:length).reverse_each do |c|
|
55
55
|
device = Devices.const_get(c)
|
56
56
|
next unless device.resolutions.include?(size)
|
57
57
|
# assign to filename_device if the filename contains the formatted name / id and its priority is higher than the current filename_device
|
@@ -42,6 +42,8 @@ module Match
|
|
42
42
|
message = "[fastlane] Changed passphrase"
|
43
43
|
files_to_commit = encryption.encrypt_files(password: new_password)
|
44
44
|
storage.save_changes!(files_to_commit: files_to_commit, custom_message: message)
|
45
|
+
ensure
|
46
|
+
storage.clear_changes if storage
|
45
47
|
end
|
46
48
|
|
47
49
|
def self.ensure_ui_interactive
|
@@ -155,7 +155,8 @@ module Match
|
|
155
155
|
FastlaneCore::CommanderGenerator.new.generate(Match::Options.available_options, command: c)
|
156
156
|
|
157
157
|
c.action do |args, options|
|
158
|
-
Match::
|
158
|
+
params = FastlaneCore::Configuration.create(Match::Options.available_options, options.__hash__)
|
159
|
+
Match::Migrate.new.migrate(params)
|
159
160
|
end
|
160
161
|
end
|
161
162
|
|
@@ -90,6 +90,7 @@ module Match
|
|
90
90
|
template_name: params[:template_name],
|
91
91
|
fail_on_name_taken: params[:fail_on_name_taken],
|
92
92
|
include_all_certificates: params[:include_all_certificates],
|
93
|
+
include_mac_in_profiles: params[:include_mac_in_profiles],
|
93
94
|
}
|
94
95
|
|
95
96
|
values[:platform] = params[:platform]
|
data/match/lib/match/importer.rb
CHANGED
@@ -144,6 +144,8 @@ module Match
|
|
144
144
|
# Encrypt and commit
|
145
145
|
encryption.encrypt_files if encryption
|
146
146
|
storage.save_changes!(files_to_commit: files_to_commit)
|
147
|
+
ensure
|
148
|
+
storage.clear_changes if storage
|
147
149
|
end
|
148
150
|
|
149
151
|
def ensure_valid_file_path(file_path, file_description, file_extension, optional: false)
|
data/match/lib/match/migrate.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require_relative 'options'
|
2
1
|
require_relative 'spaceship_ensure'
|
3
2
|
require_relative 'encryption'
|
4
3
|
require_relative 'storage'
|
@@ -7,8 +6,7 @@ require 'fileutils'
|
|
7
6
|
|
8
7
|
module Match
|
9
8
|
class Migrate
|
10
|
-
def migrate(
|
11
|
-
params = FastlaneCore::Configuration.create(Match::Options.available_options, options.__hash__)
|
9
|
+
def migrate(params)
|
12
10
|
loaded_matchfile = params.load_configuration_file("Matchfile")
|
13
11
|
|
14
12
|
ensure_parameters_are_valid(params)
|
@@ -88,6 +86,9 @@ module Match
|
|
88
86
|
UI.success("You can also remove the `git_url`, as well as any other git related configurations from your Fastfile and Matchfile")
|
89
87
|
UI.message("")
|
90
88
|
UI.input("Please make sure to read the above and confirm with enter")
|
89
|
+
ensure
|
90
|
+
google_cloud_storage.clear_changes if google_cloud_storage
|
91
|
+
git_storage.clear_changes if git_storage
|
91
92
|
end
|
92
93
|
|
93
94
|
def api_token(params)
|
data/match/lib/match/nuke.rb
CHANGED
data/match/lib/match/options.rb
CHANGED
@@ -253,6 +253,11 @@ module Match
|
|
253
253
|
description: "Renew the provisioning profiles if the device count on the developer portal has changed. Ignored for profile types 'appstore' and 'developer_id'",
|
254
254
|
type: Boolean,
|
255
255
|
default_value: false),
|
256
|
+
FastlaneCore::ConfigItem.new(key: :include_mac_in_profiles,
|
257
|
+
env_name: "MATCH_INCLUDE_MAC_IN_PROFILES",
|
258
|
+
description: "Include Apple Silicon Mac devices in provisioning profiles for iOS/iPadOS apps",
|
259
|
+
type: Boolean,
|
260
|
+
default_value: false),
|
256
261
|
FastlaneCore::ConfigItem.new(key: :include_all_certificates,
|
257
262
|
env_name: "MATCH_INCLUDE_ALL_CERTIFICATES",
|
258
263
|
description: "Include all matching certificates in the provisioning profile. Works only for the 'development' provisioning profile type",
|
data/match/lib/match/runner.rb
CHANGED
@@ -336,7 +336,7 @@ module Match
|
|
336
336
|
|
337
337
|
prov_types_without_devices = [:appstore, :developer_id]
|
338
338
|
if !prov_types_without_devices.include?(prov_type) && !params[:force]
|
339
|
-
force = device_count_different?(profile: profile, keychain_path: keychain_path, platform: params[:platform].to_sym)
|
339
|
+
force = device_count_different?(profile: profile, keychain_path: keychain_path, platform: params[:platform].to_sym, include_mac_in_profiles: params[:include_mac_in_profiles])
|
340
340
|
else
|
341
341
|
# App Store provisioning profiles don't contain device identifiers and
|
342
342
|
# thus shouldn't be renewed if the device count has changed.
|
@@ -347,7 +347,7 @@ module Match
|
|
347
347
|
return force
|
348
348
|
end
|
349
349
|
|
350
|
-
def device_count_different?(profile: nil, keychain_path: nil, platform: nil)
|
350
|
+
def device_count_different?(profile: nil, keychain_path: nil, platform: nil, include_mac_in_profiles: false)
|
351
351
|
return false unless profile
|
352
352
|
|
353
353
|
parsed = FastlaneCore::ProvisioningProfile.parse(profile, keychain_path)
|
@@ -379,6 +379,9 @@ module Match
|
|
379
379
|
else
|
380
380
|
[]
|
381
381
|
end
|
382
|
+
if platform == :ios && include_mac_in_profiles
|
383
|
+
device_classes += [Spaceship::ConnectAPI::Device::DeviceClass::APPLE_SILICON_MAC]
|
384
|
+
end
|
382
385
|
|
383
386
|
devices = Spaceship::ConnectAPI::Device.all
|
384
387
|
unless device_classes.empty?
|
@@ -391,9 +391,12 @@ module Pilot
|
|
391
391
|
api_token = Spaceship::ConnectAPI.token
|
392
392
|
api_key = if options[:api_key].nil? && !api_token.nil?
|
393
393
|
# Load api key info if user set api_key_path, not api_key
|
394
|
-
{ key_id: api_token.key_id, issuer_id: api_token.issuer_id, key: api_token.key_raw
|
394
|
+
{ key_id: api_token.key_id, issuer_id: api_token.issuer_id, key: api_token.key_raw }
|
395
395
|
elsif !options[:api_key].nil?
|
396
|
-
options[:api_key].transform_keys(&:to_sym)
|
396
|
+
api_key = options[:api_key].transform_keys(&:to_sym).dup
|
397
|
+
# key is still base 64 style if api_key is loaded from option
|
398
|
+
api_key[:key] = Base64.decode64(api_key[:key]) if api_key[:is_key_content_base64]
|
399
|
+
api_key
|
397
400
|
end
|
398
401
|
|
399
402
|
unless api_token.nil?
|
data/sigh/lib/sigh/options.rb
CHANGED
@@ -47,6 +47,11 @@ module Sigh
|
|
47
47
|
is_string: false,
|
48
48
|
short_option: "-f",
|
49
49
|
default_value: false),
|
50
|
+
FastlaneCore::ConfigItem.new(key: :include_mac_in_profiles,
|
51
|
+
env_name: "SIGH_INCLUDE_MAC_IN_PROFILES",
|
52
|
+
description: "Include Apple Silicon Mac devices in provisioning profiles for iOS/iPadOS apps",
|
53
|
+
is_string: false,
|
54
|
+
default_value: false),
|
50
55
|
FastlaneCore::ConfigItem.new(key: :app_identifier,
|
51
56
|
short_option: "-a",
|
52
57
|
env_name: "SIGH_APP_IDENTIFIER",
|
data/sigh/lib/sigh/runner.rb
CHANGED
@@ -289,7 +289,9 @@ module Sigh
|
|
289
289
|
when 'macos', 'catalyst'
|
290
290
|
[Spaceship::ConnectAPI::Device::DeviceClass::MAC]
|
291
291
|
end
|
292
|
-
|
292
|
+
if Sigh.config[:platform].to_s == 'ios' && Sigh.config[:include_mac_in_profiles]
|
293
|
+
device_classes += [Spaceship::ConnectAPI::Device::DeviceClass::APPLE_SILICON_MAC]
|
294
|
+
end
|
293
295
|
if Spaceship::ConnectAPI.token
|
294
296
|
return Spaceship::ConnectAPI::Device.all.select do |device|
|
295
297
|
device_classes.include?(device.device_class)
|
@@ -181,7 +181,7 @@ open class Snapshot: NSObject {
|
|
181
181
|
|
182
182
|
let path = screenshotsDir.appendingPathComponent("\(simulator)-\(name).png")
|
183
183
|
#if swift(<5.0)
|
184
|
-
UIImagePNGRepresentation(image)?.write(to: path, options: .atomic)
|
184
|
+
try UIImagePNGRepresentation(image)?.write(to: path, options: .atomic)
|
185
185
|
#else
|
186
186
|
try image.pngData()?.write(to: path, options: .atomic)
|
187
187
|
#endif
|
@@ -306,4 +306,4 @@ private extension CGFloat {
|
|
306
306
|
|
307
307
|
// Please don't remove the lines below
|
308
308
|
// They are used to detect outdated configuration files
|
309
|
-
// SnapshotHelperVersion [1.
|
309
|
+
// SnapshotHelperVersion [1.29]
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative '../model'
|
2
|
+
module Spaceship
|
3
|
+
class ConnectAPI
|
4
|
+
class Actor
|
5
|
+
include Spaceship::ConnectAPI::Model
|
6
|
+
|
7
|
+
attr_accessor :actor_type
|
8
|
+
attr_accessor :user_first_name
|
9
|
+
attr_accessor :user_last_name
|
10
|
+
attr_accessor :user_email
|
11
|
+
attr_accessor :api_key_id
|
12
|
+
|
13
|
+
attr_mapping({
|
14
|
+
actorType: 'actor_type',
|
15
|
+
userFirstName: 'user_first_name',
|
16
|
+
userLastName: 'user_last_name',
|
17
|
+
userEmail: 'user_email',
|
18
|
+
apiKeyId: 'api_key_id'
|
19
|
+
})
|
20
|
+
|
21
|
+
def self.type
|
22
|
+
return 'actors'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -17,6 +17,7 @@ module Spaceship
|
|
17
17
|
APP_IPHONE_55 = "APP_IPHONE_55"
|
18
18
|
APP_IPHONE_58 = "APP_IPHONE_58"
|
19
19
|
APP_IPHONE_65 = "APP_IPHONE_65"
|
20
|
+
APP_IPHONE_67 = "APP_IPHONE_67"
|
20
21
|
|
21
22
|
APP_IPAD_97 = "APP_IPAD_97"
|
22
23
|
APP_IPAD_105 = "APP_IPAD_105"
|
@@ -29,6 +30,7 @@ module Spaceship
|
|
29
30
|
IMESSAGE_APP_IPHONE_55 = "IMESSAGE_APP_IPHONE_55"
|
30
31
|
IMESSAGE_APP_IPHONE_58 = "IMESSAGE_APP_IPHONE_58"
|
31
32
|
IMESSAGE_APP_IPHONE_65 = "IMESSAGE_APP_IPHONE_65"
|
33
|
+
IMESSAGE_APP_IPHONE_67 = "IMESSAGE_APP_IPHONE_67"
|
32
34
|
|
33
35
|
IMESSAGE_APP_IPAD_97 = "IMESSAGE_APP_IPAD_97"
|
34
36
|
IMESSAGE_APP_IPAD_105 = "IMESSAGE_APP_IPAD_105"
|
@@ -50,6 +52,7 @@ module Spaceship
|
|
50
52
|
IMESSAGE_APP_IPHONE_55,
|
51
53
|
IMESSAGE_APP_IPHONE_58,
|
52
54
|
IMESSAGE_APP_IPHONE_65,
|
55
|
+
IMESSAGE_APP_IPHONE_67,
|
53
56
|
|
54
57
|
IMESSAGE_APP_IPAD_97,
|
55
58
|
IMESSAGE_APP_IPAD_105,
|
@@ -65,6 +68,7 @@ module Spaceship
|
|
65
68
|
APP_IPHONE_55,
|
66
69
|
APP_IPHONE_58,
|
67
70
|
APP_IPHONE_65,
|
71
|
+
APP_IPHONE_67,
|
68
72
|
|
69
73
|
APP_IPAD_97,
|
70
74
|
APP_IPAD_105,
|
@@ -77,6 +81,7 @@ module Spaceship
|
|
77
81
|
IMESSAGE_APP_IPHONE_55,
|
78
82
|
IMESSAGE_APP_IPHONE_58,
|
79
83
|
IMESSAGE_APP_IPHONE_65,
|
84
|
+
IMESSAGE_APP_IPHONE_67,
|
80
85
|
|
81
86
|
IMESSAGE_APP_IPAD_97,
|
82
87
|
IMESSAGE_APP_IPAD_105,
|
@@ -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
|
115
|
+
raise 'AppStoreVersion no longer has AgeRatingDeclaration as of App Store Connect API 1.3 - Use AppInfo instead'
|
116
116
|
end
|
117
117
|
|
118
118
|
#
|
@@ -19,16 +19,16 @@ module Spaceship
|
|
19
19
|
attr_accessor :app_preview_sets
|
20
20
|
|
21
21
|
attr_mapping({
|
22
|
-
"description" =>
|
23
|
-
"locale" =>
|
24
|
-
"keywords" =>
|
25
|
-
"marketingUrl" =>
|
26
|
-
"promotionalText" =>
|
27
|
-
"supportUrl" =>
|
28
|
-
"whatsNew" =>
|
29
|
-
|
30
|
-
"appScreenshotSets" =>
|
31
|
-
"appPreviewSets" =>
|
22
|
+
"description" => "description",
|
23
|
+
"locale" => "locale",
|
24
|
+
"keywords" => "keywords",
|
25
|
+
"marketingUrl" => "marketing_url",
|
26
|
+
"promotionalText" => "promotional_text",
|
27
|
+
"supportUrl" => "support_url",
|
28
|
+
"whatsNew" => "whats_new",
|
29
|
+
|
30
|
+
"appScreenshotSets" => "app_screenshot_sets",
|
31
|
+
"appPreviewSets" => "app_preview_sets"
|
32
32
|
})
|
33
33
|
|
34
34
|
def self.type
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../model'
|
2
|
+
require_relative './actor'
|
3
|
+
require_relative './review_rejection'
|
4
|
+
|
5
|
+
module Spaceship
|
6
|
+
class ConnectAPI
|
7
|
+
class ResolutionCenterMessage
|
8
|
+
include Spaceship::ConnectAPI::Model
|
9
|
+
|
10
|
+
attr_accessor :message_body
|
11
|
+
attr_accessor :created_date
|
12
|
+
attr_accessor :rejections
|
13
|
+
attr_accessor :from_actor
|
14
|
+
|
15
|
+
attr_mapping({
|
16
|
+
messageBody: 'message_body',
|
17
|
+
createdDate: 'created_date',
|
18
|
+
|
19
|
+
# includes
|
20
|
+
rejections: 'rejections',
|
21
|
+
fromActor: 'from_actor'
|
22
|
+
})
|
23
|
+
|
24
|
+
def self.type
|
25
|
+
return 'resolutionCenterMessages'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require_relative '../model'
|
2
|
+
|
3
|
+
module Spaceship
|
4
|
+
class ConnectAPI
|
5
|
+
class ResolutionCenterThread
|
6
|
+
include Spaceship::ConnectAPI::Model
|
7
|
+
|
8
|
+
attr_accessor :state
|
9
|
+
attr_accessor :can_developer_add_node
|
10
|
+
attr_accessor :objectionable_content
|
11
|
+
attr_accessor :thread_type
|
12
|
+
attr_accessor :created_date
|
13
|
+
attr_accessor :last_message_response_date
|
14
|
+
|
15
|
+
attr_accessor :resolution_center_messages
|
16
|
+
attr_accessor :app_store_version
|
17
|
+
|
18
|
+
module ThreadType
|
19
|
+
REJECTION_BINARY = 'REJECTION_BINARY'
|
20
|
+
REJECTION_METADATA = 'REJECTION_METADATA'
|
21
|
+
REJECTION_REVIEW_SUBMISSION = 'REJECTION_REVIEW_SUBMISSION'
|
22
|
+
APP_MESSAGE_ARC = 'APP_MESSAGE_ARC'
|
23
|
+
APP_MESSAGE_ARB = 'APP_MESSAGE_ARB'
|
24
|
+
APP_MESSAGE_COMM = 'APP_MESSAGE_COMM'
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_mapping({
|
28
|
+
state: 'state',
|
29
|
+
canDeveloperAddNote: 'can_developer_add_node',
|
30
|
+
objectionableContent: 'objectionable_content',
|
31
|
+
threadType: 'thread_type',
|
32
|
+
createdDate: 'created_date',
|
33
|
+
lastMessageResponseDate: 'last_message_response_date',
|
34
|
+
|
35
|
+
# includes
|
36
|
+
resolutionCenterMessages: 'resolution_center_messages',
|
37
|
+
appStoreVersion: 'app_store_version'
|
38
|
+
})
|
39
|
+
|
40
|
+
def self.type
|
41
|
+
return "resolutionCenterThreads"
|
42
|
+
end
|
43
|
+
|
44
|
+
#
|
45
|
+
# API
|
46
|
+
#
|
47
|
+
|
48
|
+
def self.all(client: nil, filter:, includes: nil)
|
49
|
+
client ||= Spaceship::ConnectAPI
|
50
|
+
resps = client.get_resolution_center_threads(filter: filter, includes: includes).all_pages
|
51
|
+
return resps.flat_map(&:to_models)
|
52
|
+
end
|
53
|
+
|
54
|
+
def fetch_messages(client: nil, filter: {}, includes: nil)
|
55
|
+
client ||= Spaceship::ConnectAPI
|
56
|
+
resps = client.get_resolution_center_messages(thread_id: id, filter: filter, includes: includes).all_pages
|
57
|
+
return resps.flat_map(&:to_models)
|
58
|
+
end
|
59
|
+
|
60
|
+
def fetch_rejection_reasons(client: nil, includes: nil)
|
61
|
+
client ||= Spaceship::ConnectAPI
|
62
|
+
resp = client.get_review_rejection(filter: { 'resolutionCenterMessage.resolutionCenterThread': id }, includes: includes)
|
63
|
+
return resp.to_models
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative '../model'
|
2
|
+
|
3
|
+
module Spaceship
|
4
|
+
class ConnectAPI
|
5
|
+
class ReviewRejection
|
6
|
+
include Spaceship::ConnectAPI::Model
|
7
|
+
|
8
|
+
attr_accessor :reasons
|
9
|
+
|
10
|
+
attr_mapping({
|
11
|
+
reasons: 'reasons'
|
12
|
+
})
|
13
|
+
|
14
|
+
def self.type
|
15
|
+
return 'reviewRejections'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -69,6 +69,18 @@ module Spaceship
|
|
69
69
|
resp = client.post_review_submission_item(review_submission_id: id, app_store_version_id: app_store_version_id)
|
70
70
|
return resp.to_models.first
|
71
71
|
end
|
72
|
+
|
73
|
+
def fetch_resolution_center_threads(client: nil)
|
74
|
+
client ||= Spaceship::ConnectAPI
|
75
|
+
resp = client.get_resolution_center_threads(filter: { reviewSubmission: id }, includes: 'reviewSubmission')
|
76
|
+
return resp.to_models
|
77
|
+
end
|
78
|
+
|
79
|
+
def latest_resolution_center_messages(client: nil)
|
80
|
+
client ||= Spaceship::ConnectAPI
|
81
|
+
threads = fetch_resolution_center_threads(client: client)
|
82
|
+
threads.first.fetch_messages(client: client)
|
83
|
+
end
|
72
84
|
end
|
73
85
|
end
|
74
86
|
end
|
@@ -22,7 +22,6 @@ module Spaceship
|
|
22
22
|
attr_reader :expiration
|
23
23
|
|
24
24
|
attr_reader :key_raw
|
25
|
-
attr_reader :is_key_content_base64
|
26
25
|
|
27
26
|
# Temporary attribute not needed to create the JWT text
|
28
27
|
# There is no way to determine if the team associated with this
|
@@ -72,19 +71,17 @@ module Spaceship
|
|
72
71
|
key: OpenSSL::PKey::EC.new(key),
|
73
72
|
key_raw: key,
|
74
73
|
duration: duration,
|
75
|
-
in_house: in_house
|
76
|
-
is_key_content_base64: is_key_content_base64
|
74
|
+
in_house: in_house
|
77
75
|
)
|
78
76
|
end
|
79
77
|
|
80
|
-
def initialize(key_id: nil, issuer_id: nil, key: nil, key_raw: nil, duration: nil, in_house: nil
|
78
|
+
def initialize(key_id: nil, issuer_id: nil, key: nil, key_raw: nil, duration: nil, in_house: nil)
|
81
79
|
@key_id = key_id
|
82
80
|
@key = key
|
83
81
|
@key_raw = key_raw
|
84
82
|
@issuer_id = issuer_id
|
85
83
|
@duration = duration
|
86
84
|
@in_house = in_house
|
87
|
-
@is_key_content_base64 = is_key_content_base64
|
88
85
|
|
89
86
|
@duration ||= DEFAULT_TOKEN_DURATION
|
90
87
|
@duration = @duration.to_i if @duration
|
@@ -1252,6 +1252,29 @@ module Spaceship
|
|
1252
1252
|
params = tunes_request_client.build_params(filter: nil, includes: nil, limit: nil, sort: nil)
|
1253
1253
|
tunes_request_client.get("territories", params)
|
1254
1254
|
end
|
1255
|
+
|
1256
|
+
#
|
1257
|
+
# resolutionCenter
|
1258
|
+
#
|
1259
|
+
# As of 2022-11-11:
|
1260
|
+
# This is not official available throught the App Store Connect API using an API Key.
|
1261
|
+
# This is only works with Apple ID auth.
|
1262
|
+
#
|
1263
|
+
|
1264
|
+
def get_resolution_center_threads(filter: {}, includes: nil)
|
1265
|
+
params = tunes_request_client.build_params(filter: filter, includes: includes)
|
1266
|
+
tunes_request_client.get('resolutionCenterThreads', params)
|
1267
|
+
end
|
1268
|
+
|
1269
|
+
def get_resolution_center_messages(thread_id:, filter: {}, includes: nil)
|
1270
|
+
params = tunes_request_client.build_params(filter: filter, includes: includes)
|
1271
|
+
tunes_request_client.get("resolutionCenterThreads/#{thread_id}/resolutionCenterMessages", params)
|
1272
|
+
end
|
1273
|
+
|
1274
|
+
def get_review_rejection(filter: {}, includes: nil)
|
1275
|
+
params = tunes_request_client.build_params(filter: filter, includes: includes)
|
1276
|
+
tunes_request_client.get("reviewRejections", params)
|
1277
|
+
end
|
1255
1278
|
end
|
1256
1279
|
end
|
1257
1280
|
end
|
@@ -68,6 +68,11 @@ require 'spaceship/connect_api/models/reset_ratings_request'
|
|
68
68
|
require 'spaceship/connect_api/models/sandbox_tester'
|
69
69
|
require 'spaceship/connect_api/models/territory'
|
70
70
|
|
71
|
+
require 'spaceship/connect_api/models/resolution_center_message'
|
72
|
+
require 'spaceship/connect_api/models/resolution_center_thread'
|
73
|
+
require 'spaceship/connect_api/models/review_rejection'
|
74
|
+
require 'spaceship/connect_api/models/actor'
|
75
|
+
|
71
76
|
module Spaceship
|
72
77
|
class ConnectAPI
|
73
78
|
# Defined in the App Store Connect API docs:
|