itunes_transporter_generator 0.4.4 → 0.4.5

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.
data/README.md CHANGED
@@ -29,7 +29,7 @@ You can now upload your .itmsp package to iTunes Connect using the Transporter t
29
29
  ## Sample Config file
30
30
  Below is a sample configuration file describing an achievement, leaderboard, and in-app purchase. The specific metadata required for each item type is fully described in the [App Metadata Specification guide](http://bit.ly/TtHMF6)
31
31
 
32
- IMPORTANT: please note the syntax for multiline descriptions. This is the literal syntax for YAML used for multiline strings (http://symfony.com/doc/current/components/yaml/yaml_format.html). Also note the indentation.
32
+ IMPORTANT: please note the syntax for multiline descriptions with extra line breaks. This is the literal syntax for [YAML used for multiline strings](http://www.yaml.org/YAML_for_ruby.html#extra_trailing_newlines_with_spaces). Also note the indentation.
33
33
 
34
34
  ```yaml
35
35
  provider: SampleCompany # optional if team_id is supplied
@@ -41,21 +41,28 @@ versions:
41
41
  locales:
42
42
  - name: en-US
43
43
  title: sampleApp
44
- description: |
44
+ description: |+
45
45
  Description of sampleApp. This description
46
46
  spans multiple lines using the pipe
47
47
  characters. All newlines are preserved.
48
48
  keywords:
49
49
  - Sample
50
50
  - App
51
- version_whats_new: Version Whats New.
51
+ version_whats_new: |+
52
+ Version Whats New. extra
53
+ line
54
+ breaks
55
+
52
56
  software_url: 'http://example.com'
53
57
  privacy_url: 'http://example.com'
54
58
  support_url: 'http://example.com'
55
59
  screenshots:
56
- - display_target: 'iOS-3.5-in'
57
- file_name: 'test.jpg'
58
-
60
+ iphone_4in:
61
+ - 'test.jpg'
62
+ iphone_3.5in:
63
+ - 'test.jpg'
64
+ ipad:
65
+ - 'test.jpg'
59
66
  achievements: # the order in which achievements are defined will be the order in which they appear in Game Center
60
67
  - id: first_achievement
61
68
  name: First Achievement
@@ -144,7 +151,6 @@ purchases:
144
151
  - name: en
145
152
  title: Unlocks a new level
146
153
  description: Try your luck at this new level
147
-
148
154
  ```
149
155
 
150
156
  This configuration will generate the following metadata.xml:
@@ -171,28 +177,29 @@ characters. All newlines are preserved.
171
177
  <keyword>Sample</keyword>
172
178
  <keyword>App</keyword>
173
179
  </keywords>
174
- <version_whats_new>Version Whats New.</version_whats_new>
180
+ <version_whats_new>
181
+ <![CDATA[Version Whats New. extra
182
+ line
183
+ breaks
184
+
185
+ ]]>
186
+ </version_whats_new>
175
187
  <software_url>http://example.com</software_url>
176
188
  <privacy_url>http://example.com</privacy_url>
177
189
  <support_url>http://example.com</support_url>
178
190
  <software_screenshots>
179
- <software_screenshot display_target="iOS-3.5-in" position="1">
180
- <file_name>test.jpg</file_name>
191
+ <software_screenshot display_target="iOS-4-in" position="1">
192
+ <file_name>1_iOS-4-in_test.jpg</file_name>
181
193
  <size>20092</size>
182
194
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
183
195
  </software_screenshot>
184
- <software_screenshot display_target="iOS-3.5-in" position="2">
185
- <file_name>test.jpg</file_name>
196
+ <software_screenshot display_target="iOS-3.5-in" position="1">
197
+ <file_name>1_iOS-3.5-in_test.jpg</file_name>
186
198
  <size>20092</size>
187
199
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
188
200
  </software_screenshot>
189
201
  <software_screenshot display_target="iOS-iPad" position="1">
190
- <file_name>test.jpg</file_name>
191
- <size>20092</size>
192
- <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
193
- </software_screenshot>
194
- <software_screenshot display_target="iOS-iPad" position="2">
195
- <file_name>test.jpg</file_name>
202
+ <file_name>1_iOS-iPad_test.jpg</file_name>
196
203
  <size>20092</size>
197
204
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
198
205
  </software_screenshot>
@@ -215,7 +222,7 @@ characters. All newlines are preserved.
215
222
  <before_earned_description>Complete a task</before_earned_description>
216
223
  <after_earned_description>Completed a task</after_earned_description>
217
224
  <achievement_after_earned_image>
218
- <file_name>test.jpg</file_name>
225
+ <file_name>achievement_first_achievement_test.jpg</file_name>
219
226
  <size>20092</size>
220
227
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
221
228
  </achievement_after_earned_image>
@@ -235,7 +242,7 @@ characters. All newlines are preserved.
235
242
  <formatter_suffix_singular> Point</formatter_suffix_singular>
236
243
  <formatter_type>INTEGER_COMMA_SEPARATOR</formatter_type>
237
244
  <leaderboard_image>
238
- <file_name>test.jpg</file_name>
245
+ <file_name>leaderboard_top_scores_en_test.jpg</file_name>
239
246
  <size>20092</size>
240
247
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
241
248
  </leaderboard_image>
@@ -254,7 +261,7 @@ characters. All newlines are preserved.
254
261
  </locale>
255
262
  </locales>
256
263
  <review_screenshot>
257
- <file_name>test.jpg</file_name>
264
+ <file_name>iap_Sample_Product_Group_test.jpg</file_name>
258
265
  <size>20092</size>
259
266
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
260
267
  </review_screenshot>
@@ -302,7 +309,7 @@ characters. All newlines are preserved.
302
309
  </locale>
303
310
  </locales>
304
311
  <review_screenshot>
305
- <file_name>test.jpg</file_name>
312
+ <file_name>iap_one_hundred_dollars_test.jpg</file_name>
306
313
  <size>20092</size>
307
314
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
308
315
  </review_screenshot>
@@ -335,7 +342,7 @@ characters. All newlines are preserved.
335
342
  </locale>
336
343
  </locales>
337
344
  <review_screenshot>
338
- <file_name>test.jpg</file_name>
345
+ <file_name>iap_new_level_test.jpg</file_name>
339
346
  <size>20092</size>
340
347
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
341
348
  </review_screenshot>
@@ -366,7 +373,7 @@ characters. All newlines are preserved.
366
373
  </locale>
367
374
  </locales>
368
375
  <review_screenshot>
369
- <file_name>test.jpg</file_name>
376
+ <file_name>iap_another_level_test.jpg</file_name>
370
377
  <size>20092</size>
371
378
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
372
379
  </review_screenshot>
@@ -375,8 +382,6 @@ characters. All newlines are preserved.
375
382
  </software_metadata>
376
383
  </software>
377
384
  </package>
378
-
379
-
380
385
  ```
381
386
 
382
387
  ## Todo
data/example/config.yaml CHANGED
@@ -7,28 +7,28 @@ versions:
7
7
  locales:
8
8
  - name: en-US
9
9
  title: sampleApp
10
- description: |
10
+ description: |+
11
11
  Description of sampleApp. This description
12
12
  spans multiple lines using the pipe
13
13
  characters. All newlines are preserved.
14
14
  keywords:
15
15
  - Sample
16
16
  - App
17
- version_whats_new: Version Whats New.
17
+ version_whats_new: |+
18
+ Version Whats New. extra
19
+ line
20
+ breaks
21
+
18
22
  software_url: 'http://example.com'
19
23
  privacy_url: 'http://example.com'
20
24
  support_url: 'http://example.com'
21
25
  screenshots:
22
- - display_target: 'iOS-3.5-in'
23
- file_name: 'test.jpg'
24
- - display_target: 'iOS-iPad'
25
- file_name: 'test.jpg'
26
- - display_target: 'iOS-3.5-in'
27
- file_name: 'test.jpg'
28
- - display_target: 'iOS-iPad'
29
- file_name: 'test.jpg'
30
-
31
-
26
+ iphone_4in:
27
+ - 'test.jpg'
28
+ iphone_3.5in:
29
+ - 'test.jpg'
30
+ ipad:
31
+ - 'test.jpg'
32
32
  achievements: # the order in which achievements are defined will be the order in which they appear in Game Center
33
33
  - id: first_achievement
34
34
  name: First Achievement
data/example/metadata.xml CHANGED
@@ -20,28 +20,29 @@ characters. All newlines are preserved.
20
20
  <keyword>Sample</keyword>
21
21
  <keyword>App</keyword>
22
22
  </keywords>
23
- <version_whats_new>Version Whats New.</version_whats_new>
23
+ <version_whats_new>
24
+ <![CDATA[Version Whats New. extra
25
+ line
26
+ breaks
27
+
28
+ ]]>
29
+ </version_whats_new>
24
30
  <software_url>http://example.com</software_url>
25
31
  <privacy_url>http://example.com</privacy_url>
26
32
  <support_url>http://example.com</support_url>
27
33
  <software_screenshots>
28
- <software_screenshot display_target="iOS-3.5-in" position="1">
29
- <file_name>test.jpg</file_name>
34
+ <software_screenshot display_target="iOS-4-in" position="1">
35
+ <file_name>1_iOS-4-in_test.jpg</file_name>
30
36
  <size>20092</size>
31
37
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
32
38
  </software_screenshot>
33
- <software_screenshot display_target="iOS-3.5-in" position="2">
34
- <file_name>test.jpg</file_name>
39
+ <software_screenshot display_target="iOS-3.5-in" position="1">
40
+ <file_name>1_iOS-3.5-in_test.jpg</file_name>
35
41
  <size>20092</size>
36
42
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
37
43
  </software_screenshot>
38
44
  <software_screenshot display_target="iOS-iPad" position="1">
39
- <file_name>test.jpg</file_name>
40
- <size>20092</size>
41
- <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
42
- </software_screenshot>
43
- <software_screenshot display_target="iOS-iPad" position="2">
44
- <file_name>test.jpg</file_name>
45
+ <file_name>1_iOS-iPad_test.jpg</file_name>
45
46
  <size>20092</size>
46
47
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
47
48
  </software_screenshot>
@@ -64,7 +65,7 @@ characters. All newlines are preserved.
64
65
  <before_earned_description>Complete a task</before_earned_description>
65
66
  <after_earned_description>Completed a task</after_earned_description>
66
67
  <achievement_after_earned_image>
67
- <file_name>test.jpg</file_name>
68
+ <file_name>achievement_first_achievement_test.jpg</file_name>
68
69
  <size>20092</size>
69
70
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
70
71
  </achievement_after_earned_image>
@@ -84,7 +85,7 @@ characters. All newlines are preserved.
84
85
  <formatter_suffix_singular> Point</formatter_suffix_singular>
85
86
  <formatter_type>INTEGER_COMMA_SEPARATOR</formatter_type>
86
87
  <leaderboard_image>
87
- <file_name>test.jpg</file_name>
88
+ <file_name>leaderboard_top_scores_en_test.jpg</file_name>
88
89
  <size>20092</size>
89
90
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
90
91
  </leaderboard_image>
@@ -103,7 +104,7 @@ characters. All newlines are preserved.
103
104
  </locale>
104
105
  </locales>
105
106
  <review_screenshot>
106
- <file_name>test.jpg</file_name>
107
+ <file_name>iap_Sample_Product_Group_test.jpg</file_name>
107
108
  <size>20092</size>
108
109
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
109
110
  </review_screenshot>
@@ -151,7 +152,7 @@ characters. All newlines are preserved.
151
152
  </locale>
152
153
  </locales>
153
154
  <review_screenshot>
154
- <file_name>test.jpg</file_name>
155
+ <file_name>iap_one_hundred_dollars_test.jpg</file_name>
155
156
  <size>20092</size>
156
157
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
157
158
  </review_screenshot>
@@ -184,7 +185,7 @@ characters. All newlines are preserved.
184
185
  </locale>
185
186
  </locales>
186
187
  <review_screenshot>
187
- <file_name>test.jpg</file_name>
188
+ <file_name>iap_new_level_test.jpg</file_name>
188
189
  <size>20092</size>
189
190
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
190
191
  </review_screenshot>
@@ -215,7 +216,7 @@ characters. All newlines are preserved.
215
216
  </locale>
216
217
  </locales>
217
218
  <review_screenshot>
218
- <file_name>test.jpg</file_name>
219
+ <file_name>iap_another_level_test.jpg</file_name>
219
220
  <size>20092</size>
220
221
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
221
222
  </review_screenshot>
@@ -20,28 +20,29 @@ characters. All newlines are preserved.
20
20
  <keyword>Sample</keyword>
21
21
  <keyword>App</keyword>
22
22
  </keywords>
23
- <version_whats_new>Version Whats New.</version_whats_new>
23
+ <version_whats_new>
24
+ <![CDATA[Version Whats New. extra
25
+ line
26
+ breaks
27
+
28
+ ]]>
29
+ </version_whats_new>
24
30
  <software_url>http://example.com</software_url>
25
31
  <privacy_url>http://example.com</privacy_url>
26
32
  <support_url>http://example.com</support_url>
27
33
  <software_screenshots>
28
- <software_screenshot display_target="iOS-3.5-in" position="1">
29
- <file_name>test.jpg</file_name>
34
+ <software_screenshot display_target="iOS-4-in" position="1">
35
+ <file_name>1_iOS-4-in_test.jpg</file_name>
30
36
  <size>20092</size>
31
37
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
32
38
  </software_screenshot>
33
- <software_screenshot display_target="iOS-3.5-in" position="2">
34
- <file_name>test.jpg</file_name>
39
+ <software_screenshot display_target="iOS-3.5-in" position="1">
40
+ <file_name>1_iOS-3.5-in_test.jpg</file_name>
35
41
  <size>20092</size>
36
42
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
37
43
  </software_screenshot>
38
44
  <software_screenshot display_target="iOS-iPad" position="1">
39
- <file_name>test.jpg</file_name>
40
- <size>20092</size>
41
- <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
42
- </software_screenshot>
43
- <software_screenshot display_target="iOS-iPad" position="2">
44
- <file_name>test.jpg</file_name>
45
+ <file_name>1_iOS-iPad_test.jpg</file_name>
45
46
  <size>20092</size>
46
47
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
47
48
  </software_screenshot>
@@ -64,7 +65,7 @@ characters. All newlines are preserved.
64
65
  <before_earned_description>Complete a task</before_earned_description>
65
66
  <after_earned_description>Completed a task</after_earned_description>
66
67
  <achievement_after_earned_image>
67
- <file_name>test.jpg</file_name>
68
+ <file_name>achievement_first_achievement_test.jpg</file_name>
68
69
  <size>20092</size>
69
70
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
70
71
  </achievement_after_earned_image>
@@ -84,7 +85,7 @@ characters. All newlines are preserved.
84
85
  <formatter_suffix_singular> Point</formatter_suffix_singular>
85
86
  <formatter_type>INTEGER_COMMA_SEPARATOR</formatter_type>
86
87
  <leaderboard_image>
87
- <file_name>test.jpg</file_name>
88
+ <file_name>leaderboard_top_scores_en_test.jpg</file_name>
88
89
  <size>20092</size>
89
90
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
90
91
  </leaderboard_image>
@@ -103,7 +104,7 @@ characters. All newlines are preserved.
103
104
  </locale>
104
105
  </locales>
105
106
  <review_screenshot>
106
- <file_name>test.jpg</file_name>
107
+ <file_name>iap_Sample_Product_Group_test.jpg</file_name>
107
108
  <size>20092</size>
108
109
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
109
110
  </review_screenshot>
@@ -151,7 +152,7 @@ characters. All newlines are preserved.
151
152
  </locale>
152
153
  </locales>
153
154
  <review_screenshot>
154
- <file_name>test.jpg</file_name>
155
+ <file_name>iap_one_hundred_dollars_test.jpg</file_name>
155
156
  <size>20092</size>
156
157
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
157
158
  </review_screenshot>
@@ -184,7 +185,7 @@ characters. All newlines are preserved.
184
185
  </locale>
185
186
  </locales>
186
187
  <review_screenshot>
187
- <file_name>test.jpg</file_name>
188
+ <file_name>iap_new_level_test.jpg</file_name>
188
189
  <size>20092</size>
189
190
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
190
191
  </review_screenshot>
@@ -215,7 +216,7 @@ characters. All newlines are preserved.
215
216
  </locale>
216
217
  </locales>
217
218
  <review_screenshot>
218
- <file_name>test.jpg</file_name>
219
+ <file_name>iap_another_level_test.jpg</file_name>
219
220
  <size>20092</size>
220
221
  <checksum type="md5">ff5bd97a5f40bb75a84884589ecbfc42</checksum>
221
222
  </review_screenshot>
@@ -2,7 +2,7 @@
2
2
  "folders":
3
3
  [
4
4
  {
5
- "path": "/Users/Colin/Sandbox/itunes_transporter_generator"
5
+ "path": "/Users/Colin/Sandbox/My Projects/itunes_transporter_generator"
6
6
  }
7
7
  ]
8
8
  }
data/lib/itunes.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Itunes
2
- VERSION = '0.4.4'
2
+ VERSION = '0.4.5'
3
3
  end
@@ -66,10 +66,76 @@ module Itunes
66
66
  end
67
67
  end
68
68
 
69
+ module MetadataImage
70
+ def normalized_source_filename
71
+ File.basename(self.file_name).tr('/: ','_')
72
+ end
73
+
74
+ def friendly_filename(filename)
75
+ filename.gsub(/[^\w\s_-]+/, '')
76
+ .gsub(/(^|\b\s)\s+($|\s?\b)/, '\\1\\2')
77
+ .gsub(/\s+/, '_')
78
+ end
79
+ end
80
+
69
81
  class VersionScreenshot < Struct.new(:display_target, :file_name, :position)
82
+ include MetadataImage
83
+
70
84
  def to_s
71
85
  "(#{self.position}) #{self.display_target} - #{self.file_name}"
72
86
  end
87
+
88
+ def normalized_filename
89
+ "#{self.position}_#{self.display_target}_#{normalized_source_filename}"
90
+ end
91
+ end
92
+
93
+ class AchievementImage < Struct.new(:id, :file_name)
94
+ include MetadataImage
95
+
96
+ def to_s
97
+ "achievement #{self.id} - #{self.file_name}"
98
+ end
99
+
100
+ def normalized_filename
101
+ "achievement_#{friendly_filename(id)}_#{normalized_source_filename}"
102
+ end
103
+ end
104
+
105
+ class LeaderboardImage < Struct.new(:id, :file_name)
106
+ include MetadataImage
107
+
108
+ def to_s
109
+ "leaderboard #{self.id} - #{self.file_name}"
110
+ end
111
+
112
+ def normalized_filename
113
+ "leaderboard_#{friendly_filename(id)}_#{normalized_source_filename}"
114
+ end
115
+ end
116
+
117
+ class IAPReviewImage < Struct.new(:id, :file_name)
118
+ include MetadataImage
119
+
120
+ def to_s
121
+ "iap #{self.id} - #{self.file_name}"
122
+ end
123
+
124
+ def normalized_filename
125
+ "iap_#{friendly_filename(id)}_#{normalized_source_filename}"
126
+ end
127
+ end
128
+
129
+ class IAPFamilyReviewImage < Struct.new(:name, :file_name)
130
+ include MetadataImage
131
+
132
+ def to_s
133
+ "iap #{self.name} - #{self.file_name}"
134
+ end
135
+
136
+ def normalized_filename
137
+ "iap_#{friendly_filename(name)}_#{normalized_source_filename}"
138
+ end
73
139
  end
74
140
  end
75
141
  end
@@ -9,6 +9,7 @@ module Itunes
9
9
  include Itunes::Transporter::Helpers
10
10
 
11
11
  attr_reader :files_to_process
12
+ attr_reader :images_to_process
12
13
  attr_accessor :id_prefix
13
14
  attr_accessor :provider
14
15
  attr_accessor :team_id
@@ -21,6 +22,7 @@ module Itunes
21
22
 
22
23
  def initialize(options)
23
24
  @files_to_process = ['metadata.xml']
25
+ @images_to_process = []
24
26
 
25
27
  config_file = options.i || options.input
26
28
 
@@ -45,25 +47,35 @@ module Itunes
45
47
  version.locales.each do |locale|
46
48
  doc.locale('name' => locale.name) do
47
49
  doc.title(locale.title)
48
- doc.description() do
49
- doc.cdata!(locale.description)
50
+
51
+ if locale.description
52
+ doc.description() do
53
+ doc.cdata!(locale.description)
54
+ end
50
55
  end
51
56
 
52
- doc.keywords() do
53
- locale.keywords.each do |keyword|
54
- doc.keyword(keyword)
57
+ if locale.keywords
58
+ doc.keywords() do
59
+ locale.keywords.each do |keyword|
60
+ doc.keyword(keyword)
61
+ end
55
62
  end
56
63
  end
57
64
 
58
- doc.version_whats_new(locale.version_whats_new)
59
- doc.software_url(locale.software_url)
60
- doc.privacy_url(locale.privacy_url)
61
- doc.support_url(locale.support_url)
65
+ if locale.version_whats_new
66
+ doc.version_whats_new() do
67
+ doc.cdata!(locale.version_whats_new)
68
+ end
69
+ end
70
+ # doc.version_whats_new(locale.version_whats_new) if locale.version_whats_new
71
+ doc.software_url(locale.software_url) if locale.software_url
72
+ doc.privacy_url(locale.privacy_url) if locale.privacy_url
73
+ doc.support_url(locale.support_url) if locale.support_url
62
74
 
63
75
  doc.software_screenshots() do
64
76
  locale.screenshots.each do |screenshot|
65
77
  doc.software_screenshot('display_target' => screenshot.display_target, 'position' => screenshot.position) do
66
- create_screenshot_xml(doc, screenshot.file_name)
78
+ create_image_xml(doc, screenshot)
67
79
  end
68
80
  end
69
81
  end
@@ -87,7 +99,8 @@ module Itunes
87
99
  doc.before_earned_description(locale.before_earned_description)
88
100
  doc.after_earned_description(locale.after_earned_description)
89
101
  doc.achievement_after_earned_image() do
90
- create_screenshot_xml(doc, locale.achievement_after_earned_image || @default_achievement_image)
102
+ image = AchievementImage.new(achievement.id,locale.achievement_after_earned_image || @default_achievement_image)
103
+ create_image_xml(doc, image)
91
104
  end
92
105
  end
93
106
  end
@@ -119,7 +132,8 @@ module Itunes
119
132
 
120
133
  doc.formatter_type(locale.formatter_type)
121
134
  doc.leaderboard_image() do
122
- create_screenshot_xml(doc, locale.leaderboard_image)
135
+ image = LeaderboardImage.new("#{leaderboard.id}_#{locale.name}", locale.leaderboard_image)
136
+ create_image_xml(doc, image)
123
137
  end
124
138
  end
125
139
  end
@@ -169,7 +183,8 @@ module Itunes
169
183
  end if purchase.locales.count > 0
170
184
 
171
185
  doc.review_screenshot() do
172
- create_screenshot_xml(doc, purchase.review_screenshot_image)
186
+ screenshot = IAPReviewImage.new(purchase.product_id, purchase.review_screenshot_image)
187
+ create_image_xml(doc, screenshot)
173
188
  end if purchase.review_screenshot_image
174
189
  end
175
190
  end
@@ -191,7 +206,8 @@ module Itunes
191
206
  end
192
207
 
193
208
  doc.review_screenshot() do
194
- create_screenshot_xml(doc, family.review_screenshot_image)
209
+ screenshot = IAPFamilyReviewImage.new(family.name, family.review_screenshot_image)
210
+ create_image_xml(doc, screenshot)
195
211
  end
196
212
 
197
213
  doc.review_notes(family.review_notes)
@@ -202,12 +218,12 @@ module Itunes
202
218
  end
203
219
  end
204
220
 
205
- def create_screenshot_xml(doc, file_name)
206
- image_path = Dir.pwd + "/#{file_name}"
207
- @files_to_process << image_path
221
+ def create_image_xml(doc, image)
222
+ image_path = File.join(Dir.pwd,image.file_name)
223
+ @images_to_process << image
208
224
 
209
- doc.file_name(file_name)
210
- doc.size(File.size?(image_path))
225
+ doc.file_name(image.normalized_filename)
226
+ doc.size(File.size?(image.file_name))
211
227
  doc.checksum(Digest::MD5.file(image_path).hexdigest, 'type' => 'md5')
212
228
  end
213
229
 
@@ -236,26 +252,27 @@ module Itunes
236
252
  end
237
253
  end
238
254
 
239
- doc.game_center() do
240
- # generate XML for all achievements
241
- if @achievements.count > 0
242
- doc.achievements() do
243
- @achievements.each_with_index do |val, index|
244
- create_achievement_xml(doc, val, index + 1)
255
+ if @achievements.count > 0 || @leaderboards.count > 0
256
+ doc.game_center() do
257
+ # generate XML for all achievements
258
+ if @achievements.count > 0
259
+ doc.achievements() do
260
+ @achievements.each_with_index do |val, index|
261
+ create_achievement_xml(doc, val, index + 1)
262
+ end
245
263
  end
246
264
  end
247
- end
248
265
 
249
- # generate XML for all leaderboards
250
- if @leaderboards.count > 0
251
- doc.leaderboards() do
252
- @leaderboards.each_with_index do |val, index|
253
- create_leaderboard_xml(doc, val, index + 1)
266
+ # generate XML for all leaderboards
267
+ if @leaderboards.count > 0
268
+ doc.leaderboards() do
269
+ @leaderboards.each_with_index do |val, index|
270
+ create_leaderboard_xml(doc, val, index + 1)
271
+ end
254
272
  end
255
273
  end
256
274
  end
257
275
  end
258
-
259
276
  # generate XML for all auto-renewable subscriptions and other IAPs (consumable, non-consumable, subscription, free-subscription)
260
277
  if @purchases.count > 0
261
278
  auto_renewable_purchase_family = @purchases[:auto_renewable_purchase_family]
@@ -288,6 +305,10 @@ module Itunes
288
305
  FileUtils.cp(file, itmsp_dir)
289
306
  end
290
307
 
308
+ @images_to_process.each do |image|
309
+ FileUtils.cp(image.file_name, File.join(itmsp_dir,image.normalized_filename))
310
+ end
311
+
291
312
  output[:messages] << "Successfully created iTunes metadata package: #{itmsp_dir}"
292
313
  rescue Exception => e
293
314
  output[:errors] << e.message
@@ -4,6 +4,9 @@ require 'itunes/transporter'
4
4
  module Itunes
5
5
  module Transporter
6
6
  module Helpers
7
+
8
+ KNOWN_DISPLAY_TARGETS = {'ipad' => 'iOS-iPad', 'iphone_3.5in' => 'iOS-3.5-in', 'iphone_4in' =>'iOS-4-in'}
9
+
7
10
  def metadata_from_yaml(yaml_file)
8
11
  objs = YAML.load_file(Dir.pwd + "/#{yaml_file}")
9
12
 
@@ -42,24 +45,15 @@ module Itunes
42
45
  locale.support_url = loc['support_url']
43
46
  locale.screenshots = []
44
47
 
45
- loc['screenshots'].sort! { |a, b| a['display_target'].downcase <=> b['display_target'].downcase }
46
-
47
- current_display_target = ''
48
- current_position = 1
49
-
50
- loc['screenshots'].each do |scrshot|
51
- if (current_display_target != scrshot['display_target'])
52
- current_position = 1
53
- current_display_target = scrshot['display_target']
48
+ loc['screenshots'].each do |target, target_screenshots|
49
+ raise "Unknown display target for screenshot" unless KNOWN_DISPLAY_TARGETS.keys.include?(target)
50
+ target_screenshots.each_with_index do |scrshot, index|
51
+ screenshot = VersionScreenshot.new
52
+ screenshot.display_target = KNOWN_DISPLAY_TARGETS[target]
53
+ screenshot.file_name = scrshot
54
+ screenshot.position = index+1
55
+ locale.screenshots << screenshot
54
56
  end
55
-
56
- screenshot = VersionScreenshot.new
57
- screenshot.display_target = current_display_target
58
- screenshot.file_name = scrshot['file_name']
59
- screenshot.position = current_position
60
-
61
- locale.screenshots << screenshot
62
- current_position = current_position + 1
63
57
  end
64
58
 
65
59
  version.locales << locale
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: itunes_transporter_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-06 00:00:00.000000000 Z
12
+ date: 2013-10-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: builder
@@ -110,8 +110,16 @@ files:
110
110
  - ./example/config copy.yaml
111
111
  - ./example/config.yaml
112
112
  - ./example/metadata.xml
113
+ - ./example/sample sku.itmsp/1_iOS-3.5-in_test.jpg
114
+ - ./example/sample sku.itmsp/1_iOS-4-in_test.jpg
115
+ - ./example/sample sku.itmsp/1_iOS-iPad_test.jpg
116
+ - ./example/sample sku.itmsp/achievement_first_achievement_test.jpg
117
+ - ./example/sample sku.itmsp/iap_another_level_test.jpg
118
+ - ./example/sample sku.itmsp/iap_new_level_test.jpg
119
+ - ./example/sample sku.itmsp/iap_one_hundred_dollars_test.jpg
120
+ - ./example/sample sku.itmsp/iap_Sample_Product_Group_test.jpg
121
+ - ./example/sample sku.itmsp/leaderboard_top_scores_en_test.jpg
113
122
  - ./example/sample sku.itmsp/metadata.xml
114
- - ./example/sample sku.itmsp/test.jpg
115
123
  - ./example/test.jpg
116
124
  - ./Gemfile
117
125
  - ./itmsp.gemspec