/
app_submission.rb
154 lines (122 loc) 路 6.12 KB
/
app_submission.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
require_relative 'tunes_base'
module Spaceship
module Tunes
# Represents a submission for review of an App Store Connect Application
# This class handles the submission of all review information and documents
class AppSubmission < TunesBase
# @return (Spaceship::Tunes::Application) A reference to the application
# this submission is for
attr_accessor :application
# @return (AppVersion) The version to use for this submission
attr_accessor :version
# @return (Boolean) Submitted for Review
attr_accessor :submitted_for_review
# To pass from the user
# @deprecated Setted automatically by <tt>add_id_info_uses_idfa</tt> usage
# @return (Boolean) Ad ID Info - Limits ads tracking
# <b>DEPRECATED:</b> Use <tt>add_id_info_uses_idfa</tt> instead.
attr_accessor :add_id_info_limits_tracking
# @return (Boolean) Ad ID Info - Serves ads
attr_accessor :add_id_info_serves_ads
# @return (Boolean) Ad ID Info - Tracks actions
attr_accessor :add_id_info_tracks_action
# @return (Boolean) Ad ID Info - Tracks installs
attr_accessor :add_id_info_tracks_install
# @return (Boolean) Ad ID Info - Uses idfa
attr_accessor :add_id_info_uses_idfa
# @return (Boolean) Content Rights - Contains third party content
attr_accessor :content_rights_contains_third_party_content
# @return (Boolean) Content Rights - Has rights of content
attr_accessor :content_rights_has_rights
# @return (Boolean) Export Compliance - Available on French Store
attr_accessor :export_compliance_available_on_french_store
# @return (Not Yet Implemented) Export Compliance - CCAT File
attr_accessor :export_compliance_ccat_file
# @return (Boolean) Export Compliance - Contains proprietary cryptography
attr_accessor :export_compliance_contains_proprietary_cryptography
# @return (Boolean) Export Compliance - Contains third-party cryptography
attr_accessor :export_compliance_contains_third_party_cryptography
# @return (Boolean) Export Compliance - Is exempt
attr_accessor :export_compliance_is_exempt
# @return (Boolean) Export Compliance - Uses encryption
attr_accessor :export_compliance_uses_encryption
# @return (String) Export Compliance - App type
attr_accessor :export_compliance_app_type
# @return (Boolean) Export Compliance - Encryption Updated
attr_accessor :export_compliance_encryption_updated
# @return (Boolean) Export Compliance - Compliance Required
attr_accessor :export_compliance_compliance_required
# @return (String) Export Compliance - Platform
attr_accessor :export_compliance_platform
attr_mapping({
# Ad ID Info Section
'adIdInfo.servesAds.value' => :add_id_info_serves_ads,
'adIdInfo.tracksAction.value' => :add_id_info_tracks_action,
'adIdInfo.tracksInstall.value' => :add_id_info_tracks_install,
'adIdInfo.usesIdfa.value' => :add_id_info_uses_idfa,
# Content Rights Section
'contentRights.containsThirdPartyContent.value' => :content_rights_contains_third_party_content,
'contentRights.hasRights.value' => :content_rights_has_rights,
# Export Compliance Section
'exportCompliance.availableOnFrenchStore.value' => :export_compliance_available_on_french_store,
'exportCompliance.ccatFile.value' => :export_compliance_ccat_file,
'exportCompliance.containsProprietaryCryptography.value' => :export_compliance_contains_proprietary_cryptography,
'exportCompliance.containsThirdPartyCryptography.value' => :export_compliance_contains_third_party_cryptography,
'exportCompliance.isExempt.value' => :export_compliance_is_exempt,
'exportCompliance.usesEncryption.value' => :export_compliance_uses_encryption,
'exportCompliance.appType' => :export_compliance_app_type,
'exportCompliance.encryptionUpdated.value' => :export_compliance_encryption_updated,
'exportCompliance.exportComplianceRequired' => :export_compliance_compliance_required,
'exportCompliance.platform' => :export_compliance_platform
})
class << self
# Create a new object based on a hash.
# This is used to create a new object based on the server response.
def factory(attrs)
# fill content rights section if iTC returns nil
if attrs["contentRights"].nil?
attrs["contentRights"] = {
"containsThirdPartyContent" => {
"value" => nil
},
"hasRights" => {
"value" => nil
}
}
end
obj = self.new(attrs)
return obj
end
# @param application (Spaceship::Tunes::Application) The app this submission is for
def create(application, version)
attrs = client.prepare_app_submissions(application.apple_id, application.edit_version.version_id)
attrs[:application] = application
attrs[:version] = version
return self.factory(attrs)
end
end
# Save and complete the app submission
def complete!
raw_data_clone = raw_data.dup
if self.content_rights_has_rights.nil? || self.content_rights_contains_third_party_content.nil?
raw_data_clone.set(["contentRights"], nil)
end
raw_data_clone.delete("version")
# Check whether the application makes use of IDFA or not
# and automatically set the mandatory limitsTracking value in the request JSON accordingly.
if !self.add_id_info_uses_idfa.nil? && self.add_id_info_uses_idfa == true
# Application uses IDFA, before sending for submission limitsTracking key in the request JSON must be set to true (agreement).
raw_data_clone.set(
["adIdInfo", "limitsTracking", "value"],
true
)
end
client.send_app_submission(application.apple_id, application.edit_version.version_id, raw_data_clone)
@submitted_for_review = true
end
def setup
@submitted_for_review = false
end
end
end
end