itunes_transporter_generator 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
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